From b38a63d33627a386b0f954aa4617972d07cd9867 Mon Sep 17 00:00:00 2001 From: zadam Date: Thu, 18 Mar 2021 23:42:30 +0100 Subject: [PATCH] delete notes dialog provides checkbox to switch between delete all clones and normal delete --- src/public/app/dialogs/delete_notes.js | 30 +++++++++++++++----------- src/public/app/services/branches.js | 4 ++-- src/routes/api/notes.js | 4 ++-- src/views/dialogs/delete_notes.ejs | 20 +++++++++++------ 4 files changed, 35 insertions(+), 23 deletions(-) diff --git a/src/public/app/dialogs/delete_notes.js b/src/public/app/dialogs/delete_notes.js index 4aff58b04..20d4013bc 100644 --- a/src/public/app/dialogs/delete_notes.js +++ b/src/public/app/dialogs/delete_notes.js @@ -13,20 +13,16 @@ const $noNoteToDeleteWrapper = $("#no-note-to-delete-wrapper"); const $deleteNotesListWrapper = $("#delete-notes-list-wrapper"); const $brokenRelationsListWrapper = $("#broken-relations-wrapper"); const $brokenRelationsCount = $("#broke-relations-count"); - -const DELETE_NOTE_BUTTON_ID = "delete-notes-dialog-delete-note"; - -let $originallyFocused; // element focused before the dialog was opened so we can return to it afterwards +const $deleteAllClones = $("#delete-all-clones"); let branchIds = null; let resolve = null; -export async function showDialog(branchIdsToDelete) { - branchIds = branchIdsToDelete; - - $originallyFocused = $(':focus'); - - const response = await server.post('delete-notes-preview', {branchIdsToDelete}); +async function renderDeletePreview() { + const response = await server.post('delete-notes-preview', { + branchIdsToDelete: branchIds, + deleteAllClones: isDeleteAllClonesChecked() + }); $deleteNotesList.empty(); $brokenRelationsList.empty(); @@ -58,14 +54,20 @@ export async function showDialog(branchIdsToDelete) { .append(await linkService.createNoteLink(attr.noteId)) ); } +} + +export async function showDialog(branchIdsToDelete) { + branchIds = branchIdsToDelete; + + await renderDeletePreview(); utils.openDialog($dialog); return new Promise((res, rej) => resolve = res); } -export function isDeleteNoteChecked() { - return $("#" + DELETE_NOTE_BUTTON_ID + ":checked").length > 0; +export function isDeleteAllClonesChecked() { + return $deleteAllClones.is(":checked"); } $dialog.on('shown.bs.modal', () => $okButton.trigger("focus")); @@ -81,6 +83,8 @@ $okButton.on('click', () => { resolve({ proceed: true, - deleteClones: false + deleteAllClones: isDeleteAllClonesChecked() }); }); + +$deleteAllClones.on('click', () => renderDeletePreview()); diff --git a/src/public/app/services/branches.js b/src/public/app/services/branches.js index 202b62767..8c7c482d0 100644 --- a/src/public/app/services/branches.js +++ b/src/public/app/services/branches.js @@ -75,7 +75,7 @@ async function deleteNotes(branchIdsToDelete) { } const deleteNotesDialog = await import("../dialogs/delete_notes.js"); - const {proceed, deleteClones} = await deleteNotesDialog.showDialog(branchIdsToDelete); + const {proceed, deleteAllClones} = await deleteNotesDialog.showDialog(branchIdsToDelete); if (!proceed) { return false; @@ -93,7 +93,7 @@ async function deleteNotes(branchIdsToDelete) { const branch = treeCache.getBranch(branchIdToDelete); - if (deleteClones) { + if (deleteAllClones) { await server.remove(`notes/${branch.noteId}` + query); } else { diff --git a/src/routes/api/notes.js b/src/routes/api/notes.js index 8cef50c9d..60eb242d9 100644 --- a/src/routes/api/notes.js +++ b/src/routes/api/notes.js @@ -222,7 +222,7 @@ function eraseDeletedNotesNow() { } function getDeleteNotesPreview(req) { - const {branchIdsToDelete} = req.body; + const {branchIdsToDelete, deleteAllClones} = req.body; const noteIdsToBeDeleted = new Set(); const branchCountToDelete = {}; // noteId => count (integer) @@ -233,7 +233,7 @@ function getDeleteNotesPreview(req) { const note = branch.getNote(); - if (note.getBranches().length <= branchCountToDelete[branch.branchId]) { + if (deleteAllClones || note.getBranches().length <= branchCountToDelete[branch.branchId]) { noteIdsToBeDeleted.add(note.noteId); for (const childBranch of note.getChildBranches()) { diff --git a/src/views/dialogs/delete_notes.ejs b/src/views/dialogs/delete_notes.ejs index 505289b0c..e84a43349 100644 --- a/src/views/dialogs/delete_notes.ejs +++ b/src/views/dialogs/delete_notes.ejs @@ -2,17 +2,25 @@