diff --git a/assets/js/theme.js b/assets/js/theme.js index 772d3ce..57da0d2 100644 --- a/assets/js/theme.js +++ b/assets/js/theme.js @@ -1,20 +1,26 @@ (() => { const root = document.documentElement; + const colorModes = ['auto', 'light', 'dark']; const storedTheme = localStorage.getItem('c1024-theme'); - if (storedTheme) root.dataset.theme = storedTheme; + let colorMode = colorModes.includes(storedTheme) ? storedTheme : 'auto'; + root.dataset.theme = colorMode; const themeToggle = document.querySelector('[data-theme-toggle]'); if (themeToggle) { - const updateThemeLabel = () => { - const dark = root.dataset.theme === 'dark'; - themeToggle.setAttribute('aria-pressed', String(dark)); - themeToggle.setAttribute('aria-label', dark ? 'Use light mode' : 'Use dark mode'); + const themeIcon = themeToggle.querySelector('[data-theme-icon]'); + const labels = { auto: 'Automatic', light: 'Light', dark: 'Dark' }; + const icons = { auto: '#icon-auto', light: '#icon-light', dark: '#icon-dark' }; + const updateThemeControl = () => { + const nextMode = colorModes[(colorModes.indexOf(colorMode) + 1) % colorModes.length]; + themeToggle.setAttribute('aria-label', `Color mode: ${labels[colorMode]}. Activate to use ${labels[nextMode]} mode.`); + themeIcon.setAttribute('href', icons[colorMode]); }; - updateThemeLabel(); + updateThemeControl(); themeToggle.addEventListener('click', () => { - root.dataset.theme = root.dataset.theme === 'dark' ? 'light' : 'dark'; - localStorage.setItem('c1024-theme', root.dataset.theme); - updateThemeLabel(); + colorMode = colorModes[(colorModes.indexOf(colorMode) + 1) % colorModes.length]; + root.dataset.theme = colorMode; + localStorage.setItem('c1024-theme', colorMode); + updateThemeControl(); }); } diff --git a/header.php b/header.php index 9b32135..2106ee5 100644 --- a/header.php +++ b/header.php @@ -22,9 +22,9 @@