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>
77 lines
3.5 KiB
HTML
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>
|