2020-08-26 12:10:24 +02:00
|
|
|
function initThemeSwitch() {
|
|
|
|
let $switchContainer = document.querySelector('.js-theme-switch');
|
|
|
|
|
|
|
|
if (!$switchContainer) return;
|
|
|
|
|
|
|
|
$switchContainer.hidden = false;
|
|
|
|
|
|
|
|
let userOverwrite = ['light', 'dark'];
|
|
|
|
|
|
|
|
let $buttons = $switchContainer.querySelectorAll('[type="radio"]');
|
|
|
|
|
|
|
|
function setInitialState() {
|
2021-11-22 11:16:49 +00:00
|
|
|
/**
|
|
|
|
* @type String
|
|
|
|
*/
|
|
|
|
let userThemeSetting = document.documentElement.getAttribute(
|
|
|
|
'data-user-theme'
|
|
|
|
);
|
|
|
|
|
2020-08-26 12:10:24 +02:00
|
|
|
if (userThemeSetting) {
|
|
|
|
$switchContainer.querySelector(
|
|
|
|
`[value="${userThemeSetting}"]`
|
|
|
|
).checked = true;
|
|
|
|
} else {
|
|
|
|
$switchContainer.querySelector('[value="system"]').checked = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Array.from($buttons).forEach(function($button) {
|
|
|
|
$button.addEventListener('change', function() {
|
|
|
|
// only run the switch functionality for the currently active radio button
|
|
|
|
if (!$button.checked) return;
|
|
|
|
|
|
|
|
if (userOverwrite.includes($button.value)) {
|
2021-11-22 11:16:49 +00:00
|
|
|
window.setUserPreference($button.value);
|
2020-08-26 12:10:24 +02:00
|
|
|
} else {
|
2021-11-22 11:16:49 +00:00
|
|
|
window.unsetUserPreference();
|
2020-08-26 12:10:24 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
setInitialState();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (document.readyState === 'complete') {
|
|
|
|
initThemeSwitch();
|
|
|
|
} else {
|
|
|
|
window.addEventListener('load', function() {
|
|
|
|
initThemeSwitch();
|
|
|
|
});
|
|
|
|
}
|