From 761f4c8903ecaaf58a53ce5161843351c487ecb2 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sun, 9 Aug 2026 11:30:44 +0200 Subject: [PATCH] =?UTF-8?q?fix(diagnostic):=20'Sicher=20aufraeumen'=20ohne?= =?UTF-8?q?=20confirm()=20=E2=80=94=20Button=20feuerte=20nie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ursache gefunden (WS-Direkttest beweist: Server-Pfad + Docker-Prune-API funktionieren, aber der Klick kam nie an): runDiskCleanup() rief confirm() VOR dem send(). Hatte der Browser Dialoge unterdrueckt ('Verhindern, dass diese Seite weitere Dialoge erstellt' — bei dem vielen alert()/confirm() im Diagnostic leicht passiert), gab confirm() automatisch false zurueck → return vor send() → Button tat sichtbar nichts. Fix: 'safe' laeuft OHNE confirm (Build-Cache + ungenutzte Images sind ungefaehrlich, keine Volumes/Daten). Nur 'aggressive' (Volumes!) fragt noch. Ergebnis wird am Button + Banner gezeigt, nicht nur per alert() (das koennte genauso unterdrueckt sein). Co-Authored-By: Claude Opus 4.8 --- diagnostic/index.html | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/diagnostic/index.html b/diagnostic/index.html index feb983f..26d1652 100644 --- a/diagnostic/index.html +++ b/diagnostic/index.html @@ -1767,14 +1767,21 @@ if (msg.type === 'disk_cleanup') { const btn = document.getElementById('disk-clean-btn'); + const dtext = document.getElementById('disk-banner-text'); if (msg.status === 'running') { if (btn) { btn.disabled = true; btn.textContent = 'Raeume auf...'; } } else if (msg.status === 'done') { - if (btn) { btn.disabled = false; btn.textContent = 'Sicher aufraeumen'; } - alert('Aufgeraeumt: ' + (msg.freed || '0 MB') + ' frei\n(' + (msg.steps || []).join(', ') + ')'); + // Feedback NICHT nur per alert() (koennte unterdrueckt sein) — + // direkt am Button + im Banner sichtbar machen. + if (btn) { + btn.disabled = false; + btn.textContent = '✓ ' + (msg.freed || '0 MB') + ' frei'; + setTimeout(() => { btn.textContent = 'Sicher aufraeumen'; }, 6000); + } + if (dtext) dtext.textContent = 'Aufgeraeumt: ' + (msg.freed || '0 MB') + ' frei (' + (msg.steps || []).join(', ') + '). Disk-Status aktualisiert sich gleich.'; } else if (msg.status === 'error') { - if (btn) { btn.disabled = false; btn.textContent = 'Sicher aufraeumen'; } - alert('Aufraeumen fehlgeschlagen: ' + (msg.error || '')); + if (btn) { btn.disabled = false; btn.textContent = 'Fehler — nochmal'; setTimeout(() => { btn.textContent = 'Sicher aufraeumen'; }, 6000); } + if (dtext) dtext.textContent = 'Aufraeumen fehlgeschlagen: ' + (msg.error || ''); } return; } @@ -6776,12 +6783,17 @@ // Fuehrt das Aufraeumen WIRKLICH aus (Server-seitig via Docker-API), statt // nur den Befehl zu kopieren. + // WICHTIG: "safe" laeuft OHNE confirm() — Build-Cache + ungenutzte Images + // sind ungefaehrlich (keine Volumes/Daten). Frueher blockte ein confirm() + // den Klick, wenn der Browser Dialoge unterdrueckt hatte ("Verhindern, + // dass diese Seite weitere Dialoge erstellt") → confirm()===false → es ging + // NICHTS raus. Nur "aggressive" (Volumes!) fragt noch nach. function runDiskCleanup(variant) { const aggressive = variant === 'aggressive'; - const q = aggressive - ? 'AGGRESSIV aufraeumen? Loescht zusaetzlich ungenutzte Volumes — nur wenn ALLE ARIA-Container laufen, sonst Datenverlust!' - : 'Sicher aufraeumen? Loescht Build-Cache + ungenutzte Images (keine Volumes, keine Daten gehen verloren).'; - if (!confirm(q)) return; + if (aggressive) { + const ok = confirm('AGGRESSIV aufraeumen? Loescht zusaetzlich ungenutzte Volumes — nur wenn ALLE ARIA-Container laufen, sonst Datenverlust!'); + if (!ok) return; + } const btn = document.getElementById('disk-clean-btn'); if (btn && !aggressive) { btn.disabled = true; btn.textContent = 'Raeume auf...'; } send({ action: 'disk_cleanup', variant });