mirror of
https://github.com/zadam/trilium.git
synced 2025-06-06 09:58:32 +02:00
allow deleting notes including all the clones, closes #629
This commit is contained in:
parent
c614bc3263
commit
8dadc7e518
@ -86,21 +86,44 @@ async function deleteNodes(nodes) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const nodeTitles = $("<ul>").append(...nodes.map(node => $("<li>").text(node.title)));
|
const $deleteClonesCheckbox = $('<div class="form-check">')
|
||||||
const confirmText = $("<div>").text('This will delete the following notes and their sub-notes: ').append(nodeTitles);
|
.append($('<input type="checkbox" class="form-check-input" id="delete-clones-checkbox">'))
|
||||||
|
.append($('<label for="delete-clones-checkbox">')
|
||||||
|
.text("delete also all note clones")
|
||||||
|
.attr("title", "all clones of selected notes will be deleted and as such the whole note will be deleted."));
|
||||||
|
const $nodeTitles = $("<ul>").append(...nodes.map(node => $("<li>").text(node.title)));
|
||||||
|
const $confirmText = $("<div>")
|
||||||
|
.append($("<p>").text('This will delete the following notes and their sub-notes: '))
|
||||||
|
.append($nodeTitles)
|
||||||
|
.append($deleteClonesCheckbox);
|
||||||
|
|
||||||
const confirmDialog = await import('../dialogs/confirm.js');
|
const confirmDialog = await import('../dialogs/confirm.js');
|
||||||
|
|
||||||
if (!await confirmDialog.confirm(confirmText)) {
|
if (!await confirmDialog.confirm($confirmText)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const node of nodes) {
|
const deleteClones = $deleteClonesCheckbox.find("input").is(":checked");
|
||||||
const {noteDeleted} = await server.remove('branches/' + node.data.branchId);
|
|
||||||
|
for (const node of nodes) {
|
||||||
|
if (deleteClones) {
|
||||||
|
await server.remove('notes/' + node.data.noteId);
|
||||||
|
|
||||||
if (noteDeleted) {
|
|
||||||
noteDetailService.noteDeleted(node.data.noteId);
|
noteDetailService.noteDeleted(node.data.noteId);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
const {noteDeleted} = await server.remove('branches/' + node.data.branchId);
|
||||||
|
|
||||||
|
if (noteDeleted) {
|
||||||
|
noteDetailService.noteDeleted(node.data.noteId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (deleteClones) {
|
||||||
|
// if clones are also deleted we give up with targeted cleanup of the tree
|
||||||
|
treeService.reload();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// following code assumes that nodes contain only top-most selected nodes - getSelectedNodes has been
|
// following code assumes that nodes contain only top-most selected nodes - getSelectedNodes has been
|
||||||
|
@ -103,7 +103,7 @@ async function deleteBranch(req) {
|
|||||||
const branch = await repository.getBranch(req.params.branchId);
|
const branch = await repository.getBranch(req.params.branchId);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
noteDeleted: await notes.deleteNote(branch)
|
noteDeleted: await notes.deleteBranch(branch)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ async function deleteNote(req) {
|
|||||||
const note = await repository.getNote(noteId);
|
const note = await repository.getNote(noteId);
|
||||||
|
|
||||||
for (const branch of await note.getBranches()) {
|
for (const branch of await note.getBranches()) {
|
||||||
await noteService.deleteNote(branch);
|
await noteService.deleteBranch(branch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ async function ensureNoteIsAbsentFromParent(noteId, parentNoteId) {
|
|||||||
const branch = await repository.getEntity(`SELECT * FROM branches WHERE noteId = ? AND parentNoteId = ? AND isDeleted = 0`, [noteId, parentNoteId]);
|
const branch = await repository.getEntity(`SELECT * FROM branches WHERE noteId = ? AND parentNoteId = ? AND isDeleted = 0`, [noteId, parentNoteId]);
|
||||||
|
|
||||||
if (branch) {
|
if (branch) {
|
||||||
await noteService.deleteNote(branch);
|
await noteService.deleteBranch(branch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -384,7 +384,7 @@ async function updateNote(noteId, noteUpdates) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @return {boolean} - true if note has been deleted, false otherwise */
|
/** @return {boolean} - true if note has been deleted, false otherwise */
|
||||||
async function deleteNote(branch) {
|
async function deleteBranch(branch) {
|
||||||
if (!branch || branch.isDeleted) {
|
if (!branch || branch.isDeleted) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -407,7 +407,7 @@ async function deleteNote(branch) {
|
|||||||
await note.save();
|
await note.save();
|
||||||
|
|
||||||
for (const childBranch of await note.getChildBranches()) {
|
for (const childBranch of await note.getChildBranches()) {
|
||||||
await deleteNote(childBranch);
|
await deleteBranch(childBranch);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const attribute of await note.getOwnedAttributes()) {
|
for (const attribute of await note.getOwnedAttributes()) {
|
||||||
@ -461,7 +461,7 @@ module.exports = {
|
|||||||
createNewNote,
|
createNewNote,
|
||||||
createNote,
|
createNote,
|
||||||
updateNote,
|
updateNote,
|
||||||
deleteNote,
|
deleteBranch,
|
||||||
protectNoteRecursively,
|
protectNoteRecursively,
|
||||||
scanForLinks
|
scanForLinks
|
||||||
};
|
};
|
Loading…
x
Reference in New Issue
Block a user