fix: backup viewer close button — add missing onclick to renderError + Escape key + proper cleanup
This commit is contained in:
+23
-9
@@ -91,6 +91,14 @@ function createOverlay() {
|
|||||||
if (e.target === overlay) close();
|
if (e.target === overlay) close();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Keyboard: Escape closes the viewer
|
||||||
|
_escHandler = (e) => {
|
||||||
|
if (e.key === 'Escape' && state.overlay) {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
document.addEventListener('keydown', _escHandler);
|
||||||
|
|
||||||
const panel = document.createElement('div');
|
const panel = document.createElement('div');
|
||||||
panel.className = 'backup-viewer-panel';
|
panel.className = 'backup-viewer-panel';
|
||||||
panel.id = 'backup-viewer-panel';
|
panel.id = 'backup-viewer-panel';
|
||||||
@@ -124,17 +132,23 @@ function setBody(html) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let _escHandler = null;
|
||||||
|
|
||||||
function close() {
|
function close() {
|
||||||
if (state.overlay) {
|
if (!state.overlay) return;
|
||||||
state.overlay.classList.remove('active');
|
// Remove keyboard listener
|
||||||
setTimeout(() => {
|
if (_escHandler) {
|
||||||
if (state.overlay) state.overlay.remove();
|
document.removeEventListener('keydown', _escHandler);
|
||||||
state.overlay = null;
|
_escHandler = null;
|
||||||
}, 200);
|
|
||||||
}
|
}
|
||||||
|
state.overlay.classList.remove('active');
|
||||||
|
setTimeout(() => {
|
||||||
|
if (state.overlay) state.overlay.remove();
|
||||||
|
state.overlay = null;
|
||||||
|
}, 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Expose globally for inline onclick handlers (bypasses text-node target issues)
|
// Expose globally for inline onclick handlers
|
||||||
window._backupViewerClose = close;
|
window._backupViewerClose = close;
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -156,10 +170,10 @@ function renderLoading() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function renderError(msg) {
|
function renderError(msg) {
|
||||||
return `
|
return \`
|
||||||
<div class="backup-header">
|
<div class="backup-header">
|
||||||
<h3>Backups</h3>
|
<h3>Backups</h3>
|
||||||
<button class="backup-close-btn" title="Fermer">×</button>
|
<button class="backup-close-btn" title="Fermer" onclick="window._backupViewerClose()">×</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="backup-body" style="text-align:center;padding:2rem;color:var(--text-muted)">
|
<div class="backup-body" style="text-align:center;padding:2rem;color:var(--text-muted)">
|
||||||
<p>${escapeHtml(msg)}</p>
|
<p>${escapeHtml(msg)}</p>
|
||||||
|
|||||||
Reference in New Issue
Block a user