1
0
mirror of https://github.com/laurent22/joplin.git synced 2026-04-18 19:42:23 +02:00

Compare commits

..

163 Commits

Author SHA1 Message Date
Laurent Cozic bfae770b19 Testing adding type to plugin framework 2020-10-06 19:08:33 +01:00
Laurent Cozic e570f7a226 Disable filters for now 2020-10-06 18:23:15 +01:00
Laurent Cozic 9b28a8995f Open plugin dev tool window 2020-10-06 18:14:46 +01:00
Laurent Cozic 197f509f5d Increase version to 1.3 2020-10-06 14:04:21 +01:00
Laurent Cozic 4c83d7aa75 Fixed sidebar resize issue 2020-10-06 12:03:15 +01:00
Laurent Cozic 17e053b358 Handle module change event 2020-10-06 11:33:13 +01:00
Laurent Cozic a29c93634d Converted locale file to TS 2020-10-06 10:27:43 +01:00
Laurent Cozic a5f5bfcfec clean up 2020-10-06 10:16:18 +01:00
Laurent Cozic b509329383 Convert interopservicehelper to TS 2020-10-06 10:14:54 +01:00
Laurent Cozic 91c7abed42 Added back support for keymap on command service 2020-10-06 09:55:23 +01:00
Laurent Cozic 54fda6ac97 Refactored menu bar 2020-10-05 19:29:53 +01:00
Laurent Cozic 341eefebaf Converted BaseApplication to TypeScripy 2020-10-05 14:44:56 +01:00
Laurent Cozic af714cbdac Optimize command state handling 2020-10-05 13:20:23 +01:00
Laurent Cozic 6a0bf15c28 Clean up 2020-10-03 18:24:44 +01:00
Laurent Cozic 5a2bdad348 Cleaned up toolbar code to improve rendering 2020-10-03 18:22:39 +01:00
Laurent Cozic fd08bfdd86 Better way to create buttonToolbarInfos 2020-10-03 17:49:28 +01:00
Laurent Cozic 1a5cead659 Added @typescript-eslint/explicit-member-accessibility rule 2020-10-03 15:45:32 +01:00
Laurent Cozic 85df133386 Added command service tests and a way to get multiple toolbar buttons 2020-10-03 15:36:23 +01:00
Laurent Cozic 869d11e113 Added way to parse when-clauses for commands 2020-10-03 14:40:12 +01:00
Laurent Cozic d7a01d3965 Fixed issue with state that was accidentally mutated 2020-10-02 20:06:52 +01:00
Laurent Cozic 989036241d Fixed toolbar button label 2020-10-02 20:03:14 +01:00
Laurent Cozic 433cef1827 Fixed encryption config screen password save logic 2020-10-02 19:59:36 +01:00
Laurent Cozic 433d34f62b Resize app content when banner is added on top 2020-10-02 19:40:12 +01:00
Laurent Cozic e7ec33bbf9 Added event tests 2020-10-02 18:48:25 +01:00
Laurent Cozic a29f42d78d Converted synchronizer to TypeScript 2020-10-02 18:03:29 +01:00
Laurent Cozic 74ed234ab9 Added support for onAlarmTrigger event 2020-10-02 17:41:18 +01:00
Laurent Cozic 86b76ccb77 Fixed setting plugin 2020-10-02 16:49:39 +01:00
Laurent Cozic 29aedf8480 Fixed toc demo 2020-10-02 16:21:32 +01:00
Laurent Cozic 9486f5e0d2 Simplify plugin 2020-10-02 16:07:04 +01:00
Laurent Cozic 9a458431b8 Fixed sandbox proxy namespace logic 2020-10-02 15:56:34 +01:00
Laurent Cozic 2c9db9d18c Fixed dialog plugin API 2020-10-02 15:21:58 +01:00
Laurent Cozic ae9c535842 Improved setting API 2020-10-02 13:02:39 +01:00
Laurent Cozic a518da587e Fixed demo 2020-10-02 12:52:05 +01:00
Laurent Cozic 92e6e00d9e Fixed commands 2020-10-02 12:49:40 +01:00
Laurent Cozic b64c9cf18a Finished refactoring interop service 2020-10-02 12:42:25 +01:00
Laurent Cozic 275d6e230d Converted shim to TypeScript 2020-10-02 11:38:04 +01:00
Laurent Cozic ab8ce15c33 Fixed command api 2020-10-02 10:42:03 +01:00
Laurent Cozic 3fb6179587 lonter 2020-10-02 01:03:39 +01:00
Laurent Cozic 28cc38064c Fixed interop plugin API to work with multi-process arch and cleaned up interop service 2020-10-02 00:44:42 +01:00
Laurent Cozic 1fa5ab2b96 Refactoring and got ipc messages to work 2020-10-01 23:42:49 +01:00
Laurent Cozic 15f4e635d9 Minor tweaks 2020-10-01 15:10:59 +01:00
Laurent Cozic 7a79d7ef7e Refactoring and got ipc messages to work 2020-10-01 14:47:38 +01:00
Laurent Cozic 776e7dfe3f renaming logger 2020-10-01 10:31:01 +01:00
Laurent Cozic 790b622cbc Updated doc 2020-09-30 23:38:28 +01:00
Laurent Cozic 89117b4ee9 Renamed 2020-09-30 23:36:27 +01:00
Laurent Cozic c245517e0f Renamed to PlatformImplementation 2020-09-30 23:31:27 +01:00
Laurent Cozic 31db95d0c4 Cleaned up plugin API names 2020-09-30 23:17:18 +01:00
Laurent Cozic 2cd50de065 Moved plugin classes under /plugins namespace 2020-09-30 23:07:46 +01:00
Laurent Cozic 6dcb7e2605 Added doc 2020-09-30 17:19:34 +01:00
Laurent Cozic 9c9bd4ba51 Changed plugin system architecture to allow using one process per plugin 2020-09-30 16:56:41 +01:00
Laurent Cozic 71e6964945 Added proxy class 2020-09-30 10:24:15 +01:00
Laurent Cozic 97dc2fa6bd Fixed tests 2020-09-29 16:42:32 +01:00
Laurent Cozic 161e112e7b Added support for getting selected notes and adding a context menu item 2020-09-29 16:28:25 +01:00
Laurent Cozic c93a6f86cd Added way to add a custom Markdown plugin 2020-09-29 15:29:11 +01:00
Laurent Cozic 9bb178b9d9 Fixed broken merge 2020-09-29 15:28:12 +01:00
Laurent Cozic 8087bc5280 Merge branch 'dev' into plugin_system 2020-09-29 14:30:33 +01:00
Laurent Cozic 100aaab58d Refactor reducer to TypeScript and using immerjs 2020-09-29 11:16:01 +01:00
Laurent Cozic 126c7b5a75 Merge branch 'dev' into reducer_refactor 2020-09-29 11:00:31 +01:00
Laurent Cozic d448ea3a02 Merge branch 'dev' into plugin_system 2020-09-29 10:59:55 +01:00
Laurent Cozic 555727e5fe Refactor reducer 2020-09-29 10:56:33 +01:00
Laurent Cozic 77eceea426 Ensure plugin settings are within their own namespaces 2020-09-28 18:11:53 +01:00
Laurent Cozic a09c6f152c Added support for plugin dialogs 2020-09-28 17:26:22 +01:00
Laurent Cozic 3830195752 Allow creating new section from plugin 2020-09-27 13:45:08 +01:00
Laurent Cozic c9594065c3 Refactor Settings 2020-09-27 13:31:45 +01:00
Laurent Cozic 360d3bbff9 Allow creating new settings from plugin 2020-09-27 13:03:37 +01:00
Laurent Cozic 6fde8dfe52 Refactored Settings into TypeScript 2020-09-26 18:14:00 +01:00
Laurent Cozic de2ccfbfe0 Added explanation for shim timers and implemented RN side 2020-09-26 12:42:44 +01:00
Laurent Cozic 31f53b12fd Move timers to shim 2020-09-26 12:19:13 +01:00
Laurent Cozic d45b280ada Done text selection plugin 2020-09-25 11:18:06 +01:00
Laurent Cozic b5a137545e Add support getting and replacing editor selection 2020-09-24 18:35:20 +01:00
Laurent Cozic 4e80dbb7a7 Allow tagging desktop-only feature in plugin doc 2020-09-24 15:53:37 +01:00
Laurent Cozic 90b0c99806 Merge branch 'release-1.2' into plugin_system 2020-09-24 14:50:20 +01:00
Laurent Cozic c8c0c3af46 Changed to node-slug 2020-09-23 17:34:58 +01:00
Laurent Cozic 110de50bf9 Allow setting custom shortcuts and saving/loading them 2020-09-23 17:26:30 +01:00
Laurent Cozic b7e110d888 Converted eventManager to TypeScript 2020-09-23 16:25:00 +01:00
Laurent Cozic f1c557cb43 Converted app to TypeScript 2020-09-23 15:51:31 +01:00
Laurent Cozic 43e9fc92c9 Adding support for custom menu items 2020-09-23 15:24:42 +01:00
Laurent Cozic 10fa331731 Define plugin state types 2020-09-23 15:18:45 +01:00
Laurent Cozic cc8e122de3 Added support for custom commands and toolbar buttons 2020-09-23 15:10:31 +01:00
Laurent Cozic bca5fd8db9 gitignore 2020-09-23 14:10:02 +01:00
Laurent Cozic 13101f7d9b Merge branch 'dev' into plugin_system 2020-09-23 14:09:21 +01:00
Laurent Cozic 4f2884a0f7 Started adding support for registering commands 2020-09-21 11:38:09 +01:00
Laurent Cozic 4872f1419c Also add placeholder for JSON import 2020-09-20 16:57:17 +01:00
Laurent Cozic fdcaab3caf Got JSON export working as a plugin 2020-09-20 16:19:37 +01:00
Laurent Cozic 9f2c4b938f Added complete lib to plugin doc 2020-09-20 15:36:30 +01:00
Laurent Cozic 8be65acf7d Testing interop plugin 2020-09-20 12:09:32 +01:00
Laurent Cozic e05aa433e4 Allow creating custom exporters 2020-09-19 15:50:46 +01:00
Laurent Cozic ccfb0b43d6 Refactor 2020-09-19 14:56:49 +01:00
Laurent Cozic 4211e962c6 Merge branch 'release-1.2' into plugin_system 2020-09-19 14:22:24 +01:00
Laurent Cozic 6b54c4244b Refactored 2020-09-19 14:19:09 +01:00
Laurent Cozic 1d5a4bd381 Simplified interop interface 2020-09-19 12:20:01 +01:00
Laurent Cozic 86a1103a64 Remove JSON exporter 2020-09-19 11:13:49 +01:00
Laurent Cozic 45edaaa96f Converted interop service to TypeScript 2020-09-19 11:04:29 +01:00
Laurent Cozic b7b158aa94 Fixed doc title 2020-09-18 15:53:25 +01:00
Laurent Cozic e6bc55b6f8 Update plugin doc 2020-09-18 15:46:25 +01:00
Laurent Cozic 111092791c Updated plugin doc 2020-09-18 13:10:47 +01:00
Laurent Cozic 4e91e01ddc Updated plugin doc 2020-09-18 13:08:01 +01:00
Laurent Cozic 44dce6c6c3 Fixed frozen state issue 2020-09-18 10:10:26 +01:00
Laurent Cozic b25ad50a1b Add more doc 2020-09-18 09:59:22 +01:00
Laurent Cozic e2e3be66ee doc 2020-09-17 18:02:57 +01:00
Laurent Cozic 4b3119ebba Finished tutorial 2020-09-17 17:39:15 +01:00
Laurent Cozic 1712a67e2e Doc draft 2020-09-17 16:19:25 +01:00
Laurent Cozic cd563b050c Bottom border on user views 2020-09-17 15:41:05 +01:00
Laurent Cozic 4426f2dbec Make sure plugin views can be resized 2020-09-17 15:08:43 +01:00
Laurent Cozic 0fbbf2eee0 Remember plugin view sizes 2020-09-17 14:51:50 +01:00
Laurent Cozic 2fdad2fe80 Make sure user views have a stable ID 2020-09-17 09:22:03 +01:00
Laurent Cozic 0249ff48ca Removed obsolete handlers 2020-09-17 08:51:12 +01:00
Laurent Cozic 142fc02f9c Simplified UserWebview component 2020-09-16 17:57:30 +01:00
Laurent Cozic 842b123285 Fixed slub 2020-09-16 17:30:39 +01:00
Laurent Cozic a4aca68b85 Support for theme in webview 2020-09-16 17:27:13 +01:00
Laurent Cozic 1397af0692 User webviews 2020-09-16 16:19:33 +01:00
Laurent Cozic 5da760dd0c Added a way to load a plugin for development 2020-09-15 17:49:43 +01:00
Laurent Cozic 511d58d3af Various improvements 2020-09-15 17:02:02 +01:00
Laurent Cozic a1c9e675ad Improve plugin build 2020-09-15 16:56:48 +01:00
Laurent Cozic 0349ad0b80 Merge branch 'release-1.2' into plugin_system 2020-09-15 14:41:47 +01:00
Laurent Cozic 9d8411a25e Add TOC plugin demo 2020-09-15 13:47:47 +01:00
Laurent Cozic 754ba2267a Merge branch 'dev' into plugin_system 2020-09-15 13:41:57 +01:00
Laurent Cozic 4cdac308d1 Wraps console calls 2020-09-15 10:36:32 +01:00
Laurent Cozic c0d5c7c282 Merge branch 'dev' into plugin_system 2020-09-14 14:06:21 +01:00
Laurent f9296992bf Merge branch 'dev' into plugin_system 2020-08-01 18:58:08 +01:00
Laurent Cozic 5b06ebde1e Updated 2020-08-01 18:38:43 +01:00
Laurent Cozic d309c75974 Merge branch 'dev' into plugin_system 2020-08-01 18:35:05 +01:00
Laurent Cozic 807c89a42f Added way to get dev mode command line 2020-07-05 18:55:21 +01:00
Laurent Cozic 0b8350e9ea Adding plugin doc 2020-07-05 17:58:24 +01:00
Laurent Cozic 49e7be8924 Ignored files 2020-07-05 17:24:20 +01:00
Laurent Cozic 810c63e3b2 Update doc 2020-07-04 18:38:12 +01:00
Laurent Cozic d917ca5551 Added plugin doc auto-generation 2020-07-04 18:27:47 +01:00
Laurent Cozic ec642300ab Moved sandbox to sub-folder 2020-07-04 17:56:21 +01:00
Laurent Cozic 9034d646bf Moved sandbox to a class 2020-07-04 17:02:32 +01:00
Laurent Cozic 96f6bbb035 Allow executing commands from plugin 2020-07-04 16:05:02 +01:00
Laurent Cozic e14ed655d2 Freeze state in dev mode 2020-07-04 15:32:24 +01:00
Laurent Cozic 54e5323f54 Fixed another issue due to modifying state data 2020-07-04 15:24:53 +01:00
Laurent Cozic ef58affed1 Fix tests 2020-07-04 15:09:14 +01:00
Laurent Cozic 76fa87d878 Fixed test issue due modification of immutable state 2020-07-04 14:52:55 +01:00
Laurent Cozic 2db2225788 Merge branch 'master' into plugin_system 2020-07-04 14:31:54 +01:00
Laurent Cozic 425c1763f4 Desktop: Fixed GotoAnything rendering issue with HTML notes 2020-07-04 12:57:19 +01:00
Laurent Cozic 044f2eac6a Improved view support 2020-06-28 17:10:34 +01:00
Laurent Cozic 281f135125 Improved view support 2020-06-28 17:08:38 +01:00
Laurent Cozic 6c88f8b8ae Merge branch 'plugin_system' of github.com:laurent22/joplin into plugin_system 2020-06-28 16:57:28 +01:00
Laurent Cozic 832abcddf0 Add support for state watch 2020-06-27 11:54:42 +01:00
Laurent Cozic e6c481f45c Fixed tests 2020-06-27 01:05:40 +01:00
Laurent Cozic 11fecfb83a Cleaned up naming and types 2020-06-26 23:03:20 +01:00
Laurent Cozic 2facc9868e Renamed control to view 2020-06-26 22:52:40 +01:00
Laurent Cozic 7b9ad9d1c3 Moved listener to view itself 2020-06-26 22:46:45 +01:00
Laurent Cozic 3b96a99f3e Allow sending messages from webview script to plugin 2020-06-26 18:13:00 +01:00
Laurent Cozic 575ce5128b Added reducer 2020-06-26 16:14:59 +01:00
Laurent Cozic dece28da35 Better integration of custom webviews 2020-06-25 22:15:31 +01:00
Laurent Cozic 2ffc429971 Merge branch 'master' into plugin_system 2020-06-25 20:27:38 +01:00
Laurent Cozic 8baa125842 Refactored to save plugin state in Redux store 2020-06-25 20:25:50 +01:00
Laurent Cozic 6b6092ffc7 Merge branch 'master' into plugin_system 2020-06-24 23:14:16 +01:00
Laurent Cozic 714c912aff Added support for plugin webview 2020-06-24 23:10:19 +01:00
Laurent Cozic ebf8b744e1 Tools: Fixed build issues 2020-06-24 16:33:35 +01:00
Laurent Cozic 1039e98396 Only load plugins if dir present 2020-06-23 17:25:35 +01:00
Laurent Cozic 8f00538cb1 Merge branch 'master' into plugin_system 2020-06-22 23:07:12 +01:00
Laurent Cozic 2b530a3ff9 Merge branch 'master' into plugin_system 2020-06-21 21:37:58 +00:00
Laurent Cozic d089511aa6 Added support filters and custom views 2020-06-21 21:30:07 +00:00
Laurent Cozic 450c8dbf22 Added support for setting and getting runtime preferences and done CodeMirror plugin test 2020-06-18 00:49:32 +01:00
Laurent Cozic 94d87285dc Merge branch 'master' into plugin_system 2020-06-17 23:50:12 +01:00
Laurent Cozic ffeb7d0ecd Add support for TypeScript in plugins 2020-05-25 18:04:15 +01:00
Laurent Cozic aba92857cb Load plugins from directory 2020-05-25 17:28:32 +01:00
Laurent Cozic 5918c81dbb Merge branch 'master' into plugin_system 2020-05-25 16:56:04 +01:00
Laurent Cozic 819d9fd977 Added more tests 2020-05-23 10:40:10 +01:00
Laurent Cozic ad80e074de Started plugin system 2020-05-21 23:51:51 +00:00
2137 changed files with 178796 additions and 174157 deletions
+23 -7
View File
@@ -68,8 +68,29 @@ CliClient/tests/models_Setting.js
CliClient/tests/services_CommandService.js
CliClient/tests/services_InteropService.js
CliClient/tests/services_PluginService.js
CliClient/tests/services_rest_Api.js
CliClient/tests/services/plugins/sandboxProxy.js
CliClient/tests/support/plugins/codemirror_test/global.d.js
CliClient/tests/support/plugins/codemirror_test/src/index.js
CliClient/tests/support/plugins/dialog/global.d.js
CliClient/tests/support/plugins/dialog/src/index.js
CliClient/tests/support/plugins/events/global.d.js
CliClient/tests/support/plugins/events/src/index.js
CliClient/tests/support/plugins/json_export/global.d.js
CliClient/tests/support/plugins/json_export/src/index.js
CliClient/tests/support/plugins/markdown_plugin/global.d.js
CliClient/tests/support/plugins/markdown_plugin/src/index.js
CliClient/tests/support/plugins/multi_selection/global.d.js
CliClient/tests/support/plugins/multi_selection/src/index.js
CliClient/tests/support/plugins/register_command/global.d.js
CliClient/tests/support/plugins/register_command/src/index.js
CliClient/tests/support/plugins/selected_text/global.d.js
CliClient/tests/support/plugins/selected_text/src/index.js
CliClient/tests/support/plugins/settings/global.d.js
CliClient/tests/support/plugins/settings/src/index.js
CliClient/tests/support/plugins/toc/global.d.js
CliClient/tests/support/plugins/toc/src/index.js
CliClient/tests/support/plugins/withExternalModules/global.d.js
CliClient/tests/support/plugins/withExternalModules/src/index.js
CliClient/tests/synchronizer_LockHandler.js
CliClient/tests/synchronizer_MigrationHandler.js
ElectronClient/app.js
@@ -78,7 +99,6 @@ ElectronClient/commands/copyDevCommand.js
ElectronClient/commands/focusElement.js
ElectronClient/commands/startExternalEditing.js
ElectronClient/commands/stopExternalEditing.js
ElectronClient/commands/toggleExternalEditing.js
ElectronClient/ElectronAppWrapper.js
ElectronClient/global.d.js
ElectronClient/gui/Button/Button.js
@@ -199,9 +219,7 @@ ReactNativeClient/lib/checkPermissions.js
ReactNativeClient/lib/commands/historyBackward.js
ReactNativeClient/lib/commands/historyForward.js
ReactNativeClient/lib/commands/synchronize.js
ReactNativeClient/lib/components/BackButtonDialogBox.js
ReactNativeClient/lib/components/screens/UpgradeSyncTargetScreen.js
ReactNativeClient/lib/errorUtils.js
ReactNativeClient/lib/eventManager.js
ReactNativeClient/lib/hooks/useEffectDebugger.js
ReactNativeClient/lib/hooks/useImperativeHandlerDebugger.js
@@ -214,7 +232,6 @@ ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/sanitize_html.js
ReactNativeClient/lib/JoplinServerApi.js
ReactNativeClient/lib/locale.js
ReactNativeClient/lib/Logger.js
ReactNativeClient/lib/markdownUtils.js
ReactNativeClient/lib/models/Alarm.js
ReactNativeClient/lib/models/Setting.js
ReactNativeClient/lib/ntpDate.js
@@ -260,13 +277,13 @@ ReactNativeClient/lib/services/plugins/api/JoplinFilters.js
ReactNativeClient/lib/services/plugins/api/JoplinInterop.js
ReactNativeClient/lib/services/plugins/api/JoplinPlugins.js
ReactNativeClient/lib/services/plugins/api/JoplinSettings.js
ReactNativeClient/lib/services/plugins/api/JoplinUtils.js
ReactNativeClient/lib/services/plugins/api/JoplinViews.js
ReactNativeClient/lib/services/plugins/api/JoplinViewsDialogs.js
ReactNativeClient/lib/services/plugins/api/JoplinViewsMenuItems.js
ReactNativeClient/lib/services/plugins/api/JoplinViewsPanels.js
ReactNativeClient/lib/services/plugins/api/JoplinViewsToolbarButtons.js
ReactNativeClient/lib/services/plugins/api/JoplinWorkspace.js
ReactNativeClient/lib/services/plugins/api/types.js
ReactNativeClient/lib/services/plugins/BasePluginRunner.js
ReactNativeClient/lib/services/plugins/MenuItemController.js
ReactNativeClient/lib/services/plugins/Plugin.js
@@ -284,7 +301,6 @@ ReactNativeClient/lib/services/plugins/WebviewController.js
ReactNativeClient/lib/services/ResourceEditWatcher/index.js
ReactNativeClient/lib/services/ResourceEditWatcher/reducer.js
ReactNativeClient/lib/services/rest/actionApi.desktop.js
ReactNativeClient/lib/services/rest/Api.js
ReactNativeClient/lib/services/rest/errors.js
ReactNativeClient/lib/services/searchengine/filterParser.js
ReactNativeClient/lib/services/searchengine/queryBuilder.js
+1 -1
View File
@@ -20,6 +20,6 @@ If it's not related to any platform (such as a translation, change to the docume
Then please append the issue that you've addressed or fixed. Use "Resolves #123" for new features or improvements and "Fixes #123" for bug fixes.
AND PLEASE READ THE GUIDE: https://github.com/laurent22/joplin/blob/dev/CONTRIBUTING.md
AND PLEASE READ THE GUIDE: https://github.com/laurent22/joplin/blob/master/CONTRIBUTING.md
-->
+23 -8
View File
@@ -53,7 +53,6 @@ Tools/commit_hook.txt
ReactNativeClient/lib/sql-extensions/spellfix.so
ReactNativeClient/lib/sql-extensions/spellfix.dylib
CliClient/build/
plugin_types/
# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD
CliClient/app/LinkSelector.js
@@ -62,8 +61,29 @@ CliClient/tests/models_Setting.js
CliClient/tests/services_CommandService.js
CliClient/tests/services_InteropService.js
CliClient/tests/services_PluginService.js
CliClient/tests/services_rest_Api.js
CliClient/tests/services/plugins/sandboxProxy.js
CliClient/tests/support/plugins/codemirror_test/global.d.js
CliClient/tests/support/plugins/codemirror_test/src/index.js
CliClient/tests/support/plugins/dialog/global.d.js
CliClient/tests/support/plugins/dialog/src/index.js
CliClient/tests/support/plugins/events/global.d.js
CliClient/tests/support/plugins/events/src/index.js
CliClient/tests/support/plugins/json_export/global.d.js
CliClient/tests/support/plugins/json_export/src/index.js
CliClient/tests/support/plugins/markdown_plugin/global.d.js
CliClient/tests/support/plugins/markdown_plugin/src/index.js
CliClient/tests/support/plugins/multi_selection/global.d.js
CliClient/tests/support/plugins/multi_selection/src/index.js
CliClient/tests/support/plugins/register_command/global.d.js
CliClient/tests/support/plugins/register_command/src/index.js
CliClient/tests/support/plugins/selected_text/global.d.js
CliClient/tests/support/plugins/selected_text/src/index.js
CliClient/tests/support/plugins/settings/global.d.js
CliClient/tests/support/plugins/settings/src/index.js
CliClient/tests/support/plugins/toc/global.d.js
CliClient/tests/support/plugins/toc/src/index.js
CliClient/tests/support/plugins/withExternalModules/global.d.js
CliClient/tests/support/plugins/withExternalModules/src/index.js
CliClient/tests/synchronizer_LockHandler.js
CliClient/tests/synchronizer_MigrationHandler.js
ElectronClient/app.js
@@ -72,7 +92,6 @@ ElectronClient/commands/copyDevCommand.js
ElectronClient/commands/focusElement.js
ElectronClient/commands/startExternalEditing.js
ElectronClient/commands/stopExternalEditing.js
ElectronClient/commands/toggleExternalEditing.js
ElectronClient/ElectronAppWrapper.js
ElectronClient/global.d.js
ElectronClient/gui/Button/Button.js
@@ -193,9 +212,7 @@ ReactNativeClient/lib/checkPermissions.js
ReactNativeClient/lib/commands/historyBackward.js
ReactNativeClient/lib/commands/historyForward.js
ReactNativeClient/lib/commands/synchronize.js
ReactNativeClient/lib/components/BackButtonDialogBox.js
ReactNativeClient/lib/components/screens/UpgradeSyncTargetScreen.js
ReactNativeClient/lib/errorUtils.js
ReactNativeClient/lib/eventManager.js
ReactNativeClient/lib/hooks/useEffectDebugger.js
ReactNativeClient/lib/hooks/useImperativeHandlerDebugger.js
@@ -208,7 +225,6 @@ ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/sanitize_html.js
ReactNativeClient/lib/JoplinServerApi.js
ReactNativeClient/lib/locale.js
ReactNativeClient/lib/Logger.js
ReactNativeClient/lib/markdownUtils.js
ReactNativeClient/lib/models/Alarm.js
ReactNativeClient/lib/models/Setting.js
ReactNativeClient/lib/ntpDate.js
@@ -254,13 +270,13 @@ ReactNativeClient/lib/services/plugins/api/JoplinFilters.js
ReactNativeClient/lib/services/plugins/api/JoplinInterop.js
ReactNativeClient/lib/services/plugins/api/JoplinPlugins.js
ReactNativeClient/lib/services/plugins/api/JoplinSettings.js
ReactNativeClient/lib/services/plugins/api/JoplinUtils.js
ReactNativeClient/lib/services/plugins/api/JoplinViews.js
ReactNativeClient/lib/services/plugins/api/JoplinViewsDialogs.js
ReactNativeClient/lib/services/plugins/api/JoplinViewsMenuItems.js
ReactNativeClient/lib/services/plugins/api/JoplinViewsPanels.js
ReactNativeClient/lib/services/plugins/api/JoplinViewsToolbarButtons.js
ReactNativeClient/lib/services/plugins/api/JoplinWorkspace.js
ReactNativeClient/lib/services/plugins/api/types.js
ReactNativeClient/lib/services/plugins/BasePluginRunner.js
ReactNativeClient/lib/services/plugins/MenuItemController.js
ReactNativeClient/lib/services/plugins/Plugin.js
@@ -278,7 +294,6 @@ ReactNativeClient/lib/services/plugins/WebviewController.js
ReactNativeClient/lib/services/ResourceEditWatcher/index.js
ReactNativeClient/lib/services/ResourceEditWatcher/reducer.js
ReactNativeClient/lib/services/rest/actionApi.desktop.js
ReactNativeClient/lib/services/rest/Api.js
ReactNativeClient/lib/services/rest/errors.js
ReactNativeClient/lib/services/searchengine/filterParser.js
ReactNativeClient/lib/services/searchengine/queryBuilder.js
Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 71 KiB

