Files
hugo-coder-timeline/assets/js/coder.js
Kirill Feoktistov 4bb81da844 Fixing darkModeToggle listener (#577)
If hideColorSchemeToggle is true, darkModeToggle will not be rendered and adding a listener to a non-existing object will cause error.
2021-06-25 15:27:13 -03:00

36 lines
1.3 KiB
JavaScript

const body = document.body;
const darkModeToggle = document.getElementById('dark-mode-toggle');
const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
// Check if user preference is set, if not check value of body class for light or dark else it means that colorscheme = auto
if (localStorage.getItem("colorscheme")) {
setTheme(localStorage.getItem("colorscheme"));
} else if (body.classList.contains('colorscheme-light') || body.classList.contains('colorscheme-dark')) {
setTheme(body.classList.contains("colorscheme-dark") ? "dark" : "light");
} else {
setTheme(darkModeMediaQuery.matches ? "dark" : "light");
}
if (darkModeToggle) {
darkModeToggle.addEventListener('click', () => {
setTheme(body.classList.contains("colorscheme-dark") ? "light" : "dark");
});
}
darkModeMediaQuery.addListener((event) => {
setTheme(event.matches ? "dark" : "light");
});
document.addEventListener("DOMContentLoaded", function () {
let node = document.querySelector('.preload-transitions');
node.classList.remove('preload-transitions');
});
function setTheme(theme) {
body.classList.remove('colorscheme-auto');
const inverse = theme === 'dark' ? 'light' : 'dark';
localStorage.setItem('colorscheme', theme);
body.classList.remove('colorscheme-' + inverse);
body.classList.add('colorscheme-' + theme);
}