Jelajahi Sumber

add event listener in app.html to handle system theme changes

Danny Liu 1 tahun lalu
induk
melakukan
f1716f45b9
1 mengubah file dengan 18 tambahan dan 2 penghapusan
  1. 18 2
      src/app.html

+ 18 - 2
src/app.html

@@ -13,13 +13,29 @@
 				(!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: light)').matches)
 			) {
 				document.documentElement.classList.add('light');
-			} else if (localStorage.theme) {
+			} else if (localStorage.theme && localStorage.theme !== 'system') {
 				localStorage.theme.split(' ').forEach((e) => {
 					document.documentElement.classList.add(e);
 				});
-			} else {
+			} else if (localStorage.theme && localStorage.theme === 'system') {
+				systemTheme = window.matchMedia('(prefers-color-scheme: dark)').matches;
+				document.documentElement.classList.add(systemTheme ? 'dark' : 'light');
+			}
+			else {
 				document.documentElement.classList.add('dark');
 			}
+
+			window.matchMedia('(prefers-color-scheme: dark)').addListener((e) => {
+				if (localStorage.theme === 'system') {
+					if (e.matches) {
+						document.documentElement.classList.add('dark');
+						document.documentElement.classList.remove('light');
+					} else {
+						document.documentElement.classList.add('light');
+						document.documentElement.classList.remove('dark');
+					}
+				}
+			});
 		</script>
 
 		%sveltekit.head%