|
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