Promote develop → main (2026-05-13 22:38 UTC) #25
@@ -328,117 +328,117 @@
|
|||||||
<div class="modal-overlay" id="modal-new" role="dialog" aria-modal="true" aria-labelledby="modal-new-title">
|
<div class="modal-overlay" id="modal-new" role="dialog" aria-modal="true" aria-labelledby="modal-new-title">
|
||||||
<div class="modal">
|
<div class="modal">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<div class="modal-title" id="modal-new-title">Neuen Fall anlegen</div>
|
<div class="modal-title" id="modal-new-title" data-i18n="modal.new_incident.title2">Neuen Fall anlegen</div>
|
||||||
<button class="modal-close" onclick="closeModal('modal-new')" aria-label="Schließen">×</button>
|
<button class="modal-close" onclick="closeModal('modal-new')" aria-label="Schließen" data-i18n-attr="aria-label:aria.close">×</button>
|
||||||
</div>
|
</div>
|
||||||
<form id="new-incident-form">
|
<form id="new-incident-form">
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="inc-title" data-i18n="modal.new_incident.title_field">Titel des Vorfalls</label>
|
<label for="inc-title" data-i18n="modal.new_incident.title_field">Titel des Vorfalls</label>
|
||||||
<input type="text" id="inc-title" required aria-required="true" placeholder="z.B. Explosion in Madrid">
|
<input type="text" id="inc-title" required aria-required="true" placeholder="z.B. Explosion in Madrid" data-i18n-attr="placeholder:modal.placeholder.title">
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="description-label-row">
|
<div class="description-label-row">
|
||||||
<label for="inc-description">Beschreibung / Kontext <span class="info-icon tooltip-below" id="description-info-icon" data-tooltip="Beschreibe den Vorfall möglichst genau: Was ist passiert? Wo? Wer ist beteiligt? Je präziser, desto bessere Ergebnisse."><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg></span></label>
|
<label for="inc-description"><span data-i18n="modal.new_incident.description">Beschreibung / Kontext</span> <span class="info-icon tooltip-below" id="description-info-icon" data-tooltip="Beschreibe den Vorfall möglichst genau: Was ist passiert? Wo? Wer ist beteiligt? Je präziser, desto bessere Ergebnisse."><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg></span></label>
|
||||||
<button type="button" class="btn btn-secondary btn-small" id="btn-enhance-description" onclick="App.generateDescription()" disabled>
|
<button type="button" class="btn btn-secondary btn-small" id="btn-enhance-description" onclick="App.generateDescription()" disabled>
|
||||||
<span id="enhance-btn-text" data-i18n="modal.new_incident.enhance">Beschreibung generieren</span>
|
<span id="enhance-btn-text" data-i18n="modal.new_incident.enhance">Beschreibung generieren</span>
|
||||||
<span id="enhance-spinner" class="spinner-inline" style="display:none;"></span>
|
<span id="enhance-spinner" class="spinner-inline" style="display:none;"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<textarea id="inc-description" placeholder="Weitere Details zum Vorfall (optional)"></textarea>
|
<textarea id="inc-description" placeholder="Weitere Details zum Vorfall (optional)" data-i18n-attr="placeholder:modal.placeholder.description"></textarea>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="inc-type">Art der Lage</label>
|
<label for="inc-type" data-i18n="modal.field.type">Art der Lage</label>
|
||||||
<select id="inc-type" onchange="toggleTypeDefaults()">
|
<select id="inc-type" onchange="toggleTypeDefaults()">
|
||||||
<option value="adhoc">Live-Monitoring : Ereignis beobachten</option>
|
<option value="adhoc" data-i18n="modal.option.type_adhoc">Live-Monitoring : Ereignis beobachten</option>
|
||||||
<option value="research">Recherche : Thema analysieren</option>
|
<option value="research" data-i18n="modal.option.type_research">Recherche : Thema analysieren</option>
|
||||||
</select>
|
</select>
|
||||||
<div class="form-hint" id="type-hint">
|
<div class="form-hint" id="type-hint" data-i18n="modal.hint.type_adhoc">
|
||||||
Durchsucht laufend hunderte Nachrichtenquellen nach neuen Meldungen. Empfohlen: Automatische Aktualisierung.
|
Durchsucht laufend hunderte Nachrichtenquellen nach neuen Meldungen. Empfohlen: Automatische Aktualisierung.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Quellen</label>
|
<label data-i18n="modal.field.sources">Quellen</label>
|
||||||
<div class="toggle-group">
|
<div class="toggle-group">
|
||||||
<label class="toggle-label">
|
<label class="toggle-label">
|
||||||
<input type="checkbox" id="inc-international">
|
<input type="checkbox" id="inc-international">
|
||||||
<span class="toggle-switch"></span>
|
<span class="toggle-switch"></span>
|
||||||
<span class="toggle-text">Internationale Quellen einbeziehen <span class="info-icon tooltip-below" data-tooltip="Aktiviert: Sucht auch in englischsprachigen und internationalen Medien. Deaktiviert (Standard): Nur deutschsprachige Quellen - empfohlen für DACH-Lagen."><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg></span></span>
|
<span class="toggle-text"><span data-i18n="modal.toggle.international">Internationale Quellen einbeziehen</span> <span class="info-icon tooltip-below" data-tooltip="Aktiviert: Sucht auch in englischsprachigen und internationalen Medien. Deaktiviert (Standard): Nur deutschsprachige Quellen - empfohlen für DACH-Lagen."><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg></span></span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="toggle-group" style="margin-top: 8px;">
|
<div class="toggle-group" style="margin-top: 8px;">
|
||||||
<label class="toggle-label">
|
<label class="toggle-label">
|
||||||
<input type="checkbox" id="inc-telegram">
|
<input type="checkbox" id="inc-telegram">
|
||||||
<span class="toggle-switch"></span>
|
<span class="toggle-switch"></span>
|
||||||
<span class="toggle-text">Telegram-Kanäle einbeziehen <span class="info-icon tooltip-below" data-tooltip="Bezieht OSINT-relevante Telegram-Kanäle als zusätzliche Quelle ein. Kann die Aktualität erhöhen, aber auch unbestätigte Informationen liefern."><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg></span></span>
|
<span class="toggle-text"><span data-i18n="modal.toggle.telegram">Telegram-Kanäle einbeziehen</span> <span class="info-icon tooltip-below" data-tooltip="Bezieht OSINT-relevante Telegram-Kanäle als zusätzliche Quelle ein. Kann die Aktualität erhöhen, aber auch unbestätigte Informationen liefern."><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg></span></span>
|
||||||
</label>
|
</label>
|
||||||
</div> </div>
|
</div> </div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Sichtbarkeit <span class="info-icon tooltip-below" data-tooltip="Öffentlich: Alle Nutzer der Organisation sehen diese Lage. Privat: Nur für dich sichtbar."><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg></span></label>
|
<label><span data-i18n="modal.new_incident.visibility">Sichtbarkeit</span> <span class="info-icon tooltip-below" data-tooltip="Öffentlich: Alle Nutzer der Organisation sehen diese Lage. Privat: Nur für dich sichtbar."><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg></span></label>
|
||||||
<div class="toggle-group">
|
<div class="toggle-group">
|
||||||
<label class="toggle-label">
|
<label class="toggle-label">
|
||||||
<input type="checkbox" id="inc-visibility" checked>
|
<input type="checkbox" id="inc-visibility" checked>
|
||||||
<span class="toggle-switch"></span>
|
<span class="toggle-switch"></span>
|
||||||
<span class="toggle-text" id="visibility-text">Öffentlich : für alle Nutzer sichtbar</span>
|
<span class="toggle-text" id="visibility-text" data-i18n="modal.toggle.visibility_public_text">Öffentlich : für alle Nutzer sichtbar</span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="inc-refresh-mode">Aktualisierung</label>
|
<label for="inc-refresh-mode" data-i18n="modal.field.refresh">Aktualisierung</label>
|
||||||
<select id="inc-refresh-mode" onchange="toggleRefreshInterval()">
|
<select id="inc-refresh-mode" onchange="toggleRefreshInterval()">
|
||||||
<option value="manual">Manuell</option>
|
<option value="manual" data-i18n="modal.option.manual">Manuell</option>
|
||||||
<option value="auto">Automatisch</option>
|
<option value="auto" data-i18n="modal.option.auto">Automatisch</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group conditional-field" id="refresh-interval-field">
|
<div class="form-group conditional-field" id="refresh-interval-field">
|
||||||
<label for="inc-refresh-value">Intervall</label>
|
<label for="inc-refresh-value" data-i18n="modal.field.interval">Intervall</label>
|
||||||
<div class="interval-input-group">
|
<div class="interval-input-group">
|
||||||
<input type="number" id="inc-refresh-value" min="10" value="15">
|
<input type="number" id="inc-refresh-value" min="10" value="15">
|
||||||
<select id="inc-refresh-unit" onchange="updateIntervalMin()">
|
<select id="inc-refresh-unit" onchange="updateIntervalMin()">
|
||||||
<option value="1" selected>Minuten</option>
|
<option value="1" selected data-i18n="modal.unit.minutes">Minuten</option>
|
||||||
<option value="60">Stunden</option>
|
<option value="60" data-i18n="modal.unit.hours">Stunden</option>
|
||||||
<option value="1440">Tage</option>
|
<option value="1440" data-i18n="modal.unit.days">Tage</option>
|
||||||
<option value="10080">Wochen</option>
|
<option value="10080" data-i18n="modal.unit.weeks">Wochen</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group conditional-field" id="refresh-starttime-field">
|
<div class="form-group conditional-field" id="refresh-starttime-field">
|
||||||
<label for="inc-refresh-starttime">Erste Aktualisierung um <span class="info-icon tooltip-below" data-tooltip="Legt den Startzeitpunkt fest. Danach wird im eingestellten Intervall aktualisiert."><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg></span></label>
|
<label for="inc-refresh-starttime"><span data-i18n="modal.field.start_time">Erste Aktualisierung um</span> <span class="info-icon tooltip-below" data-tooltip="Legt den Startzeitpunkt fest. Danach wird im eingestellten Intervall aktualisiert."><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg></span></label>
|
||||||
<input type="time" id="inc-refresh-starttime" value="07:00" required>
|
<input type="time" id="inc-refresh-starttime" value="07:00" required>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="inc-retention">Aufbewahrung (Tage) <span class="info-icon tooltip-below" data-tooltip="Nach Ablauf wird die Lage automatisch archiviert. 0 = unbegrenzt aufbewahren."><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg></span></label>
|
<label for="inc-retention"><span data-i18n="modal.field.retention">Aufbewahrung (Tage)</span> <span class="info-icon tooltip-below" data-tooltip="Nach Ablauf wird die Lage automatisch archiviert. 0 = unbegrenzt aufbewahren."><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></svg></span></label>
|
||||||
<input type="number" id="inc-retention" min="0" max="999" value="30" placeholder="0 = Unbegrenzt">
|
<input type="number" id="inc-retention" min="0" max="999" value="30" placeholder="0 = Unbegrenzt" data-i18n-attr="placeholder:modal.placeholder.retention">
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group" style="margin-top: 8px;">
|
<div class="form-group" style="margin-top: 8px;">
|
||||||
<label>E-Mail-Benachrichtigungen</label>
|
<label data-i18n="modal.field.notifications">E-Mail-Benachrichtigungen</label>
|
||||||
<div class="form-hint" style="margin-bottom: 8px;">Per E-Mail benachrichtigen bei:</div>
|
<div class="form-hint" style="margin-bottom: 8px;" data-i18n="modal.hint.notifications">Per E-Mail benachrichtigen bei:</div>
|
||||||
<div class="toggle-group">
|
<div class="toggle-group">
|
||||||
<label class="toggle-label">
|
<label class="toggle-label">
|
||||||
<input type="checkbox" id="inc-notify-summary">
|
<input type="checkbox" id="inc-notify-summary">
|
||||||
<span class="toggle-switch"></span>
|
<span class="toggle-switch"></span>
|
||||||
<span class="toggle-text">Neues Lagebild</span>
|
<span class="toggle-text" data-i18n="modal.notify.summary">Neues Lagebild</span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="toggle-group" style="margin-top: 8px;">
|
<div class="toggle-group" style="margin-top: 8px;">
|
||||||
<label class="toggle-label">
|
<label class="toggle-label">
|
||||||
<input type="checkbox" id="inc-notify-new-articles">
|
<input type="checkbox" id="inc-notify-new-articles">
|
||||||
<span class="toggle-switch"></span>
|
<span class="toggle-switch"></span>
|
||||||
<span class="toggle-text">Neue Artikel</span>
|
<span class="toggle-text" data-i18n="modal.notify.new_articles">Neue Artikel</span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="toggle-group" style="margin-top: 8px;">
|
<div class="toggle-group" style="margin-top: 8px;">
|
||||||
<label class="toggle-label">
|
<label class="toggle-label">
|
||||||
<input type="checkbox" id="inc-notify-status-change">
|
<input type="checkbox" id="inc-notify-status-change">
|
||||||
<span class="toggle-switch"></span>
|
<span class="toggle-switch"></span>
|
||||||
<span class="toggle-text">Statusänderung Faktencheck</span>
|
<span class="toggle-text" data-i18n="modal.notify.status_change">Statusänderung Faktencheck</span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" onclick="closeModal('modal-new')">Abbrechen</button>
|
<button type="button" class="btn btn-secondary" onclick="closeModal('modal-new')" data-i18n="common.cancel">Abbrechen</button>
|
||||||
<button type="submit" class="btn btn-primary" id="modal-new-submit" data-i18n="modal.new_incident.submit">Lage anlegen</button>
|
<button type="submit" class="btn btn-primary" id="modal-new-submit" data-i18n="modal.new_incident.submit">Lage anlegen</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
@@ -729,7 +729,7 @@
|
|||||||
<script src="/static/js/components.js?v=20260513d"></script>
|
<script src="/static/js/components.js?v=20260513d"></script>
|
||||||
<script src="/static/js/layout.js?v=20260513f"></script>
|
<script src="/static/js/layout.js?v=20260513f"></script>
|
||||||
<script src="/static/js/pipeline.js?v=20260513d"></script>
|
<script src="/static/js/pipeline.js?v=20260513d"></script>
|
||||||
<script src="/static/js/app.js?v=20260513g"></script>
|
<script src="/static/js/app.js?v=20260514a"></script>
|
||||||
<script src="/static/js/cluster-data.js?v=20260322f"></script>
|
<script src="/static/js/cluster-data.js?v=20260322f"></script>
|
||||||
<script src="/static/js/tutorial.js?v=20260316z"></script>
|
<script src="/static/js/tutorial.js?v=20260316z"></script>
|
||||||
<script src="/static/js/chat.js?v=20260422a"></script>
|
<script src="/static/js/chat.js?v=20260422a"></script>
|
||||||
|
|||||||
@@ -17,6 +17,12 @@
|
|||||||
"action.export": "Bericht exportieren",
|
"action.export": "Bericht exportieren",
|
||||||
"action.archive": "Archivieren",
|
"action.archive": "Archivieren",
|
||||||
"action.delete": "Löschen",
|
"action.delete": "Löschen",
|
||||||
|
"action.refreshing": "Läuft...",
|
||||||
|
"action.restore": "Wiederherstellen",
|
||||||
|
"action.budget_exceeded": "Budget aufgebraucht",
|
||||||
|
"action.read_only": "Nur Lesezugriff",
|
||||||
|
"action.budget_exceeded_title": "Token-Budget aufgebraucht. Bitte Verwaltung kontaktieren.",
|
||||||
|
"action.read_only_title": "Lizenz erlaubt keinen Schreibzugriff",
|
||||||
"sidebar.empty": "Keine Lagen vorhanden",
|
"sidebar.empty": "Keine Lagen vorhanden",
|
||||||
"header.logout": "Abmelden",
|
"header.logout": "Abmelden",
|
||||||
"header.new_incident": "+ Neuer Fall",
|
"header.new_incident": "+ Neuer Fall",
|
||||||
@@ -46,6 +52,37 @@
|
|||||||
"modal.new_incident.visibility_public": "Öffentlich",
|
"modal.new_incident.visibility_public": "Öffentlich",
|
||||||
"modal.new_incident.visibility_private": "Privat",
|
"modal.new_incident.visibility_private": "Privat",
|
||||||
"modal.new_incident.submit": "Lage anlegen",
|
"modal.new_incident.submit": "Lage anlegen",
|
||||||
|
"modal.new_incident.title2": "Neuen Fall anlegen",
|
||||||
|
"modal.new_incident.edit_title": "Lage bearbeiten",
|
||||||
|
"modal.placeholder.title": "z.B. Explosion in Madrid",
|
||||||
|
"modal.placeholder.description": "Weitere Details zum Vorfall (optional)",
|
||||||
|
"modal.field.type": "Art der Lage",
|
||||||
|
"modal.option.type_adhoc": "Live-Monitoring : Ereignis beobachten",
|
||||||
|
"modal.option.type_research": "Recherche : Thema analysieren",
|
||||||
|
"modal.hint.type_adhoc": "Durchsucht laufend hunderte Nachrichtenquellen nach neuen Meldungen. Empfohlen: Automatische Aktualisierung.",
|
||||||
|
"modal.hint.type_research": "Strukturierte Tiefenrecherche mit mehreren Durchläufen. Empfohlen: Manuell starten und bei Bedarf vertiefen.",
|
||||||
|
"modal.field.sources": "Quellen",
|
||||||
|
"modal.toggle.international": "Internationale Quellen einbeziehen",
|
||||||
|
"modal.toggle.telegram": "Telegram-Kanäle einbeziehen",
|
||||||
|
"modal.toggle.visibility_public_text": "Öffentlich : für alle Nutzer sichtbar",
|
||||||
|
"modal.toggle.visibility_private_text": "Privat : nur für dich sichtbar",
|
||||||
|
"modal.field.refresh": "Aktualisierung",
|
||||||
|
"modal.option.manual": "Manuell",
|
||||||
|
"modal.option.auto": "Automatisch",
|
||||||
|
"modal.field.interval": "Intervall",
|
||||||
|
"modal.unit.minutes": "Minuten",
|
||||||
|
"modal.unit.hours": "Stunden",
|
||||||
|
"modal.unit.days": "Tage",
|
||||||
|
"modal.unit.weeks": "Wochen",
|
||||||
|
"modal.field.start_time": "Erste Aktualisierung um",
|
||||||
|
"modal.field.retention": "Aufbewahrung (Tage)",
|
||||||
|
"modal.placeholder.retention": "0 = Unbegrenzt",
|
||||||
|
"modal.field.notifications": "E-Mail-Benachrichtigungen",
|
||||||
|
"modal.hint.notifications": "Per E-Mail benachrichtigen bei:",
|
||||||
|
"modal.notify.summary": "Neues Lagebild",
|
||||||
|
"modal.notify.new_articles": "Neue Artikel",
|
||||||
|
"modal.notify.status_change": "Statusänderung Faktencheck",
|
||||||
|
"aria.close": "Schließen",
|
||||||
"modal.sources.title": "Quellenverwaltung",
|
"modal.sources.title": "Quellenverwaltung",
|
||||||
"modal.sources.approve_all_high": "Alle ≥ 0.85 genehmigen",
|
"modal.sources.approve_all_high": "Alle ≥ 0.85 genehmigen",
|
||||||
"modal.export.title": "Bericht exportieren",
|
"modal.export.title": "Bericht exportieren",
|
||||||
|
|||||||
@@ -17,6 +17,12 @@
|
|||||||
"action.export": "Export report",
|
"action.export": "Export report",
|
||||||
"action.archive": "Archive",
|
"action.archive": "Archive",
|
||||||
"action.delete": "Delete",
|
"action.delete": "Delete",
|
||||||
|
"action.refreshing": "Running...",
|
||||||
|
"action.restore": "Restore",
|
||||||
|
"action.budget_exceeded": "Budget exhausted",
|
||||||
|
"action.read_only": "Read-only",
|
||||||
|
"action.budget_exceeded_title": "Token budget exhausted. Please contact administration.",
|
||||||
|
"action.read_only_title": "License does not permit write access",
|
||||||
"sidebar.empty": "No situations yet",
|
"sidebar.empty": "No situations yet",
|
||||||
"header.logout": "Sign out",
|
"header.logout": "Sign out",
|
||||||
"header.new_incident": "+ New situation",
|
"header.new_incident": "+ New situation",
|
||||||
@@ -46,6 +52,37 @@
|
|||||||
"modal.new_incident.visibility_public": "Public",
|
"modal.new_incident.visibility_public": "Public",
|
||||||
"modal.new_incident.visibility_private": "Private",
|
"modal.new_incident.visibility_private": "Private",
|
||||||
"modal.new_incident.submit": "Create situation",
|
"modal.new_incident.submit": "Create situation",
|
||||||
|
"modal.new_incident.title2": "Create new case",
|
||||||
|
"modal.new_incident.edit_title": "Edit situation",
|
||||||
|
"modal.placeholder.title": "e.g. Explosion in Madrid",
|
||||||
|
"modal.placeholder.description": "More details about the incident (optional)",
|
||||||
|
"modal.field.type": "Type of situation",
|
||||||
|
"modal.option.type_adhoc": "Live monitoring : track an event",
|
||||||
|
"modal.option.type_research": "Research : analyse a topic",
|
||||||
|
"modal.hint.type_adhoc": "Continuously searches hundreds of news sources for new articles. Recommended: automatic refresh.",
|
||||||
|
"modal.hint.type_research": "Structured deep research with multiple passes. Recommended: start manually and deepen when needed.",
|
||||||
|
"modal.field.sources": "Sources",
|
||||||
|
"modal.toggle.international": "Include international sources",
|
||||||
|
"modal.toggle.telegram": "Include Telegram channels",
|
||||||
|
"modal.toggle.visibility_public_text": "Public : visible to all users",
|
||||||
|
"modal.toggle.visibility_private_text": "Private : only visible to you",
|
||||||
|
"modal.field.refresh": "Refresh",
|
||||||
|
"modal.option.manual": "Manual",
|
||||||
|
"modal.option.auto": "Automatic",
|
||||||
|
"modal.field.interval": "Interval",
|
||||||
|
"modal.unit.minutes": "Minutes",
|
||||||
|
"modal.unit.hours": "Hours",
|
||||||
|
"modal.unit.days": "Days",
|
||||||
|
"modal.unit.weeks": "Weeks",
|
||||||
|
"modal.field.start_time": "First refresh at",
|
||||||
|
"modal.field.retention": "Retention (days)",
|
||||||
|
"modal.placeholder.retention": "0 = unlimited",
|
||||||
|
"modal.field.notifications": "Email notifications",
|
||||||
|
"modal.hint.notifications": "Notify me by email about:",
|
||||||
|
"modal.notify.summary": "New briefing",
|
||||||
|
"modal.notify.new_articles": "New articles",
|
||||||
|
"modal.notify.status_change": "Fact-check status change",
|
||||||
|
"aria.close": "Close",
|
||||||
"modal.sources.title": "Source management",
|
"modal.sources.title": "Source management",
|
||||||
"modal.sources.approve_all_high": "Approve all ≥ 0.85",
|
"modal.sources.approve_all_high": "Approve all ≥ 0.85",
|
||||||
"modal.export.title": "Export report",
|
"modal.export.title": "Export report",
|
||||||
|
|||||||
@@ -2178,18 +2178,23 @@ async handleRefresh() {
|
|||||||
_updateRefreshButton(disabled) {
|
_updateRefreshButton(disabled) {
|
||||||
const btn = document.getElementById('refresh-btn');
|
const btn = document.getElementById('refresh-btn');
|
||||||
if (!btn) return;
|
if (!btn) return;
|
||||||
|
const _t = (k, fb) => (typeof T === 'function') ? T(k, fb) : fb;
|
||||||
// Hard-Stop: Lese-Modus (Budget aufgebraucht / Lizenz abgelaufen) -> immer disabled
|
// Hard-Stop: Lese-Modus (Budget aufgebraucht / Lizenz abgelaufen) -> immer disabled
|
||||||
if (this.user && this.user.read_only) {
|
if (this.user && this.user.read_only) {
|
||||||
btn.disabled = true;
|
btn.disabled = true;
|
||||||
const reason = this.user.read_only_reason;
|
const reason = this.user.read_only_reason;
|
||||||
btn.textContent = reason === 'budget_exceeded' ? 'Budget aufgebraucht' : 'Nur Lesezugriff';
|
btn.textContent = reason === 'budget_exceeded'
|
||||||
|
? _t('action.budget_exceeded', 'Budget aufgebraucht')
|
||||||
|
: _t('action.read_only', 'Nur Lesezugriff');
|
||||||
btn.title = reason === 'budget_exceeded'
|
btn.title = reason === 'budget_exceeded'
|
||||||
? 'Token-Budget aufgebraucht. Bitte Verwaltung kontaktieren.'
|
? _t('action.budget_exceeded_title', 'Token-Budget aufgebraucht. Bitte Verwaltung kontaktieren.')
|
||||||
: 'Lizenz erlaubt keinen Schreibzugriff';
|
: _t('action.read_only_title', 'Lizenz erlaubt keinen Schreibzugriff');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
btn.disabled = disabled;
|
btn.disabled = disabled;
|
||||||
btn.textContent = disabled ? 'Läuft...' : 'Aktualisieren';
|
btn.textContent = disabled
|
||||||
|
? _t('action.refreshing', 'Läuft...')
|
||||||
|
: _t('action.refresh', 'Aktualisieren');
|
||||||
btn.title = '';
|
btn.title = '';
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -2236,8 +2241,8 @@ async handleRefresh() {
|
|||||||
toggleRefreshInterval();
|
toggleRefreshInterval();
|
||||||
|
|
||||||
// Modal-Titel und Submit ändern
|
// Modal-Titel und Submit ändern
|
||||||
{ const _e = document.getElementById('modal-new-title'); if (_e) _e.textContent = 'Lage bearbeiten'; }
|
{ const _e = document.getElementById('modal-new-title'); if (_e) _e.textContent = (typeof T === 'function') ? T('modal.new_incident.edit_title', 'Lage bearbeiten') : 'Lage bearbeiten'; }
|
||||||
{ const _e = document.getElementById('modal-new-submit'); if (_e) _e.textContent = 'Speichern'; }
|
{ const _e = document.getElementById('modal-new-submit'); if (_e) _e.textContent = (typeof T === 'function') ? T('common.save', 'Speichern') : 'Speichern'; }
|
||||||
|
|
||||||
// E-Mail-Subscription laden
|
// E-Mail-Subscription laden
|
||||||
try {
|
try {
|
||||||
@@ -2297,7 +2302,10 @@ async handleRefresh() {
|
|||||||
_updateArchiveButton(status) {
|
_updateArchiveButton(status) {
|
||||||
const btn = document.getElementById('archive-incident-btn');
|
const btn = document.getElementById('archive-incident-btn');
|
||||||
if (!btn) return;
|
if (!btn) return;
|
||||||
btn.textContent = status === 'archived' ? 'Wiederherstellen' : 'Archivieren';
|
const _t = (k, fb) => (typeof T === 'function') ? T(k, fb) : fb;
|
||||||
|
btn.textContent = status === 'archived'
|
||||||
|
? _t('action.restore', 'Wiederherstellen')
|
||||||
|
: _t('action.archive', 'Archivieren');
|
||||||
},
|
},
|
||||||
|
|
||||||
// === WebSocket Handlers ===
|
// === WebSocket Handlers ===
|
||||||
@@ -3466,8 +3474,8 @@ function openModal(id) {
|
|||||||
if (id === 'modal-new' && !App._editingIncidentId) {
|
if (id === 'modal-new' && !App._editingIncidentId) {
|
||||||
// Create-Modus: Formular zurücksetzen
|
// Create-Modus: Formular zurücksetzen
|
||||||
document.getElementById('new-incident-form').reset();
|
document.getElementById('new-incident-form').reset();
|
||||||
document.getElementById('modal-new-title').textContent = 'Neue Lage anlegen';
|
document.getElementById('modal-new-title').textContent = (typeof T === 'function') ? T('modal.new_incident.title2', 'Neue Lage anlegen') : 'Neue Lage anlegen';
|
||||||
document.getElementById('modal-new-submit').textContent = 'Lage anlegen';
|
document.getElementById('modal-new-submit').textContent = (typeof T === 'function') ? T('modal.new_incident.submit', 'Lage anlegen') : 'Lage anlegen';
|
||||||
{ const _b = document.getElementById('btn-enhance-description'); if (_b) _b.disabled = true; }
|
{ const _b = document.getElementById('btn-enhance-description'); if (_b) _b.disabled = true; }
|
||||||
{ const _t = document.getElementById("inc-description"); if (_t) { _t.style.height = ""; _autoResizeTextarea(_t); } }
|
{ const _t = document.getElementById("inc-description"); if (_t) { _t.style.height = ""; _autoResizeTextarea(_t); } }
|
||||||
// E-Mail-Checkboxen zuruecksetzen
|
// E-Mail-Checkboxen zuruecksetzen
|
||||||
@@ -3500,8 +3508,8 @@ function closeModal(id) {
|
|||||||
}
|
}
|
||||||
if (id === 'modal-new') {
|
if (id === 'modal-new') {
|
||||||
App._editingIncidentId = null;
|
App._editingIncidentId = null;
|
||||||
document.getElementById('modal-new-title').textContent = 'Neue Lage anlegen';
|
document.getElementById('modal-new-title').textContent = (typeof T === 'function') ? T('modal.new_incident.title2', 'Neue Lage anlegen') : 'Neue Lage anlegen';
|
||||||
document.getElementById('modal-new-submit').textContent = 'Lage anlegen';
|
document.getElementById('modal-new-submit').textContent = (typeof T === 'function') ? T('modal.new_incident.submit', 'Lage anlegen') : 'Lage anlegen';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3675,9 +3683,10 @@ function updateVisibilityHint() {
|
|||||||
const isPublic = document.getElementById('inc-visibility').checked;
|
const isPublic = document.getElementById('inc-visibility').checked;
|
||||||
const text = document.getElementById('visibility-text');
|
const text = document.getElementById('visibility-text');
|
||||||
if (text) {
|
if (text) {
|
||||||
|
const _t = (k, fb) => (typeof T === 'function') ? T(k, fb) : fb;
|
||||||
text.textContent = isPublic
|
text.textContent = isPublic
|
||||||
? 'Öffentlich — für alle Nutzer sichtbar'
|
? _t('modal.toggle.visibility_public_text', 'Öffentlich — für alle Nutzer sichtbar')
|
||||||
: 'Privat — nur für dich sichtbar';
|
: _t('modal.toggle.visibility_private_text', 'Privat — nur für dich sichtbar');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3696,15 +3705,16 @@ function toggleTypeDefaults(preserveMode = false) {
|
|||||||
const hint = document.getElementById('type-hint');
|
const hint = document.getElementById('type-hint');
|
||||||
const refreshMode = document.getElementById('inc-refresh-mode');
|
const refreshMode = document.getElementById('inc-refresh-mode');
|
||||||
|
|
||||||
|
const _t = (k, fb) => (typeof T === 'function') ? T(k, fb) : fb;
|
||||||
if (type === 'research') {
|
if (type === 'research') {
|
||||||
hint.textContent = 'Recherchiert in Tiefe: Nachrichtenarchive, Parlamentsdokumente, Fachmedien, Expertenquellen. Empfohlen: Manuell starten und bei Bedarf vertiefen.';
|
hint.textContent = _t('modal.hint.type_research', 'Recherchiert in Tiefe: Nachrichtenarchive, Parlamentsdokumente, Fachmedien, Expertenquellen. Empfohlen: Manuell starten und bei Bedarf vertiefen.');
|
||||||
// Nur bei Typ-Wechsel/Neuanlage Modus zurückziehen, beim Edit bestehender Lagen DB-Wert respektieren
|
// Nur bei Typ-Wechsel/Neuanlage Modus zurückziehen, beim Edit bestehender Lagen DB-Wert respektieren
|
||||||
if (!preserveMode) {
|
if (!preserveMode) {
|
||||||
refreshMode.value = 'manual';
|
refreshMode.value = 'manual';
|
||||||
toggleRefreshInterval();
|
toggleRefreshInterval();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
hint.textContent = 'Durchsucht laufend hunderte Nachrichtenquellen nach neuen Meldungen. Empfohlen: Automatische Aktualisierung.';
|
hint.textContent = _t('modal.hint.type_adhoc', 'Durchsucht laufend hunderte Nachrichtenquellen nach neuen Meldungen. Empfohlen: Automatische Aktualisierung.');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Beschreibungs-Tooltip je nach Typ wechseln
|
// Beschreibungs-Tooltip je nach Typ wechseln
|
||||||
|
|||||||
In neuem Issue referenzieren
Einen Benutzer sperren