diff --git a/public/pdf.html b/public/pdf.html index a3491f0..d0d3c5c 100644 --- a/public/pdf.html +++ b/public/pdf.html @@ -769,6 +769,7 @@
+
@@ -1824,6 +1825,9 @@ return; } clearError(); + // Save backup for undo + const backupFile = { ...selFile }; + _deleteBackup = { file: backupFile }; // Hide deleted pages visually const grid = document.getElementById('deletePageGrid'); if (grid) { @@ -1843,7 +1847,14 @@ await syncAfterOperation(data); } catch(e) { showError(e.message); } document.getElementById('btnDeleteSelected').textContent = 'Удалить выбранные (0)'; + document.getElementById('btnUndoDelete').style.display = ''; 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() { @@ -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(); + }; + })();