|
8 | 8 | 'use strict'
|
9 | 9 |
|
10 | 10 | const getStoredTheme = () => localStorage.getItem('theme')
|
11 |
| - const setStoredTheme = theme => localStorage.setItem('theme', theme) |
12 |
| - |
13 |
| - const getPreferredTheme = () => { |
14 |
| - const storedTheme = getStoredTheme() |
15 |
| - if (storedTheme) { |
16 |
| - return storedTheme |
| 11 | + const setStoredTheme = theme => { |
| 12 | + if (theme == null || theme === 'auto') { |
| 13 | + localStorage.removeItem('theme'); |
| 14 | + } else { |
| 15 | + localStorage.setItem('theme', theme) |
17 | 16 | }
|
18 |
| - |
19 |
| - return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' |
20 | 17 | }
|
21 | 18 |
|
22 | 19 | const setTheme = theme => {
|
23 |
| - if (theme === 'auto') { |
| 20 | + if (theme == null || theme === 'auto') { |
24 | 21 | document.documentElement.setAttribute('data-bs-theme', (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'))
|
25 | 22 | } else {
|
26 | 23 | document.documentElement.setAttribute('data-bs-theme', theme)
|
27 | 24 | }
|
28 | 25 | }
|
29 | 26 |
|
30 |
| - setTheme(getPreferredTheme()) |
| 27 | + setTheme(getStoredTheme()) |
31 | 28 |
|
32 | 29 | const showActiveTheme = (theme, focus = false) => {
|
33 | 30 | const themeSwitcher = document.querySelector('#bd-theme')
|
|
36 | 33 | return
|
37 | 34 | }
|
38 | 35 |
|
| 36 | + if (theme == null) { |
| 37 | + theme = 'auto' |
| 38 | + } |
| 39 | + |
39 | 40 | const themeSwitcherText = document.querySelector('#bd-theme-text')
|
40 | 41 | const activeThemeIcon = document.querySelector('.theme-icon-active use')
|
41 | 42 | const btnToActive = document.querySelector(`[data-bs-theme-value="${theme}"]`)
|
|
58 | 59 | }
|
59 | 60 |
|
60 | 61 | window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
|
61 |
| - const storedTheme = getStoredTheme() |
62 |
| - if (storedTheme !== 'light' && storedTheme !== 'dark') { |
63 |
| - setTheme(getPreferredTheme()) |
| 62 | + const storedTheme = getStoredTheme(); |
| 63 | + if (storedTheme == null || storedTheme === 'auto') { |
| 64 | + setTheme(); // react on system theme change only in `auto` mode. |
64 | 65 | }
|
65 | 66 | })
|
66 | 67 |
|
67 | 68 | window.addEventListener('DOMContentLoaded', () => {
|
68 |
| - showActiveTheme(getPreferredTheme()) |
| 69 | + showActiveTheme(getStoredTheme()) |
69 | 70 |
|
70 | 71 | document.querySelectorAll('[data-bs-theme-value]')
|
71 | 72 | .forEach(toggle => {
|
|
0 commit comments