-
Notifications
You must be signed in to change notification settings - Fork 0
/
colorScheme.js
45 lines (45 loc) · 1.6 KB
/
colorScheme.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
42
43
44
45
// @ts-check
const autoColorScheme = require("./autoColorScheme.js"),
windowsPrototype = Object.getPrototypeOf(window);
module.exports = function (options) {
const opt = {
selector: "[data-color-scheme]",
lightClass: "light",
darkClass: "dark",
};
try {
Object.assign(opt, options)
document.addEventListener("DOMContentLoaded", colorSchemeLoad);
const button = document.querySelector(opt.selector);
if (button) {
windowsPrototype.colorSchemeButton = button;
windowsPrototype.colorSchemeOptions = opt;
} else {
throw new Error(`Селектор ${opt.selector} не существует!`);
}
} catch (err) {
console.error(err);
}
}
function colorSchemeLoad() {
const saveScheme = localStorage.getItem("userScheme");
if (!saveScheme) {
autoColorScheme();
} else {
document.documentElement.classList.add(saveScheme);
}
if (windowsPrototype.colorSchemeButton) {
windowsPrototype.colorSchemeButton.onclick = clickChangeScheme;
}
}
function clickChangeScheme() {
let currentScheme = document.documentElement.classList.contains(windowsPrototype.colorSchemeOptions.lightClass) ? windowsPrototype.colorSchemeOptions.lightClass : windowsPrototype.colorSchemeOptions.darkClass,
newScheme = "";
if (currentScheme == windowsPrototype.colorSchemeOptions.lightClass) {
newScheme = windowsPrototype.colorSchemeOptions.darkClass;
} else if (currentScheme == windowsPrototype.colorSchemeOptions.darkClass) {
newScheme = windowsPrototype.colorSchemeOptions.lightClass;
}
document.documentElement.classList.replace(currentScheme, newScheme);
localStorage.setItem("userScheme", newScheme);
}