diff --git a/.idea/dataSources/a2c75661-f9e2-478f-a69f-6a9409e69997.xml b/.idea/dataSources/a2c75661-f9e2-478f-a69f-6a9409e69997.xml index 4a91f09a9..d76c47f86 100644 --- a/.idea/dataSources/a2c75661-f9e2-478f-a69f-6a9409e69997.xml +++ b/.idea/dataSources/a2c75661-f9e2-478f-a69f-6a9409e69997.xml @@ -1,8 +1,8 @@ - + - 3.25.1 + 3.16.1 1 @@ -57,6 +57,7 @@ 1 apiTokenId + 1 @@ -130,17 +131,21 @@ 1 attributeId + 1 noteId + name value + value + attributeId @@ -207,14 +212,17 @@ value 1 branchId + 1 noteId parentNoteId + parentNoteId + branchId @@ -245,6 +253,7 @@ parentNoteId 1 noteId + 1 @@ -275,6 +284,7 @@ parentNoteId 1 noteRevisionId + 1 @@ -359,22 +369,28 @@ parentNoteId 1 noteRevisionId + 1 noteId + utcDateLastEdited + utcDateCreated + dateLastEdited + dateCreated + noteRevisionId @@ -461,28 +477,36 @@ parentNoteId 1 noteId + 1 title + type + isDeleted + dateCreated + dateModified + utcDateCreated + utcDateModified + noteId @@ -523,6 +547,7 @@ parentNoteId 1 name + 1 @@ -558,6 +583,7 @@ parentNoteId 1 noteId + 1 @@ -578,10 +604,12 @@ parentNoteId 1 sourceId + 1 utcDateCreated + sourceId @@ -602,7 +630,7 @@ parentNoteId 4 - int|0s + integer|0s 5 @@ -649,10 +677,12 @@ parentNoteId entityName entityId + 1 utcSyncDate + id diff --git a/package-lock.json b/package-lock.json index 8971d9b29..8a305a9e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3327,9 +3327,12 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "ejs": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.0.2.tgz", - "integrity": "sha512-IncmUpn1yN84hy2shb0POJ80FWrfGNY0cxO9f4v+/sG7qcBvAtVWUA1IdzY/8EYUmOVhoKJVdJjNd3AZcnxOjA==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.2.tgz", + "integrity": "sha512-zFuywxrAWtX5Mk2KAuoJNkXXbfezpNA0v7i+YC971QORguPekpjpAgeOv99YWSdKXwj7JxI2QAWDeDkE8fWtXw==", + "requires": { + "jake": "^10.6.1" + } }, "electron": { "version": "9.0.0-beta.18", @@ -4445,6 +4448,14 @@ "typedarray-to-buffer": "^3.1.5" } }, + "filelist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz", + "integrity": "sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ==", + "requires": { + "minimatch": "^3.0.4" + } + }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", @@ -6146,6 +6157,55 @@ "is-object": "^1.0.1" } }, + "jake": { + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.6.1.tgz", + "integrity": "sha512-pHUK3+V0BjOb1XSi95rbBksrMdIqLVC9bJqDnshVyleYsET3H0XAq+3VB2E3notcYvv4wRdRHn13p7vobG+wfQ==", + "requires": { + "async": "0.9.x", + "chalk": "^2.4.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "jest-worker": { "version": "25.4.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.4.0.tgz", @@ -7017,17 +7077,17 @@ "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" }, "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "requires": { - "mime-db": "1.43.0" + "mime-db": "1.44.0" }, "dependencies": { "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" } } }, @@ -11850,9 +11910,9 @@ } }, "ws": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz", - "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==" + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz", + "integrity": "sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA==" }, "x-xss-protection": { "version": "1.3.0", diff --git a/package.json b/package.json index ef9b88fa7..5a929d021 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "csurf": "1.11.0", "dayjs": "1.8.25", "debug": "4.1.1", - "ejs": "3.0.2", + "ejs": "3.1.2", "electron-debug": "3.0.1", "electron-dl": "3.0.0", "electron-find": "1.0.6", @@ -52,7 +52,7 @@ "ini": "1.3.5", "is-svg": "4.2.1", "jimp": "0.10.3", - "mime-types": "2.1.26", + "mime-types": "2.1.27", "multer": "1.4.2", "node-abi": "2.16.0", "open": "7.0.3", @@ -73,7 +73,7 @@ "turndown": "6.0.0", "turndown-plugin-gfm": "1.0.2", "unescape": "1.0.1", - "ws": "7.2.3", + "ws": "7.2.5", "yauzl": "^2.10.0", "yazl": "^2.5.1" }, diff --git a/src/public/app/desktop.js b/src/public/app/desktop.js index 135f0727f..141b0d80a 100644 --- a/src/public/app/desktop.js +++ b/src/public/app/desktop.js @@ -5,8 +5,9 @@ import bundleService from "./services/bundle.js"; import noteAutocompleteService from './services/note_autocomplete.js'; import macInit from './services/mac_init.js'; import contextMenu from "./services/context_menu.js"; -import DesktopLayout from "./widgets/desktop_layout.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"; glob.setupGlobs(); @@ -23,9 +24,11 @@ $('[data-toggle="tooltip"]').tooltip({ macInit.init(); bundleService.getWidgetBundlesByParent().then(widgetBundles => { - const desktopLayout = new DesktopLayout(widgetBundles); + const layout = window.glob.isMainWindow + ? new DesktopMainWindowLayout(widgetBundles) + : new DesktopExtraWindowLayout(widgetBundles); - appContext.setLayout(desktopLayout); + appContext.setLayout(layout); appContext.start(); }); diff --git a/src/public/app/extra.js b/src/public/app/extra.js deleted file mode 100644 index 1b07ce51b..000000000 --- a/src/public/app/extra.js +++ /dev/null @@ -1,144 +0,0 @@ -import appContext from "./services/app_context.js"; -import utils from './services/utils.js'; -import noteTooltipService from './services/note_tooltip.js'; -import bundleService from "./services/bundle.js"; -import noteAutocompleteService from './services/note_autocomplete.js'; -import macInit from './services/mac_init.js'; -import contextMenu from "./services/context_menu.js"; -import ExtraLayout from "./widgets/extra_layout.js"; -import glob from "./services/glob.js"; - -glob.setupGlobs(); - -if (utils.isElectron()) { - utils.dynamicRequire('electron').ipcRenderer.on('globalShortcut', async function(event, actionName) { - appContext.triggerCommand(actionName); - }); -} - -$('[data-toggle="tooltip"]').tooltip({ - html: true -}); - -macInit.init(); - -bundleService.getWidgetBundlesByParent().then(widgetBundles => { - const extraLayout = new ExtraLayout(widgetBundles); - - appContext.setLayout(extraLayout); - appContext.start(false); -}); - -noteTooltipService.setupGlobalTooltip(); - -noteAutocompleteService.init(); - -if (utils.isElectron()) { - const electron = utils.dynamicRequire('electron'); - const {webContents} = electron.remote.getCurrentWindow(); - - webContents.on('context-menu', (event, params) => { - const {editFlags} = params; - const hasText = params.selectionText.trim().length > 0; - const isMac = process.platform === "darwin"; - const platformModifier = isMac ? 'Meta' : 'Ctrl'; - - const items = []; - - if (params.misspelledWord) { - for (const suggestion of params.dictionarySuggestions) { - items.push({ - title: suggestion, - command: "replaceMisspelling", - spellingSuggestion: suggestion, - uiIcon: "empty" - }); - } - - items.push({ - title: `Add "${params.misspelledWord}" to dictionary`, - uiIcon: "plus", - handler: () => webContents.session.addWordToSpellCheckerDictionary(params.misspelledWord) - }); - - items.push({ title: `----` }); - } - - if (params.isEditable) { - items.push({ - enabled: editFlags.canCut && hasText, - title: `Cut ${platformModifier}+X`, - uiIcon: "cut", - handler: () => webContents.cut() - }); - } - - if (params.isEditable || hasText) { - items.push({ - enabled: editFlags.canCopy && hasText, - title: `Copy ${platformModifier}+C`, - uiIcon: "copy", - handler: () => webContents.copy() - }); - } - - if (params.linkURL.length !== 0 && params.mediaType === 'none') { - items.push({ - title: `Copy link`, - uiIcon: "copy", - handler: () => { - electron.clipboard.write({ - bookmark: params.linkText, - text: params.linkURL - }); - } - }); - } - - if (params.isEditable) { - items.push({ - enabled: editFlags.canPaste, - title: `Paste ${platformModifier}+V`, - uiIcon: "paste", - handler: () => webContents.paste() - }); - } - - if (params.isEditable) { - items.push({ - enabled: editFlags.canPaste, - title: `Paste as plain text ${platformModifier}+Shift+V`, - uiIcon: "paste", - handler: () => webContents.pasteAndMatchStyle() - }); - } - - if (hasText) { - const shortenedSelection = params.selectionText.length > 15 - ? (params.selectionText.substr(0, 13) + "…") - : params.selectionText; - - items.push({ - enabled: editFlags.canPaste, - title: `Search for "${shortenedSelection}" with DuckDuckGo`, - uiIcon: "search-alt", - handler: () => electron.shell.openExternal(`https://duckduckgo.com/?q=${encodeURIComponent(params.selectionText)}`) - }); - } - - if (items.length === 0) { - return; - } - - contextMenu.show({ - x: params.x, - y: params.y, - items, - selectMenuItemHandler: ({command, spellingSuggestion}) => { - if (command === 'replaceMisspelling') { - webContents.insertText(spellingSuggestion); - } - } - }); - }); -} \ No newline at end of file diff --git a/src/public/app/widgets/extra_layout.js b/src/public/app/layouts/desktop_extra_window_layout.js similarity index 62% rename from src/public/app/widgets/extra_layout.js rename to src/public/app/layouts/desktop_extra_window_layout.js index 1a09e39b8..15c46327c 100644 --- a/src/public/app/widgets/extra_layout.js +++ b/src/public/app/layouts/desktop_extra_window_layout.js @@ -1,18 +1,18 @@ -import FlexContainer from "./flex_container.js"; -import GlobalMenuWidget from "./global_menu.js"; -import TabRowWidget from "./tab_row.js"; -import TitleBarButtonsWidget from "./title_bar_buttons.js"; -import NoteTreeWidget from "./note_tree.js"; -import TabCachingWidget from "./tab_caching_widget.js"; -import NoteTitleWidget from "./note_title.js"; -import RunScriptButtonsWidget from "./run_script_buttons.js"; -import ProtectedNoteSwitchWidget from "./protected_note_switch.js"; -import NoteTypeWidget from "./note_type.js"; -import NoteActionsWidget from "./note_actions.js"; -import PromotedAttributesWidget from "./promoted_attributes.js"; -import NoteDetailWidget from "./note_detail.js"; +import FlexContainer from "../widgets/flex_container.js"; +import GlobalMenuWidget from "../widgets/global_menu.js"; +import TabRowWidget from "../widgets/tab_row.js"; +import TitleBarButtonsWidget from "../widgets/title_bar_buttons.js"; +import NoteTreeWidget from "../widgets/note_tree.js"; +import TabCachingWidget from "../widgets/tab_caching_widget.js"; +import NoteTitleWidget from "../widgets/note_title.js"; +import RunScriptButtonsWidget from "../widgets/run_script_buttons.js"; +import ProtectedNoteSwitchWidget from "../widgets/protected_note_switch.js"; +import NoteTypeWidget from "../widgets/note_type.js"; +import NoteActionsWidget from "../widgets/note_actions.js"; +import PromotedAttributesWidget from "../widgets/promoted_attributes.js"; +import NoteDetailWidget from "../widgets/note_detail.js"; -export default class ExtraLayout { +export default class DesktopExtraWindowLayout { constructor(customWidgets) { this.customWidgets = customWidgets; } diff --git a/src/public/app/widgets/desktop_layout.js b/src/public/app/layouts/desktop_main_window_layout.js similarity index 71% rename from src/public/app/widgets/desktop_layout.js rename to src/public/app/layouts/desktop_main_window_layout.js index 8228fbefa..995dbcf15 100644 --- a/src/public/app/widgets/desktop_layout.js +++ b/src/public/app/layouts/desktop_main_window_layout.js @@ -1,30 +1,30 @@ -import FlexContainer from "./flex_container.js"; -import GlobalMenuWidget from "./global_menu.js"; -import TabRowWidget from "./tab_row.js"; -import TitleBarButtonsWidget from "./title_bar_buttons.js"; -import StandardTopWidget from "./standard_top_widget.js"; -import SidePaneContainer from "./side_pane_container.js"; -import GlobalButtonsWidget from "./global_buttons.js"; -import SearchBoxWidget from "./search_box.js"; -import SearchResultsWidget from "./search_results.js"; -import NoteTreeWidget from "./note_tree.js"; -import TabCachingWidget from "./tab_caching_widget.js"; -import NotePathsWidget from "./note_paths.js"; -import NoteTitleWidget from "./note_title.js"; -import RunScriptButtonsWidget from "./run_script_buttons.js"; -import ProtectedNoteSwitchWidget from "./protected_note_switch.js"; -import NoteTypeWidget from "./note_type.js"; -import NoteActionsWidget from "./note_actions.js"; -import PromotedAttributesWidget from "./promoted_attributes.js"; -import NoteDetailWidget from "./note_detail.js"; -import NoteInfoWidget from "./note_info.js"; -import CalendarWidget from "./calendar.js"; -import AttributesWidget from "./attributes.js"; -import LinkMapWidget from "./link_map.js"; -import NoteRevisionsWidget from "./note_revisions.js"; -import SimilarNotesWidget from "./similar_notes.js"; -import WhatLinksHereWidget from "./what_links_here.js"; -import SidePaneToggles from "./side_pane_toggles.js"; +import FlexContainer from "../widgets/flex_container.js"; +import GlobalMenuWidget from "../widgets/global_menu.js"; +import TabRowWidget from "../widgets/tab_row.js"; +import TitleBarButtonsWidget from "../widgets/title_bar_buttons.js"; +import StandardTopWidget from "../widgets/standard_top_widget.js"; +import SidePaneContainer from "../widgets/side_pane_container.js"; +import GlobalButtonsWidget from "../widgets/global_buttons.js"; +import SearchBoxWidget from "../widgets/search_box.js"; +import SearchResultsWidget from "../widgets/search_results.js"; +import NoteTreeWidget from "../widgets/note_tree.js"; +import TabCachingWidget from "../widgets/tab_caching_widget.js"; +import NotePathsWidget from "../widgets/note_paths.js"; +import NoteTitleWidget from "../widgets/note_title.js"; +import RunScriptButtonsWidget from "../widgets/run_script_buttons.js"; +import ProtectedNoteSwitchWidget from "../widgets/protected_note_switch.js"; +import NoteTypeWidget from "../widgets/note_type.js"; +import NoteActionsWidget from "../widgets/note_actions.js"; +import PromotedAttributesWidget from "../widgets/promoted_attributes.js"; +import NoteDetailWidget from "../widgets/note_detail.js"; +import NoteInfoWidget from "../widgets/note_info.js"; +import CalendarWidget from "../widgets/calendar.js"; +import AttributesWidget from "../widgets/attributes.js"; +import LinkMapWidget from "../widgets/link_map.js"; +import NoteRevisionsWidget from "../widgets/note_revisions.js"; +import SimilarNotesWidget from "../widgets/similar_notes.js"; +import WhatLinksHereWidget from "../widgets/what_links_here.js"; +import SidePaneToggles from "../widgets/side_pane_toggles.js"; import appContext from "../services/app_context.js"; const RIGHT_PANE_CSS = ` @@ -98,7 +98,7 @@ const RIGHT_PANE_CSS = ` } `; -export default class DesktopLayout { +export default class DesktopMainWindowLayout { constructor(customWidgets) { this.customWidgets = customWidgets; } diff --git a/src/public/app/widgets/mobile_layout.js b/src/public/app/layouts/mobile_layout.js similarity index 79% rename from src/public/app/widgets/mobile_layout.js rename to src/public/app/layouts/mobile_layout.js index 597681890..5dfc6dfcf 100644 --- a/src/public/app/widgets/mobile_layout.js +++ b/src/public/app/layouts/mobile_layout.js @@ -1,11 +1,11 @@ -import FlexContainer from "./flex_container.js"; -import NoteTitleWidget from "./note_title.js"; -import NoteDetailWidget from "./note_detail.js"; -import NoteTreeWidget from "./note_tree.js"; -import MobileGlobalButtonsWidget from "./mobile_global_buttons.js"; -import CloseDetailButtonWidget from "./close_detail_button.js"; -import MobileDetailMenuWidget from "./mobile_detail_menu.js"; -import ScreenContainer from "./screen_container.js"; +import FlexContainer from "../widgets/flex_container.js"; +import NoteTitleWidget from "../widgets/note_title.js"; +import NoteDetailWidget from "../widgets/note_detail.js"; +import NoteTreeWidget from "../widgets/note_tree.js"; +import MobileGlobalButtonsWidget from "../widgets/mobile_global_buttons.js"; +import CloseDetailButtonWidget from "../widgets/close_detail_button.js"; +import MobileDetailMenuWidget from "../widgets/mobile_detail_menu.js"; +import ScreenContainer from "../widgets/screen_container.js"; const MOBILE_CSS = `