diff --git a/package-lock.json b/package-lock.json
index aebe0d41f..7efaa46d3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "trilium",
- "version": "0.46.3-beta",
+ "version": "0.46.4-beta",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
diff --git a/src/public/app/dialogs/delete_notes.js b/src/public/app/dialogs/delete_notes.js
new file mode 100644
index 000000000..35eb880f5
--- /dev/null
+++ b/src/public/app/dialogs/delete_notes.js
@@ -0,0 +1,54 @@
+const $dialog = $("#delete-notes-dialog");
+const $confirmContent = $("#delete-notes-dialog-content");
+const $okButton = $("#delete-notes-dialog-ok-button");
+const $cancelButton = $("#delete-notes-dialog-cancel-button");
+const $custom = $("#delete-notes-dialog-custom");
+
+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
+
+export function showDialog(message) {
+ $originallyFocused = $(':focus');
+
+ $custom.hide();
+
+ glob.activeDialog = $dialog;
+
+ if (typeof message === 'string') {
+ message = $("
").text(message);
+ }
+
+ $confirmContent.empty().append(message);
+
+ $dialog.modal();
+
+ return new Promise((res, rej) => { resolve = res; });
+}
+
+export function isDeleteNoteChecked() {
+ return $("#" + DELETE_NOTE_BUTTON_ID + ":checked").length > 0;
+}
+
+$dialog.on('shown.bs.modal', () => $okButton.trigger("focus"));
+
+$dialog.on("hidden.bs.modal", () => {
+ if (resolve) {
+ resolve(false);
+ }
+
+ if ($originallyFocused) {
+ $originallyFocused.trigger('focus');
+ $originallyFocused = null;
+ }
+});
+
+function doResolve(ret) {
+ resolve(ret);
+ resolve = null;
+
+ $dialog.modal("hide");
+}
+
+$cancelButton.on('click', () => doResolve(false));
+$okButton.on('click', () => doResolve(true));
diff --git a/src/public/app/services/branches.js b/src/public/app/services/branches.js
index 0ae9c0a96..8f368626b 100644
--- a/src/public/app/services/branches.js
+++ b/src/public/app/services/branches.js
@@ -74,6 +74,9 @@ async function deleteNotes(branchIdsToDelete) {
return false;
}
+ const deleteNotesDialog = await import("../dialogs/delete_notes.js");
+ deleteNotesDialog.showDialog();
+
const $deleteClonesCheckbox = $('
')
.append($(''))
.append($('