-
+
+
+
+
+ Daten bereitgestellt durch AegisSight Monitor
+
+
+ Neueste Entwicklungen
+ +
+
+
+
Daten bereitgestellt durch AegisSight Monitor
diff --git a/lagen/deepfakes/index.html b/lagen/deepfakes/index.html
index e2514d1..2d7727e 100644
--- a/lagen/deepfakes/index.html
+++ b/lagen/deepfakes/index.html
@@ -72,7 +72,8 @@
-
+
+
@@ -83,8 +84,26 @@
-
-
+
+
+
+
+
+
+
+ Daten bereitgestellt durch AegisSight Monitor
+
+
+ Zusammenfassung
+ +
+
+
+
+
+
+
+ Daten bereitgestellt durch AegisSight Monitor
diff --git a/lagen/iran-konflikt/index.html b/lagen/iran-konflikt/index.html
index bf0bcda..7ac01bc 100644
--- a/lagen/iran-konflikt/index.html
+++ b/lagen/iran-konflikt/index.html
@@ -76,7 +76,8 @@
-
+
+
@@ -87,8 +88,26 @@
+
+
+
+
+
+
- Daten bereitgestellt durch AegisSight Monitor
+
+
+ Neueste Entwicklungen
+ +
+
+
+
+
+
+
+
+
Daten bereitgestellt durch AegisSight Monitor
diff --git a/lagen/iran-konflikt/lagebild.css b/lagen/iran-konflikt/lagebild.css
index 11b75bd..d4537f5 100644
--- a/lagen/iran-konflikt/lagebild.css
+++ b/lagen/iran-konflikt/lagebild.css
@@ -1567,3 +1567,69 @@ a.source-detail-article-title:hover {
color: #0A1832;
font-weight: 600;
}
+
+/* === Neueste Entwicklungen / Ueberblick-Tab === */
+.dev-list {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+}
+.dev-bullet {
+ background: rgba(30, 45, 69, 0.5);
+ border-left: 3px solid #C8A851;
+ border-radius: 4px;
+ padding: 10px 14px;
+}
+.dev-bullet-head {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ gap: 10px;
+ margin-bottom: 6px;
+ flex-wrap: wrap;
+}
+.dev-sources {
+ display: inline-flex;
+ flex-wrap: wrap;
+ gap: 6px;
+ align-items: center;
+ min-width: 0;
+}
+.dev-source-pill {
+ display: inline-block;
+ padding: 3px 10px;
+ background: rgba(200, 168, 81, 0.18);
+ color: #E8ECF4;
+ border-radius: 3px;
+ font-size: 0.78rem;
+ font-weight: 500;
+ text-decoration: none;
+ line-height: 1.5;
+ max-width: 240px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ transition: background 0.15s;
+}
+a.dev-source-pill:hover {
+ background: rgba(200, 168, 81, 0.35);
+ text-decoration: none;
+ color: #E8ECF4;
+}
+.dev-time {
+ color: #8896AB;
+ font-size: 0.78rem;
+ font-variant-numeric: tabular-nums;
+ white-space: nowrap;
+ flex-shrink: 0;
+}
+.dev-body {
+ font-size: 0.95rem;
+ line-height: 1.5;
+ color: #E8ECF4;
+}
+.empty-hint {
+ color: #8896AB;
+ font-style: italic;
+ padding: 16px 0;
+}
diff --git a/lagen/iran-konflikt/lagebild.js b/lagen/iran-konflikt/lagebild.js
index 67621ff..02df502 100644
--- a/lagen/iran-konflikt/lagebild.js
+++ b/lagen/iran-konflikt/lagebild.js
@@ -19,6 +19,7 @@ var Lagebild = {
de: {
hero: "LAGEBILD", heroResearch: "RECHERCHE",
tabBriefing: "Lagebild", tabBriefingResearch: "Recherche",
+ tabUeberblick: "Neueste Entwicklungen", tabUeberblickResearch: "Zusammenfassung",
tabMap: "Karte", tabFactchecks: "Faktenchecks", tabSources: "Quellen",
statArticles: "Artikel", statSources: "Quellen", statFactchecks: "Faktenchecks",
dataSource: "Daten bereitgestellt durch AegisSight Monitor",
@@ -44,6 +45,7 @@ var Lagebild = {
en: {
hero: "SITUATION REPORT", heroResearch: "RESEARCH BRIEFING",
tabBriefing: "Briefing", tabBriefingResearch: "Research",
+ tabUeberblick: "Latest Developments", tabUeberblickResearch: "Summary",
tabMap: "Map", tabFactchecks: "Fact Checks", tabSources: "Sources",
statArticles: "Articles", statSources: "Sources", statFactchecks: "Fact Checks",
dataSource: "Data provided by AegisSight Monitor",
@@ -133,6 +135,125 @@ var Lagebild = {
this.renderTimeline();
this.renderTabBadges();
this.renderCurrentView();
+ this.renderUeberblick();
+ },
+
+ /* ===== TAB: UEBERBLICK (Neueste Entwicklungen / Zusammenfassung) ===== */
+ renderUeberblick: function() {
+ var inc = (this.data && this.data.incident) || {};
+ var el = document.getElementById('ueberblick-content');
+ var tsEl = document.getElementById('ueberblick-timestamp');
+ if (!el) return;
+ if (tsEl) tsEl.textContent = this.fmtDT(this.currentView && this.currentView.updated_at);
+
+ if (inc.type === 'adhoc') {
+ var dev = inc.latest_developments || '';
+ var sources = (this.currentView && this.currentView.sources_json) || [];
+ var html = this.renderLatestDevelopmentsHtml(dev, sources);
+ el.innerHTML = html || '
Noch keine Entwicklungen erfasst.
'; + } else { + var md = (this.currentView && this.currentView.summary) || ''; + var zf = this.extractZusammenfassung(md); + if (!zf) { + el.innerHTML = 'Keine Zusammenfassung verfügbar.
'; + return; + } + var body = this.mdToHtml(this.fixUmlauts(zf)); + var srcMap = {}; + var sources = (this.currentView && this.currentView.sources_json) || []; + for (var i = 0; i < sources.length; i++) srcMap[String(sources[i].nr)] = sources[i]; + var self = this; + body = body.replace(/\[(\d+[a-z]?)\]/g, function(match, nr) { + var src = srcMap[nr]; + if (src && src.url) { + return '[' + nr + ']'; + } + return '[' + nr + ']'; + }); + el.innerHTML = body; + } + }, + + extractZusammenfassung: function(md) { + if (!md) return ''; + var sections = md.split(/^## /m); + for (var i = 0; i < sections.length; i++) { + var s = sections[i]; + if (/^zusammenfassung/i.test(s.trim())) { + var next = s.split(/\n## /)[0]; + return next.trim(); + } + } + return ''; + }, + + renderLatestDevelopmentsHtml: function(text, sources) { + if (!text) return ''; + sources = Array.isArray(sources) ? sources : []; + var self = this; + + var lines = text.split('\n').map(function(l){return l.trim();}) + .filter(function(l){return l && (l.charAt(0) === '-' || l.charAt(0) === '[');}); + if (!lines.length) return ''; + + var bulletRe = /^(?:-\s*)?\[\s*(\d{1,2})\.(\d{1,2})\.?(?:\d{2,4})?\s+(\d{1,2}:\d{2})\s*\]\s*(.+?)\s*$/; + var trailingRe = /\s*\{([^{}]+)\}\s*\.?\s*$/; + var citationRe = /\[(\d+[a-z]?)\]/g; + var junkRe = /^(unbekannt|unknown|n\/?a|keine|keine quelle|tba)$/i; + + function normName(s) { return String(s||'').toLowerCase().replace(/^(der|die|das)\s+/,'').replace(/\s+/g,' ').trim(); } + function lookupByName(name) { + var n = normName(name); if (!n) return null; + var exact = sources.find(function(s){ return normName(s.name) === n; }); + if (exact) return exact; + return sources.find(function(s){ var sn=normName(s.name); return sn && (sn.indexOf(n)!==-1 || n.indexOf(sn)!==-1); }) || null; + } + function buildPill(src, name) { + var disp = (src && src.name) || name; + var e = self.esc(disp); + if (src && src.url) return ''+e+''; + return ''+e+''; + } + + var cards = []; + for (var i = 0; i < lines.length; i++) { + var m = bulletRe.exec(lines[i]); if (!m) continue; + var date = String(m[1]).padStart(2,'0') + '.' + String(m[2]).padStart(2,'0') + '.'; + var time = m[3]; var body = m[4]; + + var pills = ''; + var t = trailingRe.exec(body); + if (t) { + body = body.replace(trailingRe, '').trim(); + var names = t[1].split(',').map(function(n){return n.trim();}).filter(Boolean); + var seen = {}; + pills = names.map(function(n){ + if (junkRe.test(n)) return ''; + var k = normName(n); if (seen[k]) return ''; seen[k] = true; + return buildPill(lookupByName(n), n); + }).filter(Boolean).join(''); + } + if (!pills) { + var nums = []; var cm; + while ((cm = citationRe.exec(body)) !== null) { if (nums.indexOf(cm[1]) === -1) nums.push(cm[1]); } + citationRe.lastIndex = 0; + if (nums.length) { + body = body.replace(citationRe, '').replace(/\s+/g, ' ').trim(); + pills = nums.map(function(num){ + var src = sources.find(function(s){ return String(s.nr) === num || Number(s.nr) === Number(num); }); + return src ? buildPill(src, src.name) : ''; + }).filter(Boolean).join(''); + } + } + + var head = ''
+ + '' + pills + ''
+ + '' + self.esc(time) + ' \u00b7 ' + self.esc(date) + ''
+ + '
';
+ cards.push('' + head + '
');
+ }
+
+ return cards.length ? '' + self.esc(body) + '
' + cards.join('') + '
' : '';
},
/* ===== SCROLL PROGRESS BAR ===== */
@@ -1099,10 +1220,14 @@ var Lagebild = {
for (var i = 0; i < tabBtns.length; i++) {
var tab = tabBtns[i].getAttribute('data-tab');
if (tab === 'lagebild') tabBtns[i].childNodes[0].textContent = isResearch ? this.t('tabBriefingResearch') : this.t('tabBriefing');
+ else if (tab === 'ueberblick') tabBtns[i].childNodes[0].textContent = isResearch ? this.t('tabUeberblickResearch') : this.t('tabUeberblick');
else if (tab === 'karte') tabBtns[i].childNodes[0].textContent = this.t('tabMap');
else if (tab === 'faktenchecks') tabBtns[i].childNodes[0].textContent = this.t('tabFactchecks') + ' ';
else if (tab === 'quellen') tabBtns[i].childNodes[0].textContent = this.t('tabSources') + ' ';
}
+ // Update Ueberblick H2 title
+ var ueberblickH2 = document.getElementById('ueberblick-title');
+ if (ueberblickH2) ueberblickH2.textContent = isResearch ? this.t('tabUeberblickResearch') : this.t('tabUeberblick');
// Update data source note
var dsNote = document.querySelector('.data-source-note');
if (dsNote) dsNote.textContent = this.t('dataSource');
diff --git a/vorschau/css/style.css b/vorschau/css/style.css
index e486897..7ed14d4 100644
--- a/vorschau/css/style.css
+++ b/vorschau/css/style.css
@@ -360,3 +360,73 @@ a { color:inherit; text-decoration:none; }
color: #0A1832;
font-weight: 600;
}
+
+/* === Neueste Entwicklungen (Live-Monitoring Vorschau) === */
+.dev-list-heading {
+ font-size: 0.75rem;
+ font-weight: 700;
+ letter-spacing: 0.8px;
+ text-transform: uppercase;
+ color: #C8A851;
+ margin-bottom: 10px;
+}
+.dev-list {
+ display: flex;
+ flex-direction: column;
+ gap: 6px;
+}
+.dev-bullet {
+ background: rgba(30, 45, 69, 0.45);
+ border-left: 3px solid #C8A851;
+ border-radius: 4px;
+ padding: 8px 12px;
+ text-align: left;
+}
+.dev-bullet-head {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ gap: 8px;
+ margin-bottom: 4px;
+ flex-wrap: wrap;
+}
+.dev-sources {
+ display: inline-flex;
+ flex-wrap: wrap;
+ gap: 4px;
+ align-items: center;
+ min-width: 0;
+}
+.dev-source-pill {
+ display: inline-block;
+ padding: 2px 8px;
+ background: rgba(200, 168, 81, 0.15);
+ color: #E8ECF4;
+ border-radius: 3px;
+ font-size: 0.7rem;
+ font-weight: 500;
+ text-decoration: none;
+ line-height: 1.5;
+ max-width: 180px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ font-variant-numeric: tabular-nums;
+}
+a.dev-source-pill:hover {
+ background: rgba(200, 168, 81, 0.3);
+ text-decoration: none;
+ color: #E8ECF4;
+}
+.dev-time {
+ color: #8896AB;
+ font-size: 0.7rem;
+ font-variant-numeric: tabular-nums;
+ white-space: nowrap;
+ flex-shrink: 0;
+}
+.dev-body {
+ font-size: 0.85rem;
+ line-height: 1.45;
+ color: #E8ECF4;
+}
diff --git a/vorschau/js/app.js b/vorschau/js/app.js
index db22b0e..43be521 100644
--- a/vorschau/js/app.js
+++ b/vorschau/js/app.js
@@ -216,6 +216,102 @@
positionCards((activeIndex + 1) % cards.length);
});
+ /* ==================== NEUESTE ENTWICKLUNGEN (Live-Monitoring) ==================== */
+ function htmlEscape(s) {
+ return String(s == null ? '' : s)
+ .replace(/&/g, '&')
+ .replace(//g, '>')
+ .replace(/"/g, '"');
+ }
+
+ function normalizeSourceName(s) {
+ return String(s || '').toLowerCase().replace(/^(der|die|das)\s+/, '').replace(/\s+/g, ' ').trim();
+ }
+
+ function renderLatestDevelopments(text, sources) {
+ if (!text) return null;
+ sources = Array.isArray(sources) ? sources : [];
+
+ var lines = text.split('\n').map(function (l) { return l.trim(); })
+ .filter(function (l) { return l && (l.charAt(0) === '-' || l.charAt(0) === '['); });
+ if (!lines.length) return null;
+
+ var bulletRe = /^(?:-\s*)?\[\s*(\d{1,2})\.(\d{1,2})\.?(?:\d{2,4})?\s+(\d{1,2}:\d{2})\s*\]\s*(.+?)\s*$/;
+ var trailingRe = /\s*\{([^{}]+)\}\s*\.?\s*$/;
+ var citationRe = /\[(\d+[a-z]?)\]/g;
+ var junkRe = /^(unbekannt|unknown|n\/?a|keine|keine quelle|tba)$/i;
+
+ function buildPill(src, name) {
+ var disp = (src && src.name) || name;
+ var e = htmlEscape(disp);
+ if (src && src.url) {
+ return '' + e + '';
+ }
+ return '' + e + '';
+ }
+
+ function lookupByName(name) {
+ var n = normalizeSourceName(name);
+ if (!n) return null;
+ var exact = sources.find(function (s) { return normalizeSourceName(s.name) === n; });
+ if (exact) return exact;
+ return sources.find(function (s) {
+ var sn = normalizeSourceName(s.name);
+ return sn && (sn.indexOf(n) !== -1 || n.indexOf(sn) !== -1);
+ }) || null;
+ }
+
+ var cards = [];
+ for (var i = 0; i < lines.length; i++) {
+ var m = bulletRe.exec(lines[i]);
+ if (!m) continue;
+ var date = String(m[1]).padStart(2, '0') + '.' + String(m[2]).padStart(2, '0') + '.';
+ var time = m[3];
+ var body = m[4];
+
+ var pills = '';
+ var t = trailingRe.exec(body);
+ if (t) {
+ body = body.replace(trailingRe, '').trim();
+ var names = t[1].split(',').map(function (n) { return n.trim(); }).filter(Boolean);
+ var seen = {};
+ pills = names.map(function (n) {
+ if (junkRe.test(n)) return '';
+ var key = normalizeSourceName(n);
+ if (seen[key]) return '';
+ seen[key] = true;
+ return buildPill(lookupByName(n), n);
+ }).filter(Boolean).join('');
+ }
+ if (!pills) {
+ var nums = [];
+ var cm;
+ while ((cm = citationRe.exec(body)) !== null) {
+ if (nums.indexOf(cm[1]) === -1) nums.push(cm[1]);
+ }
+ citationRe.lastIndex = 0;
+ if (nums.length) {
+ body = body.replace(citationRe, '').replace(/\s+/g, ' ').trim();
+ pills = nums.map(function (num) {
+ var src = sources.find(function (s) { return String(s.nr) === num || Number(s.nr) === Number(num); });
+ return src ? buildPill(src, src.name) : '';
+ }).filter(Boolean).join('');
+ }
+ }
+
+ var head = ''
+ + '' + pills + ''
+ + '' + htmlEscape(time) + ' \u00b7 ' + htmlEscape(date) + ''
+ + '
';
+ cards.push('' + head + '
');
+ }
+
+ if (!cards.length) return null;
+ return '' + htmlEscape(body) + '
Neueste Entwicklungen
'
+ + '' + cards.join('') + '
';
+ }
+
/* ==================== SIMPLE MARKDOWN ==================== */
function mdToHtml(md) {
if (!md) return '';