-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
78 lines (64 loc) · 1.78 KB
/
script.js
File metadata and controls
78 lines (64 loc) · 1.78 KB
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/* АБВ */
const darkSchemeMedia = matchMedia('(prefers-color-scheme: dark)')
const darkStyles = document.querySelectorAll('link[rel=stylesheet][media*=prefers-color-scheme][media*=dark]')
const lightStyles = document.querySelectorAll('link[rel=stylesheet][media*=prefers-color-scheme][media*=light]')
const switcherRadios = document.querySelectorAll('#switcher input')
function setupSwitcher() {
const savedScheme = getSavedScheme()
if (savedScheme !== null) {
const currentRadio = document.querySelector(`#switcher input[value=${savedScheme}]`)
currentRadio.checked = true
}
[...switcherRadios].forEach((e) => {
e.addEventListener('change', (e) => {
setScheme(e.target.value)
})
});
}
function setupScheme() {
const savedScheme = getSavedScheme()
const systemScheme = getSystemScheme()
if (savedScheme === null)
return
if (savedScheme !== systemScheme)
setScheme(savedScheme)
}
function setScheme(scheme) {
switchMedia(scheme)
if (scheme === 'auto')
clearScheme()
else
saveScheme(scheme)
}
function switchMedia(scheme) {
let darkMedia,
lightMedia
if (scheme === 'auto') {
darkMedia = '(prefers-color-scheme: dark)'
lightMedia = '(prefers-color-scheme: light)'
} else {
darkMedia = (scheme === 'dark') ? 'all' : 'not all'
lightMedia = (scheme === 'light') ? 'all' : 'not all'
}
[...darkStyles].forEach((e) => {
e.media = darkMedia
});
[...lightStyles].forEach((e) => {
e.media = lightMedia
});
}
function getSystemScheme() {
const darkScheme = darkSchemeMedia.matches
return darkScheme ? 'dark' : 'light'
}
function getSavedScheme() {
return localStorage.getItem('colorscheme')
}
function saveScheme(scheme) {
localStorage.setItem('colorscheme', scheme)
}
function clearScheme() {
localStorage.removeItem('colorscheme')
}
setupSwitcher()
setupScheme()