From 1647a6f50a0e1316bdc088fcf072e6ed96730385 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Wed, 17 Jun 2026 20:17:32 +0000 Subject: [PATCH] Refresh-Intervall: Mindestzeiten je nach Quellen erzwingen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mindest-Aktualisierungsintervall im Lage-Modal: 30 Minuten Basis, 45 bei X oder Telegram, 60 bei X und Telegram zugleich (internationale Quellen ohne Einfluss). Minutenwerte darunter sind im UI nicht mehr einstellbar (min-Attribut, Clamp am Feld und beim Speichern). Beim Umstellen von Stunden auf Minuten wird das Minimum gesetzt und als Hinweis angezeigt. Gilt für Anlegen und Bearbeiten. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/static/dashboard.html | 3 ++- src/static/js/app.js | 47 ++++++++++++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/src/static/dashboard.html b/src/static/dashboard.html index 41e54c7..ef7838e 100644 --- a/src/static/dashboard.html +++ b/src/static/dashboard.html @@ -420,7 +420,7 @@
- +
+
diff --git a/src/static/js/app.js b/src/static/js/app.js index 8d8a552..ed8ad9e 100644 --- a/src/static/js/app.js +++ b/src/static/js/app.js @@ -578,8 +578,16 @@ const App = { // Telegram-Kategorien Toggle const tgCheckbox = document.getElementById('inc-telegram'); 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 @@ -1836,9 +1844,9 @@ const App = { // === Event Handlers === _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 interval = Math.max(10, Math.min(10080, value * unit)); + const interval = Math.max(_getMinIntervalMinutes(), Math.min(10080, value * unit)); return { title: document.getElementById('inc-title').value.trim(), description: document.getElementById('inc-description').value.trim() || null, @@ -2294,6 +2302,7 @@ async handleRefresh() { updateSourcesHint(); toggleTypeDefaults(true); toggleRefreshInterval(); + updateIntervalMin(); // 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'; } @@ -3633,6 +3642,7 @@ function openModal(id) { document.getElementById('inc-notify-status-change').checked = false; toggleTypeDefaults(); toggleRefreshInterval(); + updateIntervalMin(); } const modal = document.getElementById(id); modal._previousFocus = document.activeElement; @@ -3814,17 +3824,38 @@ function toggleRefreshInterval() { 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() { const unit = parseInt(document.getElementById('inc-refresh-unit').value); const input = document.getElementById('inc-refresh-value'); + const minMinutes = _getMinIntervalMinutes(); + const hint = document.getElementById('interval-min-hint'); if (unit === 1) { - // Minuten: Minimum 10 - input.min = 10; - if (parseInt(input.value) < 10) input.value = 10; + // Minuten: dynamisches Minimum (30 / 45 bei X oder Telegram / 60 bei beiden) + input.min = minMinutes; + 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 { - // Stunden/Tage/Wochen: Minimum 1 + // Stunden/Tage/Wochen: eine Einheit liegt ueber jedem Minuten-Minimum 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'; } }