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 += ''; + 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 += '
'; h += '' + asnLink(e.asn) + ''; + if (e.name && e.name !== 'AS' + e.asn) h += ' ' + escHtml(e.name) + ''; h += ' not seen in any path'; 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)) {