[UI] SWAP V2: Bootstrap Italia ora UFFICIALE su 27 pagine app (kill della vecchia UI)
Promosse le pagine -bi a nomi ufficiali (contenuto BI), link -bi->plain, titoli '(BI)' rimossi.
La vecchia UI delle pagine app e sostituita. Backup: git (commit 36967f9) + /tmp/nis2-v1-backup.
Promosse (27): auth (login/register/onboarding/forgot/reset) + app (dashboard/assessment/
risks/incidents/policies/supply-chain/training/assets/reports/settings/isms/acn-gap/normative/
whistleblowing/kb/cross-analysis/service-continuity/guida/companies) + admin (index/orgs/users).
common-bi.js: sidebar BI ora linka le pagine ufficiali.
ESCLUSA: index.html (landing marketing 1298 righe) -> conversione dedicata a parte (la -bi
era 557 righe, rischio perdita contenuti). Pagine marketing/demo (presentation/simulate/
workflow/architecture/index-en) restano vecchio stile (fuori scope app autenticata).
Verifica produzione: 27/27 servite 200 con BI, 0 link -bi residui, 0 '(BI)' nei titoli,
auth intatta (401 su pwd errata), common-bi.js node --check OK.
Rollback: git revert HEAD (oppure ripristino da /tmp/nis2-v1-backup).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
36967f9452
commit
1c64211685
+24
-10
@@ -4,6 +4,10 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Policy - NIS2 Agile</title>
|
||||
<!-- Bootstrap Italia v2.18.1 self-hostato (regola: MAI CDN). Caricato PRIMA di style.css
|
||||
cosi' style.css (design system esistente) resta autorevole per i widget renderizzati
|
||||
via JS (tabelle/editor/modali) -> parita' funzionale assoluta. BI veste la chrome. -->
|
||||
<link rel="stylesheet" href="/vendor/bootstrap-italia/dist/css/bootstrap-italia.min.css">
|
||||
<link rel="stylesheet" href="/css/style.css">
|
||||
<style>
|
||||
/* ── Policy Page Styles ──────────────────────────────────── */
|
||||
@@ -242,7 +246,7 @@
|
||||
|
||||
<main class="main-content">
|
||||
<header class="content-header">
|
||||
<h2 data-i18n="policies.title">Gestione Policy</h2>
|
||||
<h1 class="h2" data-i18n="policies.title">Gestione Policy</h1>
|
||||
<div class="content-header-actions">
|
||||
<button class="btn btn-outline" onclick="openAIGenerateModal()">
|
||||
<svg viewBox="0 0 20 20" fill="currentColor" width="16" height="16"><path d="M5 2a1 1 0 011 1v1h1a1 1 0 010 2H6v1a1 1 0 01-2 0V6H3a1 1 0 010-2h1V3a1 1 0 011-1zm0 10a1 1 0 011 1v1h1a1 1 0 110 2H6v1a1 1 0 11-2 0v-1H3a1 1 0 110-2h1v-1a1 1 0 011-1zm7-10a1 1 0 01.967.744L14.146 7.2 17.5 8.512a1 1 0 010 1.836l-3.354 1.311-1.18 4.456a1 1 0 01-1.932 0L9.854 11.66 6.5 10.348a1 1 0 010-1.836l3.354-1.311 1.18-4.456A1 1 0 0112 2z"/></svg>
|
||||
@@ -262,7 +266,7 @@
|
||||
<!-- Tab: Lista Policy -->
|
||||
<div class="tab-content active" id="tab-list">
|
||||
<div class="filters-bar">
|
||||
<select class="form-select" id="filter-category" onchange="loadPolicies()">
|
||||
<select class="form-select" id="filter-category" onchange="loadPolicies()" aria-label="Filtra per categoria">
|
||||
<option value="">Tutte le Categorie</option>
|
||||
<option value="information_security">Sicurezza Informazioni</option>
|
||||
<option value="access_control">Controllo Accessi</option>
|
||||
@@ -275,7 +279,7 @@
|
||||
<option value="network_security">Sicurezza Rete</option>
|
||||
<option value="vulnerability_management">Gestione Vulnerabilita'</option>
|
||||
</select>
|
||||
<select class="form-select" id="filter-status" onchange="loadPolicies()">
|
||||
<select class="form-select" id="filter-status" onchange="loadPolicies()" aria-label="Filtra per stato">
|
||||
<option value="">Tutti gli Stati</option>
|
||||
<option value="draft">Bozza</option>
|
||||
<option value="review">In Revisione</option>
|
||||
@@ -318,6 +322,16 @@
|
||||
|
||||
<script src="/js/api.js"></script>
|
||||
<script src="/js/common.js"></script>
|
||||
<!-- Bootstrap Italia bundle (componenti) + override sidebar BI (common-bi.js).
|
||||
common-bi.js va DOPO common.js: ridefinisce solo loadSidebar() con markup BI,
|
||||
riusando tutti gli helper di common.js (zero backend). -->
|
||||
<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 src="/js/common-bi.js"></script>
|
||||
<script src="/js/i18n.js"></script>
|
||||
<script src="/js/help.js"></script>
|
||||
<script>
|
||||
@@ -639,34 +653,34 @@
|
||||
const content = `
|
||||
<form id="policy-form" onsubmit="return false;">
|
||||
<div class="form-group">
|
||||
<label class="form-label">Titolo <span class="required">*</span></label>
|
||||
<label for="form-title" class="form-label">Titolo <span class="required">*</span></label>
|
||||
<input type="text" class="form-input" id="form-title" value="${isEdit ? escapeHtml(policy.title) : ''}" required placeholder="Inserisci il titolo della policy">
|
||||
</div>
|
||||
<div class="form-row" style="display:grid;grid-template-columns:1fr 1fr;gap:16px;">
|
||||
<div class="form-group">
|
||||
<label class="form-label">Categoria <span class="required">*</span></label>
|
||||
<label for="form-category" class="form-label">Categoria <span class="required">*</span></label>
|
||||
<select class="form-select" id="form-category" required>
|
||||
<option value="">Seleziona...</option>
|
||||
${categoryOptions}
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label">Articolo NIS2</label>
|
||||
<label for="form-nis2-article" class="form-label">Articolo NIS2</label>
|
||||
<input type="text" class="form-input" id="form-nis2-article" value="${isEdit && policy.nis2_article ? escapeHtml(policy.nis2_article) : ''}" placeholder="es. 21.2.a">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row" style="display:grid;grid-template-columns:1fr 1fr;gap:16px;">
|
||||
<div class="form-group">
|
||||
<label class="form-label">Versione</label>
|
||||
<label for="form-version" class="form-label">Versione</label>
|
||||
<input type="text" class="form-input" id="form-version" value="${isEdit && policy.version ? escapeHtml(policy.version) : '1.0'}" placeholder="1.0">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label">Prossima Revisione</label>
|
||||
<label for="form-review-date" class="form-label">Prossima Revisione</label>
|
||||
<input type="date" class="form-input" id="form-review-date" value="${isEdit && policy.next_review_date ? policy.next_review_date.substring(0, 10) : ''}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label">Contenuto</label>
|
||||
<label for="form-content" class="form-label">Contenuto</label>
|
||||
<textarea class="form-textarea" id="form-content" rows="12" placeholder="Inserisci il contenuto della policy... Puoi strutturare il documento con sezioni: 1. Scopo 2. Ambito 3. Responsabilita' 4. Procedure 5. Revisione">${isEdit && policy.content ? escapeHtml(policy.content) : ''}</textarea>
|
||||
</div>
|
||||
</form>
|
||||
@@ -806,7 +820,7 @@
|
||||
Il contenuto generato potra' essere rivisto e modificato prima della pubblicazione.
|
||||
</p>
|
||||
<div class="form-group">
|
||||
<label class="form-label">Categoria Policy <span class="required">*</span></label>
|
||||
<label for="ai-category" class="form-label">Categoria Policy <span class="required">*</span></label>
|
||||
<select class="form-select" id="ai-category">
|
||||
${categoryOptions}
|
||||
</select>
|
||||
|
||||
Reference in New Issue
Block a user