diff --git a/vorschau/index.html b/vorschau/index.html
index 2f777fb..623b506 100644
--- a/vorschau/index.html
+++ b/vorschau/index.html
@@ -96,7 +96,6 @@
Live-Beispiel: Der Iran-Konflikt wird mit über 14.900 Artikeln aus 375 Quellen kontinuierlich überwacht.
@@ -111,7 +110,6 @@
Jede Behauptung geprüft. Automatisch.
Kernaussagen werden automatisch gegen unabhängige Quellen verifiziert und mit einem Verifikationsstatus versehen: bestätigt, widersprüchlich oder unbelegt. Widersprechen sich Quellen, wird das transparent dargestellt. Wenn neue Belege auftauchen, aktualisiert sich die Bewertung automatisch. Keine blinden Flecken, keine manuelle Nachrecherche, systematische Verifikation über alle Lagebilder hinweg.
- Kontakt aufnehmen
@@ -128,7 +126,6 @@
Beispiel: Ein Dossier zur rechtlichen Lage von Deepfakes in Deutschland, 121 Artikel aus 90 Quellen, automatisch erstellt.
@@ -145,7 +142,6 @@
Im Iran-Konflikt werden Primärquellen in Farsi, Arabisch und Hebräisch direkt ausgewertet.
@@ -162,7 +158,6 @@
Beispiel: Cyberangriffe auf deutsche Infrastruktur, 93 Artikel aus 41 Quellen, automatisch überwacht.
diff --git a/vorschau/js/app.js b/vorschau/js/app.js
index f8b2356..f2cba37 100644
--- a/vorschau/js/app.js
+++ b/vorschau/js/app.js
@@ -129,6 +129,12 @@
var lageData = {};
var dataLoaded = false;
+ var lageTitles = {
+ 'iran-konflikt': 'Gro\u00dflage - Irankonflikt',
+ 'cyberangriffe': 'Cyberangriffe auf deutsche Infrastruktur',
+ 'deepfakes': 'Rechtliche Lage von Deepfakes in Deutschland'
+ };
+
/* ==================== 3D CAROUSEL ==================== */
var cards = document.querySelectorAll('.carousel-card');
var dots = document.querySelectorAll('.carousel-dot');
@@ -153,6 +159,12 @@
if (lage && lageData[lage]) {
mapSection.classList.remove('map-hidden');
showMarkers(lageData[lage].locations, lageData[lage].category_labels);
+ // Stats-Bar aktualisieren
+ var titleEl = document.querySelector('.live-stats-title');
+ if (titleEl) titleEl.textContent = lageTitles[lage] || lage;
+ countUp(document.getElementById('stat-articles'), lageData[lage].article_count);
+ countUp(document.getElementById('stat-sources'), lageData[lage].source_count);
+ countUp(document.getElementById('stat-factchecks'), lageData[lage].factcheck_count);
} else {
if (mapSection) mapSection.classList.add('map-hidden');
clearMarkers();
@@ -212,6 +224,23 @@ function mdToHtml(md) {
if (inList) html += '';
return html;
}
+
+ /* ==================== COUNT-UP ANIMATION ==================== */
+ function countUp(el, target) {
+ if (!el) return;
+ if (!target) { el.textContent = '0'; return; }
+ var duration = 1200;
+ var startTime = null;
+ function step(ts) {
+ if (!startTime) startTime = ts;
+ var progress = Math.min((ts - startTime) / duration, 1);
+ var ease = 1 - Math.pow(1 - progress, 3);
+ el.textContent = Math.floor(ease * target).toLocaleString('de-DE');
+ if (progress < 1) requestAnimationFrame(step);
+ }
+ requestAnimationFrame(step);
+ }
+
/* ==================== LIVE DATA ==================== */
function timeAgo(dateStr) {
var diffMin = Math.floor((Date.now() - new Date(dateStr).getTime()) / 60000);
@@ -233,20 +262,6 @@ function mdToHtml(md) {
var ea = document.getElementById('stat-articles');
var es = document.getElementById('stat-sources');
var ef = document.getElementById('stat-factchecks');
- function countUp(el, target) {
- if (!el || !target) return;
- var start = 0;
- var duration = 1200;
- var startTime = null;
- function step(ts) {
- if (!startTime) startTime = ts;
- var progress = Math.min((ts - startTime) / duration, 1);
- var ease = 1 - Math.pow(1 - progress, 3);
- el.textContent = Math.floor(ease * target).toLocaleString('de-DE');
- if (progress < 1) requestAnimationFrame(step);
- }
- requestAnimationFrame(step);
- }
countUp(ea, inc.article_count);
countUp(es, inc.source_count);
countUp(ef, inc.factcheck_count);
@@ -260,7 +275,10 @@ function mdToHtml(md) {
// Store data and init map
lageData['iran-konflikt'] = {
locations: data.locations || [],
- category_labels: data.category_labels || {}
+ category_labels: data.category_labels || {},
+ article_count: inc.article_count || 0,
+ source_count: inc.source_count || 0,
+ factcheck_count: inc.factcheck_count || 0
};
dataLoaded = true;
createMap();
@@ -442,13 +460,18 @@ function mdToHtml(md) {
.then(function (data) {
var excerptEl = document.getElementById('excerpt-text-deepfakes');
if (excerptEl && data.zusammenfassung) {
- excerptEl.innerHTML = mdToHtml(data.zusammenfassung);
+ var lines = data.zusammenfassung.split("\n");
+ var filtered = lines.filter(function(l) { var t = l.trim(); return !t || t.indexOf("## ") === 0 || t.indexOf("- ") === 0; });
+ excerptEl.innerHTML = mdToHtml(filtered.join("\n"));
}
// Store data for map
lageData['deepfakes'] = {
locations: data.locations || [],
- category_labels: data.category_labels || {}
+ category_labels: data.category_labels || {},
+ article_count: (data.incident || {}).article_count || 0,
+ source_count: (data.incident || {}).source_count || 0,
+ factcheck_count: (data.incident || {}).factcheck_count || 0
};
})
.catch(function () {
@@ -468,7 +491,10 @@ function mdToHtml(md) {
}
lageData['cyberangriffe'] = {
locations: data.locations || [],
- category_labels: data.category_labels || {}
+ category_labels: data.category_labels || {},
+ article_count: (data.incident || {}).article_count || 0,
+ source_count: (data.incident || {}).source_count || 0,
+ factcheck_count: (data.incident || {}).factcheck_count || 0
};
})
.catch(function () {