diff --git a/public/analytics.js b/public/analytics.js index 162cd50b..743139bc 100644 --- a/public/analytics.js +++ b/public/analytics.js @@ -4482,6 +4482,19 @@ function destroy() { _stopRolesRefresh(); _stopScopesRefresh(); _stopForeignTraf var winKey = 'scopes_window'; var selectedWindow = (typeof sessionStorage !== 'undefined' && sessionStorage.getItem(winKey)) || '24h'; + // #1852: the tab grew to 12 stacked sections (windowed adoption stats, + // all-time region breakdowns, all-time node/repeater hygiene lists) — + // grouped into 3 sub-tabs so a visitor sees one coherent screen at a + // time instead of one long scroll. Purely presentational: all three + // groups' data still loads together (one #scope-stats fetch + the two + // hygiene sections' own fetchAllNodes calls), only DOM visibility is + // gated on the active sub-tab. The 1h/24h/7d window picker only + // affects the Overview group (the all-time Regions/Hygiene sections + // ignore it entirely), so it lives inside that panel, not above the + // sub-tab bar. + var subtabKey = 'scopes_subtab'; + var selectedSubtab = (typeof sessionStorage !== 'undefined' && sessionStorage.getItem(subtabKey)) || 'overview'; + // Fix 5: write static frame only once if (!el.querySelector('#scopes-cards')) { el.innerHTML = @@ -4489,27 +4502,58 @@ function destroy() { _stopRolesRefresh(); _stopScopesRefresh(); _stopForeignTraf '
' + 'Denominator is all observed transmissions. Only TRANSPORT_FLOOD (0) and TRANSPORT_DIRECT (3) routes carry a scope; FLOOD (1) and DIRECT (2) are inherently unscoped per MeshCore protocol.' + '
' + - '| Region | Messages | % of Scoped |
|---|
| Region | Messages | % of Scoped |
|---|