[DOCS] Epic C / C1 operativo — help + KB + cache-buster + v1.18.1

- help.js 'misure-requisiti': sezione 'Valutazione e stato di conformità' (stato per
  requisito, valutazione del rischio che parte vuota, copia procedure di default) + nota.
- KB AI: doc SYSTEM su valutazione conformità + procedure/rischi di default (uuid 92979c05).
- Cache-buster ?v=20260622 (35 pagine), version.json 1.18.1, SW cache nis2-shell-v1.18.1.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
DevEnv nis2-agile
2026-06-16 18:19:40 +02:00
co-authored by Claude Opus 4.8
parent 4570ce3ba1
commit 1f2d48df7c
38 changed files with 129 additions and 120 deletions
+2 -2
View File
@@ -70,8 +70,8 @@
</script> </script>
<!-- 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=20260621"></script> <script src="js/api.js?v=20260622"></script>
<script src="js/common.js?v=20260621"></script> <script src="js/common.js?v=20260622"></script>
<script src="js/common-bi.js?v=20260618"></script> <script src="js/common-bi.js?v=20260618"></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)
+4 -4
View File
@@ -152,8 +152,8 @@
</main> </main>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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). -->
@@ -164,8 +164,8 @@
} }
</script> </script>
<script src="/js/common-bi.js?v=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script> <script>
'use strict'; 'use strict';
const FUNC_LABELS = { const FUNC_LABELS = {
+4 -4
View File
@@ -1088,10 +1088,10 @@
</main> </main>
</div> </div>
<script src="js/api.js?v=20260621"></script> <script src="js/api.js?v=20260622"></script>
<script src="js/common.js?v=20260621"></script> <script src="js/common.js?v=20260622"></script>
<script src="js/i18n.js?v=20260621"></script> <script src="js/i18n.js?v=20260622"></script>
<script src="js/help.js?v=20260621"></script> <script src="js/help.js?v=20260622"></script>
<script> <script>
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
loadSidebar(); loadSidebar();
+4 -4
View File
@@ -154,8 +154,8 @@
</main> </main>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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). -->
@@ -166,8 +166,8 @@
} }
</script> </script>
<script src="/js/common-bi.js?v=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script> <script>
// ── Auth check ─────────────────────────────────────────── // ── Auth check ───────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
+4 -4
View File
@@ -366,8 +366,8 @@
</main> </main>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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). -->
@@ -378,8 +378,8 @@
} }
</script> </script>
<script src="/js/common-bi.js?v=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script> <script>
// ── Auth & Init ───────────────────────────────────────── // ── Auth & Init ─────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
+4 -4
View File
@@ -349,14 +349,14 @@
</main> </main>
</div> </div>
<script src="js/api.js?v=20260621"></script> <script src="js/api.js?v=20260622"></script>
<script src="js/common.js?v=20260621"></script> <script src="js/common.js?v=20260622"></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=20260618"></script> <script src="js/common-bi.js?v=20260618"></script>
<script src="js/i18n.js?v=20260621"></script> <script src="js/i18n.js?v=20260622"></script>
<script src="js/help.js?v=20260621"></script> <script src="js/help.js?v=20260622"></script>
<script> <script>
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
+4 -4
View File
@@ -183,12 +183,12 @@
</div> </div>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script src="/js/competenze.js?v=20260617"></script> <script src="/js/competenze.js?v=20260617"></script>
</body> </body>
</html> </html>
+3 -3
View File
@@ -382,8 +382,8 @@
</main> </main>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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). -->
@@ -394,7 +394,7 @@
} }
</script> </script>
<script src="/js/common-bi.js?v=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script> <script>
const SPRITE = '/vendor/bootstrap-italia/dist/svg/sprites.svg'; const SPRITE = '/vendor/bootstrap-italia/dist/svg/sprites.svg';
function ico(name, cls) { return `<svg class="ico ${cls||''}" aria-hidden="true"><use href="${SPRITE}#${name}"></use></svg>`; } function ico(name, cls) { return `<svg class="ico ${cls||''}" aria-hidden="true"><use href="${SPRITE}#${name}"></use></svg>`; }
+4 -4
View File
@@ -143,8 +143,8 @@
</main> </main>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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). -->
@@ -155,8 +155,8 @@
} }
</script> </script>
<script src="/js/common-bi.js?v=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script> <script>
// ── Auth check ─────────────────────────────────────────── // ── Auth check ───────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
+1 -1
View File
@@ -73,7 +73,7 @@
</script> </script>
<!-- Stessa logica della forgot-password.html: ZERO modifiche backend --> <!-- Stessa logica della forgot-password.html: ZERO modifiche backend -->
<script src="js/api.js?v=20260621"></script> <script src="js/api.js?v=20260622"></script>
<script> <script>
const form = document.getElementById('forgot-form'); const form = document.getElementById('forgot-form');
const err = document.getElementById('err'); const err = document.getElementById('err');
+4 -4
View File
@@ -1142,8 +1142,8 @@
</main> </main>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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>
@@ -1153,8 +1153,8 @@
} }
</script> </script>
<script src="/js/common-bi.js?v=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script> <script>
// La guida è accessibile anche da non autenticati (utile per onboarding) // La guida è accessibile anche da non autenticati (utile per onboarding)
// ma se sei loggato carichi sidebar + i18n normalmente. Stessa logica // ma se sei loggato carichi sidebar + i18n normalmente. Stessa logica
+4 -4
View File
@@ -351,8 +351,8 @@
</main> </main>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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). -->
@@ -363,8 +363,8 @@
} }
</script> </script>
<script src="/js/common-bi.js?v=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script> <script>
// ── Auth & Init ────────────────────────────────────────────── // ── Auth & Init ──────────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
+2 -2
View File
@@ -910,8 +910,8 @@ curl -H <span class="str">"X-API-Key: nis2_TUA_CHIAVE"</span> \
</main> </main>
<script src="js/common.js?v=20260621"></script> <script src="js/common.js?v=20260622"></script>
<script src="js/i18n.js?v=20260621"></script> <script src="js/i18n.js?v=20260622"></script>
<script> <script>
function showTab(id) { function showTab(id) {
document.querySelectorAll('.tab-btn').forEach((b, i) => { document.querySelectorAll('.tab-btn').forEach((b, i) => {
+4 -4
View File
@@ -184,8 +184,8 @@
</main> </main>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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). -->
@@ -196,8 +196,8 @@
} }
</script> </script>
<script src="/js/common-bi.js?v=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script src="/js/isms.js"></script> <script src="/js/isms.js"></script>
</body> </body>
</html> </html>
+9
View File
@@ -381,6 +381,15 @@ const HelpSystem = (function () {
'Con il selettore "Soggetto" scegli quale profilo applicare; con "nascondi non applicabili" mostri solo le righe pertinenti. Le viste "per misura" e "per area politica" mostrano gli stessi dati in due modi.' 'Con il selettore "Soggetto" scegli quale profilo applicare; con "nascondi non applicabili" mostri solo le righe pertinenti. Le viste "per misura" e "per area politica" mostrano gli stessi dati in due modi.'
] ]
}, },
{
heading: 'Valutazione e stato di conformità',
items: [
'Quando lavori nel contesto di un\'organizzazione, ogni requisito mostra una colonna <strong>Stato / Valutazione</strong>: ci clicchi sopra per registrare lo <strong>stato</strong> (da valutare, non applicabile, non conforme, parziale, conforme) e la <strong>valutazione del rischio</strong> (che parte vuota).',
'È da questa valutazione, requisito per requisito, e dall\'analisi degli stakeholder che <strong>emerge lo stato di conformità</strong> dell\'azienda: non serve un modulo "gap analysis" separato.',
'La valutazione è un dato della tua organizzazione (modificabile); la codifica del requisito, invece, resta intatta.',
'Le <strong>procedure di default</strong> associate ai requisiti vengono caricate automaticamente, al primo accesso, nel modulo <strong>Policy/Procedure</strong>, dove puoi personalizzarle o eliminarle.'
]
},
{ {
heading: 'Riferimenti normativi', heading: 'Riferimenti normativi',
items: [ items: [
+4 -4
View File
@@ -151,8 +151,8 @@
</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=20260621"></script> <script src="/js/common.js?v=20260622"></script>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></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. -->
<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>
@@ -162,8 +162,8 @@
} }
</script> </script>
<script src="/js/common-bi.js?v=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script src="/js/kb.js"></script> <script src="/js/kb.js"></script>
<script> <script>
// Gate auth + chrome come le altre pagine -bi. // Gate auth + chrome come le altre pagine -bi.
+1 -1
View File
@@ -515,7 +515,7 @@ body { background: var(--bg-main); }
<div id="toast"></div> <div id="toast"></div>
<script src="js/api.js?v=20260621"></script> <script src="js/api.js?v=20260622"></script>
<script> <script>
// ══════════════════════════════════════════════════════ // ══════════════════════════════════════════════════════
// CONFIG // CONFIG
+2 -2
View File
@@ -94,8 +94,8 @@
</script> </script>
<!-- Stessa logica della login attuale: ZERO modifiche backend --> <!-- Stessa logica della login attuale: ZERO modifiche backend -->
<script src="js/api.js?v=20260621"></script> <script src="js/api.js?v=20260622"></script>
<script src="js/common.js?v=20260621"></script> <script src="js/common.js?v=20260622"></script>
<script> <script>
if (api.isAuthenticated()) { window.location.href = 'dashboard.html'; } if (api.isAuthenticated()) { window.location.href = 'dashboard.html'; }
+5 -5
View File
@@ -6,7 +6,7 @@
<title>Misure e Requisiti - NIS2 Agile</title> <title>Misure e Requisiti - NIS2 Agile</title>
<!-- Bootstrap Italia v2.18.1 self-hostato (regola: MAI CDN). Caricato PRIMA di style.css. --> <!-- Bootstrap Italia v2.18.1 self-hostato (regola: MAI CDN). Caricato PRIMA di style.css. -->
<link rel="stylesheet" href="/vendor/bootstrap-italia/dist/css/bootstrap-italia.min.css"> <link rel="stylesheet" href="/vendor/bootstrap-italia/dist/css/bootstrap-italia.min.css">
<link rel="stylesheet" href="/css/style.css?v=20260621"> <link rel="stylesheet" href="/css/style.css?v=20260622">
<style> <style>
.mr-intro { background:#eff6ff; border-left:4px solid var(--primary,#2563eb); padding:14px 18px; border-radius:8px; margin-bottom:14px; font-size:.92rem; line-height:1.6; } .mr-intro { background:#eff6ff; border-left:4px solid var(--primary,#2563eb); padding:14px 18px; border-radius:8px; margin-bottom:14px; font-size:.92rem; line-height:1.6; }
.mr-note { font-size:.82rem; color:#92400e; background:#fffbeb; border:1px solid #fde68a; border-radius:8px; padding:10px 12px; margin:0 0 16px; } .mr-note { font-size:.82rem; color:#92400e; background:#fffbeb; border:1px solid #fde68a; border-radius:8px; padding:10px 12px; margin:0 0 16px; }
@@ -162,12 +162,12 @@
</div> </div>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script> <script>
'use strict'; 'use strict';
/* /*
+1 -1
View File
@@ -424,6 +424,6 @@ curl https://nis2.agile.software/api/services/status</pre>
</div> </div>
</div> </div>
<script src="js/common.js?v=20260621"></script> <script src="js/common.js?v=20260622"></script>
</body> </body>
</html> </html>
+4 -4
View File
@@ -112,8 +112,8 @@
</main> </main>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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). -->
@@ -124,8 +124,8 @@
} }
</script> </script>
<script src="/js/common-bi.js?v=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script> <script>
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
loadSidebar(); loadSidebar();
+2 -2
View File
@@ -494,8 +494,8 @@
</script> </script>
<!-- Stessa logica della onboarding.html: ZERO modifiche backend --> <!-- Stessa logica della onboarding.html: ZERO modifiche backend -->
<script src="js/api.js?v=20260621"></script> <script src="js/api.js?v=20260622"></script>
<script src="js/common.js?v=20260621"></script> <script src="js/common.js?v=20260622"></script>
<script> <script>
// ── Auth check ────────────────────────────────────────────────── // ── Auth check ──────────────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
+4 -4
View File
@@ -138,12 +138,12 @@
</div> </div>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script src="/js/organigramma.js?v=20260617"></script> <script src="/js/organigramma.js?v=20260617"></script>
</body> </body>
</html> </html>
+4 -4
View File
@@ -333,8 +333,8 @@
</main> </main>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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). -->
@@ -345,8 +345,8 @@
} }
</script> </script>
<script src="/js/common-bi.js?v=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script> <script>
// ── Auth & Init ───────────────────────────────────────── // ── Auth & Init ─────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
+4 -4
View File
@@ -131,12 +131,12 @@
</main> </main>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script src="/js/raci.js?v=20260619"></script> <script src="/js/raci.js?v=20260619"></script>
</body> </body>
</html> </html>
+2 -2
View File
@@ -268,8 +268,8 @@
</script> </script>
<!-- Stessa logica della register.html: ZERO modifiche backend --> <!-- Stessa logica della register.html: ZERO modifiche backend -->
<script src="js/api.js?v=20260621"></script> <script src="js/api.js?v=20260622"></script>
<script src="js/common.js?v=20260621"></script> <script src="js/common.js?v=20260622"></script>
<script> <script>
if (api.isAuthenticated()) { window.location.href = 'dashboard.html'; } if (api.isAuthenticated()) { window.location.href = 'dashboard.html'; }
+4 -4
View File
@@ -443,8 +443,8 @@
</main> </main>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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). -->
@@ -455,8 +455,8 @@
} }
</script> </script>
<script src="/js/common-bi.js?v=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script> <script>
// ── Auth & Init ───────────────────────────────────────── // ── Auth & Init ─────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
+4 -4
View File
@@ -141,12 +141,12 @@
</div> </div>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script> <script>
'use strict'; 'use strict';
/* /*
+4 -4
View File
@@ -494,8 +494,8 @@
</main> </main>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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). -->
@@ -506,8 +506,8 @@
} }
</script> </script>
<script src="/js/common-bi.js?v=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script> <script>
// ── Auth & Init ────────────────────────────────────────────── // ── Auth & Init ──────────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
+4 -4
View File
@@ -672,8 +672,8 @@
</main> </main>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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). -->
@@ -684,8 +684,8 @@
} }
</script> </script>
<script src="/js/common-bi.js?v=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script> <script>
// ── Auth check ─────────────────────────────────────────── // ── Auth check ───────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
+2 -2
View File
@@ -165,8 +165,8 @@
</main> </main>
</div> </div>
<script src="js/api.js?v=20260621"></script> <script src="js/api.js?v=20260622"></script>
<script src="js/common.js?v=20260621"></script> <script src="js/common.js?v=20260622"></script>
<script> <script>
// ── Auth check ─────────────────────────────────────────── // ── Auth check ───────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
+4 -4
View File
@@ -124,12 +124,12 @@
</div> </div>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script> <script>
'use strict'; 'use strict';
/* /*
+4 -4
View File
@@ -477,8 +477,8 @@
</main> </main>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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). -->
@@ -489,8 +489,8 @@
} }
</script> </script>
<script src="/js/common-bi.js?v=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script> <script>
// ── Auth & Init ───────────────────────────────────────── // ── Auth & Init ─────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
+1 -1
View File
@@ -13,7 +13,7 @@
* Il nome cache include la release: va BUMPATO ad ogni rilascio (vedi version.json), * Il nome cache include la release: va BUMPATO ad ogni rilascio (vedi version.json),
* cosi' activate elimina automaticamente la shell vecchia. * cosi' activate elimina automaticamente la shell vecchia.
*/ */
const CACHE = 'nis2-shell-v1.18.0'; const CACHE = 'nis2-shell-v1.18.1';
const PRECACHE = [ const PRECACHE = [
'/offline.html', '/offline.html',
+4 -4
View File
@@ -292,8 +292,8 @@
</main> </main>
</div> </div>
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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). -->
@@ -304,8 +304,8 @@
} }
</script> </script>
<script src="/js/common-bi.js?v=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script> <script>
// ── Auth & Init ───────────────────────────────────────── // ── Auth & Init ─────────────────────────────────────────
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
+1 -1
View File
@@ -1 +1 @@
{"version": "1.18.0", "build": "2026-06-16-v1.18.0", "date": "2026-06-16", "changelog": "Epic C / C1 - Elenco canonico Misure/Requisiti (Determinazione ACN 164179/2025) come tabelle di configurazione (mig.046: cfg_nis2_ambiti/misure/requisiti/procedure/rischi, 43 misure/116 requisiti/42 procedure/84 rischi, codifica autoritativa Simon). Nuova pagina misure-requisiti.html (sola lettura, vista per misura/per area, righe che si spengono per classe) + FrameworkController GET /framework/catalog. Help + i18n + sidebar (sezione Compliance). Additivo, nessuna modifica a dati esistenti."} {"version": "1.18.1", "build": "2026-06-16-v1.18.1", "date": "2026-06-16", "changelog": "Epic C / C1 operativo: valutazione/stato di conformità per requisito (org_requisito_state, mig.047) editabile dalla pagina Misure e Requisiti - da qui emerge la conformità (sostituisce Gap ACN); copia delle 42 procedure di default nel modulo Procedure al 1° accesso (mig.048, idempotente, org demo escluse). Help/KB aggiornati. Additivo."}
+4 -4
View File
@@ -207,8 +207,8 @@
<!-- Report Detail Modal handled by common.js showModal --> <!-- Report Detail Modal handled by common.js showModal -->
<script src="/js/api.js?v=20260621"></script> <script src="/js/api.js?v=20260622"></script>
<script src="/js/common.js?v=20260621"></script> <script src="/js/common.js?v=20260622"></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). -->
@@ -219,8 +219,8 @@
} }
</script> </script>
<script src="/js/common-bi.js?v=20260618"></script> <script src="/js/common-bi.js?v=20260618"></script>
<script src="/js/i18n.js?v=20260621"></script> <script src="/js/i18n.js?v=20260622"></script>
<script src="/js/help.js?v=20260621"></script> <script src="/js/help.js?v=20260622"></script>
<script> <script>
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
loadSidebar(); loadSidebar();
+3 -3
View File
@@ -319,9 +319,9 @@
</main> </main>
</div> </div>
<script src="js/api.js?v=20260621"></script> <script src="js/api.js?v=20260622"></script>
<script src="js/common.js?v=20260621"></script> <script src="js/common.js?v=20260622"></script>
<script src="js/i18n.js?v=20260621"></script> <script src="js/i18n.js?v=20260622"></script>
<script> <script>
if (!checkAuth()) throw new Error('Not authenticated'); if (!checkAuth()) throw new Error('Not authenticated');
loadSidebar(); loadSidebar();