[FEAT] ARIA puntatore guida "Mostrami dov'è" — spotlight verso il menu (Fase D)
Porting del pattern TRPG (CHANGE_aria_voice_pointer.md) sulla sidebar V2: - public/js/aria-guide.js (nuovo): DESTINATIONS (26 voci menu → keyword IT), matchDestination(question), pointTo(nav,label) = overlay + spotlight pulsante + puntatore animato + coach-mark "Vai →"; Esc/click per chiudere; fallback navigate se la voce non è visibile; rispetta prefers-reduced-motion; self-contained, no inline-CSS. - common-bi.js: data-nav="<href senza .html>" sulle voci sidebar (aggancio puntatore). - common.js: inietta aria-guide.js dopo login; dopo ogni risposta ARIA, se la domanda combacia con una destinazione mostra il bottone "📍 Mostrami dov'è: <voce>". Frontend-only, additivo. Cache-buster common.js/common-bi.js -> 20260624f. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
bafc305503
commit
42529043d3
@@ -71,8 +71,8 @@
|
|||||||
|
|
||||||
<!-- Stessa logica della app: api.js + common.js (helper) + common-bi.js (override BI) -->
|
<!-- Stessa logica della app: api.js + common.js (helper) + common-bi.js (override BI) -->
|
||||||
<script src="js/api.js?v=20260631"></script>
|
<script src="js/api.js?v=20260631"></script>
|
||||||
<script src="js/common.js?v=20260624e"></script>
|
<script src="js/common.js?v=20260624f"></script>
|
||||||
<script src="js/common-bi.js?v=20260631"></script>
|
<script src="js/common-bi.js?v=20260624f"></script>
|
||||||
<script>
|
<script>
|
||||||
// Renderizza la sidebar BI (loadSidebar è stato ridefinito da common-bi.js)
|
// Renderizza la sidebar BI (loadSidebar è stato ridefinito da common-bi.js)
|
||||||
document.addEventListener('DOMContentLoaded', function () {
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
|
|||||||
@@ -318,7 +318,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260620"></script>
|
<script src="/js/api.js?v=20260620"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
||||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
||||||
riusando tutti gli helper di common.js (zero backend). -->
|
riusando tutti gli helper di common.js (zero backend). -->
|
||||||
@@ -328,7 +328,7 @@
|
|||||||
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260618"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260620"></script>
|
<script src="/js/i18n.js?v=20260620"></script>
|
||||||
<script>
|
<script>
|
||||||
// ── Auth check ───────────────────────────────────────────
|
// ── Auth check ───────────────────────────────────────────
|
||||||
|
|||||||
@@ -148,7 +148,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="../js/api.js?v=20260620"></script>
|
<script src="../js/api.js?v=20260620"></script>
|
||||||
<script src="../js/common.js?v=20260624e"></script>
|
<script src="../js/common.js?v=20260624f"></script>
|
||||||
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
||||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
||||||
riusando tutti gli helper di common.js (zero backend). -->
|
riusando tutti gli helper di common.js (zero backend). -->
|
||||||
@@ -158,7 +158,7 @@
|
|||||||
bootstrap.loadFonts('../vendor/bootstrap-italia/dist/fonts');
|
bootstrap.loadFonts('../vendor/bootstrap-italia/dist/fonts');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="../js/common-bi.js?v=20260618"></script>
|
<script src="../js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="../js/i18n.js?v=20260620"></script>
|
<script src="../js/i18n.js?v=20260620"></script>
|
||||||
<script>
|
<script>
|
||||||
// ── Auth check ───────────────────────────────────────────
|
// ── Auth check ───────────────────────────────────────────
|
||||||
|
|||||||
@@ -170,7 +170,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="../js/api.js?v=20260620"></script>
|
<script src="../js/api.js?v=20260620"></script>
|
||||||
<script src="../js/common.js?v=20260624e"></script>
|
<script src="../js/common.js?v=20260624f"></script>
|
||||||
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
||||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
||||||
riusando tutti gli helper di common.js (zero backend). -->
|
riusando tutti gli helper di common.js (zero backend). -->
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
bootstrap.loadFonts('../vendor/bootstrap-italia/dist/fonts');
|
bootstrap.loadFonts('../vendor/bootstrap-italia/dist/fonts');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="../js/common-bi.js?v=20260618"></script>
|
<script src="../js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="../js/i18n.js?v=20260620"></script>
|
<script src="../js/i18n.js?v=20260620"></script>
|
||||||
<script>
|
<script>
|
||||||
// ── Auth check ───────────────────────────────────────────
|
// ── Auth check ───────────────────────────────────────────
|
||||||
|
|||||||
@@ -1091,9 +1091,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="js/api.js?v=20260631"></script>
|
<script src="js/api.js?v=20260631"></script>
|
||||||
<script src="js/common.js?v=20260624e"></script>
|
<script src="js/common.js?v=20260624f"></script>
|
||||||
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="js/i18n.js?v=20260631"></script>
|
<script src="js/i18n.js?v=20260631"></script>
|
||||||
<script src="js/help.js?v=20260624e"></script>
|
<script src="js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -155,7 +155,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
||||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
||||||
riusando tutti gli helper di common.js (zero backend). -->
|
riusando tutti gli helper di common.js (zero backend). -->
|
||||||
@@ -165,7 +165,7 @@
|
|||||||
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
+2
-2
@@ -362,7 +362,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260623g"></script>
|
<script src="/js/api.js?v=20260623g"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
||||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
||||||
riusando tutti gli helper di common.js (zero backend). -->
|
riusando tutti gli helper di common.js (zero backend). -->
|
||||||
@@ -372,7 +372,7 @@
|
|||||||
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -152,9 +152,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -350,11 +350,11 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="js/api.js?v=20260631"></script>
|
<script src="js/api.js?v=20260631"></script>
|
||||||
<script src="js/common.js?v=20260624e"></script>
|
<script src="js/common.js?v=20260624f"></script>
|
||||||
<!-- Bootstrap Italia bundle + override sidebar BI (common-bi.js dopo common.js: ridefinisce solo loadSidebar) -->
|
<!-- Bootstrap Italia bundle + override sidebar BI (common-bi.js dopo common.js: ridefinisce solo loadSidebar) -->
|
||||||
<script src="vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
<script src="vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
||||||
<script>if (window.bootstrap && bootstrap.loadFonts) { bootstrap.loadFonts('vendor/bootstrap-italia/dist/fonts'); }</script>
|
<script>if (window.bootstrap && bootstrap.loadFonts) { bootstrap.loadFonts('vendor/bootstrap-italia/dist/fonts'); }</script>
|
||||||
<script src="js/common-bi.js?v=20260631"></script>
|
<script src="js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="js/i18n.js?v=20260631"></script>
|
<script src="js/i18n.js?v=20260631"></script>
|
||||||
<script src="js/help.js?v=20260624e"></script>
|
<script src="js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -184,9 +184,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script src="/js/competenze.js?v=20260617"></script>
|
<script src="/js/competenze.js?v=20260617"></script>
|
||||||
|
|||||||
@@ -137,9 +137,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -383,7 +383,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
||||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
||||||
riusando tutti gli helper di common.js (zero backend). -->
|
riusando tutti gli helper di common.js (zero backend). -->
|
||||||
@@ -393,7 +393,7 @@
|
|||||||
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script>
|
<script>
|
||||||
const SPRITE = '/vendor/bootstrap-italia/dist/svg/sprites.svg';
|
const SPRITE = '/vendor/bootstrap-italia/dist/svg/sprites.svg';
|
||||||
|
|||||||
@@ -144,7 +144,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
||||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
||||||
riusando tutti gli helper di common.js (zero backend). -->
|
riusando tutti gli helper di common.js (zero backend). -->
|
||||||
@@ -154,7 +154,7 @@
|
|||||||
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
+2
-2
@@ -1143,7 +1143,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<!-- Bootstrap Italia bundle (accordion) + override sidebar BI (common-bi.js).
|
<!-- Bootstrap Italia bundle (accordion) + override sidebar BI (common-bi.js).
|
||||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI. -->
|
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI. -->
|
||||||
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
||||||
@@ -1152,7 +1152,7 @@
|
|||||||
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -352,7 +352,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
||||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
||||||
riusando tutti gli helper di common.js (zero backend). -->
|
riusando tutti gli helper di common.js (zero backend). -->
|
||||||
@@ -362,7 +362,7 @@
|
|||||||
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -912,7 +912,7 @@ curl -H <span class="str">"X-API-Key: nis2_TUA_CHIAVE"</span> \
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="js/common.js?v=20260624e"></script>
|
<script src="js/common.js?v=20260624f"></script>
|
||||||
<script src="js/i18n.js?v=20260631"></script>
|
<script src="js/i18n.js?v=20260631"></script>
|
||||||
<script>
|
<script>
|
||||||
function showTab(id) {
|
function showTab(id) {
|
||||||
|
|||||||
@@ -140,9 +140,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
+2
-2
@@ -185,7 +185,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
||||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
||||||
riusando tutti gli helper di common.js (zero backend). -->
|
riusando tutti gli helper di common.js (zero backend). -->
|
||||||
@@ -195,7 +195,7 @@
|
|||||||
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script src="/js/isms.js?v=20260620b"></script>
|
<script src="/js/isms.js?v=20260620b"></script>
|
||||||
|
|||||||
@@ -0,0 +1,144 @@
|
|||||||
|
/**
|
||||||
|
* NIS2 Agile - ARIA Guide (puntatore "dove andare")
|
||||||
|
*
|
||||||
|
* Porting del pattern TRPG (CHANGE_aria_voice_pointer.md): quando l'utente chiede
|
||||||
|
* "dove trovo X", ARIA mostra un PUNTATORE animato + spotlight sulla voce reale
|
||||||
|
* della sidebar V2 (common-bi.js) e offre "Vai →".
|
||||||
|
*
|
||||||
|
* Self-contained, vanilla, frontend-only. Nessuna dipendenza, niente inline-CSS.
|
||||||
|
* Aggancia le voci via [data-nav="<href senza .html>"] (vedi common-bi.js).
|
||||||
|
* Rispetta prefers-reduced-motion. Espone window.AriaGuide.
|
||||||
|
*/
|
||||||
|
(function () {
|
||||||
|
'use strict';
|
||||||
|
if (window.AriaGuide) return;
|
||||||
|
|
||||||
|
// Mappa destinazioni: nav (data-nav) → { label, keywords[] }. label = voce reale del menu.
|
||||||
|
var DESTINATIONS = [
|
||||||
|
{ nav: 'assets', label: 'Inventario', section: 'Operativo', keywords: ['inventario', 'asset', 'beni', 'bene', 'sistemi informativi', 'rilevanza nis2'] },
|
||||||
|
{ nav: 'risks', label: 'Rischi', section: 'Gestione', keywords: ['rischio', 'rischi', 'valutazione del rischio', 'risk', 'matrice rischi', 'trattamento'] },
|
||||||
|
{ nav: 'incidents', label: 'Incidenti', section: 'Gestione', keywords: ['incidente', 'incidenti', 'notifica', 'art. 25', 'art.25', 'csirt', 'data breach', '24 ore', '72 ore'] },
|
||||||
|
{ nav: 'assessment', label: 'Gap Analysis', section: 'Principale', keywords: ['gap analysis', 'gap', 'assessment', 'questionario', 'autovalutazione', '80 domande'] },
|
||||||
|
{ nav: 'misure-requisiti', label: 'Misure e Requisiti', section: 'Principale', keywords: ['misure', 'requisiti', 'misura', 'requisito', 'controlli acn', 'determinazione acn'] },
|
||||||
|
{ nav: 'isms', label: 'Modello SGSI (ISO 27001)', section: 'Principale', keywords: ['sgsi', 'iso 27001', 'isms', 'soa', 'statement of applicability', 'modello organizzativo', 'modello sgsi'] },
|
||||||
|
{ nav: 'policies', label: 'Policy', section: 'Gestione', keywords: ['policy', 'politiche', 'politica', 'procedura', 'procedure', 'documento normativo'] },
|
||||||
|
{ nav: 'supply-chain', label: 'Supply Chain', section: 'Gestione', keywords: ['supply chain', 'fornitori', 'fornitore', 'catena di fornitura', 'terze parti'] },
|
||||||
|
{ nav: 'training', label: 'Formazione', section: 'Operativo', keywords: ['formazione', 'corsi', 'corso', 'training', 'awareness', 'sensibilizzazione'] },
|
||||||
|
{ nav: 'whistleblowing', label: 'Segnalazioni', section: 'Gestione', keywords: ['segnalazione', 'segnalazioni', 'whistleblowing', 'illeciti', 'canale segnalazione'] },
|
||||||
|
{ nav: 'normative', label: 'Normative', section: 'Gestione', keywords: ['normativa', 'normative', 'aggiornamenti normativi', 'decreto', 'feed normativo'] },
|
||||||
|
{ nav: 'stakeholders', label: 'Stakeholder', section: 'Gestione', keywords: ['stakeholder', 'portatori di interesse', 'mendelow', 'matrice stakeholder'] },
|
||||||
|
{ nav: 'stakeholder-activities', label: 'Attività stakeholder', section: 'Gestione', keywords: ['attività stakeholder', 'questionari stakeholder', 'azioni stakeholder'] },
|
||||||
|
{ nav: 'organigramma', label: 'Organigramma', section: 'Gestione', keywords: ['organigramma', 'ruoli', 'governance', 'raci', 'responsabilità'] },
|
||||||
|
{ nav: 'competenze', label: 'Competenze', section: 'Gestione', keywords: ['competenze', 'skill', 'competenza', 'requisiti ruolo'] },
|
||||||
|
{ nav: 'dashboard', label: 'Dashboard', section: 'Principale', keywords: ['dashboard', 'panoramica', 'home', 'punteggio di compliance', 'compliance score', 'cruscotto'] },
|
||||||
|
{ nav: 'calendario', label: 'Calendario', section: 'Principale', keywords: ['calendario', 'scadenze', 'scadenziario', 'deadline'] },
|
||||||
|
{ nav: 'workflow', label: 'Compliance Journey', section: 'Principale', keywords: ['compliance journey', 'percorso di conformità', 'journey', 'roadmap'] },
|
||||||
|
{ nav: 'internal-audits', label: 'Audit interni', section: 'Operativo', keywords: ['audit interni', 'audit interno', '9.2', 'verifica interna'] },
|
||||||
|
{ nav: 'controlli-periodici', label: 'Controlli periodici', section: 'Operativo', keywords: ['controlli periodici', 'controllo periodico', 'monitoraggio controlli'] },
|
||||||
|
{ nav: 'management-review', label: 'Riesame di Direzione', section: 'Operativo', keywords: ['riesame di direzione', 'riesame', 'management review', '9.3'] },
|
||||||
|
{ nav: 'reports', label: 'Audit & Report', section: 'Operativo', keywords: ['report', 'reportistica', 'audit log', 'esporta', 'esportazione', 'audit & report'] },
|
||||||
|
{ nav: 'kb', label: 'Knowledge Base', section: 'Gestione', keywords: ['knowledge base', 'documenti caricati', 'carica documento', 'base di conoscenza'] },
|
||||||
|
{ nav: 'cross-analysis', label: 'AI Cross-Analysis', section: 'Gestione', keywords: ['cross analysis', 'cross-analysis', 'analisi incrociata'] },
|
||||||
|
{ nav: 'settings', label: 'Impostazioni', section: 'Sistema', keywords: ['impostazioni', 'settings', 'membri', 'permessi documentali', 'profilo'] },
|
||||||
|
{ nav: 'integrazioniext', label: 'Integrazioni Esterne', section: 'Sistema', keywords: ['integrazioni', 'integrazione', 'api esterne', 'webhook'] }
|
||||||
|
];
|
||||||
|
|
||||||
|
function matchDestination(question) {
|
||||||
|
var q = ' ' + String(question || '').toLowerCase().replace(/[«»"'`]/g, ' ') + ' ';
|
||||||
|
var best = null, bestLen = 0;
|
||||||
|
for (var i = 0; i < DESTINATIONS.length; i++) {
|
||||||
|
var d = DESTINATIONS[i];
|
||||||
|
for (var k = 0; k < d.keywords.length; k++) {
|
||||||
|
var kw = d.keywords[k];
|
||||||
|
if (kw.length >= 3 && q.indexOf(kw) !== -1 && kw.length > bestLen) {
|
||||||
|
best = d; bestLen = kw.length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return best;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── CSS (iniettato una volta) ───────────────────────────────────────────
|
||||||
|
var _css = false;
|
||||||
|
function injectCss() {
|
||||||
|
if (_css) return; _css = true;
|
||||||
|
var s = document.createElement('style');
|
||||||
|
s.textContent = [
|
||||||
|
'.aria-guide-ov{position:fixed;inset:0;z-index:10050;background:transparent}',
|
||||||
|
'.aria-guide-spot{position:fixed;z-index:10051;border:3px solid #0066CC;border-radius:10px;',
|
||||||
|
' box-shadow:0 0 0 9999px rgba(15,23,42,.45),0 0 14px rgba(0,102,204,.7);pointer-events:none;',
|
||||||
|
' transition:all .35s cubic-bezier(.4,0,.2,1);animation:aria-pulse 1.4s ease-in-out infinite}',
|
||||||
|
'@keyframes aria-pulse{0%,100%{box-shadow:0 0 0 9999px rgba(15,23,42,.45),0 0 0 0 rgba(0,102,204,.55)}',
|
||||||
|
' 50%{box-shadow:0 0 0 9999px rgba(15,23,42,.45),0 0 0 8px rgba(0,102,204,0)}}',
|
||||||
|
'.aria-guide-ptr{position:fixed;z-index:10053;width:34px;height:34px;pointer-events:none;',
|
||||||
|
' transition:left .6s cubic-bezier(.4,0,.2,1),top .6s cubic-bezier(.4,0,.2,1);filter:drop-shadow(0 2px 3px rgba(0,0,0,.4))}',
|
||||||
|
'.aria-guide-coach{position:fixed;z-index:10052;max-width:260px;background:#0b2a4a;color:#fff;',
|
||||||
|
' padding:10px 12px;border-radius:10px;font:500 13px/1.45 system-ui,Arial,sans-serif;',
|
||||||
|
' box-shadow:0 8px 24px rgba(0,0,0,.3)}',
|
||||||
|
'.aria-guide-coach b{color:#7ec6ff}',
|
||||||
|
'.aria-guide-coach .row{margin-top:8px;display:flex;gap:8px;justify-content:flex-end}',
|
||||||
|
'.aria-guide-coach button{border:none;border-radius:7px;padding:6px 12px;font:600 12px system-ui;cursor:pointer}',
|
||||||
|
'.aria-guide-go{background:#0066CC;color:#fff}.aria-guide-x{background:#1e3a5f;color:#cbd5e1}',
|
||||||
|
'@media (prefers-reduced-motion:reduce){.aria-guide-spot,.aria-guide-ptr{transition:none;animation:none}}'
|
||||||
|
].join('\n');
|
||||||
|
document.head.appendChild(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
var _open = null;
|
||||||
|
function dismiss() {
|
||||||
|
if (!_open) return;
|
||||||
|
_open.forEach(function (el) { if (el && el.parentNode) el.parentNode.removeChild(el); });
|
||||||
|
document.removeEventListener('keydown', onKey, true);
|
||||||
|
_open = null;
|
||||||
|
}
|
||||||
|
function onKey(e) { if (e.key === 'Escape') dismiss(); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mostra il puntatore sulla voce di menu `nav` (data-nav). Se la voce non è
|
||||||
|
* visibile (sidebar mobile chiusa / pagina senza sidebar) naviga direttamente.
|
||||||
|
* @returns {boolean} true se ha mostrato la guida, false se ha fatto fallback.
|
||||||
|
*/
|
||||||
|
function pointTo(nav, label) {
|
||||||
|
dismiss();
|
||||||
|
var el = document.querySelector('.sidebar-nav a[data-nav="' + nav + '"]');
|
||||||
|
var href = el ? el.getAttribute('href') : (nav + '.html');
|
||||||
|
var rect = el && el.getBoundingClientRect();
|
||||||
|
// fallback: niente sidebar visibile → vai diretto
|
||||||
|
if (!el || !rect || rect.width === 0 || rect.height === 0) { window.location.href = href; return false; }
|
||||||
|
|
||||||
|
injectCss();
|
||||||
|
var ov = document.createElement('div'); ov.className = 'aria-guide-ov';
|
||||||
|
var spot = document.createElement('div'); spot.className = 'aria-guide-spot';
|
||||||
|
var ptr = document.createElement('div'); ptr.className = 'aria-guide-ptr';
|
||||||
|
ptr.innerHTML = '<svg viewBox="0 0 24 24" fill="#0066CC" stroke="#fff" stroke-width="1.2"><path d="M5 3l14 8-6 1.5L9.5 19 5 3z"/></svg>';
|
||||||
|
var coach = document.createElement('div'); coach.className = 'aria-guide-coach';
|
||||||
|
coach.innerHTML = 'Eccolo: <b>' + (label || nav) + '</b><br><span style="opacity:.85">È nel menu a sinistra. Vuoi che ti ci porti?</span>'
|
||||||
|
+ '<div class="row"><button class="aria-guide-x" type="button">Chiudi</button><button class="aria-guide-go" type="button">Vai →</button></div>';
|
||||||
|
|
||||||
|
document.body.appendChild(ov);
|
||||||
|
document.body.appendChild(spot);
|
||||||
|
document.body.appendChild(ptr);
|
||||||
|
document.body.appendChild(coach);
|
||||||
|
|
||||||
|
function place() {
|
||||||
|
var r = el.getBoundingClientRect();
|
||||||
|
spot.style.left = (r.left - 4) + 'px'; spot.style.top = (r.top - 4) + 'px';
|
||||||
|
spot.style.width = (r.width + 8) + 'px'; spot.style.height = (r.height + 8) + 'px';
|
||||||
|
ptr.style.left = (r.right - 6) + 'px'; ptr.style.top = (r.top + r.height / 2) + 'px';
|
||||||
|
var cTop = Math.min(r.top, window.innerHeight - 120);
|
||||||
|
coach.style.left = (r.right + 16) + 'px'; coach.style.top = Math.max(8, cTop) + 'px';
|
||||||
|
}
|
||||||
|
// pointer parte dal centro schermo poi va alla voce (animazione)
|
||||||
|
ptr.style.left = (window.innerWidth / 2) + 'px'; ptr.style.top = (window.innerHeight / 2) + 'px';
|
||||||
|
requestAnimationFrame(function () { requestAnimationFrame(place); });
|
||||||
|
|
||||||
|
ov.addEventListener('click', dismiss);
|
||||||
|
coach.querySelector('.aria-guide-x').addEventListener('click', dismiss);
|
||||||
|
coach.querySelector('.aria-guide-go').addEventListener('click', function () { window.location.href = href; });
|
||||||
|
document.addEventListener('keydown', onKey, true);
|
||||||
|
_open = [ov, spot, ptr, coach];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
window.AriaGuide = { pointTo: pointTo, matchDestination: matchDestination, dismiss: dismiss, DESTINATIONS: DESTINATIONS };
|
||||||
|
})();
|
||||||
@@ -136,7 +136,8 @@
|
|||||||
var cls = isActive ? 'active' : '';
|
var cls = isActive ? 'active' : '';
|
||||||
var aria = isActive ? ' aria-current="page"' : '';
|
var aria = isActive ? ' aria-current="page"' : '';
|
||||||
var spanI18n = item.i18nKey ? ' data-i18n="' + item.i18nKey + '"' : '';
|
var spanI18n = item.i18nKey ? ' data-i18n="' + item.i18nKey + '"' : '';
|
||||||
html += '<a href="' + biHref(item.href) + '" class="' + cls + '"' + aria + '>' +
|
var navKey = item.href.replace(/\.html$/, ''); // aggancio puntatore ARIA (aria-guide.js)
|
||||||
|
html += '<a href="' + biHref(item.href) + '" class="' + cls + '"' + aria + ' data-nav="' + navKey + '">' +
|
||||||
item.icon + '<span' + spanI18n + '>' + item.name + '</span>' +
|
item.icon + '<span' + spanI18n + '>' + item.name + '</span>' +
|
||||||
'</a>';
|
'</a>';
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -981,6 +981,15 @@ function switchLang(lang) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ── 1c. Inietta il modulo guida ARIA (puntatore/spotlight verso il menu) ──
|
||||||
|
if (!window.__ariaGuideLoaded) {
|
||||||
|
window.__ariaGuideLoaded = true;
|
||||||
|
var ag = document.createElement('script');
|
||||||
|
ag.src = 'js/aria-guide.js?v=20260624f';
|
||||||
|
ag.async = true;
|
||||||
|
document.body.appendChild(ag);
|
||||||
|
}
|
||||||
|
|
||||||
// ── 2. AI Chat FAB viola "ARIA" ─────────────────────────────────────────
|
// ── 2. AI Chat FAB viola "ARIA" ─────────────────────────────────────────
|
||||||
function ensureFab() {
|
function ensureFab() {
|
||||||
if (document.getElementById('ai-chat-fab')) return;
|
if (document.getElementById('ai-chat-fab')) return;
|
||||||
@@ -1165,6 +1174,23 @@ function switchLang(lang) {
|
|||||||
pending = false;
|
pending = false;
|
||||||
sessionStorage.setItem(STORAGE_KEY, JSON.stringify(history));
|
sessionStorage.setItem(STORAGE_KEY, JSON.stringify(history));
|
||||||
render();
|
render();
|
||||||
|
// Guida "Mostrami dov'è": se la domanda combacia con una voce di menu,
|
||||||
|
// offri il puntatore/spotlight verso la sidebar (porting TRPG aria-guide).
|
||||||
|
try {
|
||||||
|
var dest = (window.AriaGuide && AriaGuide.matchDestination) ? AriaGuide.matchDestination(text) : null;
|
||||||
|
if (dest) {
|
||||||
|
var msgsEl = document.getElementById('ai-chat-msgs');
|
||||||
|
if (msgsEl) {
|
||||||
|
var cta = document.createElement('button');
|
||||||
|
cta.type = 'button';
|
||||||
|
cta.style.cssText = 'margin:6px 0 2px;align-self:flex-start;background:#eef5ff;color:#0066CC;border:1px solid #b3d4f5;border-radius:10px;padding:7px 12px;font:600 13px system-ui;cursor:pointer';
|
||||||
|
cta.textContent = '📍 Mostrami dov’è: ' + dest.label;
|
||||||
|
cta.addEventListener('click', function () { if (window.AriaGuide) AriaGuide.pointTo(dest.nav, dest.label); });
|
||||||
|
msgsEl.appendChild(cta);
|
||||||
|
msgsEl.scrollTop = msgsEl.scrollHeight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) { /* guida opzionale */ }
|
||||||
}
|
}
|
||||||
|
|
||||||
fab.onclick = function () {
|
fab.onclick = function () {
|
||||||
|
|||||||
+2
-2
@@ -151,7 +151,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Stessa logica JS della pagina live (parita' funzionale assoluta, zero backend). -->
|
<!-- Stessa logica JS della pagina live (parita' funzionale assoluta, zero backend). -->
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
||||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI. -->
|
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI. -->
|
||||||
@@ -161,7 +161,7 @@
|
|||||||
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script src="/js/kb.js"></script>
|
<script src="/js/kb.js"></script>
|
||||||
|
|||||||
+1
-1
@@ -95,7 +95,7 @@
|
|||||||
|
|
||||||
<!-- Stessa logica della login attuale: ZERO modifiche backend -->
|
<!-- Stessa logica della login attuale: ZERO modifiche backend -->
|
||||||
<script src="js/api.js?v=20260631"></script>
|
<script src="js/api.js?v=20260631"></script>
|
||||||
<script src="js/common.js?v=20260624e"></script>
|
<script src="js/common.js?v=20260624f"></script>
|
||||||
<script>
|
<script>
|
||||||
if (api.isAuthenticated()) { window.location.href = 'dashboard.html'; }
|
if (api.isAuthenticated()) { window.location.href = 'dashboard.html'; }
|
||||||
|
|
||||||
|
|||||||
@@ -127,9 +127,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -168,9 +168,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -426,6 +426,6 @@ curl https://nis2.agile.software/api/services/status</pre>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script src="js/common.js?v=20260624e"></script>
|
<script src="js/common.js?v=20260624f"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -113,7 +113,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
||||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
||||||
riusando tutti gli helper di common.js (zero backend). -->
|
riusando tutti gli helper di common.js (zero backend). -->
|
||||||
@@ -123,7 +123,7 @@
|
|||||||
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -495,7 +495,7 @@
|
|||||||
|
|
||||||
<!-- Stessa logica della onboarding.html: ZERO modifiche backend -->
|
<!-- Stessa logica della onboarding.html: ZERO modifiche backend -->
|
||||||
<script src="js/api.js?v=20260631"></script>
|
<script src="js/api.js?v=20260631"></script>
|
||||||
<script src="js/common.js?v=20260624e"></script>
|
<script src="js/common.js?v=20260624f"></script>
|
||||||
<script>
|
<script>
|
||||||
// ── Auth check ──────────────────────────────────────────────────
|
// ── Auth check ──────────────────────────────────────────────────
|
||||||
if (!checkAuth()) throw new Error('Not authenticated');
|
if (!checkAuth()) throw new Error('Not authenticated');
|
||||||
|
|||||||
@@ -139,9 +139,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script src="/js/organigramma.js?v=20260617"></script>
|
<script src="/js/organigramma.js?v=20260617"></script>
|
||||||
|
|||||||
@@ -334,7 +334,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
||||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
||||||
riusando tutti gli helper di common.js (zero backend). -->
|
riusando tutti gli helper di common.js (zero backend). -->
|
||||||
@@ -344,7 +344,7 @@
|
|||||||
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
+2
-2
@@ -132,9 +132,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script src="/js/raci.js?v=20260619"></script>
|
<script src="/js/raci.js?v=20260619"></script>
|
||||||
|
|||||||
@@ -269,7 +269,7 @@
|
|||||||
|
|
||||||
<!-- Stessa logica della register.html: ZERO modifiche backend -->
|
<!-- Stessa logica della register.html: ZERO modifiche backend -->
|
||||||
<script src="js/api.js?v=20260631"></script>
|
<script src="js/api.js?v=20260631"></script>
|
||||||
<script src="js/common.js?v=20260624e"></script>
|
<script src="js/common.js?v=20260624f"></script>
|
||||||
<script>
|
<script>
|
||||||
if (api.isAuthenticated()) { window.location.href = 'dashboard.html'; }
|
if (api.isAuthenticated()) { window.location.href = 'dashboard.html'; }
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -444,7 +444,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
||||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
||||||
riusando tutti gli helper di common.js (zero backend). -->
|
riusando tutti gli helper di common.js (zero backend). -->
|
||||||
@@ -454,7 +454,7 @@
|
|||||||
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -142,9 +142,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
+2
-2
@@ -495,7 +495,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
||||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
||||||
riusando tutti gli helper di common.js (zero backend). -->
|
riusando tutti gli helper di common.js (zero backend). -->
|
||||||
@@ -505,7 +505,7 @@
|
|||||||
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -689,7 +689,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
||||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
||||||
riusando tutti gli helper di common.js (zero backend). -->
|
riusando tutti gli helper di common.js (zero backend). -->
|
||||||
@@ -699,7 +699,7 @@
|
|||||||
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -195,9 +195,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -192,9 +192,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -478,7 +478,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
||||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
||||||
riusando tutti gli helper di common.js (zero backend). -->
|
riusando tutti gli helper di common.js (zero backend). -->
|
||||||
@@ -488,7 +488,7 @@
|
|||||||
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260621sp"></script>
|
<script src="/js/i18n.js?v=20260621sp"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -293,7 +293,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
||||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
||||||
riusando tutti gli helper di common.js (zero backend). -->
|
riusando tutti gli helper di common.js (zero backend). -->
|
||||||
@@ -303,7 +303,7 @@
|
|||||||
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -208,7 +208,7 @@
|
|||||||
<!-- Report Detail Modal handled by common.js showModal -->
|
<!-- Report Detail Modal handled by common.js showModal -->
|
||||||
|
|
||||||
<script src="/js/api.js?v=20260631"></script>
|
<script src="/js/api.js?v=20260631"></script>
|
||||||
<script src="/js/common.js?v=20260624e"></script>
|
<script src="/js/common.js?v=20260624f"></script>
|
||||||
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
||||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
||||||
riusando tutti gli helper di common.js (zero backend). -->
|
riusando tutti gli helper di common.js (zero backend). -->
|
||||||
@@ -218,7 +218,7 @@
|
|||||||
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260624e"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -322,9 +322,9 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="js/api.js?v=20260631"></script>
|
<script src="js/api.js?v=20260631"></script>
|
||||||
<script src="js/common.js?v=20260624e"></script>
|
<script src="js/common.js?v=20260624f"></script>
|
||||||
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260624f"></script>
|
||||||
<script src="js/i18n.js?v=20260631"></script>
|
<script src="js/i18n.js?v=20260631"></script>
|
||||||
<script src="js/help.js?v=20260624e"></script>
|
<script src="js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
Reference in New Issue
Block a user