67 lines
1.7 KiB
JavaScript
67 lines
1.7 KiB
JavaScript
const darkMode = {
|
|
mainBg: '#1b0d1f',
|
|
contentBg: '#1b0d1f',
|
|
accent: '#896a95',
|
|
primaryText: '#e4c2f1',
|
|
primaryLink: '#b666d9',
|
|
primaryLinkHover: '#f2e0f8'
|
|
};
|
|
|
|
const lightMode = {
|
|
mainBg: '#edf6d1',
|
|
contentBg: '#edf6d1',
|
|
accent: '#929a79',
|
|
primaryText: '#1d2114',
|
|
primaryLink: '#667937',
|
|
primaryLinkHover: '#343c1f'
|
|
};
|
|
|
|
const root = document.querySelector(':root');
|
|
const themeToggle = document.getElementById('theme-toggle');
|
|
|
|
const applyTheme = (theme) => {
|
|
root.style.setProperty("--main-bg", theme.mainBg);
|
|
root.style.setProperty("--content-bg", theme.contentBg);
|
|
root.style.setProperty("--primary-text", theme.primaryText);
|
|
root.style.setProperty("--accent", theme.accent);
|
|
root.style.setProperty("--primary-link", theme.primaryLink);
|
|
root.style.setProperty("--primary-link-hover", theme.primaryLinkHover);
|
|
}
|
|
|
|
const enableDarkMode = () => {
|
|
applyTheme(darkMode);
|
|
localStorage.setItem('theme', 'dark');
|
|
themeToggle.innerText = '☀️ Light Theme';
|
|
themeToggle.value = 'Light Mode';
|
|
}
|
|
|
|
const disableDarkMode = () => {
|
|
applyTheme(lightMode);
|
|
localStorage.setItem('theme', 'light');
|
|
themeToggle.innerText = '🌙 Dark Theme';
|
|
themeToggle.value = 'Dark Mode';
|
|
}
|
|
|
|
const detectTheme = () => {
|
|
let theme = 'light';
|
|
let themeObj = lightMode;
|
|
|
|
if (localStorage.getItem('theme')) {
|
|
theme = localStorage.getItem('theme');
|
|
}
|
|
else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
|
theme = 'dark';
|
|
}
|
|
|
|
theme === 'dark' ? enableDarkMode() : disableDarkMode();
|
|
}
|
|
|
|
themeToggle.className = "";
|
|
detectTheme();
|
|
|
|
themeToggle.addEventListener('click', () => {
|
|
localStorage.getItem('theme') === 'light' ? enableDarkMode() : disableDarkMode();
|
|
});
|
|
|
|
console.log('This site was generated by Hugo.');
|