summaryrefslogtreecommitdiff
path: root/assets
diff options
context:
space:
mode:
authoreltrac <hi@eltr.ac>2026-02-10 15:39:50 +0800
committereltrac <hi@eltr.ac>2026-02-10 15:39:50 +0800
commit52758459a220fde27f1519d3fd3e99f3f2a52f80 (patch)
tree6e26cf4a5a1769996c307f3975421f3b02daa235 /assets
parent313bd9b9d426080a2c5784026d42a188c43282c0 (diff)
feat: add theme switch
Diffstat (limited to 'assets')
-rw-r--r--assets/js/darkmode.js36
1 files changed, 36 insertions, 0 deletions
diff --git a/assets/js/darkmode.js b/assets/js/darkmode.js
new file mode 100644
index 00000000..6057f357
--- /dev/null
+++ b/assets/js/darkmode.js
@@ -0,0 +1,36 @@
+(() => {
+ const THEME = 'geedeapro.theme' // auto | light | dakr
+ const mql = window.matchMedia('(prefers-color-scheme: dark)')
+
+ function useDarkMode(store) {
+ document.documentElement.classList.add('dark')
+ if (localStorage.getItem(THEME) != 'auto') mql.onchange = null
+ if (store) localStorage.setItem(THEME, 'dark')
+ }
+
+ function useLightMode(store) {
+ document.documentElement.classList.remove('dark')
+ if (localStorage.getItem(THEME) != 'auto') mql.onchange = null
+ if (store) localStorage.setItem(THEME, 'light')
+ }
+
+ function useSystem(store) {
+ if (mql.matches) useDarkMode()
+ else useLightMode()
+ mql.onchange = e => {
+ console.log("changed when system changed")
+ if (e.matches) useDarkMode()
+ else useLightMode()
+ }
+ if (store) localStorage.setItem(THEME, 'auto')
+ }
+
+ window.switchTheme = (theme, store) => {
+ if (!theme || theme === 'auto') useSystem(store)
+ else if (theme === 'dark') useDarkMode(store)
+ else if (theme === 'light') useLightMode(store)
+ }
+
+ // use preferred theme immediately upon DOM loaded
+ window.switchTheme(localStorage.getItem(THEME), false)
+})();