adding js toggle for light-dark theme
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
// Menu system
|
||||
|
||||
const body = document.body;
|
||||
const menuToggle = document.getElementById('menuToggle');
|
||||
const menuClose = document.getElementById('menuClose');
|
||||
@@ -54,4 +56,76 @@
|
||||
if (window.innerWidth >= 768 && body.classList.contains('menu-open')) {
|
||||
closeMenu();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// light-dark toggle
|
||||
|
||||
const STORAGE_KEY = 'theme-preference';
|
||||
const root = document.documentElement;
|
||||
const mq = window.matchMedia('(prefers-color-scheme: dark)');
|
||||
|
||||
function getSystemTheme() {
|
||||
return mq.matches ? 'dark' : 'light';
|
||||
}
|
||||
|
||||
function getSavedTheme() {
|
||||
try {
|
||||
return localStorage.getItem(STORAGE_KEY) || 'system';
|
||||
} catch {
|
||||
return 'system';
|
||||
}
|
||||
}
|
||||
|
||||
function setSavedTheme(value) {
|
||||
try {
|
||||
localStorage.setItem(STORAGE_KEY, value);
|
||||
} catch {}
|
||||
}
|
||||
|
||||
function applyTheme(theme = getSavedTheme()) {
|
||||
root.style.colorScheme = theme === 'system' ? 'light dark' : theme;
|
||||
}
|
||||
|
||||
function getNextTheme() {
|
||||
return getSavedTheme() === 'system'
|
||||
? (getSystemTheme() === 'dark' ? 'light' : 'dark')
|
||||
: 'system';
|
||||
}
|
||||
|
||||
function updateButton() {
|
||||
const btn = document.getElementById('theme-toggle');
|
||||
if (!btn) return;
|
||||
|
||||
const theme = getSavedTheme();
|
||||
// btn.textContent =
|
||||
// theme === 'system'
|
||||
// ? `Use ${getSystemTheme() === 'dark' ? 'light' : 'dark'} theme`
|
||||
// : 'Use browser/OS theme';
|
||||
}
|
||||
|
||||
function toggleTheme() {
|
||||
setSavedTheme(getNextTheme());
|
||||
applyTheme();
|
||||
updateButton();
|
||||
}
|
||||
|
||||
function initThemeToggle() {
|
||||
applyTheme();
|
||||
updateButton();
|
||||
|
||||
const btn = document.getElementById('theme-toggle');
|
||||
if (btn) btn.addEventListener('click', toggleTheme);
|
||||
|
||||
mq.addEventListener('change', () => {
|
||||
if (getSavedTheme() === 'system') {
|
||||
applyTheme('system');
|
||||
updateButton();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', initThemeToggle);
|
||||
} else {
|
||||
initThemeToggle();
|
||||
}
|
||||
Reference in New Issue
Block a user