feat: Add reset-to-defaults button for testing

Neuer Button im Footer (🔄) zum Zurücksetzen aller Einstellungen:

Features:
- Löscht alle werkbaum-* localStorage-Einträge (Editor, Einstellungen, Update-Flags)
- Confirm-Dialog mit Warnung (Editor-Inhalt geht verloren)
- Reagiert auf alle Bildschirmgrößen
- Nach Confirm: kurze Verzögerung (Logging sichtbar), dann auto-reload

Hilfreich zum Testen:
- Update-Detection testen (Editor-Inhalt neu setzen)
- High-Risk-Status sehen (mit Reset auf Defaults und neuem Beispiel)
- Alle Einstellungen auf Default zurückbringen

Der Button sitzt unauffällig im Footer als 🔄-Symbol.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-07-23 08:25:06 +02:00
co-authored by Claude Haiku 4.5
parent d5ef3ff800
commit e7db4d53d5
+51
View File
@@ -1363,3 +1363,54 @@ function checkAndShowUpdateNotification(){
notif.remove(); notif.remove();
}); });
} }
/* ---------- Reset-Funktion für Testing ---------- */
function resetToDefaults(){
const confirmed = confirm(
'Wirklich alles auf Defaults zurücksetzen?\n\n' +
'⚠️ Der Editor-Inhalt und alle Einstellungen werden gelöscht.\n' +
'Diese Aktion kann nicht rückgängig gemacht werden.'
);
if(!confirmed) return;
/* Lösche alle Werkbaum-Einträge aus localStorage */
const keysToDelete = Array.from({length: localStorage.length}, (_, i) => localStorage.key(i))
.filter(k => k && k.startsWith('werkbaum-'));
keysToDelete.forEach(k => localStorage.removeItem(k));
logUpdate('🔄 Alle Einstellungen zurückgesetzt');
/* Kurze Verzögerung, damit Logging sichtbar wird, dann reload */
setTimeout(() => {
window.location.reload();
}, 500);
}
/* Reset-Button im Footer hinzufügen */
document.addEventListener('DOMContentLoaded', () => {
const footer = document.querySelector('.site-footer');
if(!footer) return;
const resetBtn = document.createElement('button');
resetBtn.textContent = '🔄';
resetBtn.title = 'App auf Defaults zurücksetzen (alle Einstellungen + Editor löschen)';
resetBtn.style.cssText = `
background: none;
border: none;
color: var(--muted, #999);
cursor: pointer;
font-size: 14px;
padding: 0 4px;
vertical-align: middle;
`;
resetBtn.addEventListener('click', resetToDefaults);
/* Einfügen nach der Versionsnummer */
const verLink = footer.querySelector('.ver');
if(verLink && verLink.nextSibling) {
verLink.parentNode.insertBefore(resetBtn, verLink.nextSibling.nextSibling);
} else {
footer.insertBefore(resetBtn, footer.firstChild);
}
});