fix(diagnostic): 'Sicher aufraeumen' ohne confirm() — Button feuerte nie

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 <noreply@anthropic.com>
This commit is contained in:
2026-08-09 11:30:44 +02:00
co-authored by Claude Opus 4.8
parent 091a1b7755
commit 761f4c8903
+20 -8
View File
@@ -1767,14 +1767,21 @@
if (msg.type === 'disk_cleanup') { if (msg.type === 'disk_cleanup') {
const btn = document.getElementById('disk-clean-btn'); const btn = document.getElementById('disk-clean-btn');
const dtext = document.getElementById('disk-banner-text');
if (msg.status === 'running') { if (msg.status === 'running') {
if (btn) { btn.disabled = true; btn.textContent = 'Raeume auf...'; } if (btn) { btn.disabled = true; btn.textContent = 'Raeume auf...'; }
} else if (msg.status === 'done') { } else if (msg.status === 'done') {
if (btn) { btn.disabled = false; btn.textContent = 'Sicher aufraeumen'; } // Feedback NICHT nur per alert() (koennte unterdrueckt sein) —
alert('Aufgeraeumt: ' + (msg.freed || '0 MB') + ' frei\n(' + (msg.steps || []).join(', ') + ')'); // 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') { } else if (msg.status === 'error') {
if (btn) { btn.disabled = false; btn.textContent = 'Sicher aufraeumen'; } if (btn) { btn.disabled = false; btn.textContent = 'Fehler — nochmal'; setTimeout(() => { btn.textContent = 'Sicher aufraeumen'; }, 6000); }
alert('Aufraeumen fehlgeschlagen: ' + (msg.error || '')); if (dtext) dtext.textContent = 'Aufraeumen fehlgeschlagen: ' + (msg.error || '');
} }
return; return;
} }
@@ -6776,12 +6783,17 @@
// Fuehrt das Aufraeumen WIRKLICH aus (Server-seitig via Docker-API), statt // Fuehrt das Aufraeumen WIRKLICH aus (Server-seitig via Docker-API), statt
// nur den Befehl zu kopieren. // 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) { function runDiskCleanup(variant) {
const aggressive = variant === 'aggressive'; const aggressive = variant === 'aggressive';
const q = aggressive if (aggressive) {
? 'AGGRESSIV aufraeumen? Loescht zusaetzlich ungenutzte Volumes — nur wenn ALLE ARIA-Container laufen, sonst Datenverlust!' const ok = confirm('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 (!ok) return;
if (!confirm(q)) return; }
const btn = document.getElementById('disk-clean-btn'); const btn = document.getElementById('disk-clean-btn');
if (btn && !aggressive) { btn.disabled = true; btn.textContent = 'Raeume auf...'; } if (btn && !aggressive) { btn.disabled = true; btn.textContent = 'Raeume auf...'; }
send({ action: 'disk_cleanup', variant }); send({ action: 'disk_cleanup', variant });