Dark Mode Supported

This commit is contained in:
Fasih Ahmad Fakhri 2020-10-25 14:38:07 +05:30
parent 9db8c4ce8c
commit 6147e5200b
3 changed files with 103 additions and 3 deletions

37
client/scripts/theme.js Normal file
View file

@ -0,0 +1,37 @@
(function(){
// Select the button
const btnTheme = document.getElementById("theme");
// Check for dark mode preference at the OS level
const prefersDarkScheme = window.matchMedia("(prefers-color-scheme: dark)");
// Get the user's theme preference from local storage, if it's available
const currentTheme = localStorage.getItem("theme");
// If the user's preference in localStorage is dark...
if (currentTheme == "dark") {
// ...let's toggle the .dark-theme class on the body
document.body.classList.toggle("dark-theme");
// Otherwise, if the user's preference in localStorage is light...
} else if (currentTheme == "light") {
// ...let's toggle the .light-theme class on the body
document.body.classList.toggle("light-theme");
}
// Listen for a click on the button
btnTheme.addEventListener("click", function() {
// If the user's OS setting is dark and matches our .dark-theme class...
if (prefersDarkScheme.matches) {
// ...then toggle the light mode class
document.body.classList.toggle("light-theme");
// ...but use .dark-theme if the .light-theme class is already on the body,
var theme = document.body.classList.contains("light-theme") ? "light" : "dark";
} else {
// Otherwise, let's do the same thing, but for .dark-theme
document.body.classList.toggle("dark-theme");
var theme = document.body.classList.contains("dark-theme") ? "dark" : "light";
}
// Finally, let's save the current preference to localStorage to keep using it
localStorage.setItem("theme", theme);
});
})();