53 lines
1.7 KiB
Text
53 lines
1.7 KiB
Text
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<meta name="csrf-token" content={get_csrf_token()} />
|
|
<.live_title default="Towerops">
|
|
{assigns[:page_title]}
|
|
</.live_title>
|
|
<link phx-track-static rel="stylesheet" href={~p"/assets/css/app.css"} />
|
|
<script defer phx-track-static type="text/javascript" src={~p"/assets/js/app.js"}>
|
|
</script>
|
|
<script>
|
|
(() => {
|
|
const mql = window.matchMedia("(prefers-color-scheme: dark)");
|
|
|
|
const getSystemTheme = () => mql.matches ? "dark" : "light";
|
|
|
|
const applyTheme = () => {
|
|
const preference = localStorage.getItem("phx:theme") || "system";
|
|
const theme = preference === "system" ? getSystemTheme() : preference;
|
|
document.documentElement.setAttribute("data-theme", theme);
|
|
};
|
|
|
|
const setTheme = (preference) => {
|
|
if (preference === "system") {
|
|
localStorage.removeItem("phx:theme");
|
|
} else {
|
|
localStorage.setItem("phx:theme", preference);
|
|
}
|
|
applyTheme();
|
|
};
|
|
|
|
// Apply theme on page load
|
|
applyTheme();
|
|
|
|
// Listen for system preference changes (for auto mode)
|
|
mql.addEventListener("change", applyTheme);
|
|
|
|
// Listen for storage changes from other tabs
|
|
window.addEventListener("storage", (e) => {
|
|
if (e.key === "phx:theme") applyTheme();
|
|
});
|
|
|
|
// Listen for theme change events from LiveView
|
|
window.addEventListener("phx:set-theme", (e) => setTheme(e.target.dataset.phxTheme));
|
|
})();
|
|
</script>
|
|
</head>
|
|
<body>
|
|
{@inner_content}
|
|
</body>
|
|
</html>
|