|
2 | 2 | ;(function () {
|
3 | 3 | 'use strict'
|
4 | 4 |
|
5 |
| - var toggle = document.getElementById('theme-toggle') |
| 5 | + var toggleButtons = document.querySelectorAll('#theme-toggle .toggle-button') |
| 6 | + if (!toggleButtons) return |
6 | 7 |
|
7 |
| - var prefersTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' |
8 |
| - var storedTheme = localStorage.getItem('theme') || prefersTheme |
| 8 | + var storedTheme = localStorage.getItem('themePreference') |
| 9 | + var theme = storedTheme || 'system' |
9 | 10 |
|
10 |
| - if (!toggle) return |
| 11 | + var toggleThumb = document.querySelector('#theme-toggle .thumb') |
| 12 | + toggleThumb.classList.add(theme) |
11 | 13 |
|
12 |
| - toggle.onclick = function () { |
13 |
| - var currentTheme = document.documentElement.getAttribute('data-theme') || storedTheme || 'light' |
14 |
| - var targetTheme = 'light' |
| 14 | + var currentButton = document.querySelector(`#theme-toggle .toggle-button[value="${theme}"]`) |
| 15 | + if (currentButton) { |
| 16 | + currentButton.ariaPressed = 'true' |
| 17 | + currentButton.classList.add('active') |
| 18 | + } |
15 | 19 |
|
16 |
| - if (currentTheme === 'light') { |
17 |
| - targetTheme = 'dark' |
| 20 | + toggleButtons.forEach((button) => { |
| 21 | + button.onclick = function () { |
| 22 | + var systemPreference = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' |
| 23 | + var currentTheme = localStorage.getItem('themePreference') || systemPreference |
| 24 | + if (button.value === currentTheme) return |
| 25 | + if (button.value === 'system') { |
| 26 | + document.documentElement.setAttribute('data-theme', systemPreference) |
| 27 | + } else { |
| 28 | + document.documentElement.setAttribute('data-theme', button.value) |
| 29 | + } |
| 30 | + localStorage.setItem('themePreference', button.value) |
| 31 | + toggleThumb.classList.remove('system', 'light', 'dark') |
| 32 | + toggleThumb.classList.add(button.value) |
| 33 | + toggleButtons.forEach((btn) => { |
| 34 | + btn.ariaPressed = 'false' |
| 35 | + btn.classList.remove('active') |
| 36 | + }) |
| 37 | + button.ariaPressed = 'true' |
| 38 | + button.classList.add('active') |
18 | 39 | }
|
19 |
| - |
20 |
| - document.documentElement.setAttribute('data-theme', targetTheme) |
21 |
| - localStorage.setItem('theme', targetTheme) |
22 |
| - } |
| 40 | + }) |
23 | 41 | })()
|
0 commit comments