frontend/src/assets/js/themeChanger.js (40 lines of code) (raw):

function setPreferableColorScheme() { getPreferredColorScheme().then(scheme => { setColorScheme(scheme); }); } function setColorScheme(scheme) { switch (scheme) { case 'dark': document.body.classList.add("dark"); break case 'light': document.body.classList.remove("dark"); break } } async function getPreferredColorScheme() { let theme = await window.go.main.App.GetSetting("EditorTheme") if (theme!=="system") { return theme; } else { return getSystemTheme(); } function getSystemTheme() { if (window.matchMedia) { if (window.matchMedia('(prefers-color-scheme: dark)').matches) { return 'dark'; } else { return 'light'; } } return 'light'; } } if (window.matchMedia) { //set theme on startup setPreferableColorScheme(); //add event listener for theme change var colorSchemeQuery = window.matchMedia('(prefers-color-scheme: dark)'); colorSchemeQuery.addEventListener('change', function (){ setPreferableColorScheme(); }); }