/ theme.js
theme.js
 1  // set dark theme depending on OS settings
 2  function setTheme(theme) {
 3      if (theme == 'os') {
 4          let prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)');
 5          if (prefersDarkScheme.matches) {
 6              theme = 'dark';
 7          } else {
 8              theme = 'light';
 9          }
10      }
11      document.documentElement.style['color-scheme'] = theme;
12      document.querySelector('html').setAttribute('data-theme', theme);
13      // set the theme-color for iOS devices
14      let bgColor = getComputedStyle(document.documentElement).getPropertyValue('--main-bg-color');
15      let metaThemeColor = document.querySelector('meta[name=theme-color]');
16      metaThemeColor.setAttribute('content', bgColor);
17  }
18  // activate selected theme
19  let theme = 'os';
20  const localStorageTheme = localStorage.getItem('theme');
21  if (localStorageTheme) {
22      theme = localStorageTheme;
23  }
24  setTheme(theme);
25  // add handler to theme selection element
26  const selectTheme = document.getElementById('theme-select');
27  if (selectTheme) {
28      selectTheme.addEventListener ('change', function () {
29          localStorage.setItem('theme', selectTheme.value);
30          setTheme(selectTheme.value);
31      });
32      if (theme == 'light') {
33          selectTheme.selectedIndex = 2;
34      } else if (theme == 'dark') {
35          selectTheme.selectedIndex = 1;
36      }
37  }