Der Scroll zum Faktencheck wurde durch den display:none->flex Wechsel
und/oder GridStack-Init ausgeloest. overflow:hidden wird jetzt ganz
am Anfang von selectIncident gesetzt, BEVOR das incident-view
sichtbar wird. Erst 500ms nach Abschluss aller Render-Operationen
wird overflow wiederhergestellt.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Scroll-Event-Listener setzt scrollTop=0 bei jedem Scroll-Versuch
waehrend 500ms nach dem Laden. Verhindert zuverlaessig, dass
GridStack, Leaflet oder Fokus-Aenderungen den View verschieben.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
overflow:hidden bleibt 300ms nach loadIncidentDetail aktiv, damit
die verzögerten GridStack resizeTileToContent-Operationen keinen
Scroll zum Faktencheck ausloesen koennen.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Statt den Scroll nach unten mit Timeouts zurueckzukaempfen, wird
overflow:hidden auf main-content gesetzt bevor das Rendering startet.
Nach Abschluss wird scrollTop=0 gesetzt und overflow wiederhergestellt.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Scroll-Reset erfolgt nun an 4 Zeitpunkten um sicherzustellen, dass
der Hauptbereich nach oben scrollt, auch wenn GridStack oder andere
asynchrone Rendering-Operationen den Scroll verschieben.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1. Modal (Anlegen/Bearbeiten) schliesst nur noch ueber den X-Button,
nicht mehr durch Klick auf den dunklen Hintergrund
2. Beim Anklicken einer Lage in der Sidebar scrollt der Hauptbereich
nach oben statt zum Faktencheck-Bereich
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Neue Tabelle user_excluded_domains für benutzerspezifische Ausschlüsse
- Domain-Ausschlüsse wirken nur für den jeweiligen User, nicht org-weit
- user_id wird durch die gesamte Pipeline geschleust (Orchestrator → Researcher → RSS-Parser)
- Grundquellen (is_global) können nicht mehr bearbeitet/gelöscht werden im Frontend
- Grundquelle-Badge bei globalen Quellen statt Edit/Delete-Buttons
- Filter Von mir ausgeschlossen im Quellen-Modal
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Alle toLocaleTimeString/toLocaleDateString-Aufrufe und
getHours/getMinutes-Zugriffe verwenden jetzt fix die
Zeitzone Europe/Berlin statt der Browser-Zeitzone.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Klick auf Email öffnet Dropdown mit Organisation und Lizenzinfo
- Org-Name und Lizenz-Badge nicht mehr direkt sichtbar im Header
- Dropdown schliesst bei Klick ausserhalb
- Barrierefreie ARIA-Attribute
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Frontend-Dateien auf Zustand vor i18n zurückgesetzt.
lang.js entfernt, CSP bereinigt. Backend-Umlaut-Fix bleibt erhalten.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix gray map on EN: always use tile.openstreetmap.de (org has rate limits)
- Add A11yManager._updateLabels() for live language switch of accessibility panel
- Add NotificationCenter._updateLabels() for notification panel translation
- Replace all remaining hardcoded de-DE locales with dynamic locale switch
- Translate sidebar stats, source discovery toasts, session expiry warning
- Translate source form hints, type labels, article progress counter
- Add 15+ new translation keys for missing strings
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add LangManager with 270+ translation keys, anti-flicker lang detection
- Replace all hardcoded German strings in app.js, components.js, dashboard.html, index.html
- Dynamic getter properties for fact-check labels, category badges
- Language-aware map tiles (DE/EN OSM servers), CSP updated for tile.openstreetmap.org
- Lang switcher in header bar and login page
- Locale-aware date formatting, translateApiError for backend messages
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- SRI integrity-Hashes von Leaflet CDN-Links entfernt (verursachen
stille Blockierung wenn Hash nicht passt)
- renderMap() prueft ob L verfuegbar ist und merkt sich Locations
- retryPendingMap() rendert nachtraeglich wenn Leaflet spaeter bereit ist
- 2s Retry-Timer nach init() als Fallback
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Endpunkt startet async Background-Task statt synchron zu warten
- Batch-Verarbeitung (50 Artikel pro Batch)
- Neuer Status-Endpunkt GET /incidents/{id}/geoparse-status
- Frontend pollt alle 3s und zeigt Fortschritt im Button (z.B. "150/427 Artikel...")
- Kein Timeout-Problem mehr bei grossen Lagen
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Neues Geoparsing-Modul (spaCy NER + geonamescache/Nominatim)
- article_locations-Tabelle mit Migration
- Pipeline-Integration nach Artikel-Speicherung
- API-Endpunkt GET /incidents/{id}/locations
- Leaflet.js + MarkerCluster im Dashboard-Grid
- Theme-aware Kartenkacheln (CartoDB dark / OSM light)
- Gold-Akzent MarkerCluster, Popup mit Artikelliste
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Die Toggle-Switches im Lage-Modal (Anlegen/Bearbeiten) waren nicht
mit den API-Endpunkten verbunden. Jetzt werden die Subscription-
Einstellungen korrekt geladen, gespeichert und zurueckgesetzt.
- api.js: getSubscription() und updateSubscription() hinzugefuegt
- app.js: handleFormSubmit() speichert Subscription nach Create/Edit
- app.js: handleEdit() laedt bestehende Subscription beim Oeffnen
- app.js: openModal() setzt Checkboxen im Create-Modus zurueck