Files
hstream/resources/js/theme.js
T
w33b 338c190ae8 feat(nav): redesign navigation bar and add Browse/Community links
Enhance the navigation with a modern floating glass design, new Browse and Community dropdown links, and improved theme/blur toggles that now handle multiple instances. Update dropdown components with rounded styling and support for wider widths, refine nav-link active states, and add navigation feature tests.
2026-08-09 10:13:54 +02:00

72 lines
2.2 KiB
JavaScript

function darkModeListener() {
document.querySelector("html").classList.toggle("dark");
if (localStorage.theme == 'light') {
localStorage.theme = 'dark';
} else {
localStorage.theme = 'light';
}
}
document.querySelectorAll("input[type='checkbox']#toogleTheme").forEach((toggle) => toggle.addEventListener("click", darkModeListener));
if(localStorage.theme) {
if (localStorage.theme == 'light') {
if (document.querySelector("html").classList.contains('dark')) {
document.querySelector("html").classList.toggle("dark");
}
document.querySelectorAll("#toogleTheme").forEach((toggle) => {
toggle.checked = true;
});
}
} else {
// Default Dark Theme
localStorage.theme = 'dark';
}
// Ability to disable blur effects for slower devices
const LOCAL_STORAGE_KEY = 'blur';
function setCSSFilter(selector, value) {
document.querySelectorAll(selector).forEach(el => {
el.style.backdropFilter = value
});
}
function applyBlur(enabled) {
if (!enabled) {
setCSSFilter('.backdrop-blur, .backdrop-blur-sm, .backdrop-blur-lg, .backdrop-blur-xl, .backdrop-blur-2xl', 'none');
return;
}
setCSSFilter('.backdrop-blur-2xl', 'blur(40px)');
setCSSFilter('.backdrop-blur-xl', 'blur(24px)');
setCSSFilter('.backdrop-blur-lg', 'blur(16px)');
setCSSFilter('.backdrop-blur', 'blur(8px)');
setCSSFilter('.backdrop-blur-sm', 'blur(4px)');
}
function initBlurToggle() {
const storedValue = localStorage.getItem(LOCAL_STORAGE_KEY);
const enabled = storedValue === null ? true : storedValue === 'true';
const blurCheckboxes = document.querySelectorAll("input[type='checkbox']#toggleBlur");
// initialize UI and DOM
applyBlur(enabled);
blurCheckboxes.forEach((checkbox) => {
checkbox.checked = enabled;
});
// add event listener
blurCheckboxes.forEach((checkbox) => {
checkbox.addEventListener('click', (e) => {
const isEnabled = e.target.checked;
applyBlur(isEnabled);
localStorage.setItem(LOCAL_STORAGE_KEY, isEnabled ? 'true' : 'false');
});
});
}
initBlurToggle();