PDF: undo delete pages (30 sec window)

- Undo button appears after deleting pages
- Restores original file with all pages
- Re-renders all grids with restored pages
- Auto-hides after 30 seconds
This commit is contained in:
treamz 2026-03-22 10:32:56 +03:00
parent 9711b1b3d3
commit 782149e3fa

View File

@ -769,6 +769,7 @@
<div class="page-grid" id="deletePageGrid"></div> <div class="page-grid" id="deletePageGrid"></div>
<div class="grid-action-bar"> <div class="grid-action-bar">
<button class="grid-action-btn danger" id="btnDeleteSelected" disabled onclick="executeDeletePages()">Удалить выбранные (<span id="deleteCount">0</span>)</button> <button class="grid-action-btn danger" id="btnDeleteSelected" disabled onclick="executeDeletePages()">Удалить выбранные (<span id="deleteCount">0</span>)</button>
<button class="grid-action-btn" id="btnUndoDelete" style="display:none;background:var(--surface-600);color:var(--text-secondary);" onclick="undoDeletePages()">Отменить</button>
<span class="page-grid-hint" id="deleteHint"></span> <span class="page-grid-hint" id="deleteHint"></span>
</div> </div>
</div> </div>
@ -1824,6 +1825,9 @@
return; return;
} }
clearError(); clearError();
// Save backup for undo
const backupFile = { ...selFile };
_deleteBackup = { file: backupFile };
// Hide deleted pages visually // Hide deleted pages visually
const grid = document.getElementById('deletePageGrid'); const grid = document.getElementById('deletePageGrid');
if (grid) { if (grid) {
@ -1843,7 +1847,14 @@
await syncAfterOperation(data); await syncAfterOperation(data);
} catch(e) { showError(e.message); } } catch(e) { showError(e.message); }
document.getElementById('btnDeleteSelected').textContent = 'Удалить выбранные (0)'; document.getElementById('btnDeleteSelected').textContent = 'Удалить выбранные (0)';
document.getElementById('btnUndoDelete').style.display = '';
updateDeleteCount(); updateDeleteCount();
// Auto-hide undo after 30 seconds
setTimeout(() => {
_deleteBackup = null;
var ub = document.getElementById('btnUndoDelete');
if (ub) ub.style.display = 'none';
}, 30000);
}; };
window.executeRotatePages = async function() { window.executeRotatePages = async function() {
@ -2025,6 +2036,23 @@
}); });
} }
// ─── Undo delete ──────────────────────────────────────────────────────────
let _deleteBackup = null; // { fileId, file object before delete }
window.undoDeletePages = function() {
if (!_deleteBackup) return;
// Restore the backed-up file
const old = _deleteBackup;
state.files = state.files.map(f => f.id === state.selectedFileId ? old.file : f);
state.selectedFileId = old.file.id;
_deleteBackup = null;
document.getElementById('btnUndoDelete').style.display = 'none';
stepResult.style.display = 'none';
downloadLink.style.display = 'none';
renderFileList();
};
})(); })();
</script> </script>