You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

32 lines
948 B
JavaScript

const themeSwitcher = document.querySelector('.theme-switcher input');
let currentTheme = localStorage.getItem('theme');
let userHasManuallyChangedTheme = currentTheme !== null;
function setTheme(theme) {
document.documentElement.setAttribute('data-theme', theme);
themeSwitcher.checked = theme === 'dark';
localStorage.setItem('theme', theme);
currentTheme = theme;
}
if (currentTheme) {
setTheme(currentTheme);
} else {
const isSystemDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
setTheme(isSystemDark ? 'dark' : 'light');
}
function switchTheme(e) {
const newTheme = e.target.checked ? 'dark' : 'light';
setTheme(newTheme);
userHasManuallyChangedTheme = true;
}
themeSwitcher.addEventListener('change', switchTheme, false);
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
if (!userHasManuallyChangedTheme) {
setTheme(e.matches ? 'dark' : 'light');
}
});