Consolidate VG-Observe information architecture and workspace navigation
Dieser Commit ist enthalten in:
@@ -3,19 +3,18 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<title>VG-Observe Analyse-Dashboard</title>
|
<title>VG-Observe Analyse-Vorbereitung</title>
|
||||||
<link rel="stylesheet" href="analysis-dashboard.css">
|
<link rel="stylesheet" href="analysis-dashboard.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<main class="analysis-dashboard">
|
<main class="analysis-dashboard">
|
||||||
<header class="analysis-header">
|
<header class="analysis-header">
|
||||||
<a class="back-link" href="../dashboard/dashboard.html">Zurück zum Dashboard</a>
|
<a class="back-link" href="../dashboard/dashboard.html">Zurück zum Observe-Dashboard</a>
|
||||||
<h1>Analyse-Dashboard</h1>
|
<h1>Analyse-Vorbereitung</h1>
|
||||||
<p>
|
<p>
|
||||||
Diese Ansicht bereitet technische Prüfungen zwischen
|
Diese Ansicht ist noch keine Analyse-Engine. Sie zeigt vorhandene
|
||||||
Consent-Zuständen, Vendorlisten und beobachteten Requests vor.
|
Datenbestände und vorbereitet strukturierte Prüffelder für spätere
|
||||||
Aktuell werden nur vorhandene Datenbestände und vorbereitete
|
Auswertung, ohne Bewertung oder Zuordnung zu berechnen.
|
||||||
Analysebereiche angezeigt.
|
|
||||||
</p>
|
</p>
|
||||||
<div id="analysis-status" class="analysis-status" aria-live="polite">
|
<div id="analysis-status" class="analysis-status" aria-live="polite">
|
||||||
Lade Datenbestände
|
Lade Datenbestände
|
||||||
@@ -34,11 +33,11 @@
|
|||||||
<dd id="summary-observed-requests">-</dd>
|
<dd id="summary-observed-requests">-</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt>Lokal gespeicherte Vendorlisten</dt>
|
<dt>Lokal gespeicherte GVL-Referenzen</dt>
|
||||||
<dd id="summary-gvl-snapshots">-</dd>
|
<dd id="summary-gvl-snapshots">-</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt>Lokal aktuelle Vendorlisten-Version</dt>
|
<dt>Lokal aktuelle GVL-Referenzversion</dt>
|
||||||
<dd id="summary-current-gvl-version">-</dd>
|
<dd id="summary-current-gvl-version">-</dd>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
@@ -49,23 +48,23 @@
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="panel" aria-labelledby="areas-title">
|
<section class="panel" aria-labelledby="areas-title">
|
||||||
<h2 id="areas-title">Vorbereitete Analysebereiche</h2>
|
<h2 id="areas-title">Vorbereitete Prüffelder</h2>
|
||||||
<div class="area-grid">
|
<div class="area-grid">
|
||||||
<article>
|
<article>
|
||||||
<h3>Consent ↔ Vendorliste</h3>
|
<h3>Consent ↔ Vendorliste</h3>
|
||||||
<p>Analyse noch nicht ausgeführt.</p>
|
<p>Vorbereitung vorhanden, keine Analyse ausgeführt.</p>
|
||||||
</article>
|
</article>
|
||||||
<article>
|
<article>
|
||||||
<h3>Consent ↔ beobachtete Requests</h3>
|
<h3>Consent ↔ beobachtete Requests</h3>
|
||||||
<p>Analyse noch nicht ausgeführt.</p>
|
<p>Vorbereitung vorhanden, keine Analyse ausgeführt.</p>
|
||||||
</article>
|
</article>
|
||||||
<article>
|
<article>
|
||||||
<h3>Request-Hosts ↔ bekannte Vendoren</h3>
|
<h3>Request-Hosts ↔ bekannte Vendoren</h3>
|
||||||
<p>Keine erkennbare Zuordnung berechnet. Analyse noch nicht ausgeführt.</p>
|
<p>Keine Zuordnung berechnet. Vorbereitung vorhanden, keine Analyse ausgeführt.</p>
|
||||||
</article>
|
</article>
|
||||||
<article>
|
<article>
|
||||||
<h3>Potenziell erklärungsbedürftige technische Diskrepanzen</h3>
|
<h3>Potenziell erklärungsbedürftige technische Diskrepanzen</h3>
|
||||||
<p>Keine Bewertung vorgenommen. Analyse noch nicht ausgeführt.</p>
|
<p>Keine Bewertung vorgenommen. Vorbereitung vorhanden, keine Analyse ausgeführt.</p>
|
||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@@ -3,23 +3,23 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<title>VG-Observe Consent-Explorer</title>
|
<title>VG-Observe Consent untersuchen</title>
|
||||||
<link rel="stylesheet" href="consent-explorer.css">
|
<link rel="stylesheet" href="consent-explorer.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<main class="explorer">
|
<main class="explorer">
|
||||||
<header class="explorer-header">
|
<header class="explorer-header">
|
||||||
<a class="back-link" href="../dashboard/dashboard.html">Zurück zum Dashboard</a>
|
<a class="back-link" href="../dashboard/dashboard.html">Zurück zum Observe-Dashboard</a>
|
||||||
<h1>Dokumentierte Consent-Zustände</h1>
|
<h1>Consent untersuchen</h1>
|
||||||
<p class="section-help">
|
<p class="section-help">
|
||||||
Diese Ansicht zeigt gespeicherte Consent-Zustände aus der lokalen
|
Consent ist das zentrale Untersuchungsobjekt von VG-Observe. Diese
|
||||||
Beobachtungsdatenbank. Jeder Eintrag ist ein dokumentierter Zustand,
|
Ansicht zeigt lokal beobachtete Consent-Zustände und ihre technischen
|
||||||
den VG-Observe während der Browser-Laufzeit beobachtet hat.
|
Belege, ohne daraus eine Bewertung abzuleiten.
|
||||||
</p>
|
</p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<section class="panel" aria-labelledby="documented-consent-title">
|
<section class="panel" aria-labelledby="documented-consent-title">
|
||||||
<h2 id="documented-consent-title">Historische Consent-Zustände</h2>
|
<h2 id="documented-consent-title">Lokal beobachtete Consent-Zustände</h2>
|
||||||
<p id="documented-consent-empty" class="empty-state" hidden>
|
<p id="documented-consent-empty" class="empty-state" hidden>
|
||||||
Keine dokumentierten Consent-Zustände vorhanden.
|
Keine dokumentierten Consent-Zustände vorhanden.
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -127,14 +127,14 @@ th:last-child {
|
|||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.explorer-actions {
|
.workspace-actions {
|
||||||
display: flex;
|
display: grid;
|
||||||
flex-wrap: wrap;
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||||
gap: 10px;
|
gap: 10px;
|
||||||
margin-top: 14px;
|
margin-top: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-link,
|
.workspace-link,
|
||||||
button {
|
button {
|
||||||
padding: 8px 10px;
|
padding: 8px 10px;
|
||||||
border: 1px solid #475569;
|
border: 1px solid #475569;
|
||||||
@@ -145,12 +145,27 @@ button {
|
|||||||
background: #1f2937;
|
background: #1f2937;
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-link {
|
.workspace-link {
|
||||||
display: inline-flex;
|
display: grid;
|
||||||
align-items: center;
|
gap: 5px;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.workspace-link strong {
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-link span {
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 1.35;
|
||||||
|
color: #cbd5e1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-placeholder {
|
||||||
|
color: #cbd5e1;
|
||||||
|
background: #172033;
|
||||||
|
}
|
||||||
|
|
||||||
button:disabled {
|
button:disabled {
|
||||||
cursor: default;
|
cursor: default;
|
||||||
opacity: 0.65;
|
opacity: 0.65;
|
||||||
@@ -165,7 +180,8 @@ button:disabled {
|
|||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
}
|
}
|
||||||
|
|
||||||
.explorer-actions {
|
.workspace-actions {
|
||||||
display: grid;
|
display: grid;
|
||||||
|
grid-template-columns: 1fr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,26 +1,30 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="de">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<title>VendorGet-IV Evidence Dashboard</title>
|
<title>VG-Observe Dashboard</title>
|
||||||
<link rel="stylesheet" href="dashboard.css">
|
<link rel="stylesheet" href="dashboard.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<main class="dashboard">
|
<main class="dashboard">
|
||||||
<header class="dashboard-header">
|
<header class="dashboard-header">
|
||||||
<h1>VendorGet-IV Evidence Dashboard</h1>
|
<h1>VG-Observe Dashboard</h1>
|
||||||
<div id="dashboard-status" class="dashboard-status" aria-live="polite">
|
<div id="dashboard-status" class="dashboard-status" aria-live="polite">
|
||||||
Loading evidence status
|
Lade lokalen Beobachtungsstatus
|
||||||
</div>
|
</div>
|
||||||
<p class="dashboard-notice">
|
<p class="dashboard-notice">
|
||||||
Übersicht und Einstieg für VG-Observe. Detailansichten liegen in
|
Was wurde lokal beobachtet? Diese Übersicht zeigt den Workspace-
|
||||||
eigenen Explorern.
|
Bestand und führt zu den fachlichen Arbeitsansichten.
|
||||||
</p>
|
</p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<section class="panel" aria-labelledby="stores-title">
|
<section class="panel" aria-labelledby="stores-title">
|
||||||
<h2 id="stores-title">Evidence Stores</h2>
|
<h2 id="stores-title">Lokaler Evidence-Bestand</h2>
|
||||||
|
<p class="section-help">
|
||||||
|
Bestandsübersicht der lokal gespeicherten Beobachtungen und
|
||||||
|
Referenzdaten. Die Zahlen sind Inventar, keine Bewertung.
|
||||||
|
</p>
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -53,13 +57,47 @@
|
|||||||
</table>
|
</table>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="panel" aria-labelledby="official-gvl-title">
|
<section class="panel" aria-labelledby="workspaces-title">
|
||||||
<h2 id="official-gvl-title">Offizielle Vendorliste</h2>
|
<h2 id="workspaces-title">Arbeitsbereiche</h2>
|
||||||
<p class="section-help">
|
<p class="section-help">
|
||||||
Die aktuell offiziell abgerufene IAB-Europe-Vendorliste ist die
|
Oben verstehen, in der Mitte arbeiten, unten beweisen: Die
|
||||||
Version, die VG-Observe direkt von der offiziellen IAB-Europe-Quelle
|
Detailansichten trennen Untersuchung, technische Beobachtung,
|
||||||
geladen hat. Sie ist getrennt von der Vendorliste, die in einem
|
Referenz/Vault und Analyse-Vorbereitung.
|
||||||
konkreten Consent-Kontext gemeldet wurde.
|
</p>
|
||||||
|
<div class="workspace-actions">
|
||||||
|
<a class="workspace-link" href="../consent-explorer/consent-explorer.html">
|
||||||
|
<strong>Consent untersuchen</strong>
|
||||||
|
<span>Zentrale Ansicht für dokumentierte Consent-Zustände.</span>
|
||||||
|
</a>
|
||||||
|
<a class="workspace-link" href="../request-explorer/request-explorer.html">
|
||||||
|
<strong>Requests prüfen</strong>
|
||||||
|
<span>Technisch beobachtete Browser-Requests ohne Bewertung.</span>
|
||||||
|
</a>
|
||||||
|
<a class="workspace-link" href="../gvl-explorer/gvl-explorer.html">
|
||||||
|
<strong>GVL-Referenz/Vault</strong>
|
||||||
|
<span>Vendorlisten, Revision-Evidence und Vault-Transport.</span>
|
||||||
|
</a>
|
||||||
|
<a class="workspace-link" href="../analysis-dashboard/analysis-dashboard.html">
|
||||||
|
<strong>Analyse-Vorbereitung</strong>
|
||||||
|
<span>Datenbestände und vorbereitete Prüffelder, keine Engine.</span>
|
||||||
|
</a>
|
||||||
|
<article class="workspace-link workspace-placeholder">
|
||||||
|
<strong>Datenpflege</strong>
|
||||||
|
<span>
|
||||||
|
Gezielte Verwaltung lokaler Datenbestände. Löschen,
|
||||||
|
Wiederherstellen und Exportieren erfolgen künftig segmentbezogen.
|
||||||
|
Vorgesehene Segmente sind GVL-Referenzdaten der Browser-DB,
|
||||||
|
Consent-Daten, Analyse-Daten und weitere künftige Datenbereiche.
|
||||||
|
</span>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="panel" aria-labelledby="official-gvl-title">
|
||||||
|
<h2 id="official-gvl-title">GVL-Referenzstatus</h2>
|
||||||
|
<p class="section-help">
|
||||||
|
Die GVL ist Referenzbasis für spätere Rekonstruktion. Dieser Status
|
||||||
|
zeigt nur den lokalen Referenzbestand und letzte Update-Hinweise.
|
||||||
</p>
|
</p>
|
||||||
<dl class="gvl-status-grid">
|
<dl class="gvl-status-grid">
|
||||||
<div>
|
<div>
|
||||||
@@ -89,27 +127,6 @@
|
|||||||
</dl>
|
</dl>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="panel" aria-labelledby="explorers-title">
|
|
||||||
<h2 id="explorers-title">Explorer</h2>
|
|
||||||
<p class="section-help">
|
|
||||||
Historische Consent-Zustände und technische Belege werden in einer
|
|
||||||
eigenen Ansicht geöffnet.
|
|
||||||
</p>
|
|
||||||
<div class="explorer-actions">
|
|
||||||
<a class="button-link" href="../consent-explorer/consent-explorer.html">
|
|
||||||
Consent-Explorer öffnen
|
|
||||||
</a>
|
|
||||||
<a class="button-link" href="../gvl-explorer/gvl-explorer.html">
|
|
||||||
GVL-Explorer öffnen
|
|
||||||
</a>
|
|
||||||
<a class="button-link" href="../request-explorer/request-explorer.html">
|
|
||||||
Request-Explorer öffnen
|
|
||||||
</a>
|
|
||||||
<a class="button-link" href="../analysis-dashboard/analysis-dashboard.html">
|
|
||||||
Request-/Empfänger-Analyse öffnen
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script src="dashboard.js"></script>
|
<script src="dashboard.js"></script>
|
||||||
|
|||||||
@@ -40,9 +40,9 @@ async function renderEvidenceStatus() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
renderStoreCounts(status.storeCounts ?? {});
|
renderStoreCounts(status.storeCounts ?? {});
|
||||||
renderStatusMessage("Evidence status loaded");
|
renderStatusMessage("Lokaler Beobachtungsstatus geladen");
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
renderStatusMessage("Evidence status could not be loaded");
|
renderStatusMessage("Lokaler Beobachtungsstatus konnte nicht geladen werden");
|
||||||
console.warn("VendorGet-IV dashboard status failed", error);
|
console.warn("VendorGet-IV dashboard status failed", error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,32 +3,32 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<title>VG-Observe GVL-Explorer</title>
|
<title>VG-Observe GVL-Referenz/Vault</title>
|
||||||
<link rel="stylesheet" href="gvl-explorer.css">
|
<link rel="stylesheet" href="gvl-explorer.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<main class="explorer">
|
<main class="explorer">
|
||||||
<header class="explorer-header">
|
<header class="explorer-header">
|
||||||
<a class="back-link" href="../dashboard/dashboard.html">Zurück zum Dashboard</a>
|
<a class="back-link" href="../dashboard/dashboard.html">Zurück zum Observe-Dashboard</a>
|
||||||
<h1>GVL-Explorer</h1>
|
<h1>GVL-Referenz/Vault</h1>
|
||||||
<p class="section-help">
|
<p class="section-help">
|
||||||
Diese Ansicht zeigt lokal gespeicherte offizielle
|
Die GVL ist Referenzbasis und Evidence-Quelle für reproduzierbare
|
||||||
IAB-Europe-Vendorlisten. Sie dient dazu, historische
|
Rekonstruktion. Sie ist nicht das untersuchte Consent-Ereignis
|
||||||
Vendorlisten-Versionen nachvollziehbar zu machen.
|
selbst; Import, Export und Verifikation sichern den Referenzbestand.
|
||||||
</p>
|
</p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<section class="panel" aria-labelledby="snapshot-list-title">
|
<section class="panel" aria-labelledby="snapshot-list-title">
|
||||||
<h2 id="snapshot-list-title">Gespeicherte Vendorlisten</h2>
|
<h2 id="snapshot-list-title">GVL-Revisionen im Workspace</h2>
|
||||||
<div class="fetch-actions">
|
<div class="fetch-actions">
|
||||||
<button id="gvl-fetch-official-button" type="button">
|
<button id="gvl-fetch-official-button" type="button">
|
||||||
GVL aus Web laden
|
GVL-Referenz aus Web laden
|
||||||
</button>
|
</button>
|
||||||
<button id="gvl-revision-evidence-export-button" type="button">
|
<button id="gvl-revision-evidence-export-button" type="button">
|
||||||
Ausgewählte GVL-Revision exportieren
|
Ausgewählte Revision in den Vault exportieren
|
||||||
</button>
|
</button>
|
||||||
<label class="file-action" for="gvl-revision-evidence-verify-input">
|
<label class="file-action" for="gvl-revision-evidence-verify-input">
|
||||||
GVL-Revision-Export verifizieren
|
Vault-Paket verifizieren
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
id="gvl-revision-evidence-verify-input"
|
id="gvl-revision-evidence-verify-input"
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
accept="application/json,.json"
|
accept="application/json,.json"
|
||||||
>
|
>
|
||||||
<label class="file-action" for="gvl-revision-evidence-import-input">
|
<label class="file-action" for="gvl-revision-evidence-import-input">
|
||||||
GVL-Revision-Evidence importieren
|
Revision aus Vault importieren
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
id="gvl-revision-evidence-import-input"
|
id="gvl-revision-evidence-import-input"
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
aria-live="polite"
|
aria-live="polite"
|
||||||
></div>
|
></div>
|
||||||
<p id="gvl-snapshot-empty" class="empty-state" hidden>
|
<p id="gvl-snapshot-empty" class="empty-state" hidden>
|
||||||
Keine gespeicherten offiziellen Vendorlisten vorhanden.
|
Keine gespeicherten GVL-Referenzrevisionen vorhanden.
|
||||||
</p>
|
</p>
|
||||||
<div id="gvl-snapshot-content" hidden>
|
<div id="gvl-snapshot-content" hidden>
|
||||||
<div class="snapshot-list-wrap">
|
<div class="snapshot-list-wrap">
|
||||||
@@ -76,10 +76,10 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<section class="snapshot-summary" aria-labelledby="snapshot-summary-title">
|
<section class="snapshot-summary" aria-labelledby="snapshot-summary-title">
|
||||||
<h2 id="snapshot-summary-title">Ausgewählte Vendorliste</h2>
|
<h2 id="snapshot-summary-title">Ausgewählte GVL-Revision</h2>
|
||||||
<div class="rebuild-actions">
|
<div class="rebuild-actions">
|
||||||
<button id="gvl-rebuild-normalized-button" type="button" disabled>
|
<button id="gvl-rebuild-normalized-button" type="button" disabled>
|
||||||
Lokale GVL-Daten neu aufbauen (Reparatur)
|
Lokale Referenzdaten neu aufbauen (Reparatur)
|
||||||
</button>
|
</button>
|
||||||
<span
|
<span
|
||||||
id="gvl-rebuild-normalized-status"
|
id="gvl-rebuild-normalized-status"
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
|
|
||||||
<details id="gvl-vendor-overview-details" class="vendor-overview">
|
<details id="gvl-vendor-overview-details" class="vendor-overview">
|
||||||
<summary id="gvl-vendor-overview-summary">
|
<summary id="gvl-vendor-overview-summary">
|
||||||
Vendoren-Übersicht anzeigen
|
Vendoren-Referenz anzeigen
|
||||||
</summary>
|
</summary>
|
||||||
<p id="gvl-vendor-overview-empty" class="empty-state" hidden>
|
<p id="gvl-vendor-overview-empty" class="empty-state" hidden>
|
||||||
Keine normalisierten Vendoren für diese Vendorliste vorhanden.
|
Keine normalisierten Vendoren für diese Vendorliste vorhanden.
|
||||||
@@ -123,7 +123,7 @@
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="panel" aria-labelledby="vendor-detail-title">
|
<section class="panel" aria-labelledby="vendor-detail-title">
|
||||||
<h2 id="vendor-detail-title">Lokaler Vendor-Nachweis</h2>
|
<h2 id="vendor-detail-title">Lokaler Vendor-Referenznachweis</h2>
|
||||||
<form id="gvl-vendor-detail-form" class="vendor-detail-form">
|
<form id="gvl-vendor-detail-form" class="vendor-detail-form">
|
||||||
<label for="gvl-vendor-id-input">Vendor-ID</label>
|
<label for="gvl-vendor-id-input">Vendor-ID</label>
|
||||||
<input
|
<input
|
||||||
@@ -135,7 +135,7 @@
|
|||||||
placeholder="977"
|
placeholder="977"
|
||||||
>
|
>
|
||||||
<button id="gvl-vendor-detail-button" type="submit">
|
<button id="gvl-vendor-detail-button" type="submit">
|
||||||
Vendor anzeigen
|
Vendor-Referenz anzeigen
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ async function fetchOfficialGvl() {
|
|||||||
await renderGvlSnapshots();
|
await renderGvlSnapshots();
|
||||||
await renderSelectedGvlSnapshotSummary();
|
await renderSelectedGvlSnapshotSummary();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
renderFetchStatus("GVL aus Web konnte nicht geladen werden.");
|
renderFetchStatus("GVL-Referenz aus Web konnte nicht geladen werden.");
|
||||||
console.warn("VG-Observe manual official GVL fetch failed", error);
|
console.warn("VG-Observe manual official GVL fetch failed", error);
|
||||||
} finally {
|
} finally {
|
||||||
gvlFetchOfficialButton.disabled = false;
|
gvlFetchOfficialButton.disabled = false;
|
||||||
@@ -134,20 +134,20 @@ function buildGvlEvidenceConflictMessage(result) {
|
|||||||
|
|
||||||
function buildGvlSyncStatusMessage(result) {
|
function buildGvlSyncStatusMessage(result) {
|
||||||
if (result?.syncStatus === "new_gvl_revision_stored_and_normalized") {
|
if (result?.syncStatus === "new_gvl_revision_stored_and_normalized") {
|
||||||
return "GVL aus Web geladen, neue Revision gespeichert und normalisiert.";
|
return "GVL-Referenz aus Web geladen, neue Revision gespeichert und normalisiert.";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result?.syncStatus === "known_gvl_rebuilt_from_local_evidence") {
|
if (result?.syncStatus === "known_gvl_rebuilt_from_local_evidence") {
|
||||||
return "GVL aus Web geprüft; bekannte Revision aus lokaler Evidence neu aufgebaut.";
|
return "GVL-Referenz aus Web geprüft; bekannte Revision aus lokaler Evidence neu aufgebaut.";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result?.syncStatus === "current_and_locally_available") {
|
if (result?.syncStatus === "current_and_locally_available") {
|
||||||
return "GVL aus Web geprüft; aktuelle Revision ist lokal vollständig verfügbar.";
|
return "GVL-Referenz aus Web geprüft; aktuelle Revision ist lokal vollständig verfügbar.";
|
||||||
}
|
}
|
||||||
|
|
||||||
return result?.alreadyKnown
|
return result?.alreadyKnown
|
||||||
? "GVL aus Web geprüft; Revision ist lokal verfügbar."
|
? "GVL-Referenz aus Web geprüft; Revision ist lokal verfügbar."
|
||||||
: "GVL aus Web geladen.";
|
: "GVL-Referenz aus Web geladen.";
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderFetchStatus(message) {
|
function renderFetchStatus(message) {
|
||||||
@@ -505,7 +505,7 @@ async function rebuildSelectedGvlSnapshotNormalizedData() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
gvlRebuildNormalizedButton.disabled = true;
|
gvlRebuildNormalizedButton.disabled = true;
|
||||||
renderRebuildStatus("Lokale Evidence wird neu normalisiert...");
|
renderRebuildStatus("Lokale Referenzdaten werden neu normalisiert...");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const result = await browser.runtime.sendMessage({
|
const result = await browser.runtime.sendMessage({
|
||||||
@@ -528,7 +528,7 @@ async function rebuildSelectedGvlSnapshotNormalizedData() {
|
|||||||
await renderGvlVendorDetail();
|
await renderGvlVendorDetail();
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
renderRebuildStatus("Lokaler Neuaufbau fehlgeschlagen.");
|
renderRebuildStatus("Lokaler Referenz-Neuaufbau fehlgeschlagen.");
|
||||||
console.warn("VG-Observe GVL normalized rebuild failed", error);
|
console.warn("VG-Observe GVL normalized rebuild failed", error);
|
||||||
} finally {
|
} finally {
|
||||||
gvlRebuildNormalizedButton.disabled =
|
gvlRebuildNormalizedButton.disabled =
|
||||||
@@ -540,7 +540,7 @@ function buildRebuildSuccessMessage(result) {
|
|||||||
const counts = result.counts ?? {};
|
const counts = result.counts ?? {};
|
||||||
|
|
||||||
return [
|
return [
|
||||||
"Lokale GVL-Daten neu aufgebaut.",
|
"Lokale Referenzdaten neu aufgebaut.",
|
||||||
`Vendoren: ${formatCount(counts.vendorCount)}`,
|
`Vendoren: ${formatCount(counts.vendorCount)}`,
|
||||||
`Beziehungen: ${formatCount(counts.vendorRelationshipCount)}`
|
`Beziehungen: ${formatCount(counts.vendorRelationshipCount)}`
|
||||||
].join(" ");
|
].join(" ");
|
||||||
@@ -1025,7 +1025,7 @@ async function renderGvlSnapshots() {
|
|||||||
gvlSnapshotEmpty.hidden = false;
|
gvlSnapshotEmpty.hidden = false;
|
||||||
gvlSnapshotContent.hidden = true;
|
gvlSnapshotContent.hidden = true;
|
||||||
gvlSnapshotEmpty.textContent =
|
gvlSnapshotEmpty.textContent =
|
||||||
"Gespeicherte Vendorlisten konnten nicht geladen werden.";
|
"Gespeicherte GVL-Referenzen konnten nicht geladen werden.";
|
||||||
console.warn("VG-Observe GVL snapshot list failed", error);
|
console.warn("VG-Observe GVL snapshot list failed", error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1037,7 +1037,7 @@ function renderNoGvlSnapshots() {
|
|||||||
gvlSnapshotEmpty.hidden = false;
|
gvlSnapshotEmpty.hidden = false;
|
||||||
gvlSnapshotContent.hidden = true;
|
gvlSnapshotContent.hidden = true;
|
||||||
gvlSnapshotEmpty.textContent =
|
gvlSnapshotEmpty.textContent =
|
||||||
"Keine gespeicherten offiziellen Vendorlisten vorhanden.";
|
"Keine gespeicherten GVL-Referenzrevisionen vorhanden.";
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderGvlSnapshotList() {
|
function renderGvlSnapshotList() {
|
||||||
@@ -1124,7 +1124,7 @@ async function renderSelectedGvlSnapshotSummary() {
|
|||||||
selectedSnapshotSummary = null;
|
selectedSnapshotSummary = null;
|
||||||
updateRebuildActionState(null);
|
updateRebuildActionState(null);
|
||||||
gvlSnapshotSummary.textContent =
|
gvlSnapshotSummary.textContent =
|
||||||
"Zusammenfassung dieser Vendorliste konnte nicht geladen werden.";
|
"Zusammenfassung dieser GVL-Revision konnte nicht geladen werden.";
|
||||||
console.warn("VG-Observe GVL snapshot summary failed", error);
|
console.warn("VG-Observe GVL snapshot summary failed", error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1156,7 +1156,7 @@ async function renderVendorOverviewForSelectedSnapshot() {
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
gvlVendorOverviewEmpty.hidden = false;
|
gvlVendorOverviewEmpty.hidden = false;
|
||||||
gvlVendorOverviewEmpty.textContent =
|
gvlVendorOverviewEmpty.textContent =
|
||||||
"Vendoren-Übersicht konnte nicht geladen werden.";
|
"Vendoren-Referenz konnte nicht geladen werden.";
|
||||||
console.warn("VG-Observe GVL vendor overview failed", error);
|
console.warn("VG-Observe GVL vendor overview failed", error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1168,7 +1168,7 @@ function renderVendorOverview() {
|
|||||||
gvlVendorOverviewEmpty.hidden = false;
|
gvlVendorOverviewEmpty.hidden = false;
|
||||||
gvlVendorOverviewContent.hidden = true;
|
gvlVendorOverviewContent.hidden = true;
|
||||||
gvlVendorOverviewEmpty.textContent =
|
gvlVendorOverviewEmpty.textContent =
|
||||||
"Keine normalisierten Vendoren für diese Vendorliste vorhanden.";
|
"Keine normalisierten Vendor-Referenzen für diese GVL-Revision vorhanden.";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1219,8 +1219,8 @@ function updateVendorOverviewSummary() {
|
|||||||
const count = selectedSnapshotVendors.length;
|
const count = selectedSnapshotVendors.length;
|
||||||
|
|
||||||
gvlVendorOverviewSummary.textContent = count
|
gvlVendorOverviewSummary.textContent = count
|
||||||
? `Vendoren-Übersicht anzeigen (${count})`
|
? `Vendoren-Referenz anzeigen (${count})`
|
||||||
: "Vendoren-Übersicht anzeigen";
|
: "Vendoren-Referenz anzeigen";
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateRebuildActionState(summary) {
|
function updateRebuildActionState(summary) {
|
||||||
@@ -1234,11 +1234,11 @@ function updateRebuildActionState(summary) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (needsRebuild) {
|
if (needsRebuild) {
|
||||||
renderRebuildStatus("Reparatur möglich: normalisierte lokale Daten fehlen.");
|
renderRebuildStatus("Reparatur möglich: normalisierte Referenzdaten fehlen.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
renderRebuildStatus("Normalisierte lokale GVL-Daten sind verfügbar.");
|
renderRebuildStatus("Normalisierte lokale Referenzdaten sind verfügbar.");
|
||||||
}
|
}
|
||||||
|
|
||||||
function doesSnapshotNeedNormalizedRebuild(summary) {
|
function doesSnapshotNeedNormalizedRebuild(summary) {
|
||||||
|
|||||||
@@ -176,6 +176,11 @@ button:disabled {
|
|||||||
opacity: 0.65;
|
opacity: 0.65;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.secondary-workflow {
|
||||||
|
color: #cbd5e1;
|
||||||
|
background: #172033;
|
||||||
|
}
|
||||||
|
|
||||||
.confirm-modal {
|
.confirm-modal {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
inset: 0;
|
inset: 0;
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<title>VendorGet-IV</title>
|
<title>VG-Observe Laufzeitsteuerung</title>
|
||||||
<link rel="stylesheet" href="popup.css">
|
<link rel="stylesheet" href="popup.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<main class="popup">
|
<main class="popup">
|
||||||
<h1>VendorGet-IV</h1>
|
<h1>VG-Observe</h1>
|
||||||
|
|
||||||
<section class="status" aria-label="Status">
|
<section class="status" aria-label="Status">
|
||||||
<div class="status-row">
|
<div class="status-row">
|
||||||
@@ -29,10 +29,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="evidence-retention" aria-label="Evidenzdaten">
|
<section class="evidence-retention" aria-label="Kurzstatus">
|
||||||
<h2>Evidenzdaten</h2>
|
<h2>Workspace-Kurzstatus</h2>
|
||||||
<div id="maintenance-warning" class="maintenance-warning" hidden>
|
<div id="maintenance-warning" class="maintenance-warning" hidden>
|
||||||
Aufzeichnung pausiert: Dashboard geöffnet
|
Aufzeichnung pausiert: Observe-Dashboard geöffnet
|
||||||
</div>
|
</div>
|
||||||
<dl class="evidence-counts">
|
<dl class="evidence-counts">
|
||||||
<div>
|
<div>
|
||||||
@@ -61,15 +61,30 @@
|
|||||||
</div>
|
</div>
|
||||||
</dl>
|
</dl>
|
||||||
<button id="evidence-dashboard-button" type="button">
|
<button id="evidence-dashboard-button" type="button">
|
||||||
Evidence Dashboard öffnen
|
Observe-Dashboard öffnen
|
||||||
</button>
|
</button>
|
||||||
<button id="evidence-export-json-button" type="button">
|
<button
|
||||||
|
id="evidence-export-json-button"
|
||||||
|
class="secondary-workflow"
|
||||||
|
type="button"
|
||||||
|
hidden
|
||||||
|
>
|
||||||
Export Evidence JSON
|
Export Evidence JSON
|
||||||
</button>
|
</button>
|
||||||
<button id="evidence-purge-unlocked-button" type="button">
|
<button
|
||||||
|
id="evidence-purge-unlocked-button"
|
||||||
|
class="secondary-workflow"
|
||||||
|
type="button"
|
||||||
|
hidden
|
||||||
|
>
|
||||||
Ungesperrte Evidence-Daten löschen
|
Ungesperrte Evidence-Daten löschen
|
||||||
</button>
|
</button>
|
||||||
<div id="evidence-export-json-status" class="retention-status" aria-live="polite"></div>
|
<div
|
||||||
|
id="evidence-export-json-status"
|
||||||
|
class="retention-status"
|
||||||
|
aria-live="polite"
|
||||||
|
hidden
|
||||||
|
></div>
|
||||||
<div id="evidence-retention-status" class="retention-status" aria-live="polite">
|
<div id="evidence-retention-status" class="retention-status" aria-live="polite">
|
||||||
Status wird geladen
|
Status wird geladen
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -3,16 +3,18 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<title>VG-Observe Request-Explorer</title>
|
<title>VG-Observe Requests prüfen</title>
|
||||||
<link rel="stylesheet" href="request-explorer.css">
|
<link rel="stylesheet" href="request-explorer.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<main class="explorer">
|
<main class="explorer">
|
||||||
<header class="explorer-header">
|
<header class="explorer-header">
|
||||||
<a class="back-link" href="../dashboard/dashboard.html">Zurück zum Dashboard</a>
|
<a class="back-link" href="../dashboard/dashboard.html">Zurück zum Observe-Dashboard</a>
|
||||||
<h1>Request-Explorer</h1>
|
<h1>Requests prüfen</h1>
|
||||||
<p class="section-help">
|
<p class="section-help">
|
||||||
Diese Ansicht zeigt zuletzt technisch beobachtete Requests.
|
Diese Ansicht zeigt sichtbar beobachtete Browser-Requests aus der
|
||||||
|
Laufzeitbeobachtung. Sie dokumentiert technische Vorgänge und nimmt
|
||||||
|
keine rechtliche Bewertung vor.
|
||||||
</p>
|
</p>
|
||||||
<dl class="request-overview" aria-label="Geladene Request-Uebersicht">
|
<dl class="request-overview" aria-label="Geladene Request-Uebersicht">
|
||||||
<div>
|
<div>
|
||||||
@@ -27,7 +29,7 @@
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<section class="panel" aria-labelledby="request-list-title">
|
<section class="panel" aria-labelledby="request-list-title">
|
||||||
<h2 id="request-list-title">Zuletzt beobachtete Requests</h2>
|
<h2 id="request-list-title">Technisch beobachtete Requests</h2>
|
||||||
<p id="request-empty" class="empty-state" hidden>
|
<p id="request-empty" class="empty-state" hidden>
|
||||||
Keine beobachteten Requests vorhanden.
|
Keine beobachteten Requests vorhanden.
|
||||||
</p>
|
</p>
|
||||||
@@ -35,7 +37,7 @@
|
|||||||
<div id="request-groups" class="request-groups"></div>
|
<div id="request-groups" class="request-groups"></div>
|
||||||
|
|
||||||
<section class="request-detail" aria-labelledby="request-detail-title">
|
<section class="request-detail" aria-labelledby="request-detail-title">
|
||||||
<h2 id="request-detail-title">Ausgewählter Request</h2>
|
<h2 id="request-detail-title">Ausgewählter beobachteter Request</h2>
|
||||||
<div id="request-detail-summary"></div>
|
<div id="request-detail-summary"></div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|||||||
In neuem Issue referenzieren
Einen Benutzer sperren