Fix: rAF-Sicherheitsnetz fuer Blur zentral in _showPopupProgress
Vorheriger Fix in selectIncident griff nicht beim handleRefresh-Pfad
(manueller Aktualisieren-Klick), weil dieser direkt UI.showProgress aufruft
ohne selectIncident zu durchlaufen. Damit blieb eine Lage, deren erster
Refresh per Klick angestossen wurde, unblurred.
rAF mit add("blurred") jetzt direkt in _showPopupProgress (components.js),
sobald state.isFirst gesetzt ist. Damit greift der Blur in jedem Pfad, der
durch _showPopupProgress laeuft — selectIncident, handleRefresh,
handleStatusUpdate (WebSocket), Initial-Restore.
Der zentrale rAF in selectIncident ist redundant und wieder entfernt.
Der _willReBlur-Skip von remove("blurred") in selectIncident bleibt
erhalten — verhindert ueberfluessiges remove+add im selben Tick.
cache-bust components.js auf v=20260427a, app.js auf v=20260427c.
Dieser Commit ist enthalten in:
@@ -626,9 +626,9 @@
|
|||||||
<script src="/static/vendor/leaflet.markercluster.js"></script>
|
<script src="/static/vendor/leaflet.markercluster.js"></script>
|
||||||
<script src="/static/js/api.js?v=20260423a"></script>
|
<script src="/static/js/api.js?v=20260423a"></script>
|
||||||
<script src="/static/js/ws.js?v=20260316b"></script>
|
<script src="/static/js/ws.js?v=20260316b"></script>
|
||||||
<script src="/static/js/components.js?v=20260316d"></script>
|
<script src="/static/js/components.js?v=20260427a"></script>
|
||||||
<script src="/static/js/layout.js?v=20260316b"></script>
|
<script src="/static/js/layout.js?v=20260316b"></script>
|
||||||
<script src="/static/js/app.js?v=20260427b"></script>
|
<script src="/static/js/app.js?v=20260427c"></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>
|
||||||
|
|||||||
@@ -752,14 +752,6 @@ const App = {
|
|||||||
UI._showPopupProgress(state.step, {}, state);
|
UI._showPopupProgress(state.step, {}, state);
|
||||||
}
|
}
|
||||||
UI._lockActionsIfFirst(state.isFirst);
|
UI._lockActionsIfFirst(state.isFirst);
|
||||||
// _showPopupProgress setzt .blurred bereits, aber CSS filter
|
|
||||||
// greift nach dem grossen DOM-Reshuffle (Display-Toggle,
|
|
||||||
// renderSidebar, leerge innerHTML) im selben Frame nicht
|
|
||||||
// zuverlaessig. Im naechsten Frame nochmal setzen —
|
|
||||||
// idempotent, falls schon gesetzt.
|
|
||||||
if (state.isFirst && grid && !state.minimized) {
|
|
||||||
requestAnimationFrame(() => grid.classList.add('blurred'));
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// No state yet — show popup (first status update will refine)
|
// No state yet — show popup (first status update will refine)
|
||||||
UI.showProgress('researching', {}, id, false);
|
UI.showProgress('researching', {}, id, false);
|
||||||
|
|||||||
@@ -336,7 +336,16 @@ const UI = {
|
|||||||
overlay.classList.add('blocking');
|
overlay.classList.add('blocking');
|
||||||
// Apply blur to grid
|
// Apply blur to grid
|
||||||
const grid = document.querySelector('.tab-panels');
|
const grid = document.querySelector('.tab-panels');
|
||||||
if (grid) grid.classList.add('blurred');
|
if (grid) {
|
||||||
|
grid.classList.add('blurred');
|
||||||
|
// Sicherheitsnetz: bei viel DOM-Reshuffle im selben Tick
|
||||||
|
// (Display-Wechsel, renderSidebar, leere innerHTML) greift
|
||||||
|
// CSS filter:blur erst beim naechsten Layout-Pass. Im
|
||||||
|
// naechsten Frame nochmal setzen — idempotent.
|
||||||
|
requestAnimationFrame(() => {
|
||||||
|
if (state && state.isFirst) grid.classList.add('blurred');
|
||||||
|
});
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
overlay.classList.remove('blocking');
|
overlay.classList.remove('blocking');
|
||||||
}
|
}
|
||||||
|
|||||||
In neuem Issue referenzieren
Einen Benutzer sperren