mirror of
https://github.com/ZoiteChat/zoitechat.git
synced 2026-10-14 17:47:13 +00:00
45 lines
1.7 KiB
JavaScript
45 lines
1.7 KiB
JavaScript
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
(() => {
|
|
'use strict';
|
|
|
|
const initialise = () => {
|
|
const picker = document.getElementById('theme-picker');
|
|
const preference = window.matchMedia('(prefers-color-scheme: dark)');
|
|
|
|
if (picker instanceof HTMLSelectElement) {
|
|
const applyTheme = () => {
|
|
const dark = picker.value === 'dark'
|
|
|| (picker.value === 'system' && preference.matches);
|
|
document.documentElement.dataset.theme = dark ? 'dark' : 'light';
|
|
document.querySelectorAll('meta[name="theme-color"]').forEach((meta) => {
|
|
meta.setAttribute('content', dark ? '#111416' : '#ffffff');
|
|
});
|
|
};
|
|
|
|
// Follow the OS on every visit, including browser back/forward navigation.
|
|
const resetTheme = () => {
|
|
picker.value = 'system';
|
|
applyTheme();
|
|
};
|
|
picker.addEventListener('change', applyTheme);
|
|
preference.addEventListener('change', applyTheme);
|
|
window.addEventListener('pageshow', resetTheme);
|
|
resetTheme();
|
|
}
|
|
|
|
const navigation = document.getElementById('docs-navigation');
|
|
const compact = window.matchMedia('(max-width: 760px)');
|
|
if (navigation instanceof HTMLDetailsElement) {
|
|
const fitNavigation = () => { navigation.open = !compact.matches; };
|
|
compact.addEventListener('change', fitNavigation);
|
|
fitNavigation();
|
|
}
|
|
};
|
|
|
|
if (document.readyState === 'loading') {
|
|
document.addEventListener('DOMContentLoaded', initialise, { once: true });
|
|
} else {
|
|
initialise();
|
|
}
|
|
})();
|