[FEAT] ARIA allineata all'Help contestuale della pagina + pageId canonico (Fase A)
Lamentela: "AI non allineata con help online e contesto". Causa: ARIA e Help erano due fonti separate (Help=help.js, ARIA=KB) → divergevano. Fix (fonte unica = help.js, zero duplicazione): - help.js: getContextText(pageId) (testo piano dell'help della pagina) + detectPageId(). - common.js: invia page_id (canonico) + page_help (stesso testo del pannello "?") a /api/ai/ask. - AiController: passa page_id/page_help in userContext. - AIService::askWithRag: inietta "GUIDA CONTESTUALE DELLA PAGINA" nel system prompt (ARIA si allinea all'help mostrato all'utente, non lo contraddice) + usa page_id per il trigger relevanceGrid (più robusto del title). Smoke: ARIA cita "registro dei rischi" dall'help + "Gestione > Rischi". Cache-buster common.js/help.js -> 20260624e (39 pagine). 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
3b9f30a890
commit
bafc305503
@@ -42,11 +42,16 @@ class AiController extends BaseController
|
|||||||
// Pagina corrente (facoltativa) inviata dal frontend, per dare ad ARIA
|
// Pagina corrente (facoltativa) inviata dal frontend, per dare ad ARIA
|
||||||
// contesto sulla schermata da cui l'utente sta scrivendo (ticket #424).
|
// contesto sulla schermata da cui l'utente sta scrivendo (ticket #424).
|
||||||
$page = mb_substr(trim((string) $this->getParam('page', '')), 0, 120);
|
$page = mb_substr(trim((string) $this->getParam('page', '')), 0, 120);
|
||||||
|
// pageId canonico + testo dell'help "?" della pagina (allineamento ARIA↔Help).
|
||||||
|
$pageId = mb_substr(trim((string) $this->getParam('page_id', '')), 0, 40);
|
||||||
|
$pageHelp = mb_substr(trim((string) $this->getParam('page_help', '')), 0, 2500);
|
||||||
$userContext = [
|
$userContext = [
|
||||||
'user_id' => $userId,
|
'user_id' => $userId,
|
||||||
'organization_id' => $this->getCurrentOrgId(), // può essere null
|
'organization_id' => $this->getCurrentOrgId(), // può essere null
|
||||||
'consulting_firm_id' => $user['consulting_firm_id'] ?? null,
|
'consulting_firm_id' => $user['consulting_firm_id'] ?? null,
|
||||||
'page' => $page,
|
'page' => $page,
|
||||||
|
'page_id' => $pageId,
|
||||||
|
'page_help' => $pageHelp,
|
||||||
];
|
];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -760,17 +760,29 @@ PROMPT;
|
|||||||
// Pagina corrente dell'utente (se inviata dal frontend): aiuta ARIA a
|
// Pagina corrente dell'utente (se inviata dal frontend): aiuta ARIA a
|
||||||
// dare indicazioni contestuali invece di rimandare a moduli a caso.
|
// dare indicazioni contestuali invece di rimandare a moduli a caso.
|
||||||
$page = trim((string) ($userContext['page'] ?? ''));
|
$page = trim((string) ($userContext['page'] ?? ''));
|
||||||
if ($page !== '') {
|
$pageId = trim((string) ($userContext['page_id'] ?? ''));
|
||||||
|
if ($page !== '' || $pageId !== '') {
|
||||||
$systemPrompt .= "\n## CONTESTO UTENTE\n"
|
$systemPrompt .= "\n## CONTESTO UTENTE\n"
|
||||||
. "L'utente si trova attualmente nella pagina: \"" . $page . "\". "
|
. "L'utente si trova attualmente nella pagina: \"" . ($page !== '' ? $page : $pageId) . "\""
|
||||||
|
. ($pageId !== '' ? " (id: {$pageId})" : '') . ". "
|
||||||
. "Tieni conto di dove si trova quando dai indicazioni di navigazione.\n";
|
. "Tieni conto di dove si trova quando dai indicazioni di navigazione.\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ALLINEAMENTO ARIA ↔ HELP: inietta il testo dell'help contestuale "?" della
|
||||||
|
// pagina corrente (stessa fonte help.js che l'utente vede) così le risposte
|
||||||
|
// sono coerenti con la guida e non divergono. Fonte autorevole per la pagina.
|
||||||
|
$pageHelp = trim((string) ($userContext['page_help'] ?? ''));
|
||||||
|
if ($pageHelp !== '') {
|
||||||
|
$systemPrompt .= "\n## GUIDA CONTESTUALE DELLA PAGINA (stesso testo dell'help «?» che l'utente vede ora)\n"
|
||||||
|
. "Allinea le tue risposte a questa guida: è la fonte ufficiale per la pagina corrente; non contraddirla.\n"
|
||||||
|
. $pageHelp . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
// Se l'utente e' nell'Inventario o la domanda riguarda la valutazione di
|
// Se l'utente e' nell'Inventario o la domanda riguarda la valutazione di
|
||||||
// rilevanza NIS2, inietta la griglia ESATTA delle combo (fonte di verita'
|
// rilevanza NIS2, inietta la griglia ESATTA delle combo (fonte di verita'
|
||||||
// AssetScoringService::GRID) per evitare risposte non corrispondenti alla
|
// AssetScoringService::GRID) per evitare risposte non corrispondenti alla
|
||||||
// finestra reale (ticket #429).
|
// finestra reale (ticket #429).
|
||||||
$onInventory = stripos($page, 'asset') !== false || stripos($page, 'inventario') !== false;
|
$onInventory = $pageId === 'assets' || stripos($page, 'asset') !== false || stripos($page, 'inventario') !== false;
|
||||||
if ($onInventory || preg_match('/rilevanz|combo|criticit|punteggio|scoring|valutazione|gv\.?oc/iu', $question)) {
|
if ($onInventory || preg_match('/rilevanz|combo|criticit|punteggio|scoring|valutazione|gv\.?oc/iu', $question)) {
|
||||||
$systemPrompt .= $this->relevanceGridBlock();
|
$systemPrompt .= $this->relevanceGridBlock();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
|
|
||||||
<!-- 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=20260624"></script>
|
<script src="js/common.js?v=20260624e"></script>
|
||||||
<script src="js/common-bi.js?v=20260631"></script>
|
<script src="js/common-bi.js?v=20260631"></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)
|
||||||
|
|||||||
@@ -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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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). -->
|
||||||
|
|||||||
@@ -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=20260624"></script>
|
<script src="../js/common.js?v=20260624e"></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). -->
|
||||||
|
|||||||
@@ -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=20260624"></script>
|
<script src="../js/common.js?v=20260624e"></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). -->
|
||||||
|
|||||||
@@ -1091,11 +1091,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=20260624"></script>
|
<script src="js/common.js?v=20260624e"></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=20260631"></script>
|
||||||
<script src="js/i18n.js?v=20260631"></script>
|
<script src="js/i18n.js?v=20260631"></script>
|
||||||
<script src="js/help.js?v=20260618p2"></script>
|
<script src="js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
if (!checkAuth()) throw new Error('Not authenticated');
|
if (!checkAuth()) throw new Error('Not authenticated');
|
||||||
loadSidebar();
|
loadSidebar();
|
||||||
|
|||||||
@@ -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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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). -->
|
||||||
@@ -167,7 +167,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
// ── Auth check ───────────────────────────────────────────
|
// ── Auth check ───────────────────────────────────────────
|
||||||
if (!checkAuth()) throw new Error('Not authenticated');
|
if (!checkAuth()) throw new Error('Not authenticated');
|
||||||
|
|||||||
+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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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). -->
|
||||||
@@ -374,7 +374,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
// ── Auth & Init ─────────────────────────────────────────
|
// ── Auth & Init ─────────────────────────────────────────
|
||||||
if (!checkAuth()) throw new Error('Not authenticated');
|
if (!checkAuth()) throw new Error('Not authenticated');
|
||||||
|
|||||||
@@ -152,11 +152,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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -350,13 +350,13 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="js/api.js?v=20260631"></script>
|
<script src="js/api.js?v=20260631"></script>
|
||||||
<script src="js/common.js?v=20260624"></script>
|
<script src="js/common.js?v=20260624e"></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=20260631"></script>
|
||||||
<script src="js/i18n.js?v=20260631"></script>
|
<script src="js/i18n.js?v=20260631"></script>
|
||||||
<script src="js/help.js?v=20260618p2"></script>
|
<script src="js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
if (!checkAuth()) throw new Error('Not authenticated');
|
if (!checkAuth()) throw new Error('Not authenticated');
|
||||||
|
|
||||||
|
|||||||
@@ -184,11 +184,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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></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>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -137,11 +137,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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
/* Controlli periodici (control monitoring §9.1/A.8.16): controlli ricorrenti + esecuzioni (evidenza) + NC/AC. */
|
/* Controlli periodici (control monitoring §9.1/A.8.16): controlli ricorrenti + esecuzioni (evidenza) + NC/AC. */
|
||||||
|
|||||||
@@ -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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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). -->
|
||||||
|
|||||||
@@ -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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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). -->
|
||||||
@@ -156,7 +156,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
// ── Auth check ───────────────────────────────────────────
|
// ── Auth check ───────────────────────────────────────────
|
||||||
if (!checkAuth()) throw new Error('Not authenticated');
|
if (!checkAuth()) throw new Error('Not authenticated');
|
||||||
|
|||||||
+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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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>
|
||||||
@@ -1154,7 +1154,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></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
|
||||||
|
|||||||
@@ -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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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). -->
|
||||||
@@ -364,7 +364,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
// ── Auth & Init ──────────────────────────────────────────────
|
// ── Auth & Init ──────────────────────────────────────────────
|
||||||
if (!checkAuth()) throw new Error('Not authenticated');
|
if (!checkAuth()) throw new Error('Not authenticated');
|
||||||
|
|||||||
@@ -912,7 +912,7 @@ curl -H <span class="str">"X-API-Key: nis2_TUA_CHIAVE"</span> \
|
|||||||
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="js/common.js?v=20260624"></script>
|
<script src="js/common.js?v=20260624e"></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,11 +140,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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
/*
|
/*
|
||||||
|
|||||||
+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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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). -->
|
||||||
@@ -197,7 +197,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260620b"></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>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+10
-1
@@ -1132,6 +1132,15 @@ function switchLang(lang) {
|
|||||||
// Pagina corrente: aiuta ARIA a dare indicazioni contestuali (ticket #424).
|
// Pagina corrente: aiuta ARIA a dare indicazioni contestuali (ticket #424).
|
||||||
var pageName = (document.title || '').replace(/\s*[—|·-]\s*NIS2.*$/i, '').trim()
|
var pageName = (document.title || '').replace(/\s*[—|·-]\s*NIS2.*$/i, '').trim()
|
||||||
|| (location.pathname.split('/').pop() || '');
|
|| (location.pathname.split('/').pop() || '');
|
||||||
|
// pageId canonico + testo dell'help "?" della pagina → ARIA risponde
|
||||||
|
// ALLINEATA a ciò che l'utente vede nella guida (fonte unica help.js).
|
||||||
|
var pageId = '', pageHelp = '';
|
||||||
|
try {
|
||||||
|
if (typeof HelpSystem !== 'undefined') {
|
||||||
|
if (HelpSystem.detectPageId) pageId = HelpSystem.detectPageId() || '';
|
||||||
|
if (HelpSystem.getContextText) pageHelp = HelpSystem.getContextText(pageId) || '';
|
||||||
|
}
|
||||||
|
} catch (e) { /* help non disponibile → ARIA prosegue senza */ }
|
||||||
var r = await fetch('/api/ai/ask', {
|
var r = await fetch('/api/ai/ask', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
@@ -1139,7 +1148,7 @@ function switchLang(lang) {
|
|||||||
'Authorization': t ? ('Bearer ' + t) : '',
|
'Authorization': t ? ('Bearer ' + t) : '',
|
||||||
'X-Organization-Id': orgId
|
'X-Organization-Id': orgId
|
||||||
},
|
},
|
||||||
body: JSON.stringify({ question: text, history: history, page: pageName })
|
body: JSON.stringify({ question: text, history: history, page: pageName, page_id: pageId, page_help: pageHelp })
|
||||||
});
|
});
|
||||||
var resp = await r.json();
|
var resp = await r.json();
|
||||||
var answer = (resp && resp.success && resp.data
|
var answer = (resp && resp.success && resp.data
|
||||||
|
|||||||
+39
-1
@@ -1859,6 +1859,42 @@ const HelpSystem = (function () {
|
|||||||
'</span>';
|
'</span>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Versione testo-piano del contenuto di help della pagina (per ARIA).
|
||||||
|
* Stessa fonte del pannello "?" → l'AI resta ALLINEATA all'help mostrato all'utente.
|
||||||
|
* @param {string} [pageId] - se assente, rileva la pagina corrente.
|
||||||
|
* @param {number} [maxLen] - cap caratteri (default 2200).
|
||||||
|
* @returns {string} testo piano, '' se la pagina non ha help.
|
||||||
|
*/
|
||||||
|
function _stripHtml(s) {
|
||||||
|
return String(s || '')
|
||||||
|
.replace(/<[^>]+>/g, '')
|
||||||
|
.replace(/</g, '<').replace(/>/g, '>').replace(/&/g, '&')
|
||||||
|
.replace(/≥/g, '≥').replace(/≤/g, '≤').replace(/ /g, ' ')
|
||||||
|
.replace(/\s+/g, ' ').trim();
|
||||||
|
}
|
||||||
|
function getContextText(pageId, maxLen) {
|
||||||
|
if (!pageId) pageId = _detectPage();
|
||||||
|
var d = pageId && _helpContent[pageId];
|
||||||
|
if (!d) return '';
|
||||||
|
var out = [];
|
||||||
|
if (d.title) out.push(_stripHtml(d.title).replace(/^Guida\s*-\s*/i, '').trim());
|
||||||
|
if (d.intro) out.push(_stripHtml(d.intro));
|
||||||
|
(d.sections || []).forEach(function (s) {
|
||||||
|
var items = (s.items || []).map(_stripHtml).join(' ');
|
||||||
|
out.push(('• ' + (s.heading || '') + ': ' + items).trim());
|
||||||
|
});
|
||||||
|
if (d.references && d.references.length) {
|
||||||
|
out.push('Riferimenti: ' + d.references.map(_stripHtml).join('; '));
|
||||||
|
}
|
||||||
|
var txt = out.join('\n');
|
||||||
|
maxLen = maxLen || 2200;
|
||||||
|
if (txt.length > maxLen) txt = txt.slice(0, maxLen) + '…';
|
||||||
|
return txt;
|
||||||
|
}
|
||||||
|
/** pageId canonico della pagina corrente (o '' se non mappata). */
|
||||||
|
function detectPageId() { return _detectPage() || ''; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inizializza il sistema di help: inietta gli stili e aggiunge il pulsante help
|
* Inizializza il sistema di help: inietta gli stili e aggiunge il pulsante help
|
||||||
* nell'header della pagina corrente (se applicabile).
|
* nell'header della pagina corrente (se applicabile).
|
||||||
@@ -1883,7 +1919,9 @@ const HelpSystem = (function () {
|
|||||||
showHelp: showHelp,
|
showHelp: showHelp,
|
||||||
addHelpButton: addHelpButton,
|
addHelpButton: addHelpButton,
|
||||||
inlineHelp: inlineHelp,
|
inlineHelp: inlineHelp,
|
||||||
getAvailablePages: getAvailablePages
|
getAvailablePages: getAvailablePages,
|
||||||
|
getContextText: getContextText, // testo help della pagina per ARIA (allineamento)
|
||||||
|
detectPageId: detectPageId // pageId canonico corrente
|
||||||
};
|
};
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|||||||
+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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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. -->
|
||||||
@@ -163,7 +163,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></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
@@ -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=20260624"></script>
|
<script src="js/common.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
if (api.isAuthenticated()) { window.location.href = 'dashboard.html'; }
|
if (api.isAuthenticated()) { window.location.href = 'dashboard.html'; }
|
||||||
|
|
||||||
|
|||||||
@@ -127,11 +127,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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -168,11 +168,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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -426,6 +426,6 @@ curl https://nis2.agile.software/api/services/status</pre>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script src="js/common.js?v=20260624"></script>
|
<script src="js/common.js?v=20260624e"></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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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). -->
|
||||||
@@ -125,7 +125,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
if (!checkAuth()) throw new Error('Not authenticated');
|
if (!checkAuth()) throw new Error('Not authenticated');
|
||||||
loadSidebar();
|
loadSidebar();
|
||||||
|
|||||||
@@ -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=20260624"></script>
|
<script src="js/common.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
// ── Auth check ──────────────────────────────────────────────────
|
// ── Auth check ──────────────────────────────────────────────────
|
||||||
if (!checkAuth()) throw new Error('Not authenticated');
|
if (!checkAuth()) throw new Error('Not authenticated');
|
||||||
|
|||||||
@@ -139,11 +139,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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></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>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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). -->
|
||||||
@@ -346,7 +346,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
// ── Auth & Init ─────────────────────────────────────────
|
// ── Auth & Init ─────────────────────────────────────────
|
||||||
if (!checkAuth()) throw new Error('Not authenticated');
|
if (!checkAuth()) throw new Error('Not authenticated');
|
||||||
|
|||||||
+2
-2
@@ -132,11 +132,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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></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>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -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=20260624"></script>
|
<script src="js/common.js?v=20260624e"></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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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). -->
|
||||||
@@ -456,7 +456,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
// ── Auth & Init ─────────────────────────────────────────
|
// ── Auth & Init ─────────────────────────────────────────
|
||||||
if (!checkAuth()) throw new Error('Not authenticated');
|
if (!checkAuth()) throw new Error('Not authenticated');
|
||||||
|
|||||||
@@ -142,11 +142,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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
/*
|
/*
|
||||||
|
|||||||
+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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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). -->
|
||||||
@@ -507,7 +507,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
// ── Auth & Init ──────────────────────────────────────────────
|
// ── Auth & Init ──────────────────────────────────────────────
|
||||||
if (!checkAuth()) throw new Error('Not authenticated');
|
if (!checkAuth()) throw new Error('Not authenticated');
|
||||||
|
|||||||
@@ -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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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). -->
|
||||||
@@ -701,7 +701,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260620c"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
// ── Auth check ───────────────────────────────────────────
|
// ── Auth check ───────────────────────────────────────────
|
||||||
if (!checkAuth()) throw new Error('Not authenticated');
|
if (!checkAuth()) throw new Error('Not authenticated');
|
||||||
|
|||||||
@@ -195,11 +195,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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -192,11 +192,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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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). -->
|
||||||
@@ -490,7 +490,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260621sp"></script>
|
<script src="/js/i18n.js?v=20260621sp"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
// ── Auth & Init ─────────────────────────────────────────
|
// ── Auth & Init ─────────────────────────────────────────
|
||||||
if (!checkAuth()) throw new Error('Not authenticated');
|
if (!checkAuth()) throw new Error('Not authenticated');
|
||||||
|
|||||||
@@ -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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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). -->
|
||||||
@@ -305,7 +305,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
// ── Auth & Init ─────────────────────────────────────────
|
// ── Auth & Init ─────────────────────────────────────────
|
||||||
if (!checkAuth()) throw new Error('Not authenticated');
|
if (!checkAuth()) throw new Error('Not authenticated');
|
||||||
|
|||||||
@@ -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=20260624"></script>
|
<script src="/js/common.js?v=20260624e"></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). -->
|
||||||
@@ -220,7 +220,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="/js/common-bi.js?v=20260631"></script>
|
<script src="/js/common-bi.js?v=20260631"></script>
|
||||||
<script src="/js/i18n.js?v=20260631"></script>
|
<script src="/js/i18n.js?v=20260631"></script>
|
||||||
<script src="/js/help.js?v=20260618p2"></script>
|
<script src="/js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
if (!checkAuth()) throw new Error('Not authenticated');
|
if (!checkAuth()) throw new Error('Not authenticated');
|
||||||
loadSidebar();
|
loadSidebar();
|
||||||
|
|||||||
@@ -322,11 +322,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=20260624"></script>
|
<script src="js/common.js?v=20260624e"></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=20260631"></script>
|
||||||
<script src="js/i18n.js?v=20260631"></script>
|
<script src="js/i18n.js?v=20260631"></script>
|
||||||
<script src="js/help.js?v=20260618p2"></script>
|
<script src="js/help.js?v=20260624e"></script>
|
||||||
<script>
|
<script>
|
||||||
if (!checkAuth()) throw new Error('Not authenticated');
|
if (!checkAuth()) throw new Error('Not authenticated');
|
||||||
loadSidebar();
|
loadSidebar();
|
||||||
|
|||||||
Reference in New Issue
Block a user