-
Notifications
You must be signed in to change notification settings - Fork 57
Expand file tree
/
Copy pathdark-mode.ts
More file actions
40 lines (34 loc) · 870 Bytes
/
dark-mode.ts
File metadata and controls
40 lines (34 loc) · 870 Bytes
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
/**
* Copyright (c) 2022-present Hengyang Zhang
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
/**
* Dark mode
*
* @since 1.1.0
*/
const THEME_ATTR = "data-theme"
const DARK_VAL = "dark"
const STORAGE_KEY = "isDark"
const STORAGE_FLAG = "1"
function toggle0(isDarkMode: boolean, el?: Element) {
el = el || document.getElementsByTagName("html")?.[0]
el.setAttribute(THEME_ATTR, isDarkMode ? DARK_VAL : "")
}
/**
* Init from local storage
*/
export function init(el?: Element) {
const val = isDarkMode()
toggle0(val, el)
return val
}
export function toggle(isDarkMode: boolean, el?: Element) {
toggle0(isDarkMode, el)
localStorage.setItem(STORAGE_KEY, isDarkMode ? STORAGE_FLAG : '')
}
export function isDarkMode() {
return localStorage.getItem(STORAGE_KEY) === STORAGE_FLAG
}