diff --git a/package-lock.json b/package-lock.json index ab50152f5..53df9ab4b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3345,9 +3345,9 @@ } }, "electron": { - "version": "9.0.0-beta.22", - "resolved": "https://registry.npmjs.org/electron/-/electron-9.0.0-beta.22.tgz", - "integrity": "sha512-dfqAf+CXXTKcNDj7DU7mYsmx+oZQcXOvJnZ8ZsgAHjrE9Tv8zsYUgCP3JlO4Z8CIazgleKXYmgh6H2stdK7fEA==", + "version": "9.0.0-beta.24", + "resolved": "https://registry.npmjs.org/electron/-/electron-9.0.0-beta.24.tgz", + "integrity": "sha512-25L3XMqm/1CCaV5CgU5ZkhKXw9830WeipJrTW0+VC5XTKp/3xHwhxyQ5G1kQnOTJd7IGwOamvw237D6e1YKnng==", "dev": true, "requires": { "@electron/get": "^1.0.1", diff --git a/package.json b/package.json index 7e36d93f4..ef0690863 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "yazl": "^2.5.1" }, "devDependencies": { - "electron": "9.0.0-beta.22", + "electron": "9.0.0-beta.24", "electron-builder": "22.6.0", "electron-packager": "14.2.1", "electron-rebuild": "1.10.1", diff --git a/src/public/app/desktop.js b/src/public/app/desktop.js index 774cd3f2c..a40aef397 100644 --- a/src/public/app/desktop.js +++ b/src/public/app/desktop.js @@ -8,6 +8,7 @@ import contextMenu from "./services/context_menu.js"; import DesktopMainWindowLayout from "./layouts/desktop_main_window_layout.js"; import glob from "./services/glob.js"; import DesktopExtraWindowLayout from "./layouts/desktop_extra_window_layout.js"; +import zoomService from './services/zoom.js'; glob.setupGlobs(); @@ -133,9 +134,11 @@ if (utils.isElectron()) { return; } + const zoomLevel = zoomService.getCurrentZoom(); + contextMenu.show({ - x: params.x, - y: params.y, + x: params.x / zoomLevel, + y: params.y / zoomLevel, items, selectMenuItemHandler: ({command, spellingSuggestion}) => { if (command === 'replaceMisspelling') { @@ -144,4 +147,4 @@ if (utils.isElectron()) { } }); }); -} \ No newline at end of file +} diff --git a/src/public/app/services/app_context.js b/src/public/app/services/app_context.js index 9cdbfb955..238db11d3 100644 --- a/src/public/app/services/app_context.js +++ b/src/public/app/services/app_context.js @@ -4,7 +4,7 @@ import DialogCommandExecutor from "./dialog_command_executor.js"; import Entrypoints from "./entrypoints.js"; import options from "./options.js"; import utils from "./utils.js"; -import ZoomService from "./zoom.js"; +import zoomService from "./zoom.js"; import TabManager from "./tab_manager.js"; import treeService from "./tree.js"; import Component from "../widgets/component.js"; @@ -73,7 +73,7 @@ class AppContext extends Component { } if (utils.isElectron()) { - this.child(new ZoomService()); + this.child(zoomService); } this.triggerEvent('initialRenderComplete'); @@ -134,4 +134,4 @@ $(window).on('hashchange', function() { } }); -export default appContext; \ No newline at end of file +export default appContext; diff --git a/src/public/app/services/link.js b/src/public/app/services/link.js index 9a32f3e6c..224e16dbe 100644 --- a/src/public/app/services/link.js +++ b/src/public/app/services/link.js @@ -81,24 +81,29 @@ function goToLink(e) { } else if (e.which === 1) { const activeTabContext = appContext.tabManager.getActiveTabContext(); - activeTabContext.setNote(notePath) + activeTabContext.setNote(notePath); } else { return false; } } else { - const address = $link.attr('href'); + if (e.which === 1) { + const address = $link.attr('href'); - if (address && address.startsWith('http')) { - window.open(address, '_blank'); + if (address && address.startsWith('http')) { + window.open(address, '_blank'); + } + } + else { + return false; } } return true; } -function newTabContextMenu(e) { +function linkContextMenu(e) { const $link = $(e.target).closest("a"); const notePath = getNotePathFromLink($link); @@ -113,7 +118,7 @@ function newTabContextMenu(e) { x: e.pageX, y: e.pageY, items: [ - {title: "Open note in new tab", command: "openNoteInNewTab", uiIcon: "arrow-up-right"}, + {title: "Open note in new tab", command: "openNoteInNewTab", uiIcon: "empty"}, {title: "Open note in new window", command: "openNoteInNewWindow", uiIcon: "window-open"} ], selectMenuItemHandler: ({command}) => { @@ -155,21 +160,23 @@ $(document).on('mousedown', '.note-detail-text a', function (e) { $(document).on('mousedown', '.note-detail-book a', goToLink); $(document).on('mousedown', '.note-detail-render a', goToLink); -$(document).on('mousedown', '.note-detail-text.ck-read-only a,.note-detail-text a.reference-link', goToLink); +$(document).on('mousedown', '.note-detail-text a.reference-link', goToLink); +$(document).on('mousedown', '.note-detail-readonly-text a', goToLink); $(document).on('mousedown', 'a.ck-link-actions__preview', goToLink); $(document).on('click', 'a.ck-link-actions__preview', e => { e.preventDefault(); e.stopPropagation(); }); -$(document).on('contextmenu', 'a.ck-link-actions__preview', newTabContextMenu); -$(document).on('contextmenu', '.note-detail-text a', newTabContextMenu); -$(document).on('contextmenu', "a[data-action='note']", newTabContextMenu); -$(document).on('contextmenu', ".note-detail-render a", newTabContextMenu); -$(document).on('contextmenu', ".note-paths-widget a", newTabContextMenu); +$(document).on('contextmenu', 'a.ck-link-actions__preview', linkContextMenu); +$(document).on('contextmenu', '.note-detail-text a', linkContextMenu); +$(document).on('contextmenu', '.note-detail-readonly-text a', linkContextMenu); +$(document).on('contextmenu', "a[data-action='note']", linkContextMenu); +$(document).on('contextmenu', ".note-detail-render a", linkContextMenu); +$(document).on('contextmenu', ".note-paths-widget a", linkContextMenu); export default { getNotePathFromUrl, createNoteLink, goToLink -}; \ No newline at end of file +}; diff --git a/src/public/app/services/ws.js b/src/public/app/services/ws.js index d06cac0fb..89fcdebcc 100644 --- a/src/public/app/services/ws.js +++ b/src/public/app/services/ws.js @@ -170,7 +170,7 @@ function connectWebSocket() { async function sendPing() { if (Date.now() - lastPingTs > 30000) { - console.log(utils.now(), "Lost websocket connection to the backend"); + console.log(utils.now(), "Lost websocket connection to the backend. If you keep having this issue repeatedly, you might want to check your reverse proxy (nginx, apache) configuration and allow/unblock WebSocket."); } if (ws.readyState === ws.OPEN) { @@ -374,4 +374,4 @@ export default { subscribeToMessages, waitForSyncId, waitForMaxKnownSyncId -}; \ No newline at end of file +}; diff --git a/src/public/app/services/zoom.js b/src/public/app/services/zoom.js index d94066a80..ad7faa08b 100644 --- a/src/public/app/services/zoom.js +++ b/src/public/app/services/zoom.js @@ -5,31 +5,33 @@ import utils from "../services/utils.js"; const MIN_ZOOM = 0.5; const MAX_ZOOM = 2.0; -export default class ZoomService extends Component { +class ZoomService extends Component { constructor() { super(); - this.setZoomFactor(options.getFloat('zoomFactor')); + options.initializedPromise.then(() => { + this.setZoomFactor(options.getFloat('zoomFactor')); + }); } setZoomFactor(zoomFactor) { zoomFactor = parseFloat(zoomFactor); - + const webFrame = utils.dynamicRequire('electron').webFrame; webFrame.setZoomFactor(zoomFactor); } - + async setZoomFactorAndSave(zoomFactor) { if (zoomFactor >= MIN_ZOOM && zoomFactor <= MAX_ZOOM) { this.setZoomFactor(zoomFactor); - + await options.save('zoomFactor', zoomFactor); } else { console.log(`Zoom factor ${zoomFactor} outside of the range, ignored.`); } } - + getCurrentZoom() { return utils.dynamicRequire('electron').webFrame.getZoomFactor(); } @@ -45,4 +47,8 @@ export default class ZoomService extends Component { setZoomFactorAndSaveEvent({zoomFactor}) { this.setZoomFactorAndSave(zoomFactor); } -} \ No newline at end of file +} + +const zoomService = new ZoomService(); + +export default zoomService; diff --git a/src/views/desktop.ejs b/src/views/desktop.ejs index 3e303f691..837e8d8d4 100644 --- a/src/views/desktop.ejs +++ b/src/views/desktop.ejs @@ -5,7 +5,7 @@ Trilium Notes - +
@@ -82,9 +82,5 @@ - -