Files
nis2-agile/public/_bi-smoke.html
T
DevEnv nis2-agileandClaude Opus 4.8 4d676f2e21 [UI] Bootstrap Italia rollout (Opzione B) — vendor self-hostato + 16 pagine -bi + sidebar BI
Pipeline a trittici (Esecutore->Revisore->Controllore avversariale), 6 trittici T1-T6.
Tutto ADDITIVO: nessuna pagina/JS live modificata, produzione intatta. Swap non incluso.

- public/vendor/bootstrap-italia/ : BI v2.18.1 self-hostato (CSS+JS bundle+16 woff2+sprite), MAI CDN
- 16 pagine *-bi.html (login/register/onboarding/forgot/reset/index + dashboard/assessment/
  risks/incidents/policies/supply-chain/training/assets/reports/settings)
- public/js/common-bi.js : sidebar/topbar in markup BI (additivo, riusa stessi ID + common.js)
- Verifica sul path servito reale: 16/16 -> 200, 0 CDN, 0 FontAwesome residui, parita ID/hook completa, WCAG AA
- docs/SISTEMA_TRITTICI_AGENTI.md : design del sistema a trittici

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 13:31:53 +02:00

77 lines
3.5 KiB
HTML

<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bootstrap Italia self-host — smoke test</title>
<!-- SELF-HOSTED Bootstrap Italia v2.18.1 — asset LOCALI da /vendor, ZERO CDN -->
<link rel="stylesheet" href="/vendor/bootstrap-italia/dist/css/bootstrap-italia.min.css">
</head>
<body>
<main class="container py-4" id="main-content">
<h1 class="h3 mb-2">Bootstrap Italia — smoke test (self-host)</h1>
<p class="text-muted">
CSS, JS e font serviti localmente da <code>/vendor/bootstrap-italia/</code>.
Nessun riferimento a CDN.
</p>
<div class="alert alert-info" role="status" id="bi-status">
Verifica caricamento JS in corso...
</div>
<section aria-labelledby="form-title" class="mt-4">
<h2 class="h5" id="form-title">Form di prova</h2>
<form id="smoke-form" novalidate>
<div class="form-group">
<label for="smoke-input" class="active">Campo di prova</label>
<input type="text" id="smoke-input" name="smoke-input"
class="form-control" autocomplete="off"
aria-describedby="smoke-help">
<small id="smoke-help" class="form-text text-muted">
Esempio di <code>.form-control</code> Bootstrap Italia.
</small>
</div>
<button type="submit" class="btn btn-primary" id="smoke-btn">
Bottone primario
</button>
<button type="button" class="btn btn-outline-primary ms-2" id="smoke-icon-btn"
aria-label="Pulsante con icona di prova">
<svg class="icon icon-sm" aria-hidden="true">
<use href="/vendor/bootstrap-italia/dist/svg/sprites.svg#it-check-circle"></use>
</svg>
<span>Icona locale</span>
</button>
</form>
</section>
</main>
<!-- JS bundle LOCALE -->
<script src="/vendor/bootstrap-italia/dist/js/bootstrap-italia.bundle.min.js"></script>
<script>
// Carica i web font ufficiali (Titillium Web, Lora, Roboto Mono) — TUTTI LOCALI
(function () {
var statusEl = document.getElementById('bi-status');
if (window.bootstrap && typeof bootstrap.loadFonts === 'function') {
bootstrap.loadFonts('/vendor/bootstrap-italia/dist/fonts');
statusEl.className = 'alert alert-success';
statusEl.setAttribute('role', 'status');
statusEl.textContent = 'OK: Bootstrap Italia JS caricato dal vendor locale e bootstrap.loadFonts() invocato su /vendor/bootstrap-italia/dist/fonts.';
} else {
statusEl.className = 'alert alert-danger';
statusEl.setAttribute('role', 'alert');
statusEl.textContent = 'ERRORE: bootstrap.loadFonts non disponibile (JS non caricato).';
}
})();
document.getElementById('smoke-form').addEventListener('submit', function (e) {
e.preventDefault();
var s = document.getElementById('bi-status');
s.className = 'alert alert-success';
s.textContent = 'Form inviato (smoke): JS interattivo funzionante. Valore = "' +
document.getElementById('smoke-input').value + '"';
});
</script>
</body>
</html>