[FIX] V3 polish: spotlight ARIA su top-nav + CSP font segnala-anonimo

- aria-guide "Mostrami dov'è": ora aggancia le voci del menu IN ALTO V3
  (data-nav aggiunto in topnav-v3.js su voci dirette + mega-link). Se la voce è
  in un mega-menu, lo apre (.aria-guide-open) e ci punta lo spotlight; coach
  "menu in alto". Fallback navigazione invariato. (Prima cercava .sidebar-nav V2.)
- segnala-anonimo.html: CSP font-src 'self' → 'self' data: (sbloccato il font
  data: embeddato, niente più violazione CSP).
- Cache-buster: topnav-v3.js/common.js ?v=20260627t, aria-guide.js ?v=20260627t.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
DevEnv nis2-agile
2026-06-27 17:57:21 +02:00
co-authored by Claude Opus 4.8
parent 95e77a668a
commit a71d1a096d
39 changed files with 98 additions and 83 deletions
+5 -3
View File
@@ -110,6 +110,8 @@
'Monitoraggio': 'nav.grp_monitoring', 'Lex e ISO': 'nav.grp_lexiso', 'AI': 'nav.grp_ai', 'Guida': 'nav.grp_guide'
};
function i18nAttr(key) { return key ? ' data-i18n="' + key + '"' : ''; }
// data-nav = href senza .html → aggancio per il puntatore guida ARIA (aria-guide.js).
function navAttr(href) { return ' data-nav="' + esc(String(href).replace(/\.html$/, '')) + '"'; }
function esc(s) {
return String(s == null ? '' : s).replace(/[&<>"']/g, function (c) {
@@ -136,7 +138,7 @@
function renderMega(g) {
var colsHtml = g.cols.map(function (col) {
var links = col.links.map(function (l) {
return '<a class="mega-link" href="' + esc(l.href) + '">' +
return '<a class="mega-link"' + navAttr(l.href) + ' href="' + esc(l.href) + '">' +
'<span class="mega-ic"><i data-lucide="' + esc(l.ic) + '" class="ic"></i></span>' +
'<span><b' + i18nAttr(I18N_BY_HREF[l.href]) + '>' + esc(l.b) + '</b><span>' + esc(l.s) + '</span></span></a>';
}).join('');
@@ -154,14 +156,14 @@
if (g.href && !g.cols) {
// Voce diretta (Dashboard, Calendario)
return '<div class="nav-item">' +
'<a class="' + cls + '"' + aria + ' href="' + esc(g.href) + '">' +
'<a class="' + cls + '"' + aria + navAttr(g.href) + ' href="' + esc(g.href) + '">' +
'<i data-lucide="' + esc(g.icon) + '" class="ic"></i>' +
'<span' + i18n + '>' + esc(g.label) + '</span></a></div>';
}
// Gruppo con mega-menu. Il link "testa" punta alla prima voce del gruppo.
var firstHref = g.cols[0].links[0].href;
return '<div class="nav-item">' +
'<a class="' + cls + '"' + aria + ' href="' + esc(firstHref) + '">' +
'<a class="' + cls + '"' + aria + navAttr(firstHref) + ' href="' + esc(firstHref) + '">' +
'<i data-lucide="' + esc(g.icon) + '" class="ic"></i>' +
'<span' + i18n + '>' + esc(g.label) + '</span>' +
'<i data-lucide="chevron-down" class="caret"></i></a>' +