diff --git a/static/js/theme.js b/static/js/theme.js index f837aeb..1d73c93 100644 --- a/static/js/theme.js +++ b/static/js/theme.js @@ -2,6 +2,16 @@ 'use strict'; var STORAGE_KEY = 'theme'; + // Detect system color scheme preference + function detectSystemTheme() { + try { + if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { + return 'dark'; + } + } catch (e) { /* ignore */ } + return 'light'; // default fallback + } + function setHtmlAndBodyTheme(name) { try { if (name) { @@ -26,8 +36,15 @@ function applyTheme(name) { if (!name) return; - setHtmlAndBodyTheme(name); - try { localStorage.setItem(STORAGE_KEY, name); } catch (e) {} + + // Handle 'auto' theme - detect system preference + var actualTheme = name; + if (name === 'auto') { + actualTheme = detectSystemTheme(); + } + + setHtmlAndBodyTheme(actualTheme); + try { localStorage.setItem(STORAGE_KEY, name); } catch (e) {} // Store user choice (including 'auto') // If TV Guide (Classic) selected, ensure auto-scroll is turned off and disabled. // We set localStorage autoScrollEnabled to 'false' and call any available auto-scroll API. @@ -104,7 +121,35 @@ try { saved = localStorage.getItem(STORAGE_KEY); } catch (e) {} if (saved) { setTheme(saved); + } else { + // No saved preference - auto-detect system preference + var systemTheme = detectSystemTheme(); + setHtmlAndBodyTheme(systemTheme); } } catch (e) { /* ignore */ } }); + + // Listen for system theme changes and update if 'auto' is selected + try { + if (window.matchMedia) { + var darkModeQuery = window.matchMedia('(prefers-color-scheme: dark)'); + + var updateAutoTheme = function() { + try { + var saved = localStorage.getItem(STORAGE_KEY); + if (saved === 'auto') { + var systemTheme = detectSystemTheme(); + setHtmlAndBodyTheme(systemTheme); + } + } catch (e) { /* ignore */ } + }; + + // Use addEventListener if available, otherwise use addListener + if (darkModeQuery.addEventListener) { + darkModeQuery.addEventListener('change', updateAutoTheme); + } else if (darkModeQuery.addListener) { + darkModeQuery.addListener(updateAutoTheme); + } + } + } catch (e) { /* ignore */ } })(); diff --git a/templates/_header.html b/templates/_header.html index 57e7253..9ecd347 100644 --- a/templates/_header.html +++ b/templates/_header.html @@ -33,6 +33,7 @@