From e1a16b4a9ff0c9b743483afc244205c783cbc293 Mon Sep 17 00:00:00 2001 From: zadam Date: Thu, 11 Mar 2021 20:28:07 +0100 Subject: [PATCH 1/2] defensive check, #1736 --- src/routes/api/clipper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/api/clipper.js b/src/routes/api/clipper.js index 324b7c5bb..13b7a4496 100644 --- a/src/routes/api/clipper.js +++ b/src/routes/api/clipper.js @@ -106,7 +106,7 @@ function processContent(images, note, content) { for (const {src, dataUrl, imageId} of images) { const filename = path.basename(src); - if (!dataUrl.startsWith("data:image")) { + if (!dataUrl || !dataUrl.startsWith("data:image")) { log.info("Image could not be recognized as data URL:", dataUrl.substr(0, Math.min(100, dataUrl.length))); continue; } From 03a11e6f77cc29a198eab841cedb086168218f8b Mon Sep 17 00:00:00 2001 From: zadam Date: Thu, 11 Mar 2021 22:35:53 +0100 Subject: [PATCH 2/2] delete notes skeleton dialog --- package-lock.json | 2 +- src/public/app/dialogs/delete_notes.js | 54 ++++++++++++++++++++++++++ src/public/app/services/branches.js | 9 ++--- src/views/desktop.ejs | 1 + src/views/dialogs/delete_notes.ejs | 23 +++++++++++ 5 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 src/public/app/dialogs/delete_notes.js create mode 100644 src/views/dialogs/delete_notes.ejs 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($('