Add '| TowerOps' suffix to page titles so users can easily identify TowerOps tabs when multiple browser tabs are open. Examples: - Dashboard → 'Dashboard | TowerOps' - Equipment Details → 'Router-1 | TowerOps' - No page_title → 'TowerOps' Uses Phoenix LiveView's suffix parameter on live_title component.
81 lines
2.8 KiB
Text
81 lines
2.8 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()} />
|
|
<meta
|
|
name="description"
|
|
content="TowerOps — Operational intelligence for WISP and ISP operators. Connect network monitoring to subscriber impact and revenue."
|
|
/>
|
|
<meta name="theme-color" content="#2563eb" />
|
|
|
|
<!-- Open Graph -->
|
|
<meta property="og:type" content="website" />
|
|
<meta property="og:site_name" content="TowerOps" />
|
|
<meta
|
|
property="og:title"
|
|
content="TowerOps — See the Business Impact of Every Network Event"
|
|
/>
|
|
<meta
|
|
property="og:description"
|
|
content="The only platform that connects network monitoring to subscriber impact and revenue. Built for WISP and ISP operators."
|
|
/>
|
|
|
|
<!-- Favicon -->
|
|
<link id="favicon" rel="icon" type="image/png" href={~p"/images/towerops_logo.png"} />
|
|
<link rel="apple-touch-icon" href={~p"/images/towerops_logo.png"} />
|
|
|
|
<.live_title suffix=" | TowerOps">
|
|
{assigns[:page_title] || "TowerOps"}
|
|
</.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>
|
|
<a
|
|
href="#main-content"
|
|
class="sr-only focus:not-sr-only focus:absolute focus:top-0 focus:left-0 focus:z-50 focus:p-4 focus:bg-blue-600 focus:text-white focus:rounded-md focus:m-2"
|
|
>
|
|
{t("Skip to main content")}
|
|
</a>
|
|
{@inner_content}
|
|
</body>
|
|
</html>
|