0e385b057d
修正 CSS 选择器避免 :root 始终应用深色变量,并改进 theme.js 点击绑定与首屏主题恢复。 Co-authored-by: Cursor <cursoragent@cursor.com>
54 lines
1.6 KiB
JavaScript
54 lines
1.6 KiB
JavaScript
(function () {
|
|
var KEY = 'qihuo-theme';
|
|
|
|
function updateButtons(theme) {
|
|
document.querySelectorAll('[data-theme-pick]').forEach(function (btn) {
|
|
var pick = btn.getAttribute('data-theme-pick');
|
|
var on = pick === theme;
|
|
btn.classList.toggle('active', on);
|
|
btn.setAttribute('aria-pressed', on ? 'true' : 'false');
|
|
});
|
|
}
|
|
|
|
function apply(theme) {
|
|
if (theme !== 'light' && theme !== 'dark') {
|
|
theme = 'dark';
|
|
}
|
|
document.documentElement.setAttribute('data-theme', theme);
|
|
try {
|
|
localStorage.setItem(KEY, theme);
|
|
} catch (e) { /* ignore */ }
|
|
updateButtons(theme);
|
|
}
|
|
|
|
var saved = null;
|
|
try {
|
|
saved = localStorage.getItem(KEY);
|
|
} catch (e) { /* ignore */ }
|
|
|
|
if (saved === 'light' || saved === 'dark') {
|
|
apply(saved);
|
|
} else {
|
|
var prefersLight = window.matchMedia && window.matchMedia('(prefers-color-scheme: light)').matches;
|
|
apply(prefersLight ? 'light' : 'dark');
|
|
}
|
|
|
|
document.addEventListener('click', function (e) {
|
|
var btn = e.target.closest('[data-theme-pick]');
|
|
if (!btn) return;
|
|
e.preventDefault();
|
|
apply(btn.getAttribute('data-theme-pick'));
|
|
});
|
|
|
|
function syncButtons() {
|
|
var cur = document.documentElement.getAttribute('data-theme') || 'dark';
|
|
updateButtons(cur);
|
|
}
|
|
|
|
if (document.readyState === 'loading') {
|
|
document.addEventListener('DOMContentLoaded', syncButtons);
|
|
} else {
|
|
syncButtons();
|
|
}
|
|
})();
|