prism/public/theme.js

49 lines
1.4 KiB
JavaScript

const savedTheme = localStorage.getItem('theme') || 'system';
const themes = ['system', 'light', 'dark'];
let currentIndex = themes.indexOf(savedTheme);
if (currentIndex === -1) currentIndex = 0;
function applyTheme(theme) {
if (theme === 'system') {
document.documentElement.removeAttribute('data-theme');
} else {
document.documentElement.setAttribute('data-theme', theme);
}
localStorage.setItem('theme', theme);
}
window.cycleTheme = () => {
currentIndex = (currentIndex + 1) % themes.length;
const newTheme = themes[currentIndex];
applyTheme(newTheme);
updateButtonText(newTheme);
};
function updateButtonText(theme) {
const btn = document.getElementById('theme-toggle');
if (btn) {
const labels = {
system: 'Toggle theme (system)',
light: 'Toggle theme (light)',
dark: 'Toggle theme (dark)',
};
btn.textContent =
theme === 'system' ? '🌓' : theme === 'light' ? '☀️' : '🌙';
btn.setAttribute('aria-label', labels[theme] || 'Toggle theme');
}
}
applyTheme(savedTheme);
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', () => {
updateButtonText(themes[currentIndex]);
const btn = document.getElementById('theme-toggle');
if (btn) btn.addEventListener('click', window.cycleTheme);
});
} else {
updateButtonText(themes[currentIndex]);
const btn = document.getElementById('theme-toggle');
if (btn) btn.addEventListener('click', window.cycleTheme);
}