|
|
|
export function toggleTheme() {
|
|
|
|
document.documentElement.classList.toggle('dark');
|
|
|
|
document.documentElement.classList.toggle('light');
|
|
|
|
localStorage.setItem('theme', document.documentElement.classList.contains('dark') ? "dark" : "light");
|
|
|
|
}
|
|
|
|
|
|
|
|
export function loadTheme() {
|
|
|
|
const theme = localStorage.getItem("theme");
|
|
|
|
if (theme == "dark") {
|
|
|
|
document.documentElement.classList.add('dark');
|
|
|
|
document.documentElement.classList.remove('light');
|
|
|
|
} else if (theme == "light") {
|
|
|
|
document.documentElement.classList.add('light');
|
|
|
|
document.documentElement.classList.remove('dark');
|
|
|
|
} else if (window.matchMedia('(prefers-color-scheme: dark)').media !== 'not all') {
|
|
|
|
document.documentElement.classList.add('dark');
|
|
|
|
document.documentElement.classList.remove('light');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export class nightwind {
|
|
|
|
beforeTransition = () => {
|
|
|
|
const doc = document.documentElement;
|
|
|
|
const onTransitionDone = () => {
|
|
|
|
doc.classList.remove('nightwind');
|
|
|
|
doc.removeEventListener('transitionend', onTransitionDone);
|
|
|
|
}
|
|
|
|
doc.addEventListener('transitionend', onTransitionDone);
|
|
|
|
if (!doc.classList.contains('nightwind')) {
|
|
|
|
doc.classList.add('nightwind');
|
|
|
|
}
|
|
|
|
};
|
|
|
|
constructor() {
|
|
|
|
const theme = localStorage.getItem("theme");
|
|
|
|
if (theme == "dark") {
|
|
|
|
this.enable(true);
|
|
|
|
} else if (theme == "light") {
|
|
|
|
this.enable(false);
|
|
|
|
} else if (window.matchMedia('(prefers-color-scheme: dark)').media !== 'not all') {
|
|
|
|
this.enable(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
toggle = () => {
|
|
|
|
this.beforeTransition();
|
|
|
|
if (!document.documentElement.classList.contains('dark')) {
|
|
|
|
document.documentElement.classList.add('dark');
|
|
|
|
} else {
|
|
|
|
document.documentElement.classList.remove('dark');
|
|
|
|
}
|
|
|
|
localStorage.setItem('theme', document.documentElement.classList.contains('dark') ? "dark" : "light");
|
|
|
|
};
|
|
|
|
|
|
|
|
enable = (dark: boolean) => {
|
|
|
|
const mode = dark ? "dark" : "light";
|
|
|
|
const opposite = dark ? "light" : "dark";
|
|
|
|
|
|
|
|
localStorage.setItem('theme', dark ? "dark" : "light");
|
|
|
|
|
|
|
|
this.beforeTransition();
|
|
|
|
|
|
|
|
if (document.documentElement.classList.contains(opposite)) {
|
|
|
|
document.documentElement.classList.remove(opposite);
|
|
|
|
}
|
|
|
|
document.documentElement.classList.add(mode);
|
|
|
|
};
|
|
|
|
}
|