-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdark-mode.js
41 lines (34 loc) · 1.07 KB
/
dark-mode.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
const toggleThemeElements = document.querySelectorAll('[toggle-theme]')
const setDarkModeElements = document.querySelectorAll('[set-darkmode]')
const setLightModeElements = document.querySelectorAll('[set-lightmode]')
function setTheme(theme) {
localStorage.theme = theme
if(theme === 'dark') document.documentElement.classList.add('dark')
else document.documentElement.classList.remove('dark')
}
if('theme' in localStorage) setTheme(localStorage.theme)
else setTheme(
window.matchMedia('(prefers-color-scheme: dark)').matches
? 'dark'
: 'light'
)
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event =>
setTheme(
event.matches
? 'dark'
: 'light'
)
)
setDarkModeElements.forEach(element =>
element.addEventListener('click', () => setTheme('dark'))
)
setLightModeElements.forEach(element =>
element.addEventListener('click', () => setTheme('light'))
)
toggleThemeElements.forEach(element =>
element.addEventListener('click', () => setTheme(
localStorage.theme === 'dark'
? 'light'
: 'dark'
))
)