Commits vergleichen
4 Commits
aa36a9a38f
...
main
| Autor | SHA1 | Datum | |
|---|---|---|---|
|
|
1647a6f50a | ||
|
|
c53e260c6c | ||
| c3a0ee4538 | |||
|
|
e20b3de0fa |
@@ -134,6 +134,7 @@ STRUKTUR:
|
|||||||
- KEIN Fettdruck (**) verwenden
|
- KEIN Fettdruck (**) verwenden
|
||||||
- ERZEUGE KEINE Sektion "## ZUSAMMENFASSUNG", "## ÜBERBLICK" oder "## KERNPUNKTE". Falls das BISHERIGE LAGEBILD eine solche Sektion enthält, ENTFERNE sie vollständig beim Aktualisieren. Die neuesten Entwicklungen werden separat als eigene Kachel gepflegt und dürfen im Lagebild NICHT dupliziert werden.
|
- ERZEUGE KEINE Sektion "## ZUSAMMENFASSUNG", "## ÜBERBLICK" oder "## KERNPUNKTE". Falls das BISHERIGE LAGEBILD eine solche Sektion enthält, ENTFERNE sie vollständig beim Aktualisieren. Die neuesten Entwicklungen werden separat als eigene Kachel gepflegt und dürfen im Lagebild NICHT dupliziert werden.
|
||||||
- KEINE datierten Verlaufsmarker im Lagebild. Einleitungen wie "Neu am 31.05./01.06.:", "Neu seit gestern:" oder vergleichbare Datums-Changelog-Phrasen sind nicht erlaubt. Falls das BISHERIGE LAGEBILD solche Blöcke enthält, LÖSE SIE AUF: integriere ihren Inhalt in den thematisch passenden Abschnitt und ENTFERNE die "Neu am"-Einleitung samt reiner Datumsgruppierung restlos. Innerhalb eines Abschnitts steht der aktuelle Stand vorne, ältere Belege werden im Fließtext zeitlich eingeordnet (z.B. "Ende Mai berichtete ...").
|
- KEINE datierten Verlaufsmarker im Lagebild. Einleitungen wie "Neu am 31.05./01.06.:", "Neu seit gestern:" oder vergleichbare Datums-Changelog-Phrasen sind nicht erlaubt. Falls das BISHERIGE LAGEBILD solche Blöcke enthält, LÖSE SIE AUF: integriere ihren Inhalt in den thematisch passenden Abschnitt und ENTFERNE die "Neu am"-Einleitung samt reiner Datumsgruppierung restlos. Innerhalb eines Abschnitts steht der aktuelle Stand vorne, ältere Belege werden im Fließtext zeitlich eingeordnet (z.B. "Ende Mai berichtete ...").
|
||||||
|
- KEINE stichwortartigen Fragmente und KEINE blanken Quellennummern-Sammlungen. Verboten sind Telegramm-Verkürzungen wie "Teheran-Bluff-Vorwurf [2897]. NYT-Abraham-Accords [2890]." sowie Auffangblöcke ohne Aussage wie "Frühere Belege [2806][2807]...". Jede Quellennummer muss an einem vollständigen, eigenständigen Satz hängen. Falls das BISHERIGE LAGEBILD solche Fragment- oder Sammelblöcke enthält, formuliere sie zu vollständigen Sätzen aus oder lass die betreffende Quellennummer weg. Am Ende eines Abschnitts oder des Lagebildes darf KEINE reine Aufzählung von Quellennummern stehen.
|
||||||
|
|
||||||
REGELN:
|
REGELN:
|
||||||
- Neutral und sachlich - keine Wertungen oder Spekulationen
|
- Neutral und sachlich - keine Wertungen oder Spekulationen
|
||||||
|
|||||||
@@ -352,6 +352,16 @@
|
|||||||
</div>
|
</div>
|
||||||
<form id="new-incident-form">
|
<form id="new-incident-form">
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="inc-type" data-i18n="modal.field.type">Art der Lage</label>
|
||||||
|
<select id="inc-type" onchange="toggleTypeDefaults()">
|
||||||
|
<option value="adhoc" data-i18n="modal.option.type_adhoc">Live-Monitoring : Ereignis beobachten</option>
|
||||||
|
<option value="research" data-i18n="modal.option.type_research">Recherche : Thema analysieren</option>
|
||||||
|
</select>
|
||||||
|
<div class="form-hint" id="type-hint" data-i18n="modal.hint.type_adhoc">
|
||||||
|
Durchsucht laufend hunderte Nachrichtenquellen nach neuen Meldungen. Empfohlen: Automatische Aktualisierung.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<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" data-i18n-attr="placeholder:modal.placeholder.title">
|
<input type="text" id="inc-title" required aria-required="true" placeholder="z.B. Explosion in Madrid" data-i18n-attr="placeholder:modal.placeholder.title">
|
||||||
@@ -367,16 +377,6 @@
|
|||||||
<textarea id="inc-description" placeholder="Weitere Details zum Vorfall (optional)" data-i18n-attr="placeholder:modal.placeholder.description"></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">
|
|
||||||
<label for="inc-type" data-i18n="modal.field.type">Art der Lage</label>
|
|
||||||
<select id="inc-type" onchange="toggleTypeDefaults()">
|
|
||||||
<option value="adhoc" data-i18n="modal.option.type_adhoc">Live-Monitoring : Ereignis beobachten</option>
|
|
||||||
<option value="research" data-i18n="modal.option.type_research">Recherche : Thema analysieren</option>
|
|
||||||
</select>
|
|
||||||
<div class="form-hint" id="type-hint" data-i18n="modal.hint.type_adhoc">
|
|
||||||
Durchsucht laufend hunderte Nachrichtenquellen nach neuen Meldungen. Empfohlen: Automatische Aktualisierung.
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label data-i18n="modal.field.sources">Quellen</label>
|
<label data-i18n="modal.field.sources">Quellen</label>
|
||||||
<div class="toggle-group">
|
<div class="toggle-group">
|
||||||
@@ -420,7 +420,7 @@
|
|||||||
<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" data-i18n="modal.field.interval">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="30" value="30">
|
||||||
<select id="inc-refresh-unit" onchange="updateIntervalMin()">
|
<select id="inc-refresh-unit" onchange="updateIntervalMin()">
|
||||||
<option value="1" selected data-i18n="modal.unit.minutes">Minuten</option>
|
<option value="1" selected data-i18n="modal.unit.minutes">Minuten</option>
|
||||||
<option value="60" data-i18n="modal.unit.hours">Stunden</option>
|
<option value="60" data-i18n="modal.unit.hours">Stunden</option>
|
||||||
@@ -428,6 +428,7 @@
|
|||||||
<option value="10080" data-i18n="modal.unit.weeks">Wochen</option>
|
<option value="10080" data-i18n="modal.unit.weeks">Wochen</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-hint" id="interval-min-hint" style="display:none;"></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"><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>
|
<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>
|
||||||
|
|||||||
@@ -578,8 +578,16 @@ const App = {
|
|||||||
// Telegram-Kategorien Toggle
|
// Telegram-Kategorien Toggle
|
||||||
const tgCheckbox = document.getElementById('inc-telegram');
|
const tgCheckbox = document.getElementById('inc-telegram');
|
||||||
if (tgCheckbox) {
|
if (tgCheckbox) {
|
||||||
|
tgCheckbox.addEventListener('change', () => updateIntervalMin());
|
||||||
}
|
}
|
||||||
|
{ const xCheckbox = document.getElementById('inc-x');
|
||||||
|
if (xCheckbox) xCheckbox.addEventListener('change', () => updateIntervalMin()); }
|
||||||
|
{ const ivInput = document.getElementById('inc-refresh-value');
|
||||||
|
if (ivInput) ivInput.addEventListener('change', () => {
|
||||||
|
const u = parseInt(document.getElementById('inc-refresh-unit').value);
|
||||||
|
const m = (u === 1) ? _getMinIntervalMinutes() : 1;
|
||||||
|
if (isNaN(parseInt(ivInput.value)) || parseInt(ivInput.value) < m) ivInput.value = m;
|
||||||
|
}); }
|
||||||
|
|
||||||
|
|
||||||
// Feedback
|
// Feedback
|
||||||
@@ -1836,9 +1844,9 @@ const App = {
|
|||||||
// === Event Handlers ===
|
// === Event Handlers ===
|
||||||
|
|
||||||
_getFormData() {
|
_getFormData() {
|
||||||
const value = parseInt(document.getElementById('inc-refresh-value').value) || 15;
|
const value = parseInt(document.getElementById('inc-refresh-value').value) || 30;
|
||||||
const unit = parseInt(document.getElementById('inc-refresh-unit').value) || 1;
|
const unit = parseInt(document.getElementById('inc-refresh-unit').value) || 1;
|
||||||
const interval = Math.max(10, Math.min(10080, value * unit));
|
const interval = Math.max(_getMinIntervalMinutes(), Math.min(10080, value * unit));
|
||||||
return {
|
return {
|
||||||
title: document.getElementById('inc-title').value.trim(),
|
title: document.getElementById('inc-title').value.trim(),
|
||||||
description: document.getElementById('inc-description').value.trim() || null,
|
description: document.getElementById('inc-description').value.trim() || null,
|
||||||
@@ -2294,6 +2302,7 @@ async handleRefresh() {
|
|||||||
updateSourcesHint();
|
updateSourcesHint();
|
||||||
toggleTypeDefaults(true);
|
toggleTypeDefaults(true);
|
||||||
toggleRefreshInterval();
|
toggleRefreshInterval();
|
||||||
|
updateIntervalMin();
|
||||||
|
|
||||||
// Modal-Titel und Submit ändern
|
// Modal-Titel und Submit ändern
|
||||||
{ 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-title'); if (_e) _e.textContent = (typeof T === 'function') ? T('modal.new_incident.edit_title', 'Lage bearbeiten') : 'Lage bearbeiten'; }
|
||||||
@@ -3633,6 +3642,7 @@ function openModal(id) {
|
|||||||
document.getElementById('inc-notify-status-change').checked = false;
|
document.getElementById('inc-notify-status-change').checked = false;
|
||||||
toggleTypeDefaults();
|
toggleTypeDefaults();
|
||||||
toggleRefreshInterval();
|
toggleRefreshInterval();
|
||||||
|
updateIntervalMin();
|
||||||
}
|
}
|
||||||
const modal = document.getElementById(id);
|
const modal = document.getElementById(id);
|
||||||
modal._previousFocus = document.activeElement;
|
modal._previousFocus = document.activeElement;
|
||||||
@@ -3814,17 +3824,38 @@ function toggleRefreshInterval() {
|
|||||||
if (startField) startField.classList.toggle('visible', mode === 'auto');
|
if (startField) startField.classList.toggle('visible', mode === 'auto');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function _getMinIntervalMinutes() {
|
||||||
|
// Mindest-Intervall (Minuten) je nach Quellen: 30 Basis, 45 bei X oder Telegram, 60 bei beiden. International zaehlt nicht.
|
||||||
|
const tg = document.getElementById('inc-telegram');
|
||||||
|
const x = document.getElementById('inc-x');
|
||||||
|
const tgOn = !!(tg && tg.checked);
|
||||||
|
const xOn = !!(x && x.checked);
|
||||||
|
if (tgOn && xOn) return 60;
|
||||||
|
if (tgOn || xOn) return 45;
|
||||||
|
return 30;
|
||||||
|
}
|
||||||
|
|
||||||
function updateIntervalMin() {
|
function updateIntervalMin() {
|
||||||
const unit = parseInt(document.getElementById('inc-refresh-unit').value);
|
const unit = parseInt(document.getElementById('inc-refresh-unit').value);
|
||||||
const input = document.getElementById('inc-refresh-value');
|
const input = document.getElementById('inc-refresh-value');
|
||||||
|
const minMinutes = _getMinIntervalMinutes();
|
||||||
|
const hint = document.getElementById('interval-min-hint');
|
||||||
if (unit === 1) {
|
if (unit === 1) {
|
||||||
// Minuten: Minimum 10
|
// Minuten: dynamisches Minimum (30 / 45 bei X oder Telegram / 60 bei beiden)
|
||||||
input.min = 10;
|
input.min = minMinutes;
|
||||||
if (parseInt(input.value) < 10) input.value = 10;
|
if (isNaN(parseInt(input.value)) || parseInt(input.value) < minMinutes) input.value = minMinutes;
|
||||||
|
if (hint) {
|
||||||
|
let zusatz = '';
|
||||||
|
if (minMinutes === 45) zusatz = ' (X oder Telegram aktiv)';
|
||||||
|
else if (minMinutes === 60) zusatz = ' (X und Telegram aktiv)';
|
||||||
|
hint.textContent = 'Mindestens ' + minMinutes + ' Minuten' + zusatz;
|
||||||
|
hint.style.display = '';
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// Stunden/Tage/Wochen: Minimum 1
|
// Stunden/Tage/Wochen: eine Einheit liegt ueber jedem Minuten-Minimum
|
||||||
input.min = 1;
|
input.min = 1;
|
||||||
if (parseInt(input.value) < 1) input.value = 1;
|
if (isNaN(parseInt(input.value)) || parseInt(input.value) < 1) input.value = 1;
|
||||||
|
if (hint) hint.style.display = 'none';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
In neuem Issue referenzieren
Einen Benutzer sperren