Spaces:
Sleeping
Sleeping
Fix dark theme detection
Browse filesHonor the Hugging Face __theme parameter and follow the browser color scheme for system mode.
src/demo/server_frontend/app.js
CHANGED
|
@@ -24,35 +24,22 @@ let running = false;
|
|
| 24 |
let toastTimer = null;
|
| 25 |
|
| 26 |
const colorScheme = window.matchMedia("(prefers-color-scheme: dark)");
|
|
|
|
|
|
|
| 27 |
|
| 28 |
-
function
|
| 29 |
-
try {
|
| 30 |
-
return localStorage.getItem("infinisplat-theme");
|
| 31 |
-
} catch {
|
| 32 |
-
return null;
|
| 33 |
-
}
|
| 34 |
-
}
|
| 35 |
-
|
| 36 |
-
function applyTheme(theme, persist = false) {
|
| 37 |
document.documentElement.dataset.theme = theme;
|
| 38 |
themeToggle.checked = theme === "dark";
|
| 39 |
-
if (persist) {
|
| 40 |
-
try {
|
| 41 |
-
localStorage.setItem("infinisplat-theme", theme);
|
| 42 |
-
} catch {
|
| 43 |
-
// The selected theme still applies when storage is unavailable.
|
| 44 |
-
}
|
| 45 |
-
}
|
| 46 |
}
|
| 47 |
|
| 48 |
applyTheme(document.documentElement.dataset.theme || (colorScheme.matches ? "dark" : "light"));
|
| 49 |
|
| 50 |
themeToggle.addEventListener("change", () => {
|
| 51 |
-
applyTheme(themeToggle.checked ? "dark" : "light"
|
| 52 |
});
|
| 53 |
|
| 54 |
colorScheme.addEventListener("change", (event) => {
|
| 55 |
-
if (
|
| 56 |
});
|
| 57 |
|
| 58 |
function resultValue(result) {
|
|
|
|
| 24 |
let toastTimer = null;
|
| 25 |
|
| 26 |
const colorScheme = window.matchMedia("(prefers-color-scheme: dark)");
|
| 27 |
+
const requestedTheme = new URLSearchParams(window.location.search).get("__theme");
|
| 28 |
+
const followsSystemTheme = requestedTheme !== "dark" && requestedTheme !== "light";
|
| 29 |
|
| 30 |
+
function applyTheme(theme) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
document.documentElement.dataset.theme = theme;
|
| 32 |
themeToggle.checked = theme === "dark";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
}
|
| 34 |
|
| 35 |
applyTheme(document.documentElement.dataset.theme || (colorScheme.matches ? "dark" : "light"));
|
| 36 |
|
| 37 |
themeToggle.addEventListener("change", () => {
|
| 38 |
+
applyTheme(themeToggle.checked ? "dark" : "light");
|
| 39 |
});
|
| 40 |
|
| 41 |
colorScheme.addEventListener("change", (event) => {
|
| 42 |
+
if (followsSystemTheme) applyTheme(event.matches ? "dark" : "light");
|
| 43 |
});
|
| 44 |
|
| 45 |
function resultValue(result) {
|
src/demo/server_frontend/index.html
CHANGED
|
@@ -6,14 +6,12 @@
|
|
| 6 |
<meta name="color-scheme" content="light dark">
|
| 7 |
<title>InfiniSplat</title>
|
| 8 |
<script>
|
| 9 |
-
|
| 10 |
-
try {
|
| 11 |
-
savedTheme = localStorage.getItem("infinisplat-theme");
|
| 12 |
-
} catch {
|
| 13 |
-
savedTheme = null;
|
| 14 |
-
}
|
| 15 |
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
| 16 |
-
document.documentElement.dataset.theme =
|
|
|
|
|
|
|
|
|
|
| 17 |
</script>
|
| 18 |
<link rel="stylesheet" href="/infinisplat/assets/styles.css?v=4">
|
| 19 |
</head>
|
|
@@ -87,6 +85,6 @@
|
|
| 87 |
</main>
|
| 88 |
|
| 89 |
<div class="toast" id="toast" role="status" aria-live="polite"></div>
|
| 90 |
-
<script type="module" src="/infinisplat/assets/app.js?v=
|
| 91 |
</body>
|
| 92 |
</html>
|
|
|
|
| 6 |
<meta name="color-scheme" content="light dark">
|
| 7 |
<title>InfiniSplat</title>
|
| 8 |
<script>
|
| 9 |
+
const requestedTheme = new URLSearchParams(window.location.search).get("__theme");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
| 11 |
+
document.documentElement.dataset.theme =
|
| 12 |
+
requestedTheme === "dark" || requestedTheme === "light"
|
| 13 |
+
? requestedTheme
|
| 14 |
+
: (prefersDark ? "dark" : "light");
|
| 15 |
</script>
|
| 16 |
<link rel="stylesheet" href="/infinisplat/assets/styles.css?v=4">
|
| 17 |
</head>
|
|
|
|
| 85 |
</main>
|
| 86 |
|
| 87 |
<div class="toast" id="toast" role="status" aria-live="polite"></div>
|
| 88 |
+
<script type="module" src="/infinisplat/assets/app.js?v=5"></script>
|
| 89 |
</body>
|
| 90 |
</html>
|