diff --git a/deploy/public/index.html b/deploy/public/index.html
index 88989b9..82dad43 100644
--- a/deploy/public/index.html
+++ b/deploy/public/index.html
@@ -223,6 +223,9 @@ a{color:var(--blue);text-decoration:none;transition:color .2s}a:hover{color:var(
.health-tooltip .tt-fix{color:#ff9e64;font-style:italic}
.health-check-item:hover .health-tooltip{display:block}
+.show-more-btn{font-size:.8rem;color:var(--blue);cursor:pointer;padding:.5rem 0;margin-top:.25rem;transition:color .2s;user-select:none}
+.show-more-btn:hover{color:var(--cyan);text-decoration:underline}
+
/* Routing Overview - Propagation Bars */
.routing-stats-row{display:flex;gap:1rem;flex-wrap:wrap;margin-bottom:1.25rem}
.routing-stat-card{flex:1;min-width:100px;background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:.875rem 1rem;text-align:center}
@@ -1169,27 +1172,57 @@ function renderAspaDeep(d) {
h += '
Completeness' + (audit.completeness_pct || 0) + '%
';
h += '';
- // Missing from ASPA
+ // Missing from ASPA (collapsible after 5)
if (audit.missing_from_aspa && audit.missing_from_aspa.length > 0) {
- h += 'Missing from ASPA Declaration
';
- audit.missing_from_aspa.forEach(function(m) {
+ var missingList = audit.missing_from_aspa;
+ var LIMIT = 5;
+ h += 'Missing from ASPA Declaration (' + missingList.length + ')
';
+ missingList.slice(0, LIMIT).forEach(function(m) {
h += '';
h += '' + asnLink(m.asn) + '';
if (m.name && m.name !== 'AS' + m.asn) h += ' ' + escHtml(m.name) + '';
h += ' seen in ' + (m.frequency_pct || 0) + '% of paths (' + (m.frequency || 0) + ')';
h += '
';
});
+ if (missingList.length > LIMIT) {
+ var moreId = 'missingMore' + Date.now();
+ h += '';
+ missingList.slice(LIMIT).forEach(function(m) {
+ h += '
';
+ h += '' + asnLink(m.asn) + '';
+ if (m.name && m.name !== 'AS' + m.asn) h += ' ' + escHtml(m.name) + '';
+ h += ' seen in ' + (m.frequency_pct || 0) + '% of paths (' + (m.frequency || 0) + ')';
+ h += '
';
+ });
+ h += '
';
+ h += 'Show ' + (missingList.length - LIMIT) + ' more...
';
+ }
}
- // Extra in ASPA
+ // Extra in ASPA (collapsible after 5)
if (audit.extra_in_aspa && audit.extra_in_aspa.length > 0) {
- h += 'Extra in ASPA (not seen in paths)
';
- audit.extra_in_aspa.forEach(function(e) {
+ var extraList = audit.extra_in_aspa;
+ h += 'Extra in ASPA (not seen in paths) (' + extraList.length + ')
';
+ extraList.slice(0, LIMIT).forEach(function(e) {
h += '';
});
+ if (extraList.length > LIMIT) {
+ var extraMoreId = 'extraMore' + Date.now();
+ h += '';
+ h += 'Show ' + (extraList.length - LIMIT) + ' more...
';
+ }
}
if ((!audit.missing_from_aspa || audit.missing_from_aspa.length === 0) && (!audit.extra_in_aspa || audit.extra_in_aspa.length === 0)) {