2022-08-16 22:51:03 +01:00
|
|
|
const DARK_MODE_CLASS = "dark-mode";
|
2022-08-20 15:31:14 +01:00
|
|
|
const STORAGE_KEY = "dark-mode";
|
|
|
|
|
2022-08-20 17:45:12 +01:00
|
|
|
const htmlTag = document.getElementsByTagName("html")[0];
|
2022-08-20 15:31:14 +01:00
|
|
|
const darkModeToggle = document.getElementById("dark-mode-toggle");
|
2022-08-16 22:51:03 +01:00
|
|
|
|
|
|
|
const matchesDarkMode = window.matchMedia("(prefers-color-scheme: dark)");
|
|
|
|
|
|
|
|
function handleDarkMode(darkMode) {
|
2022-08-20 15:31:14 +01:00
|
|
|
window.localStorage.setItem(STORAGE_KEY, darkMode.toString());
|
2022-08-20 17:45:12 +01:00
|
|
|
|
2022-08-16 22:51:03 +01:00
|
|
|
if (darkMode) {
|
2022-08-20 17:45:12 +01:00
|
|
|
htmlTag.classList.add(DARK_MODE_CLASS);
|
2022-08-16 22:51:03 +01:00
|
|
|
} else {
|
2022-08-20 17:45:12 +01:00
|
|
|
htmlTag.classList.remove(DARK_MODE_CLASS);
|
|
|
|
}
|
2022-08-16 22:51:03 +01:00
|
|
|
}
|
|
|
|
|
2022-08-20 15:31:14 +01:00
|
|
|
if (window.localStorage.getItem(STORAGE_KEY) === null) {
|
|
|
|
window.localStorage.setItem(STORAGE_KEY, matchesDarkMode.matches);
|
|
|
|
handleDarkMode(matchesDarkMode.matches);
|
|
|
|
} else {
|
|
|
|
handleDarkMode(window.localStorage.getItem(STORAGE_KEY) === "true");
|
|
|
|
}
|
|
|
|
|
|
|
|
window.addEventListener("load", () => {
|
|
|
|
matchesDarkMode.addEventListener("change", (event) =>
|
|
|
|
handleDarkMode(event.matches)
|
|
|
|
);
|
2022-08-16 22:51:03 +01:00
|
|
|
|
2022-08-20 15:31:14 +01:00
|
|
|
darkModeToggle.addEventListener("click", () => {
|
|
|
|
handleDarkMode(window.localStorage.getItem(STORAGE_KEY) !== "true");
|
|
|
|
});
|
2022-08-20 15:55:50 +01:00
|
|
|
|
|
|
|
window.setTimeout(() => {
|
2022-08-20 17:45:12 +01:00
|
|
|
htmlTag.classList.add("dark-mode-animate");
|
2022-08-20 15:55:50 +01:00
|
|
|
}, 1000);
|
2022-08-20 15:31:14 +01:00
|
|
|
});
|