diff --git a/package.json b/package.json index 3d558c07f..e2b751e53 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "trilium", "productName": "Trilium Notes", "description": "Trilium Notes", - "version": "0.40.2", + "version": "0.40.3", "license": "AGPL-3.0-only", "main": "electron.js", "bin": { diff --git a/src/entities/note.js b/src/entities/note.js index 8a7cf219b..3336f377a 100644 --- a/src/entities/note.js +++ b/src/entities/note.js @@ -811,8 +811,10 @@ class Note extends Entity { FROM attributes WHERE noteId = ? AND isDeleted = 0 AND - type = 'relation' AND - name IN ('internalLink', 'imageLink', 'relationMapLink', 'includeNoteLink')`, [this.noteId]); + ((type = 'relation' AND + name IN ('internalLink', 'imageLink', 'relationMapLink', 'includeNoteLink')) + OR + (type = 'label' AND name = 'externalLink'))`, [this.noteId]); } /** diff --git a/src/public/javascripts/dialogs/about.js b/src/public/javascripts/dialogs/about.js index 3a07d95c6..0b48712e4 100644 --- a/src/public/javascripts/dialogs/about.js +++ b/src/public/javascripts/dialogs/about.js @@ -10,8 +10,6 @@ const $buildRevision = $("#build-revision"); const $dataDirectory = $("#data-directory"); export async function showDialog() { - utils.closeActiveDialog(); - const appInfo = await server.get('app-info'); $appVersion.text(appInfo.appVersion); @@ -22,7 +20,5 @@ export async function showDialog() { $buildRevision.attr('href', 'https://github.com/zadam/trilium/commit/' + appInfo.buildRevision); $dataDirectory.text(appInfo.dataDirectory); - glob.activeDialog = $dialog; - - $dialog.modal(); + utils.openDialog($dialog); } \ No newline at end of file diff --git a/src/public/javascripts/dialogs/add_link.js b/src/public/javascripts/dialogs/add_link.js index 1af88acf5..d401f75f1 100644 --- a/src/public/javascripts/dialogs/add_link.js +++ b/src/public/javascripts/dialogs/add_link.js @@ -10,8 +10,6 @@ const $linkTitle = $("#link-title"); const $addLinkTitleFormGroup = $("#add-link-title-form-group"); export async function showDialog() { - utils.closeActiveDialog(); - appContext.trigger('executeInActiveEditor', { callback: textEditor => { const hasSelection = !textEditor.model.document.selection.isCollapsed; @@ -20,9 +18,7 @@ export async function showDialog() { } }); - glob.activeDialog = $dialog; - - $dialog.modal(); + utils.openDialog($dialog); $autoComplete.val('').trigger('focus'); $linkTitle.val(''); diff --git a/src/public/javascripts/dialogs/attributes.js b/src/public/javascripts/dialogs/attributes.js index f9b5d9680..27630dd24 100644 --- a/src/public/javascripts/dialogs/attributes.js +++ b/src/public/javascripts/dialogs/attributes.js @@ -279,8 +279,6 @@ function initKoPlugins() { } export async function showDialog() { - utils.closeActiveDialog(); - await libraryLoader.requireLibrary(libraryLoader.KNOCKOUT); // lazily apply bindings on first use @@ -292,11 +290,9 @@ export async function showDialog() { ko.applyBindings(attributesModel, $dialog[0]); } - glob.activeDialog = $dialog; - await attributesModel.loadAttributes(); - $dialog.modal(); + utils.openDialog($dialog); } $dialog.on('focus', '.attribute-name', function (e) { diff --git a/src/public/javascripts/dialogs/backend_log.js b/src/public/javascripts/dialogs/backend_log.js index f899b90e0..ac145f13d 100644 --- a/src/public/javascripts/dialogs/backend_log.js +++ b/src/public/javascripts/dialogs/backend_log.js @@ -6,11 +6,7 @@ const $backendLogTextArea = $("#backend-log-textarea"); const $refreshBackendLog = $("#refresh-backend-log-button"); export async function showDialog() { - utils.closeActiveDialog(); - - glob.activeDialog = $dialog; - - $dialog.modal(); + utils.openDialog($dialog); load(); } diff --git a/src/public/javascripts/dialogs/branch_prefix.js b/src/public/javascripts/dialogs/branch_prefix.js index 2ad7ba247..6e123d873 100644 --- a/src/public/javascripts/dialogs/branch_prefix.js +++ b/src/public/javascripts/dialogs/branch_prefix.js @@ -12,10 +12,6 @@ const $noteTitle = $('#branch-prefix-note-title'); let branchId; export async function showDialog(node) { - utils.closeActiveDialog(); - - glob.activeDialog = $dialog; - branchId = node.data.branchId; const branch = treeCache.getBranch(branchId); @@ -29,7 +25,7 @@ export async function showDialog(node) { return; } - $dialog.modal(); + utils.openDialog($dialog); $treePrefixInput.val(branch.prefix); diff --git a/src/public/javascripts/dialogs/clone_to.js b/src/public/javascripts/dialogs/clone_to.js index 30bfc65c1..f570841e6 100644 --- a/src/public/javascripts/dialogs/clone_to.js +++ b/src/public/javascripts/dialogs/clone_to.js @@ -22,11 +22,7 @@ export async function showDialog(noteIds) { } } - utils.closeActiveDialog(); - - glob.activeDialog = $dialog; - - $dialog.modal(); + utils.openDialog($dialog); $noteAutoComplete.val('').trigger('focus'); diff --git a/src/public/javascripts/dialogs/export.js b/src/public/javascripts/dialogs/export.js index 1cf094e6a..c3b8c8b18 100644 --- a/src/public/javascripts/dialogs/export.js +++ b/src/public/javascripts/dialogs/export.js @@ -18,8 +18,6 @@ let taskId = ''; let branchId = null; export async function showDialog(notePath, defaultType) { - utils.closeActiveDialog(); - // each opening of the dialog resets the taskId so we don't associate it with previous exports anymore taskId = ''; $exportButton.removeAttr("disabled"); @@ -39,9 +37,7 @@ export async function showDialog(notePath, defaultType) { $("#opml-v2").prop("checked", true); // setting default - glob.activeDialog = $dialog; - - $dialog.modal(); + utils.openDialog($dialog); const {noteId, parentNoteId} = treeService.getNoteIdAndParentIdFromNotePath(notePath); diff --git a/src/public/javascripts/dialogs/help.js b/src/public/javascripts/dialogs/help.js index ccf73dfbc..ed8d90a48 100644 --- a/src/public/javascripts/dialogs/help.js +++ b/src/public/javascripts/dialogs/help.js @@ -3,9 +3,5 @@ import utils from "../services/utils.js"; const $dialog = $("#help-dialog"); export async function showDialog() { - utils.closeActiveDialog(); - - glob.activeDialog = $dialog; - - $dialog.modal(); + utils.openDialog($dialog); } \ No newline at end of file diff --git a/src/public/javascripts/dialogs/import.js b/src/public/javascripts/dialogs/import.js index 150f1b748..4903c3935 100644 --- a/src/public/javascripts/dialogs/import.js +++ b/src/public/javascripts/dialogs/import.js @@ -16,8 +16,6 @@ const $explodeArchivesCheckbox = $("#explode-archives-checkbox"); let parentNoteId = null; export async function showDialog(noteId) { - utils.closeActiveDialog(); - $fileUploadInput.val('').trigger('change'); // to trigger Import button disabling listener below $safeImportCheckbox.prop("checked", true); @@ -26,13 +24,11 @@ export async function showDialog(noteId) { $codeImportedAsCodeCheckbox.prop("checked", true); $explodeArchivesCheckbox.prop("checked", true); - glob.activeDialog = $dialog; - parentNoteId = noteId; $noteTitle.text(await treeService.getNoteTitle(parentNoteId)); - $dialog.modal(); + utils.openDialog($dialog); } $form.on('submit', () => { diff --git a/src/public/javascripts/dialogs/include_note.js b/src/public/javascripts/dialogs/include_note.js index ec337518d..56fd2a065 100644 --- a/src/public/javascripts/dialogs/include_note.js +++ b/src/public/javascripts/dialogs/include_note.js @@ -10,13 +10,9 @@ let callback = null; export async function showDialog(cb) { callback = cb; - utils.closeActiveDialog(); - - glob.activeDialog = $dialog; - $autoComplete.val(''); - $dialog.modal(); + utils.openDialog($dialog); noteAutocompleteService.initNoteAutocomplete($autoComplete, { hideGoToSelectedNoteButton: true }); noteAutocompleteService.showRecentNotes($autoComplete); diff --git a/src/public/javascripts/dialogs/info.js b/src/public/javascripts/dialogs/info.js index b3901344b..0db595f55 100644 --- a/src/public/javascripts/dialogs/info.js +++ b/src/public/javascripts/dialogs/info.js @@ -10,13 +10,9 @@ let $originallyFocused; // element focused before the dialog was opened so we ca export function info(message) { $originallyFocused = $(':focus'); - utils.closeActiveDialog(); - - glob.activeDialog = $dialog; - $infoContent.text(message); - $dialog.modal(); + utils.openDialog($dialog); return new Promise((res, rej) => { resolve = res; }); } diff --git a/src/public/javascripts/dialogs/jump_to_note.js b/src/public/javascripts/dialogs/jump_to_note.js index 90b3e330f..14ad90e11 100644 --- a/src/public/javascripts/dialogs/jump_to_note.js +++ b/src/public/javascripts/dialogs/jump_to_note.js @@ -8,13 +8,9 @@ const $autoComplete = $("#jump-to-note-autocomplete"); const $showInFullTextButton = $("#show-in-full-text-button"); export async function showDialog() { - utils.closeActiveDialog(); - - glob.activeDialog = $dialog; - $autoComplete.val(''); - $dialog.modal(); + utils.openDialog($dialog); noteAutocompleteService.initNoteAutocomplete($autoComplete, { hideGoToSelectedNoteButton: true }) .on('autocomplete:selected', function(event, suggestion, dataset) { diff --git a/src/public/javascripts/dialogs/link_map.js b/src/public/javascripts/dialogs/link_map.js index a3ebd4889..af78c8b1e 100644 --- a/src/public/javascripts/dialogs/link_map.js +++ b/src/public/javascripts/dialogs/link_map.js @@ -16,10 +16,6 @@ function getOptions() { } export async function showDialog() { - utils.closeActiveDialog(); - - glob.activeDialog = $dialog; - // set default settings $maxNotesInput.val(20); @@ -27,7 +23,7 @@ export async function showDialog() { $linkMapContainer.empty(); - $dialog.modal(); + utils.openDialog($dialog); } $dialog.on('shown.bs.modal', () => { diff --git a/src/public/javascripts/dialogs/markdown_import.js b/src/public/javascripts/dialogs/markdown_import.js index 0e0c51de2..a8df0a15a 100644 --- a/src/public/javascripts/dialogs/markdown_import.js +++ b/src/public/javascripts/dialogs/markdown_import.js @@ -40,9 +40,7 @@ export async function importMarkdownInline() { convertMarkdownToHtml(text); } else { - glob.activeDialog = $dialog; - - $dialog.modal(); + utils.openDialog($dialog); } } diff --git a/src/public/javascripts/dialogs/move_to.js b/src/public/javascripts/dialogs/move_to.js index 345fb184a..d2561f618 100644 --- a/src/public/javascripts/dialogs/move_to.js +++ b/src/public/javascripts/dialogs/move_to.js @@ -15,11 +15,7 @@ let movedNodes; export async function showDialog(nodes) { movedNodes = nodes; - utils.closeActiveDialog(); - - glob.activeDialog = $dialog; - - $dialog.modal(); + utils.openDialog($dialog); $noteAutoComplete.val('').trigger('focus'); diff --git a/src/public/javascripts/dialogs/note_info.js b/src/public/javascripts/dialogs/note_info.js index 228d8094c..0f16ef191 100644 --- a/src/public/javascripts/dialogs/note_info.js +++ b/src/public/javascripts/dialogs/note_info.js @@ -10,11 +10,7 @@ const $mime = $("#note-info-mime"); const $okButton = $("#note-info-ok-button"); export async function showDialog() { - utils.closeActiveDialog(); - - glob.activeDialog = $dialog; - - $dialog.modal(); + utils.openDialog($dialog); const activeTabContext = appContext.tabManager.getActiveTabContext(); const {note} = activeTabContext; diff --git a/src/public/javascripts/dialogs/note_revisions.js b/src/public/javascripts/dialogs/note_revisions.js index a9d2afb81..633ae6559 100644 --- a/src/public/javascripts/dialogs/note_revisions.js +++ b/src/public/javascripts/dialogs/note_revisions.js @@ -29,11 +29,7 @@ export async function showCurrentNoteRevisions() { } export async function showNoteRevisionsDialog(noteId, noteRevisionId) { - utils.closeActiveDialog(); - - glob.activeDialog = $dialog; - - $dialog.modal(); + utils.openDialog($dialog); await loadNoteRevisions(noteId, noteRevisionId); } diff --git a/src/public/javascripts/dialogs/note_source.js b/src/public/javascripts/dialogs/note_source.js index b881703ea..a5d0418c8 100644 --- a/src/public/javascripts/dialogs/note_source.js +++ b/src/public/javascripts/dialogs/note_source.js @@ -5,11 +5,7 @@ const $dialog = $("#note-source-dialog"); const $noteSource = $("#note-source"); export function showDialog() { - utils.closeActiveDialog(); - - glob.activeDialog = $dialog; - - $dialog.modal(); + utils.openDialog($dialog); const noteText = appContext.tabManager.getActiveTabNote().content; diff --git a/src/public/javascripts/dialogs/options.js b/src/public/javascripts/dialogs/options.js index a3f33959a..bcb71c043 100644 --- a/src/public/javascripts/dialogs/options.js +++ b/src/public/javascripts/dialogs/options.js @@ -6,13 +6,9 @@ import utils from "../services/utils.js"; const $dialog = $("#options-dialog"); export async function showDialog() { - utils.closeActiveDialog(); - - glob.activeDialog = $dialog; - const options = await server.get('options'); - $dialog.modal(); + utils.openDialog($dialog); (await Promise.all([ import('./options/advanced.js'), diff --git a/src/public/javascripts/dialogs/prompt.js b/src/public/javascripts/dialogs/prompt.js index ca0567f40..34acfdaa5 100644 --- a/src/public/javascripts/dialogs/prompt.js +++ b/src/public/javascripts/dialogs/prompt.js @@ -12,10 +12,6 @@ let resolve; let shownCb; export function ask({ message, defaultValue, shown }) { - utils.closeActiveDialog(); - - glob.activeDialog = $dialog; - shownCb = shown; $question = $("