From 56c363a5176f7cee4d6cbe881883e61060e8dcbb Mon Sep 17 00:00:00 2001 From: Stan Grams Date: Sun, 2 Aug 2026 23:59:58 +0200 Subject: [PATCH 1/2] [fix](trx-frontend-http): align the Statistics page and unblock the tab strip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two faults, both mine, both visible in one screenshot of that page. #tab-statistics was the only panel with padding of its own, so its title and content sat 16px inside where every other page begins. Remove it and the page lines up with the header and with its siblings. Removing the tab strip's `overflow-x` left it unable to shrink below its content, so at around 1280px it ran under the controls: the Map tab sat beneath the audio button and Tools beneath REC. Clipping is safe again — the menus it anchors are reparented to the body when they open — so the strip can shrink, and the labels now give way to icons at 1360px rather than 1180px, before it has to clip anything. Measured at 1280px: 321px of clearance between the strip and the controls, and the page title at the same left edge as the header. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01GdyUjuXejCEfiub675z6cz Signed-off-by: Stan Grams --- .../trx-frontend-http/assets/web/style.css | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/trx-client/trx-frontend/trx-frontend-http/assets/web/style.css b/src/trx-client/trx-frontend/trx-frontend-http/assets/web/style.css index 511a9a91..960987fa 100644 --- a/src/trx-client/trx-frontend/trx-frontend-http/assets/web/style.css +++ b/src/trx-client/trx-frontend/trx-frontend-http/assets/web/style.css @@ -1531,15 +1531,16 @@ small { color: var(--text-muted); } align-items: center; gap: 0.2rem; min-width: 0; - /* Never wraps and never scrolls: the occasional destinations live behind - * More, so four tabs plus More always fit. overflow-x here would clip the - * dropdown this element anchors. */ + /* Never wraps. It must still be able to shrink below its content, or it + * overlaps the controls; the menus it anchors are reparented to the body on + * open, so clipping here no longer reaches them. */ flex-wrap: nowrap; + overflow: hidden; } .tab-bar-nav .tab { flex: 0 0 auto; } /* Icons before scrolling: every tab already carries one, and four icons plus * More always fit, so the strip never has to hide a destination. */ -@media (max-width: 1180px) and (min-width: 701px) { +@media (max-width: 1360px) and (min-width: 701px) { .tab-bar-nav .tab .tab-label { display: none; } .tab-bar-nav .tab .tab-icon, .tab-bar-nav .tab .tab-more-icon { display: block; } .tab-bar-nav .tab { padding: 0.5rem 0.6rem; } @@ -5187,7 +5188,6 @@ body[data-operator-layout="broadcast"] #cw-bar-overlay { display: flex; flex-direction: column; gap: 1rem; - padding: 1rem; } .stats-controls { display: flex; -- 2.55.0 From 00191c8d7ab440be820e22e23f73449be31d7223 Mon Sep 17 00:00:00 2001 From: Stan Grams Date: Mon, 3 Aug 2026 00:03:48 +0200 Subject: [PATCH 2/2] [fix](trx-frontend-http): serve the Statistics and Bookmarks routes The server answers /, /map, /digital-modes, /recorder, /settings and /about with the application shell, but never had a route for /statistics or /bookmarks. Both fell through to the catch-all asset handler, so reloading on either one downloaded a file instead of reopening the page. Only in-app navigation worked, which is why it went unnoticed until Statistics was reachable from the Tools menu. Add the two missing shell routes. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01GdyUjuXejCEfiub675z6cz Signed-off-by: Stan Grams --- .../trx-frontend/trx-frontend-http/src/api/assets.rs | 12 ++++++++++++ .../trx-frontend/trx-frontend-http/src/api/mod.rs | 2 ++ 2 files changed, 14 insertions(+) diff --git a/src/trx-client/trx-frontend/trx-frontend-http/src/api/assets.rs b/src/trx-client/trx-frontend/trx-frontend-http/src/api/assets.rs index 7f5c1c7a..2f84d383 100644 --- a/src/trx-client/trx-frontend/trx-frontend-http/src/api/assets.rs +++ b/src/trx-client/trx-frontend/trx-frontend-http/src/api/assets.rs @@ -95,6 +95,18 @@ pub(crate) async fn about_index(req: HttpRequest) -> impl Responder { static_asset_response(&req, "text/html; charset=utf-8", c) } +#[get("/statistics")] +pub(crate) async fn statistics_index(req: HttpRequest) -> impl Responder { + let c = gz_index_html(); + static_asset_response(&req, "text/html; charset=utf-8", c) +} + +#[get("/bookmarks")] +pub(crate) async fn bookmarks_index(req: HttpRequest) -> impl Responder { + let c = gz_index_html(); + static_asset_response(&req, "text/html; charset=utf-8", c) +} + // --------------------------------------------------------------------------- // Favicon & logo // --------------------------------------------------------------------------- diff --git a/src/trx-client/trx-frontend/trx-frontend-http/src/api/mod.rs b/src/trx-client/trx-frontend/trx-frontend-http/src/api/mod.rs index 528f313b..e79233e1 100644 --- a/src/trx-client/trx-frontend/trx-frontend-http/src/api/mod.rs +++ b/src/trx-client/trx-frontend/trx-frontend-http/src/api/mod.rs @@ -637,6 +637,8 @@ pub fn configure(cfg: &mut web::ServiceConfig) { .service(assets::recorder_index) .service(assets::settings_index) .service(assets::about_index) + .service(assets::statistics_index) + .service(assets::bookmarks_index) .service(assets::favicon) .service(assets::favicon_png) .service(assets::logo) -- 2.55.0