diff --git a/public/analytics.js b/public/analytics.js
index c7bf320c..d16e75d6 100644
--- a/public/analytics.js
+++ b/public/analytics.js
@@ -4692,20 +4692,26 @@ function destroy() { _stopRolesRefresh(); _stopScopesRefresh(); _analyticsData =
function renderRegionNodeGroups(elId, title, description, groups, unitLabel) {
var el = document.getElementById(elId);
if (!el) return;
- if (!groups || !groups.length) { el.innerHTML = ''; return; }
- var rows = groups.map(function(g) {
- var links = g.repeaters.map(function(rp) {
- return '' + esc(rp.name) + '';
- }).join(', ');
- return '
' +
- '' + esc(g.region) + ' — ' + g.count.toLocaleString() + ' ' + unitLabel + (g.count === 1 ? '' : 's') + '
' +
+ '' + esc(g.region) + ' — ' + g.count.toLocaleString() + ' ' + unitLabel + (g.count === 1 ? '' : 's') + '
No data yet — path resolution catches up gradually as traffic flows; check back in a few minutes.
'; el.innerHTML = '' + esc(description) + '
' + - rows; + body; } renderRegionNodeGroups('scopes-repeaters', 'Repeaters by Region', @@ -4717,6 +4723,7 @@ function destroy() { _stopRolesRefresh(); _stopScopesRefresh(); _analyticsData = var bridgeEl = document.getElementById('scopes-bridges'); if (bridgeEl) { var bridges = d.bridgeRepeaters || []; + var bridgeBody; if (bridges.length > 0) { var bridgeRows = bridges.map(function(b) { var regionList = b.regions.map(function(r) { return '' + esc(r) + ''; }).join(', ');
@@ -4726,18 +4733,22 @@ function destroy() { _stopRolesRefresh(); _stopScopesRefresh(); _analyticsData =
'' + - 'All-time — repeaters that have relayed traffic for more than one region. These connect otherwise-separate regional communities; losing one can split the mesh\'s regional coverage.' + - '
' + - '| Repeater | # Regions | Regions |
|---|
| Repeater | # Regions | Regions |
|---|
No bridge repeaters found yet — this needs a repeater confirmed in 2+ different regions, which takes longer to accumulate than the single-region data above.
'; } + bridgeEl.innerHTML = + '' + + 'All-time — repeaters that have relayed traffic for more than one region. These connect otherwise-separate regional communities; losing one can split the mesh\'s regional coverage.' + + '
' + + bridgeBody; } renderRegionNodeGroups('scopes-origin-nodes', 'Nodes Running This Region',