From f8bec3589349b44c9d54e274cb73763bd10766fb Mon Sep 17 00:00:00 2001 From: zadam Date: Tue, 5 Jan 2021 14:22:11 +0100 Subject: [PATCH] use selected text to apply filtering for add link dialog, closes #1515 --- package-lock.json | 85 ++++++++++--------- package.json | 6 +- src/public/app/dialogs/add_link.js | 13 ++- src/public/app/services/note_autocomplete.js | 12 +++ .../app/widgets/type_widgets/editable_text.js | 15 +++- 5 files changed, 83 insertions(+), 48 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3e4efe33d..ca0fc60f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -904,18 +904,18 @@ } }, "@webpack-cli/info": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.0.tgz", - "integrity": "sha512-+wA8lBKopgKmN76BSGJVJby5ZXDlsrO6p/nm7fUBsHznRNWB/ozotJP7Yfcz8JPfqeG2LxwYlTH2u6D9a/0XAw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.1.tgz", + "integrity": "sha512-fLnDML5HZ5AEKzHul8xLAksoKN2cibu6MgonkUj8R9V7bbeVRkd1XbGEGWrAUNYHbX1jcqCsDEpBviE5StPMzQ==", "dev": true, "requires": { "envinfo": "^7.7.3" } }, "@webpack-cli/serve": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.2.0.tgz", - "integrity": "sha512-jI3P7jMp/AXDSPkM+ClwRcJZbxnlvNC8bVZBmyRr4scMMZ4p5WQcXkw3Q+Hc7RQekomJlBMN+UQGliT4hhG8Vw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.2.1.tgz", + "integrity": "sha512-Zj1z6AyS+vqV6Hfi7ngCjFGdHV5EwZNIHo6QfFTNe9PyW+zBU1zJ9BiOW1pmUEq950RC4+Dym6flyA/61/vhyw==", "dev": true }, "@xtuc/ieee754": { @@ -2361,9 +2361,9 @@ } }, "dayjs": { - "version": "1.9.8", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.9.8.tgz", - "integrity": "sha512-F42qBtJRa30FKF7XDnOQyNUTsaxDkuaZRj/i7BejSHC34LlLfPoIU4aeopvWfM+m1dJ6/DHKAWLg2ur+pLgq1w==" + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.1.tgz", + "integrity": "sha512-2xg7JrHQeLBQFkvTumLoy62x1siyeocc98QwjtURgvRqOPYmAkMUdmSjrOA+MlmL6QMQn5MUhDf6rNZNuPc1LQ==" }, "debug": { "version": "4.1.1", @@ -3402,19 +3402,19 @@ "dev": true }, "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" }, "dependencies": { @@ -3430,13 +3430,10 @@ } }, "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "dev": true }, "shebang-command": { "version": "2.0.0", @@ -3453,6 +3450,12 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4266,9 +4269,9 @@ } }, "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, "iconv-lite": { @@ -5116,17 +5119,17 @@ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", "requires": { - "mime-db": "1.44.0" + "mime-db": "1.45.0" }, "dependencies": { "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" } } }, @@ -7695,18 +7698,18 @@ } }, "webpack-cli": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.3.0.tgz", - "integrity": "sha512-gve+BBKrzMPTOYDjupzV8JchUznhVWMKtWM1hFIQWi6XoeLvGNoQwkrtMWVb+aJ437GgCKdta7sIn10v621pKA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.3.1.tgz", + "integrity": "sha512-/F4+9QNZM/qKzzL9/06Am8NXIkGV+/NqQ62Dx7DSqudxxpAgBqYn6V7+zp+0Y7JuWksKUbczRY3wMTd+7Uj6OA==", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/info": "^1.2.0", - "@webpack-cli/serve": "^1.2.0", + "@webpack-cli/info": "^1.2.1", + "@webpack-cli/serve": "^1.2.1", "colorette": "^1.2.1", "commander": "^6.2.0", "enquirer": "^2.3.6", - "execa": "^4.1.0", + "execa": "^5.0.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", "interpret": "^2.2.0", diff --git a/package.json b/package.json index 75ca94310..abc18103c 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "commonmark": "0.29.3", "cookie-parser": "1.4.5", "csurf": "1.11.0", - "dayjs": "1.9.8", + "dayjs": "1.10.1", "ejs": "3.1.5", "electron-debug": "3.2.0", "electron-dl": "3.0.2", @@ -51,7 +51,7 @@ "is-svg": "4.2.1", "jimp": "0.16.1", "jsdom": "^16.4.0", - "mime-types": "2.1.27", + "mime-types": "2.1.28", "multer": "1.4.2", "node-abi": "2.19.3", "open": "7.3.0", @@ -87,7 +87,7 @@ "lorem-ipsum": "2.0.3", "rcedit": "3.0.0", "webpack": "5.11.1", - "webpack-cli": "4.3.0" + "webpack-cli": "4.3.1" }, "optionalDependencies": { "electron-installer-debian": "2.0.1" diff --git a/src/public/app/dialogs/add_link.js b/src/public/app/dialogs/add_link.js index 4f29bb39a..5da0b6b44 100644 --- a/src/public/app/dialogs/add_link.js +++ b/src/public/app/dialogs/add_link.js @@ -12,7 +12,7 @@ const $addLinkTitleFormGroup = $("#add-link-title-form-group"); /** @var TextTypeWidget */ let textTypeWidget; -export async function showDialog(widget) { +export async function showDialog(widget, text = '') { textTypeWidget = widget; $addLinkTitleSettings.toggle(!textTypeWidget.hasSelection()); @@ -31,7 +31,7 @@ export async function showDialog(widget) { utils.openDialog($dialog); - $autoComplete.val('').trigger('focus'); + $autoComplete.val(''); $linkTitle.val(''); async function setDefaultLinkTitle(noteId) { @@ -62,7 +62,14 @@ export async function showDialog(widget) { } }); - noteAutocompleteService.showRecentNotes($autoComplete); + if (text && text.trim()) { + noteAutocompleteService.setText($autoComplete, text); + } + else { + noteAutocompleteService.showRecentNotes($autoComplete); + } + + $autoComplete.trigger('focus'); } function getLinkType() { diff --git a/src/public/app/services/note_autocomplete.js b/src/public/app/services/note_autocomplete.js index 29918c271..7b7203cf6 100644 --- a/src/public/app/services/note_autocomplete.js +++ b/src/public/app/services/note_autocomplete.js @@ -55,6 +55,17 @@ function clearText($el) { $el.autocomplete("val", "").trigger('change'); } +function setText($el, text) { + if (utils.isMobile()) { + return; + } + + $el.setSelectedNotePath(""); + $el + .autocomplete("val", text.trim()) + .autocomplete("open"); +} + function showRecentNotes($el) { if (utils.isMobile()) { return; @@ -200,5 +211,6 @@ export default { autocompleteSourceForCKEditor, initNoteAutocomplete, showRecentNotes, + setText, init } diff --git a/src/public/app/widgets/type_widgets/editable_text.js b/src/public/app/widgets/type_widgets/editable_text.js index 2e36e58b4..557237d18 100644 --- a/src/public/app/widgets/type_widgets/editable_text.js +++ b/src/public/app/widgets/type_widgets/editable_text.js @@ -228,7 +228,20 @@ export default class EditableTextTypeWidget extends AbstractTextTypeWidget { } addLinkToTextCommand() { - import("../../dialogs/add_link.js").then(d => d.showDialog(this)); + const selectedText = this.getSelectedText(); + + import("../../dialogs/add_link.js").then(d => d.showDialog(this, selectedText)); + } + + getSelectedText() { + const range = this.textEditor.model.document.selection.getFirstRange(); + let text = ''; + + for (const item of range.getItems()) { + text += item.data; + } + + return text; } addIncludeNoteToTextCommand() {