From dfa1ab65c6fb025b0fb386e87b4745e1df88a214 Mon Sep 17 00:00:00 2001 From: zadam Date: Mon, 12 Aug 2019 20:41:38 +0200 Subject: [PATCH 1/5] allow requiring native node modules from backend scripts --- package-lock.json | 14 +++++++------- package.json | 2 +- src/services/script_context.js | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index c5b817440..02e5f1307 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "trilium", - "version": "0.34.1", + "version": "0.34.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -3108,9 +3108,9 @@ "integrity": "sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q==" }, "electron": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-6.0.0.tgz", - "integrity": "sha512-JVHj0dYtvVFrzVk1TgvrdXJSyLpdvlWNLhtG8ItYZsyg9XbCOQ9OoPfgLm04FjMzKMzEl4YIN0PfGC02MTx3PQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-6.0.1.tgz", + "integrity": "sha512-XY69rI5IThIxsOS2BD+1ZkHE9hqkm4xN5a3WQFSmFRr2by4q5CnIe9vXmptlouGPTLs3tb7ySX/+K9CvH3szvg==", "dev": true, "requires": { "@types/node": "^10.12.18", @@ -3720,9 +3720,9 @@ "dev": true }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } diff --git a/package.json b/package.json index 51486f224..6bc6f041d 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ }, "devDependencies": { "devtron": "1.4.0", - "electron": "6.0.0", + "electron": "6.0.1", "electron-builder": "21.1.5", "electron-compile": "6.4.4", "electron-installer-debian": "2.0.0", diff --git a/src/services/script_context.js b/src/services/script_context.js index e7dd13718..c65558aaa 100644 --- a/src/services/script_context.js +++ b/src/services/script_context.js @@ -11,7 +11,7 @@ function ScriptContext(allNotes, apiParams = {}) { const note = candidates.find(c => c.title === moduleName); if (!note) { - throw new Error("Could not find module note " + moduleName); + return require(moduleName); } return this.modules[note.noteId].exports; From 493cd1a7e01e98be720370d0d2a5b65b0edc6d83 Mon Sep 17 00:00:00 2001 From: zadam Date: Mon, 12 Aug 2019 22:25:42 +0200 Subject: [PATCH 2/5] better behavior of activateNote frontend script --- src/public/javascripts/services/frontend_script_api.js | 8 ++++++-- src/public/javascripts/services/tree.js | 6 +++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/public/javascripts/services/frontend_script_api.js b/src/public/javascripts/services/frontend_script_api.js index f766b95ba..af761d69f 100644 --- a/src/public/javascripts/services/frontend_script_api.js +++ b/src/public/javascripts/services/frontend_script_api.js @@ -40,9 +40,13 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, tabConte * @returns {Promise} */ this.activateNote = async (notePath, noteLoadedListener) => { - await treeService.activateNote(notePath, noteLoadedListener); + await treeService.activateNote(notePath, async () => { + await treeService.scrollToActiveNote(); - await treeService.scrollToActiveNote(); + if (noteLoadedListener) { + noteLoadedListener(); + } + }); }; /** diff --git a/src/public/javascripts/services/tree.js b/src/public/javascripts/services/tree.js index 1cc5093dc..d699f6fc8 100644 --- a/src/public/javascripts/services/tree.js +++ b/src/public/javascripts/services/tree.js @@ -562,7 +562,7 @@ async function collapseTree(node = null) { } function focusTree() { - $tree.find('.fancytree-container').focus(); + getTree().setFocus(); } async function scrollToActiveNote() { @@ -573,8 +573,8 @@ async function scrollToActiveNote() { const node = await expandToNote(activeContext.notePath); - node.makeVisible({scrollIntoView: true}); - node.setFocus(true); + await node.makeVisible({scrollIntoView: true}); + node.setFocus(); } } From f30eec77379eb6ae9315e33750401eab0a80073d Mon Sep 17 00:00:00 2001 From: zadam Date: Mon, 12 Aug 2019 22:41:53 +0200 Subject: [PATCH 3/5] make sure all keyboard shortcuts use utility methods to not break mobile frontend --- .../javascripts/dialogs/jump_to_note.js | 2 +- .../javascripts/dialogs/markdown_import.js | 2 +- src/public/javascripts/dialogs/sql_console.js | 2 +- .../javascripts/services/entrypoints.js | 40 +++++++++---------- .../services/frontend_script_api.js | 2 +- src/public/javascripts/services/mac_init.js | 12 +++--- .../javascripts/services/note_detail.js | 8 ++-- .../javascripts/services/tab_context.js | 2 +- src/public/javascripts/services/tree.js | 8 ++-- src/public/javascripts/services/utils.js | 4 +- 10 files changed, 41 insertions(+), 41 deletions(-) diff --git a/src/public/javascripts/dialogs/jump_to_note.js b/src/public/javascripts/dialogs/jump_to_note.js index 4cd5bd2ca..46533ff31 100644 --- a/src/public/javascripts/dialogs/jump_to_note.js +++ b/src/public/javascripts/dialogs/jump_to_note.js @@ -45,7 +45,7 @@ function showInFullText(e) { $showInFullTextButton.click(showInFullText); -$dialog.bind('keydown', 'ctrl+return', showInFullText); +utils.bindElShortcut($dialog, 'ctrl+return', showInFullText); export default { showDialog diff --git a/src/public/javascripts/dialogs/markdown_import.js b/src/public/javascripts/dialogs/markdown_import.js index e1eb3c11e..eab3843e1 100644 --- a/src/public/javascripts/dialogs/markdown_import.js +++ b/src/public/javascripts/dialogs/markdown_import.js @@ -53,7 +53,7 @@ async function sendForm() { $importButton.click(sendForm); -$dialog.bind('keydown', 'ctrl+return', sendForm); +utils.bindElShortcut($dialog, 'ctrl+return', sendForm); // for CKEditor integration (button on block toolbar) window.glob.importMarkdownInline = importMarkdownInline; diff --git a/src/public/javascripts/dialogs/sql_console.js b/src/public/javascripts/dialogs/sql_console.js index bba3fe08b..92a87b243 100644 --- a/src/public/javascripts/dialogs/sql_console.js +++ b/src/public/javascripts/dialogs/sql_console.js @@ -127,7 +127,7 @@ async function showTables() { } } -$query.bind('keydown', 'ctrl+return', execute); +utils.bindElShortcut($query, 'ctrl+return', execute); $executeButton.click(execute); diff --git a/src/public/javascripts/services/entrypoints.js b/src/public/javascripts/services/entrypoints.js index beea315d6..7e6d73c06 100644 --- a/src/public/javascripts/services/entrypoints.js +++ b/src/public/javascripts/services/entrypoints.js @@ -23,11 +23,11 @@ function registerEntrypoints() { jQuery.hotkeys.options.filterContentEditable = false; jQuery.hotkeys.options.filterTextInputs = false; - utils.bindShortcut('ctrl+l', addLinkDialog.showDialog); - utils.bindShortcut('ctrl+shift+l', addLinkDialog.showDialogForClone); + utils.bindGlobalShortcut('ctrl+l', addLinkDialog.showDialog); + utils.bindGlobalShortcut('ctrl+shift+l', addLinkDialog.showDialogForClone); $("#jump-to-note-dialog-button").click(jumpToNoteDialog.showDialog); - utils.bindShortcut('ctrl+j', jumpToNoteDialog.showDialog); + utils.bindGlobalShortcut('ctrl+j', jumpToNoteDialog.showDialog); $("#recent-changes-button").click(recentChangesDialog.showDialog); @@ -35,11 +35,11 @@ function registerEntrypoints() { $("#leave-protected-session-button").click(protectedSessionService.leaveProtectedSession); $("#toggle-search-button").click(searchNotesService.toggleSearch); - utils.bindShortcut('ctrl+s', searchNotesService.toggleSearch); + utils.bindGlobalShortcut('ctrl+s', searchNotesService.toggleSearch); const $noteTabContainer = $("#note-tab-container"); $noteTabContainer.on("click", ".show-attributes-button", attributesDialog.showDialog); - utils.bindShortcut('alt+a', attributesDialog.showDialog); + utils.bindGlobalShortcut('alt+a', attributesDialog.showDialog); $noteTabContainer.on("click", ".show-note-info-button", noteInfoDialog.showDialog); @@ -66,10 +66,10 @@ function registerEntrypoints() { $("#options-button").click(optionsDialog.showDialog); $("#show-help-button").click(helpDialog.showDialog); - utils.bindShortcut('f1', helpDialog.showDialog); + utils.bindGlobalShortcut('f1', helpDialog.showDialog); $("#open-sql-console-button").click(sqlConsoleDialog.showDialog); - utils.bindShortcut('alt+o', sqlConsoleDialog.showDialog); + utils.bindGlobalShortcut('alt+o', sqlConsoleDialog.showDialog); $("#show-about-dialog-button").click(aboutDialog.showDialog); @@ -80,32 +80,32 @@ function registerEntrypoints() { if (utils.isMac()) { // Mac has a different history navigation shortcuts - https://github.com/zadam/trilium/issues/376 - utils.bindShortcut('meta+left', window.history.back); - utils.bindShortcut('meta+right', window.history.forward); + utils.bindGlobalShortcut('meta+left', window.history.back); + utils.bindGlobalShortcut('meta+right', window.history.forward); } else { - utils.bindShortcut('alt+left', window.history.back); - utils.bindShortcut('alt+right', window.history.forward); + utils.bindGlobalShortcut('alt+left', window.history.back); + utils.bindGlobalShortcut('alt+right', window.history.forward); } } - utils.bindShortcut('alt+m', e => { + utils.bindGlobalShortcut('alt+m', e => { $(".hide-toggle").toggle(); $("#container").toggleClass("distraction-free-mode"); }); // hide (toggle) everything except for the note content for distraction free writing - utils.bindShortcut('alt+t', e => { + utils.bindGlobalShortcut('alt+t', e => { const date = new Date(); const dateString = utils.formatDateTime(date); linkService.addTextToEditor(dateString); }); - utils.bindShortcut('f5', utils.reloadApp); + utils.bindGlobalShortcut('f5', utils.reloadApp); $("#reload-frontend-button").click(utils.reloadApp); - utils.bindShortcut('ctrl+r', utils.reloadApp); + utils.bindGlobalShortcut('ctrl+r', utils.reloadApp); $("#open-dev-tools-button").toggle(utils.isElectron()); @@ -116,7 +116,7 @@ function registerEntrypoints() { return false; }; - utils.bindShortcut('ctrl+shift+i', openDevTools); + utils.bindGlobalShortcut('ctrl+shift+i', openDevTools); $("#open-dev-tools-button").click(openDevTools); } @@ -141,7 +141,7 @@ function registerEntrypoints() { } if (utils.isElectron()) { - utils.bindShortcut('ctrl+f', () => { + utils.bindGlobalShortcut('ctrl+f', () => { findInPage.openFindWindow(); return false; @@ -161,7 +161,7 @@ function registerEntrypoints() { $("#toggle-fullscreen-button").click(toggleFullscreen); - utils.bindShortcut('f11', toggleFullscreen); + utils.bindGlobalShortcut('f11', toggleFullscreen); } else { // outside of electron this is handled by the browser @@ -169,8 +169,8 @@ function registerEntrypoints() { } if (utils.isElectron()) { - utils.bindShortcut('ctrl+-', zoomService.decreaseZoomFactor); - utils.bindShortcut('ctrl+=', zoomService.increaseZoomFactor); + utils.bindGlobalShortcut('ctrl+-', zoomService.decreaseZoomFactor); + utils.bindGlobalShortcut('ctrl+=', zoomService.increaseZoomFactor); } } diff --git a/src/public/javascripts/services/frontend_script_api.js b/src/public/javascripts/services/frontend_script_api.js index af761d69f..ff83baab1 100644 --- a/src/public/javascripts/services/frontend_script_api.js +++ b/src/public/javascripts/services/frontend_script_api.js @@ -95,7 +95,7 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, tabConte } if (opts.shortcut) { - $(document).bind('keydown', opts.shortcut, opts.action); + utils.bindGlobalShortcut(opts.shortcut, opts.action); button.attr("title", "Shortcut " + opts.shortcut); } diff --git a/src/public/javascripts/services/mac_init.js b/src/public/javascripts/services/mac_init.js index 11598ecc1..624c4858f 100644 --- a/src/public/javascripts/services/mac_init.js +++ b/src/public/javascripts/services/mac_init.js @@ -5,12 +5,12 @@ import utils from "./utils.js"; function init() { if (utils.isElectron() && utils.isMac()) { - utils.bindShortcut('meta+c', () => exec("copy")); - utils.bindShortcut('meta+v', () => exec('paste')); - utils.bindShortcut('meta+x', () => exec('cut')); - utils.bindShortcut('meta+a', () => exec('selectAll')); - utils.bindShortcut('meta+z', () => exec('undo')); - utils.bindShortcut('meta+y', () => exec('redo')); + utils.bindGlobalShortcut('meta+c', () => exec("copy")); + utils.bindGlobalShortcut('meta+v', () => exec('paste')); + utils.bindGlobalShortcut('meta+x', () => exec('cut')); + utils.bindGlobalShortcut('meta+a', () => exec('selectAll')); + utils.bindGlobalShortcut('meta+z', () => exec('undo')); + utils.bindGlobalShortcut('meta+y', () => exec('redo')); } } diff --git a/src/public/javascripts/services/note_detail.js b/src/public/javascripts/services/note_detail.js index 4196cbb78..2c079d199 100644 --- a/src/public/javascripts/services/note_detail.js +++ b/src/public/javascripts/services/note_detail.js @@ -457,17 +457,17 @@ $(tabRow.el).on('contextmenu', '.note-tab', e => { }); if (utils.isElectron()) { - utils.bindShortcut('ctrl+t', () => { + utils.bindGlobalShortcut('ctrl+t', () => { openEmptyTab(); }); - utils.bindShortcut('ctrl+w', () => { + utils.bindGlobalShortcut('ctrl+w', () => { if (tabRow.activeTabEl) { tabRow.removeTab(tabRow.activeTabEl); } }); - utils.bindShortcut('ctrl+tab', () => { + utils.bindGlobalShortcut('ctrl+tab', () => { const nextTab = tabRow.nextTabEl; if (nextTab) { @@ -475,7 +475,7 @@ if (utils.isElectron()) { } }); - utils.bindShortcut('ctrl+shift+tab', () => { + utils.bindGlobalShortcut('ctrl+shift+tab', () => { const prevTab = tabRow.previousTabEl; if (prevTab) { diff --git a/src/public/javascripts/services/tab_context.js b/src/public/javascripts/services/tab_context.js index d2d35e758..9a4298236 100644 --- a/src/public/javascripts/services/tab_context.js +++ b/src/public/javascripts/services/tab_context.js @@ -83,7 +83,7 @@ class TabContext { if (utils.isDesktop()) { // keyboard plugin is not loaded in mobile - this.$noteTitle.bind('keydown', 'return', () => { + utils.bindElShortcut(this.$noteTitle, 'return', () => { this.getComponent().focus(); return false; // to not propagate the enter into the editor (causes issues with codemirror) diff --git a/src/public/javascripts/services/tree.js b/src/public/javascripts/services/tree.js index d699f6fc8..f23972784 100644 --- a/src/public/javascripts/services/tree.js +++ b/src/public/javascripts/services/tree.js @@ -769,7 +769,7 @@ messagingService.subscribeToSyncMessages(syncData => { } }); -utils.bindShortcut('ctrl+o', async () => { +utils.bindGlobalShortcut('ctrl+o', async () => { const node = getActiveNode(); const parentNoteId = node.data.parentNoteId; const isProtected = await treeUtils.getParentProtectedStatus(node); @@ -815,9 +815,9 @@ async function reloadNote(noteId) { window.glob.createNoteInto = createNoteInto; -utils.bindShortcut('ctrl+p', createNoteInto); +utils.bindGlobalShortcut('ctrl+p', createNoteInto); -utils.bindShortcut('ctrl+.', scrollToActiveNote); +utils.bindGlobalShortcut('ctrl+.', scrollToActiveNote); $(window).bind('hashchange', async function() { if (isNotePathInAddress()) { @@ -845,7 +845,7 @@ $tree.on('mousedown', '.fancytree-title', e => { } }); -utils.bindShortcut('alt+c', () => collapseTree()); // don't use shortened form since collapseTree() accepts argument +utils.bindGlobalShortcut('alt+c', () => collapseTree()); // don't use shortened form since collapseTree() accepts argument $collapseTreeButton.click(() => collapseTree()); $createTopLevelNoteButton.click(createNewTopLevelNote); diff --git a/src/public/javascripts/services/utils.js b/src/public/javascripts/services/utils.js index 350596aa4..81c150fc4 100644 --- a/src/public/javascripts/services/utils.js +++ b/src/public/javascripts/services/utils.js @@ -129,7 +129,7 @@ function randomString(len) { return text; } -function bindShortcut(keyboardShortcut, handler) { +function bindGlobalShortcut(keyboardShortcut, handler) { bindElShortcut($(document), keyboardShortcut, handler); } @@ -221,7 +221,7 @@ export default { download, toObject, randomString, - bindShortcut, + bindGlobalShortcut, bindElShortcut, isMobile, isDesktop, From 90f1bfb3e4838cfea676c7968473c6978ecbed1b Mon Sep 17 00:00:00 2001 From: zadam Date: Tue, 13 Aug 2019 21:48:45 +0200 Subject: [PATCH 4/5] electron 6.0.2 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 02e5f1307..16c5cca97 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3108,9 +3108,9 @@ "integrity": "sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q==" }, "electron": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-6.0.1.tgz", - "integrity": "sha512-XY69rI5IThIxsOS2BD+1ZkHE9hqkm4xN5a3WQFSmFRr2by4q5CnIe9vXmptlouGPTLs3tb7ySX/+K9CvH3szvg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/electron/-/electron-6.0.2.tgz", + "integrity": "sha512-2SV10JlUsEGZ8CePeQIllFBwrOmm1EONne3Ev7Ro1F4tuS9sF184d3/3wZjEtwOs7hsM6elceYnNuZfx93++YA==", "dev": true, "requires": { "@types/node": "^10.12.18", diff --git a/package.json b/package.json index 6bc6f041d..0ca42b249 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ }, "devDependencies": { "devtron": "1.4.0", - "electron": "6.0.1", + "electron": "6.0.2", "electron-builder": "21.1.5", "electron-compile": "6.4.4", "electron-installer-debian": "2.0.0", From 5406b09f3a66c04227f70f923ccbb430d28c9f42 Mon Sep 17 00:00:00 2001 From: zadam Date: Tue, 13 Aug 2019 21:48:56 +0200 Subject: [PATCH 5/5] release 0.34.3 --- package.json | 2 +- src/services/build.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 0ca42b249..a8f07eb91 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "trilium", "productName": "Trilium Notes", "description": "Trilium Notes", - "version": "0.34.2", + "version": "0.34.3", "license": "AGPL-3.0-only", "main": "electron.js", "bin": { diff --git a/src/services/build.js b/src/services/build.js index 1473eee4a..459f4011a 100644 --- a/src/services/build.js +++ b/src/services/build.js @@ -1 +1 @@ -module.exports = { buildDate:"2019-08-01T21:37:59+02:00", buildRevision: "4dd6352aec73db55852068ec146ee0f39bce4027" }; +module.exports = { buildDate:"2019-08-13T21:48:56+02:00", buildRevision: "90f1bfb3e4838cfea676c7968473c6978ecbed1b" };