From dc8bb323ca94430c6fae5ca6fea7588243834675 Mon Sep 17 00:00:00 2001 From: nate Date: Fri, 10 Apr 2026 01:59:41 +0400 Subject: [PATCH] support no-script on status page --- apps/status/src/static/app.css | 7 ++++--- apps/status/src/static/expand.js | 19 +++---------------- apps/status/src/views/page.ejs | 7 ++++--- 3 files changed, 11 insertions(+), 22 deletions(-) diff --git a/apps/status/src/static/app.css b/apps/status/src/static/app.css index 33b9eb8..1f7cbae 100644 --- a/apps/status/src/static/app.css +++ b/apps/status/src/static/app.css @@ -87,13 +87,14 @@ h1 { font-size: 1.75rem; font-weight: 700; margin: 0 0 0.5rem; } .uptime-cell.warn .value { color: var(--bar-partial); } .uptime-cell.bad .value { color: var(--bar-down); } .uptime-cell.empty .value { color: var(--muted); } -/* Header row is always clickable; detail panel collapses/expands. */ +/* Header row is always clickable; detail panel collapses/expands via hidden checkbox. */ +.monitor-toggle { display: none; } .monitor-row { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: 1rem 1.25rem; cursor: pointer; background: transparent; border: none; color: inherit; width: 100%; text-align: left; font-family: inherit; font-size: inherit; } .monitor-row:hover { background: rgba(255,255,255,0.02); } .monitor-row .chev { color: var(--muted); transition: transform 0.15s; flex-shrink: 0; } -.monitor.expanded-state .monitor-row .chev { transform: rotate(90deg); } +.monitor-toggle:checked ~ .monitor-row .chev { transform: rotate(90deg); } .monitor-detail { padding: 0 1.25rem 1rem; border-top: 1px solid var(--border); display: none; } -.monitor.expanded-state .monitor-detail { display: block; padding-top: 1rem; } +.monitor-toggle:checked ~ .monitor-detail { display: block; padding-top: 1rem; } .regions { display: flex; gap: 0.5rem; flex-wrap: wrap; margin-top: 0.5rem; font-size: 0.75rem; } .region { padding: 0.15rem 0.5rem; border-radius: 999px; border: 1px solid var(--border); } .region.up { color: var(--green); border-color: rgba(16,185,129,0.3); } diff --git a/apps/status/src/static/expand.js b/apps/status/src/static/expand.js index 85fad0e..00deeb1 100644 --- a/apps/status/src/static/expand.js +++ b/apps/status/src/static/expand.js @@ -1,24 +1,11 @@ // Public status page client JS: -// 1. Click any monitor row to collapse/expand its detail panel. -// 2. Hover any heartbeat bar to see the bucket time range and uptime breakdown. -// All monitor detail HTML is server-rendered; this script only toggles a CSS -// class on click. Reads its config from window.PINGQL_PAGE. +// Bar tooltips - hover any heartbeat bar to see the bucket time range and uptime breakdown. +// Expand/collapse is pure CSS (hidden checkbox + :checked sibling selector), no JS needed. +// Reads its config from window.PINGQL_PAGE. (function () { var cfg = window.PINGQL_PAGE || {}; var barFrequency = cfg.bar_frequency || "daily"; - // ── Click to expand/collapse ────────────────────────────────────────── - var rows = document.querySelectorAll(".monitor .monitor-row"); - for (var r = 0; r < rows.length; r++) { - (function (row) { - var card = row.parentElement; - row.addEventListener("click", function () { - var isOpen = card.classList.toggle("expanded-state"); - row.setAttribute("aria-expanded", isOpen ? "true" : "false"); - }); - })(rows[r]); - } - // ── Bar tooltips ────────────────────────────────────────────────────── var tooltip = document.getElementById("bar-tooltip"); if (!tooltip) return; diff --git a/apps/status/src/views/page.ejs b/apps/status/src/views/page.ejs index 285ddb6..b61760e 100644 --- a/apps/status/src/views/page.ejs +++ b/apps/status/src/views/page.ejs @@ -196,8 +196,9 @@ // whether the detail panel starts expanded or collapsed. const startsOpen = m.display_mode !== 'compact'; %> -
- +
<% buckets.forEach(function(b) { %>