Files
nexus/public/assets/js/app.js
Lars Gebhardt-Kusche 9cf4322ffc
All checks were successful
Deploy / deploy-staging (push) Successful in 5s
Deploy / deploy-production (push) Has been skipped
layout
2026-04-11 02:23:14 +02:00

49 lines
1.7 KiB
JavaScript
Executable File

document.documentElement.classList.add('js');
function readThemePreference(key, fallback) {
try {
return localStorage.getItem(key) || fallback;
} catch (error) {
return fallback;
}
}
const themeMode = readThemePreference('nexus.theme', document.documentElement.dataset.theme || 'day');
const themeAccent = readThemePreference('nexus.accent', document.documentElement.dataset.accent || 'logo');
function applyTheme(mode, accent) {
const normalizedMode = ['day', 'night'].includes(mode) ? mode : 'day';
const normalizedAccent = ['logo', 'pink', 'cyan', 'orange', 'green'].includes(accent) ? accent : 'logo';
document.documentElement.dataset.theme = normalizedMode;
document.documentElement.dataset.accent = normalizedAccent;
try {
localStorage.setItem('nexus.theme', normalizedMode);
localStorage.setItem('nexus.accent', normalizedAccent);
} catch (error) {
// Ignore blocked storage; the current page still receives the theme.
}
}
applyTheme(themeMode, themeAccent);
const themeModeSelect = document.querySelector('[data-theme-mode]');
const themeAccentSelect = document.querySelector('[data-theme-accent]');
if (themeModeSelect) {
themeModeSelect.value = document.documentElement.dataset.theme;
themeModeSelect.addEventListener('change', () => {
applyTheme(themeModeSelect.value, document.documentElement.dataset.accent);
});
}
if (themeAccentSelect) {
themeAccentSelect.value = document.documentElement.dataset.accent;
themeAccentSelect.addEventListener('change', () => {
applyTheme(document.documentElement.dataset.theme, themeAccentSelect.value);
});
}
for (const element of document.querySelectorAll('[data-reveal]')) {
element.classList.add('reveal');
}