+1 -1
View File
@@ -96,4 +96,4 @@ The Markdown renderer is located under ReactNativeClient/lib/joplin-renderer. Wh
# Troubleshooting
Please read for the [Build Troubleshooting Document](https://github.com/laurent22/joplin/blob/dev/readme/build_troubleshooting.md) for various tips on how to get the build working.
Please read for the [Build Troubleshooting Document](https://github.com/laurent22/joplin/blob/master/readme/build_troubleshooting.md) for various tips on how to get the build working.
+1 -1
View File
@@ -38,7 +38,7 @@ If you want to start contributing to the project's code, please follow these gui
- All the applications share the same backend (database, synchronisation, settings, models, business logic, etc.) so if you change something in the backend in one app, makes sure it still work in the other apps. Usually it does, but keep this in mind.
- Pull requests that make many changes using an automated tool, like for spell fixing, styling, etc. will not be accepted. An exception would be if the changes have been discussed in the forum and someone has agreed to review **and test** the pull request.
Building the apps is relatively easy - please [see the build instructions](https://github.com/laurent22/joplin/blob/dev/BUILD.md) for more details.
Building the apps is relatively easy - please [see the build instructions](https://github.com/laurent22/joplin/blob/master/BUILD.md) for more details.
## Coding style
+3 -3
View File
@@ -3,7 +3,7 @@ const BaseItem = require('lib/models/BaseItem');
const BaseModel = require('lib/BaseModel');
const { toTitleCase } = require('lib/string-utils.js');
const { reg } = require('lib/registry.js');
const markdownUtils = require('lib/markdownUtils').default;
const markdownUtils = require('lib/markdownUtils');
const { Database } = require('lib/database.js');
class Command extends BaseCommand {
@@ -53,9 +53,9 @@ class Command extends BaseCommand {
const lines = [];
lines.push('# Joplin Data API');
lines.push('# Joplin API');
lines.push('');
lines.push('This API is available when the clipper server is running. It provides access to the notes, notebooks, tags and other Joplin object via a REST API. Plugins can also access this API even when the clipper server is not running.');
lines.push('');
lines.push('In order to use it, you\'ll first need to find on which port the service is running. To do so, open the Web Clipper Options in Joplin and if the service is running it should tell you on which port. Normally it runs on port **41184**. If you want to find it programmatically, you may follow this kind of algorithm:');
lines.push('');
+1
View File
@@ -124,6 +124,7 @@ class Command extends BaseCommand {
if (args.name == 'locale') {
setLocale(Setting.value('locale'));
app().onLocaleChanged();
}
await Setting.saveAll();
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+15 -15
View File
@@ -42,38 +42,38 @@ stats['ar'] = {"percentDone":80};
stats['eu'] = {"percentDone":34};
stats['bs_BA'] = {"percentDone":83};
stats['bg_BG'] = {"percentDone":66};
stats['ca'] = {"percentDone":96};
stats['hr_HR'] = {"percentDone":27};
stats['ca'] = {"percentDone":53};
stats['hr_HR'] = {"percentDone":28};
stats['cs_CZ'] = {"percentDone":82};
stats['da_DK'] = {"percentDone":74};
stats['de_DE'] = {"percentDone":98};
stats['de_DE'] = {"percentDone":95};
stats['et_EE'] = {"percentDone":66};
stats['en_GB'] = {"percentDone":100};
stats['en_US'] = {"percentDone":100};
stats['es_ES'] = {"percentDone":95};
stats['eo'] = {"percentDone":38};
stats['fr_FR'] = {"percentDone":99};
stats['fr_FR'] = {"percentDone":94};
stats['gl_ES'] = {"percentDone":43};
stats['id_ID'] = {"percentDone":93};
stats['it_IT'] = {"percentDone":90};
stats['it_IT'] = {"percentDone":91};
stats['nl_NL'] = {"percentDone":96};
stats['nl_BE'] = {"percentDone":34};
stats['nl_NL'] = {"percentDone":95};
stats['nb_NO'] = {"percentDone":88};
stats['fa'] = {"percentDone":83};
stats['pl_PL'] = {"percentDone":98};
stats['pt_PT'] = {"percentDone":88};
stats['fa'] = {"percentDone":80};
stats['pl_PL'] = {"percentDone":96};
stats['pt_PT'] = {"percentDone":89};
stats['pt_BR'] = {"percentDone":96};
stats['ro'] = {"percentDone":77};
stats['ro'] = {"percentDone":78};
stats['sl_SI'] = {"percentDone":42};
stats['sv'] = {"percentDone":70};
stats['sv'] = {"percentDone":71};
stats['th_TH'] = {"percentDone":52};
stats['vi'] = {"percentDone":85};
stats['tr_TR'] = {"percentDone":98};
stats['tr_TR'] = {"percentDone":96};
stats['el_GR'] = {"percentDone":96};
stats['ru_RU'] = {"percentDone":95};
stats['sr_RS'] = {"percentDone":71};
stats['sr_RS'] = {"percentDone":72};
stats['zh_CN'] = {"percentDone":96};
stats['zh_TW'] = {"percentDone":95};
stats['ja_JP'] = {"percentDone":98};
stats['ko'] = {"percentDone":98};
stats['ja_JP'] = {"percentDone":96};
stats['ko'] = {"percentDone":86};
module.exports = { locales: locales, stats: stats };
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+3407 -3403
View File
File diff suppressed because it is too large Load Diff
+3454 -3450
View File
File diff suppressed because it is too large Load Diff
+3522 -3524
View File
File diff suppressed because it is too large Load Diff
+3377 -3501
View File
File diff suppressed because it is too large Load Diff
+3410 -3406
View File
File diff suppressed because it is too large Load Diff
+3420 -3416
View File
File diff suppressed because it is too large Load Diff
+3520 -3542
View File
File diff suppressed because it is too large Load Diff
+3501 -3504
View File
File diff suppressed because it is too large Load Diff
+3214 -3160
View File
File diff suppressed because it is too large Load Diff
+3160 -3109
View File
File diff suppressed because it is too large Load Diff
+3281 -3256
View File
File diff suppressed because it is too large Load Diff
+3461 -3464
View File
File diff suppressed because it is too large Load Diff
+3480 -3478
View File
File diff suppressed because it is too large Load Diff
+3408 -3393
View File
File diff suppressed because it is too large Load Diff
+3327 -3353
View File
File diff suppressed because it is too large Load Diff
+3477 -3481
View File
File diff suppressed because it is too large Load Diff
+3410 -3400
View File
File diff suppressed because it is too large Load Diff
+3292 -3277
View File
File diff suppressed because it is too large Load Diff
+3478 -3480
View File
File diff suppressed because it is too large Load Diff
+3455 -3457
View File
File diff suppressed because it is too large Load Diff
+3427 -3447
View File
File diff suppressed because it is too large Load Diff
+3214 -3160
View File
File diff suppressed because it is too large Load Diff
+3394 -3411
View File
File diff suppressed because it is too large Load Diff
+3407 -3409
View File
File diff suppressed because it is too large Load Diff
+3407 -3392
View File
File diff suppressed because it is too large Load Diff
+3448 -3450
View File
File diff suppressed because it is too large Load Diff
+3461 -3491
View File
File diff suppressed because it is too large Load Diff
+3451 -3454
View File
File diff suppressed because it is too large Load Diff
+3455 -3457
View File
File diff suppressed because it is too large Load Diff
+3399 -3392
View File
File diff suppressed because it is too large Load Diff
+3460 -3462
View File
File diff suppressed because it is too large Load Diff
+3424 -3414
View File
File diff suppressed because it is too large Load Diff
+3456 -3458
View File
File diff suppressed because it is too large Load Diff
+3511 -3513
View File
File diff suppressed because it is too large Load Diff
+3347 -3330
View File
File diff suppressed because it is too large Load Diff
+3454 -3473
View File
File diff suppressed because it is too large Load Diff
+3404 -3406
View File
File diff suppressed because it is too large Load Diff
+3353 -3355
View File
File diff suppressed because it is too large Load Diff
+3354 -3356
View File
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -1,6 +1,6 @@
{
"name": "joplin",
"version": "1.3.0",
"version": "1.2.2",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -5901,9 +5901,9 @@
}
},
"slug": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/slug/-/slug-3.5.0.tgz",
"integrity": "sha512-+pZLDhMtmAc+ZcojQSMlUKDZBYmvhZiZmK8Ffx/D3Q/MIMHPDBAMbWvWN8vJb9xl2MfbDdRWxFzrdOhBiyVpow=="
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/slug/-/slug-3.3.4.tgz",
"integrity": "sha512-VpHbtRCEWmgaZsrZcTsVl/Dhw98lcrOYDO17DNmJCNpppI6s3qJvnNu2Q3D4L84/2bi6vkW40mjNQI9oGQsflg=="
},
"snapdragon": {
"version": "0.8.2",
+1 -1
View File
@@ -102,7 +102,7 @@
"sax": "^1.2.4",
"server-destroy": "^1.0.1",
"sharp": "^0.23.2",
"slug": "^3.5.0",
"slug": "^3.3.4",
"sprintf-js": "^1.1.1",
"sqlite3": "^4.1.1",
"string-padding": "^1.0.2",
+1 -1
View File
@@ -3,7 +3,7 @@
require('app-module-path').addPath(__dirname);
const { asyncTest } = require('test-utils.js');
const markdownUtils = require('lib/markdownUtils').default;
const markdownUtils = require('lib/markdownUtils.js');
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
+12
View File
@@ -78,4 +78,16 @@ describe('services_PluginService', function() {
expect(allFolders.map((f:any) => f.title).sort().join(', ')).toBe('multi - simple1, multi - simple2');
}));
// it('should translate calls from plugin process to sandbox', asyncTest(async () => {
// const service = newPluginService();
// const plugin = await service.loadPlugin(`${testPluginDir}/simple`);
// await service.runPlugin(plugin);
// const folder = await Folder.save({ title: 'folder' });
// const folderFromApi = await service.executeSandboxCall(plugin.id, 'joplin.data.get', ['folders/' + folder.id]);
// expect(folder.id).toBe(folderFromApi.id);
// expect(folder.title).toBe(folderFromApi.title);
// }));
});
+12 -50
View File
@@ -4,7 +4,7 @@
require('app-module-path').addPath(__dirname);
const { time } = require('lib/time-utils.js');
const { fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, asyncTest, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync, mockDate, restoreDate } = require('test-utils.js');
const { fileContentEqual, setupDatabase, setupDatabaseAndSynchronizer, asyncTest, db, synchronizer, fileApi, sleep, clearDatabase, switchClient, syncTargetId, objectsEqual, checkThrowAsync } = require('test-utils.js');
const SearchEngine = require('lib/services/searchengine/SearchEngine');
const Note = require('lib/models/Note');
const ItemChange = require('lib/models/ItemChange');
@@ -33,32 +33,16 @@ const calculateScore = (searchString, notes) => {
const numTokens = notes.map(note => note.title.split(' ').length);
const avgTokens = Math.round(numTokens.reduce((a, b) => a + b, 0) / notes.length);
const msSinceEpoch = Math.round(new Date().getTime());
const msPerDay = 86400000;
const weightForDaysSinceLastUpdate = (row) => {
// BM25 weights typically range 0-10, and last updated date should weight similarly, though prioritizing recency logarithmically.
// An alpha of 200 ensures matches in the last week will show up front (11.59) and often so for matches within 2 weeks (5.99),
// but is much less of a factor at 30 days (2.84) or very little after 90 days (0.95), focusing mostly on content at that point.
if (!row.user_updated_time) {
return 0;
}
const alpha = 200;
const daysSinceLastUpdate = (msSinceEpoch - row.user_updated_time) / msPerDay;
return alpha * Math.log(1 + 1 / Math.max(daysSinceLastUpdate, 0.5));
};
let titleBM25WeightedByLastUpdate = new Array(notes.length).fill(-1);
let titleBM25 = new Array(notes.length).fill(-1);
if (avgTokens != 0) {
for (let i = 0; i < notes.length; i++) {
titleBM25WeightedByLastUpdate[i] = IDF(notes.length, notesWithWord) * ((freqTitle[i] * (K1 + 1)) / (freqTitle[i] + K1 * (1 - B + B * (numTokens[i] / avgTokens))));
titleBM25WeightedByLastUpdate[i] += weightForDaysSinceLastUpdate(notes[i]);
titleBM25[i] = IDF(notes.length, notesWithWord) * ((freqTitle[i] * (K1 + 1)) / (freqTitle[i] + K1 * (1 - B + B * (numTokens[i] / avgTokens))));
}
}
const scores = [];
for (let i = 0; i < notes.length; i++) {
if (freqTitle[i]) scores.push(titleBM25WeightedByLastUpdate[i]);
if (freqTitle[i]) scores.push(titleBM25[i]);
}
scores.sort().reverse();
@@ -158,54 +142,33 @@ describe('services_SearchEngine', function() {
expect(rows[1].id).toBe(n2.id);
}));
it('should correctly weigh notes using BM25 and user_updated_time', asyncTest(async () => {
await mockDate(2020, 9, 30, 50);
it('should correctly weigh notes using BM25', asyncTest(async () => {
const noteData = [
{
title: 'abc test2 test2',
updated_time: 1601425064756,
user_updated_time: 1601425064756,
created_time: 1601425064756,
user_created_time: 1601425064756,
},
{
title: 'foo foo',
updated_time: 1601425064758,
user_updated_time: 1601425064758,
created_time: 1601425064758,
user_created_time: 1601425064758,
},
{
title: 'dead beef',
updated_time: 1601425064760,
user_updated_time: 1601425064760,
created_time: 1601425064760,
user_created_time: 1601425064760,
},
{
title: 'test2 bar',
updated_time: 1601425064761,
user_updated_time: 1601425064761,
created_time: 1601425064761,
user_created_time: 1601425064761,
},
{
title: 'blah blah abc',
updated_time: 1601425064763,
user_updated_time: 1601425064763,
created_time: 1601425064763,
user_created_time: 1601425064763,
},
];
const n0 = await Note.save(noteData[0], { autoTimestamp: false });
const n1 = await Note.save(noteData[1], { autoTimestamp: false });
const n2 = await Note.save(noteData[2], { autoTimestamp: false });
const n3 = await Note.save(noteData[3], { autoTimestamp: false });
const n4 = await Note.save(noteData[4], { autoTimestamp: false });
restoreDate();
const n0 = await Note.save(noteData[0]);
const n1 = await Note.save(noteData[1]);
const n2 = await Note.save(noteData[2]);
const n3 = await Note.save(noteData[3]);
const n4 = await Note.save(noteData[4]);
await engine.syncTables();
await mockDate(2020, 9, 30, 50);
let searchString = 'abc';
let scores = calculateScore(searchString, noteData);
@@ -235,7 +198,6 @@ describe('services_SearchEngine', function() {
// console.log(scores);
expect(rows[0].weight).toEqual(scores[0]);
await restoreDate();
}));
it('should tell where the results are found', asyncTest(async () => {
@@ -1,18 +1,21 @@
import Api from 'lib/services/rest/Api';
import shim from 'lib/shim';
/* eslint-disable no-unused-vars */
require('app-module-path').addPath(__dirname);
const { asyncTest, setupDatabaseAndSynchronizer, switchClient, checkThrowAsync } = require('test-utils.js');
const Api = require('lib/services/rest/Api');
const Folder = require('lib/models/Folder');
const Resource = require('lib/models/Resource');
const Note = require('lib/models/Note');
const Tag = require('lib/models/Tag');
const NoteTag = require('lib/models/NoteTag');
const shim = require('lib/shim').default;
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
});
let api:Api = null;
let api = null;
describe('services_rest_Api', function() {
@@ -25,23 +28,21 @@ describe('services_rest_Api', function() {
it('should ping', asyncTest(async () => {
const response = await api.route('GET', 'ping');
expect(response).toBe('JoplinClipperServer');
}));
it('should handle Not Found errors', asyncTest(async () => {
const hasThrown = await checkThrowAsync(async () => await api.route('GET', 'pong'));
expect(hasThrown).toBe(true);
}));
it('should get folders', asyncTest(async () => {
await Folder.save({ title: 'mon carnet' });
const f1 = await Folder.save({ title: 'mon carnet' });
const response = await api.route('GET', 'folders');
expect(response.length).toBe(1);
}));
it('should update folders', asyncTest(async () => {
const f1 = await Folder.save({ title: 'mon carnet' });
await api.route('PUT', `folders/${f1.id}`, null, JSON.stringify({
const response = await api.route('PUT', `folders/${f1.id}`, null, JSON.stringify({
title: 'modifié',
}));
@@ -83,8 +84,8 @@ describe('services_rest_Api', function() {
const response2 = await api.route('GET', `folders/${f1.id}/notes`);
expect(response2.length).toBe(0);
await Note.save({ title: 'un', parent_id: f1.id });
await Note.save({ title: 'deux', parent_id: f1.id });
const n1 = await Note.save({ title: 'un', parent_id: f1.id });
const n2 = await Note.save({ title: 'deux', parent_id: f1.id });
const response = await api.route('GET', `folders/${f1.id}/notes`);
expect(response.length).toBe(2);
}));
@@ -99,7 +100,7 @@ describe('services_rest_Api', function() {
const f1 = await Folder.save({ title: 'mon carnet' });
const f2 = await Folder.save({ title: 'mon deuxième carnet' });
const n1 = await Note.save({ title: 'un', parent_id: f1.id });
await Note.save({ title: 'deux', parent_id: f1.id });
const n2 = await Note.save({ title: 'deux', parent_id: f1.id });
const n3 = await Note.save({ title: 'trois', parent_id: f2.id });
response = await api.route('GET', 'notes');
@@ -133,41 +134,6 @@ describe('services_rest_Api', function() {
expect(!!response.id).toBe(true);
}));
it('should allow setting note properties', asyncTest(async () => {
let response:any = null;
const f = await Folder.save({ title: 'mon carnet' });
response = await api.route('POST', 'notes', null, JSON.stringify({
title: 'testing',
parent_id: f.id,
latitude: '48.732071',
longitude: '-3.458700',
altitude: '21',
}));
const noteId = response.id;
{
const note = await Note.load(noteId);
expect(note.latitude).toBe('48.73207100');
expect(note.longitude).toBe('-3.45870000');
expect(note.altitude).toBe('21.0000');
}
await api.route('PUT', 'notes/' + noteId, null, JSON.stringify({
latitude: '49',
longitude: '-3',
altitude: '22',
}));
{
const note = await Note.load(noteId);
expect(note.latitude).toBe('49.00000000');
expect(note.longitude).toBe('-3.00000000');
expect(note.altitude).toBe('22.0000');
}
}));
it('should preserve user timestamps when creating notes', asyncTest(async () => {
let response = null;
const f = await Folder.save({ title: 'mon carnet' });
@@ -255,9 +221,10 @@ describe('services_rest_Api', function() {
}));
it('should delete resources', asyncTest(async () => {
let response = null;
const f = await Folder.save({ title: 'mon carnet' });
await api.route('POST', 'notes', null, JSON.stringify({
response = await api.route('POST', 'notes', null, JSON.stringify({
title: 'testing image',
parent_id: f.id,
image_data_url: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUeNoAyAA3/wFwtO3K6gUB/vz2+Prw9fj/+/r+/wBZKAAExOgF4/MC9ff+MRH6Ui4E+/0Bqc/zutj6AgT+/Pz7+vv7++nu82c4DlMqCvLs8goA/gL8/fz09fb59vXa6vzZ6vjT5fbn6voD/fwC8vX4UiT9Zi//APHyAP8ACgUBAPv5APz7BPj2+DIaC2o3E+3o6ywaC5fT6gD6/QD9/QEVf9kD+/dcLQgJA/7v8vqfwOf18wA1IAIEVycAyt//v9XvAPv7APz8LhoIAPz9Ri4OAgwARgx4W/6fVeEAAAAASUVORK5CYII=',
@@ -319,7 +286,7 @@ describe('services_rest_Api', function() {
const tag = await Tag.save({ title: 'mon étiquette' });
const note = await Note.save({ title: 'ma note' });
await api.route('POST', `tags/${tag.id}/notes`, null, JSON.stringify({
const response = await api.route('POST', `tags/${tag.id}/notes`, null, JSON.stringify({
id: note.id,
}));
@@ -332,7 +299,7 @@ describe('services_rest_Api', function() {
const note = await Note.save({ title: 'ma note' });
await Tag.addNote(tag.id, note.id);
await api.route('DELETE', `tags/${tag.id}/notes/${note.id}`);
const response = await api.route('DELETE', `tags/${tag.id}/notes/${note.id}`);
const noteIds = await Tag.noteIds(tag.id);
expect(noteIds.length).toBe(0);
@@ -1 +0,0 @@
_temp
@@ -0,0 +1 @@
!function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=0)}([function(t,e){var n=this&&this.__assign||function(){return(n=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t}).apply(this,arguments)},r=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function u(t){try{a(r.next(t))}catch(t){i(t)}}function l(t){try{a(r.throw(t))}catch(t){i(t)}}function a(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(u,l)}a((r=r.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var n,r,o,i,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(i){return function(l){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;u;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return u.label++,{value:i[1],done:!1};case 5:u.label++,r=i[1],i=[0];continue;case 7:i=u.ops.pop(),u.trys.pop();continue;default:if(!(o=u.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){u=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){u.label=i[1];break}if(6===i[0]&&u.label<o[1]){u.label=o[1],o=i;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(i);break}o[2]&&u.ops.pop(),u.trys.pop();continue}i=e.call(t,u)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,l])}}};joplin.plugins.register({run:function(){return r(this,void 0,void 0,(function(){return o(this,(function(t){return joplin.filters.on("codeMirrorOptions",(function(t){return n(n({},t),{lineNumbers:!0})})),[2]}))}))}})}]);
@@ -0,0 +1,9 @@
{
"manifest_version": 1,
"name": "To test setting preferences on CodeMirror editor",
"version": "1.0.0",
"homepage_url": "https://joplinapp.org",
"permissions": [
"model"
]
}
@@ -0,0 +1 @@
declare var joplin:any;
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,18 @@
{
"name": "codemirror_test",
"version": "1.0.0",
"description": "",
"private": true,
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"ts-loader": "^7.0.5",
"typescript": "^3.9.3",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11"
}
}
@@ -0,0 +1,7 @@
joplin.plugins.register({
onStart: async function() {
joplin.filters.on('codeMirrorOptions', (options:any) => {
return { ...options, lineNumbers: true };
});
},
});
@@ -0,0 +1,10 @@
{
"compilerOptions": {
"outDir": "./dist/",
"noImplicitAny": true,
"module": "es6",
"target": "es5",
"jsx": "react",
"allowJs": true
}
}
@@ -0,0 +1,21 @@
const path = require('path');
module.exports = {
entry: './src/index.ts',
module: {
rules: [
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/,
},
],
},
resolve: {
extensions: [ '.tsx', '.ts', '.js' ],
},
output: {
filename: 'index.js',
path: path.resolve(__dirname, 'dist'),
},
};

Some files were not shown because too many files have changed in this diff Show More