Compare commits

...
1408 Commits
Author SHA1 Message Date
Helmut K. C. Tessarek 958979e1d7 CLI v1.0.119 2018-12-19 11:13:18 +01:00
Laurent Cozic 685845e097 Update website 2018-12-17 23:47:35 +01:00
Laurent Cozic 3813f9e417 Clipper release v1.0.8 2018-12-17 23:42:13 +01:00
Laurent Cozic 40cf3fb4d0 Android release v1.0.179 2018-12-17 23:25:21 +01:00
Laurent Cozic 3f88b16603 iOS v10.0.27 2018-12-17 23:12:35 +01:00
Laurent Cozic 32c02275a2 Upgrade React Native 2018-12-17 23:11:53 +01:00
Laurent Cozic c0d679b6c2 Android release v1.0.178 2018-12-16 18:41:51 +01:00
Laurent Cozic eb789b9b9a Electron release v1.0.119 2018-12-16 18:35:37 +01:00
Laurent Cozic b1898141c3 Mobile: Fixes #382: Implemented new search engine for mobile and highlight searched words in notes 2018-12-16 18:32:42 +01:00
Laurent Cozic 3231bfaff0 Mobile: Fixes #1045: Display notebooks as a tree in notebook dropdown 2018-12-16 17:18:24 +01:00
Laurent Cozic 6bb09c9c30 Updated FAQ with info about F-Droid and how to fix Nextcloud issues 2018-12-16 14:30:56 +01:00
Laurent Cozic 35d3fe03ab Android: Fixes #321: Changed notification library to Firebase to get more reliable notifications 2018-12-16 14:11:45 +01:00
Laurent Cozic f05929cd17 All: Fixes #1033: Handle hard break when rendering Markdown to HTML 2018-12-16 11:41:15 +01:00
Laurent Cozic 982c9828da Desktop: Fixes #1039: Always print or export to PDF using light theme 2018-12-16 02:49:06 +01:00
Laurent Cozic d6eacb2b33 Android release v1.0.177 2018-12-15 01:51:49 +01:00
Laurent Cozic 0abe213fc2 Merge branch 'master' of github.com:laurent22/joplin 2018-12-15 01:46:16 +01:00
Laurent Cozic a6716d55c5 Doc: Added search engine doc 2018-12-15 01:46:06 +01:00
Laurent Cozic fa0572de77 Mobile: Many small fixes and improvements to style and layout to make app more usable 2018-12-15 01:45:35 +01:00
Laurent Cozic 6dca4a0d6b Mobile: Optimised loading of large notes that contain many images. 2018-12-15 01:42:19 +01:00
Helmut K. C. Tessarek eacfe1a9ac add Apache WebDAV Module to WebDAV-compatible services (#1042) 2018-12-14 22:50:50 +00:00
Laurent Cozic c223cdf10a Electron release v1.0.118 2018-12-14 19:57:32 +01:00
Laurent Cozic 38c42b7a15 Merge branch 'full_text_search' 2018-12-14 19:56:21 +01:00
Mats Estensen 56432dc773 [Documentation] Add example editor config to FAQ (#1036)
* add external editor example config to faq

* add external editor to feature list
2018-12-14 18:04:53 +00:00
Lucas d3b4379161 Update to make it works in Kubuntu (#1038)
The directory ~/.local/share/applications/ exists in Kubuntu 18.04 so with this change the script also work in Kubuntu.
2018-12-14 18:03:39 +00:00
Laurent Cozic 8a6fcdbcae Should be commented out by default 2018-12-14 00:00:03 +01:00
Laurent Cozic 061ce646d2 Finished search engine integration with desktop app 2018-12-13 23:57:14 +01:00
Laurent Cozic 5ec7c16e3e Fixed logic to update search engine data 2018-12-12 22:40:05 +01:00
Andros Fenollosa 5d629508c1 Fix name in Linux Desktop (#1034) 2018-12-11 21:51:47 +01:00
Laurent Cozic 0a6f8b0cfe Started integrating search engine to desktop app 2018-12-10 19:58:49 +01:00
Laurent Cozic 460f826672 Nearly finished search engine backend 2018-12-10 18:54:46 +00:00
Laurent Cozic cb16a10121 Updated the way item changes are recorded so that info can be used by more services (including search engine) 2018-12-10 01:39:31 +01:00
Laurent Cozic 3b6131f1ca Started support for FTS search 2018-12-09 21:45:50 +01:00
Laurent Cozic 57225a36b9 Updated translations 2018-12-09 01:22:16 +01:00
Laurent Cozic 3e313399c2 Desktop: Search within current note 2018-12-09 01:18:10 +01:00
Laurent Cozic 7947e14792 Merge branch 'master' of github.com:laurent22/joplin 2018-12-08 00:42:54 +01:00
Laurent Cozic 71098102c5 Electron: Fixes #476 (maybe): Trying to fix notification flood. Added more log statements in case something goes wrong. 2018-12-08 00:42:29 +01:00
Laurent Cozic 8e601e80df All: Prevent sync infinite loop under some rare conditions 2018-12-08 00:41:39 +01:00
Caleb John 3b14cfcc54 add separate editor font size option (#1027) 2018-12-07 22:26:03 +01:00
Laurent Cozic 61a0e43092 Mobile: Fixes #999: Associate new note with default notebook when creating it from Welcome screen 2018-12-07 01:23:36 +01:00
Laurent Cozic d08aaffe41 Mobile: Resolves #1015: (Re-)added support for selecting image from camera roll 2018-12-07 01:07:10 +01:00
Laurent Cozic 7d0def30f0 Revert "ReactNativeClient: A better NAV_BACK logic to change folder or tag. (#984)" (Was opening up side menu on first app startup)
This reverts commit fc8f53fd0e.
2018-12-07 00:45:53 +01:00
Laurent Cozic bb45d72a56 Clipper: Fixes #1026: Handle adding tag to clipped content after content has been clipped 2018-12-06 23:50:02 +01:00
Laurent Cozic 3943192c5d All: Fixes #808 (maybe): Added fix for Nginx 404 error issue. 2018-12-06 23:09:54 +01:00
Laurent Cozic 18d76807f6 Fixing Norwegian locale 2018-12-06 22:59:08 +01:00
Laurent Cozic 01a30a7ccf Fixed renaming 'no' locale to 'nb_NO' 2018-12-05 23:30:36 +01:00
Mats Estensen 3fb35d043b Revise and complete Norwegian translation (no) and rename to correct locale: nb_NO (#1013)
* update norwegian translation and correct locale name to nb_NO

* set no to nb_NO in documentation

* Add name, email and completion to README

Norwegian translation
2018-12-05 23:21:40 +01:00
Alex Devero 9b51bd484d Fix failing Windows build (#997)
* Upgrade sqlite3 to 4.0.4

* Remove rebuild, add install-app-deps
2018-12-05 23:11:40 +01:00
Laurent Cozic 879b556845 Update website 2018-11-24 12:05:49 +00:00
Laurent Cozic 0df2a501dd Electron release v1.0.117 2018-11-24 11:44:38 +00:00
Laurent Cozic 6f64fdffcc Desktop: Fixes #995: Added flag to disable tag bar for now 2018-11-24 11:42:50 +00:00
Laurent Cozic 19252af345 Desktop: Fixes #996: Allow editing multiple notes in external editor 2018-11-21 19:50:50 +00:00
Laurent Cozic 897f53b13e All: Resolves #846: Set resource path to correct relative path so that for example images show up in Markdown viewers 2018-11-21 00:36:23 +00:00
Laurent Cozic 45cd8b7e3c Merge branch 'master' of github.com:laurent22/joplin 2018-11-20 23:19:07 +00:00
Laurent Cozic 922bbdd1b6 All: Fixes #968: Export resources specified with a title 2018-11-20 23:18:56 +00:00
rhtenhove c24135577c Useless and error prone VERSION file removed & warn use of root (#989)
* Don't create unused VERSION file

It will throw an error if the script is run from a non-writable directory

* Warn user if running as root

This will write files as root:root

* Clearer root warning
2018-11-20 21:54:58 +00:00
Laurent Cozic 3240ff40bc Restored string to avoid invalidating all the translations. 2018-11-20 21:54:40 +00:00
Ben Fisher 58b68cab0c fix for #906, 1) windows paths like C:\a\b weren't accepted because b… (#935)
* fix for #906, 1) windows paths like C:\a\b weren't accepted because backslashes were treated as escape sequences, 2) common paths like C:\Program Files\Foo\Foo.exe weren't accepted because of the space in the path

* Using anothing approach,
a) backslashes are no longer treated as escape characters,
b) string change to remind people to add spaces

* Removing joplin.pot from the patch, it will be updated later.

* Removing unused code.
2018-11-20 21:46:18 +00:00
Helmut K. C. Tessarek 0a0afd7245 CLI v1.0.118 2018-11-20 15:38:32 -05:00
Laurent Cozic de01606bff Update website 2018-11-20 19:09:47 +00:00
Laurent Cozic 046474b484 Android release v1.0.176 2018-11-20 00:49:27 +00:00
Laurent Cozic 277b2b9298 Electron release v1.0.116 2018-11-20 00:44:25 +00:00
Laurent Cozic 0b7296ae95 Update translations 2018-11-20 00:43:35 +00:00
Laurent Cozic ce87dd55f0 Merge branch 'master' of github.com:laurent22/joplin 2018-11-20 00:42:33 +00:00
Laurent Cozic 07b724d65b All: Fixes #992: Allow non-ASCII chars when exporting MD and handle duplicate filenames 2018-11-20 00:42:21 +00:00
Caleb John bc1984298f Add dark theme to note properties dialog (#991) 2018-11-19 22:48:10 +00:00
Ein Verne 9ed0bdfed2 Add more Chinese translation (#986) 2018-11-19 22:44:20 +00:00
Caleb John 57628e8986 Add missing syntax file for dark theme (#985) 2018-11-19 22:43:56 +00:00
Joybin Chen fc8f53fd0e ReactNativeClient: A better NAV_BACK logic to change folder or tag. (#984) 2018-11-19 22:43:21 +00:00
Renato Rosa efd7cc6a0c update-locale-pt_BR (#981)
Update missing strings and fixed flagged ones.
2018-11-19 22:40:21 +00:00
Abijeet Patro 7bfc3e1256 Fixes #979 (#980)
* Adds functionality to display tags under the open note.

Towards #469

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Ensured tags in the dialog box and under the note appear in the same order.

Few formatting tweaks.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Fixes issues raised during code review.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Refactored code to always display tags in ascending order.

This changes the order of the tags in the dialog box and below the tag title.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Added the new tag height and margin bottom to the bottomRowHeight

Fixes #979

Signed-off-by: Abijeet <abijeetpatro@gmail.com>
2018-11-17 11:21:57 +00:00
FleischKarussel 7f6ca1e527 fixed typo in Aktualsierungsdatum to Aktualisierungsdatum (#974) 2018-11-17 11:17:47 +00:00
Laurent Cozic 71d9b1d441 Electron: Fixes #933: Handle internal links from HTML and from MD 2018-11-16 18:39:11 +00:00
Laurent Cozic a3d64d0a90 Update website 2018-11-16 16:53:37 +00:00
Laurent Cozic e7ec2ce6cf Electron release v1.0.115 2018-11-13 23:18:08 +00:00
Laurent Cozic 61dbdd5f7c Update translations 2018-11-13 23:17:56 +00:00
Laurent Cozic e6888c451d Fixing Katex version number 2018-11-13 22:42:06 +00:00
Laurent Cozic 899219abd2 Merge branch 'master' of github.com:laurent22/joplin 2018-11-13 22:38:32 +00:00
Joybin Chen 7a4c7a13eb Fix image fetching error. For url like http://example.com/favicon.ico?ver=1.0 will be changed to http://example.com/favicon.ico?ver=1.0?ver=1.0 (#970) 2018-11-13 22:37:39 +00:00
Laurent Cozic e8797f49b9 Mobile: Display number of resources being fetched in side bar 2018-11-13 22:27:58 +00:00
Laurent Cozic e17f3051f0 Display number of resources being fetched in side bar 2018-11-13 22:25:23 +00:00
Laurent Cozic 06091933e1 All: Moved resource app-specific state to different table 2018-11-13 00:45:08 +00:00
Laurent Cozic b30c65dd89 Update CONTRIBUTING.md 2018-11-11 20:23:55 +00:00
Ben Fisher 0eb18d206d Patch to implement feature, exporting notes to JSON (#912, issues/912). (#927)
* Patch to implement feature, exporting notes to JSON (#912, issues/912).

* Revising based on feedback

* Directly calling JSON.stringify on the item
2018-11-11 20:17:43 +00:00
Laurent Cozic 3a9948e528 Build doc 2018-11-08 01:21:18 +00:00
Laurent Cozic 2bcddd38b2 Update API doc 2018-11-08 01:17:46 +00:00
Laurent Cozic 5ff8808f69 API: Allow setting the ID of newly created notes. 2018-11-08 01:14:13 +00:00
Laurent Cozic 28b1d8a324 Desktop: Fixes #953 (maybe): Improved the way internal links to notes are loaded to make it more reliable 2018-11-08 00:58:06 +00:00
Laurent Cozic 5c1dd79435 All: Fixes #952: Upgraded Katex lib to fix bug 2018-11-07 23:44:59 +00:00
Laurent Cozic 706d59a6cc Doc 2018-11-07 23:43:48 +00:00
Ben Fisher 251f1bba55 Show note title in pdf export (#890) (#937)
* Show note title in pdf export (#890)

An example of a possible approach, to temporarily change the html in the webview to show the note title. Works, but there may be a more elegant fix.

* Show title in pdf export

Revising based on feedback
Also, a couple changes to tests so that they pass in Windows.
2018-11-07 23:35:14 +00:00
Caleb John cb1fd85ca4 Add support for custom css across all notes (#925) 2018-11-07 22:52:31 +00:00
Laurent Cozic 11ddc55911 Fixed theme handling for new tag feature 2018-11-07 22:47:34 +00:00
Caleb John ee106105d8 Joplin desktop Dark Mode (#921)
* Added support for the dark mode on desktop

* Add dark highlighting to the code tags

* Update app/theme.js to be more clear and more easily support additional themes
Update more files to conform to theming
2018-11-07 22:37:13 +00:00
Laurent Cozic 19f5a144e5 Added comment 2018-11-07 22:22:26 +00:00
Abijeet Patro 18717bac79 Adds functionality to display tags under the open note. (#893)
* Adds functionality to display tags under the open note.

Towards #469

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Ensured tags in the dialog box and under the note appear in the same order.

Few formatting tweaks.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Fixes issues raised during code review.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>

* Refactored code to always display tags in ascending order.

This changes the order of the tags in the dialog box and below the tag title.

Signed-off-by: Abijeet <abijeetpatro@gmail.com>
2018-11-07 22:16:05 +00:00
Laurent Cozic 28fa83c406 Merge branch 'master' of github.com:laurent22/joplin 2018-11-02 19:56:18 +00:00
Laurent Cozic 258e514a91 Marked password cache as secure, and only display stars if the value is non-empty 2018-11-02 19:22:49 +00:00
Ben Fisher f92546d6eb Adding some tips for building and debugging Joplin on Windows (#938) 2018-11-02 01:06:48 +00:00
sensor-freak 693456164b Minor fix for translation of 'Location' (#936) 2018-11-02 00:53:05 +00:00
Helmut K. C. Tessarek 7cd3e6b1f7 mobile: add version info (#930) 2018-11-02 00:43:42 +00:00
FoxMaSk 764e63d869 new French Translations (#923) 2018-11-02 00:24:28 +00:00
Laurent Cozic 2c6f47f277 Update README.md
Removed Hacktoberfest news
2018-11-01 17:45:05 +00:00
Laurent Cozic e41896d6f3 All: Resolves #918: Skip properties that are on sync target but not handled by local client 2018-10-31 00:35:57 +00:00
Laurent Cozic 990591cc80 Minor improvments 2018-10-30 00:17:50 +00:00
Laurent Cozic 7b85c33213 CLI v1.0.117 2018-10-29 23:24:19 +00:00
Laurent Cozic 4b4d0e8b25 Update website 2018-10-24 21:14:38 +01:00
Laurent Cozic 4fb6af3c62 Android release v1.0.175 2018-10-24 19:59:37 +01:00
Laurent Cozic d7ffe7e294 Electron release v1.0.114 2018-10-24 19:52:07 +01:00
Laurent Cozic 3ff139d445 Merge branch 'master' of github.com:laurent22/joplin 2018-10-24 19:51:16 +01:00
Laurent Cozic 40443e0134 Android v153 2018-10-24 19:50:26 +01:00
Laurent Cozic 1f927c1285 iOS v26 2018-10-24 19:48:09 +01:00
Andros Fenollosa 5e82e62335 Linux script install: implement previous updates (#905)
Avoid an erroneous update and prevent installation icon only on gnome.
2018-10-24 19:17:18 +01:00
Yannis Mitsos de954827df Support FreeBSD in terminal (#896) 2018-10-24 19:16:15 +01:00
Laurent Cozic 2cb24bf198 Mobile: Fixes #902: Don't change existing note when sharing with mobile app 2018-10-24 19:10:05 +01:00
Laurent Cozic 739a6a4a9c Documentation 2018-10-24 18:47:04 +01:00
Laurent Cozic dfcf1193dc Electron: Handle internal anchors 2018-10-17 08:01:18 +01:00
Laurent Cozic c72f92e22f Additional info 2018-10-15 18:40:11 +01:00
Laurent Cozic f6d01ce7e1 Android release v1.0.174 2018-10-15 00:01:36 +01:00
Laurent Cozic fed9700587 Merge branch 'master' of github.com:laurent22/joplin 2018-10-15 00:00:13 +01:00
Laurent Cozic 12a3a9a89e android release 2018-10-14 23:59:42 +01:00
Laurent Cozic 590c62c371 Merge branch 'fixing_android_build' 2018-10-14 23:56:42 +01:00
Laurent Cozic df41f64b3c Revert "trying to fix android build"
This reverts commit 621d0260f4.
2018-10-14 21:47:12 +01:00
Laurent Cozic 1849355245 Android: Tryinc to fix release builkd 2018-10-14 21:42:34 +01:00
Laurent Cozic fa1b471ea4 Android: Tryinc to fix release builkd 2018-10-14 21:41:29 +01:00
Laurent Cozic 0a67f8c947 Revert "Android: Updated project to build on macOS"
This reverts commit b547f9aa13.
2018-10-14 20:44:05 +01:00
Laurent Cozic 621d0260f4 trying to fix android build 2018-10-14 19:57:30 +01:00
Laurent Cozic f93fca7c5b Revert "Android: Updated project to build on macOS"
This reverts commit b547f9aa13.
2018-10-13 11:35:21 +01:00
Laurent Cozic f4d830c2ef Android release v1.0.151 2018-10-13 11:09:03 +01:00
Laurent Cozic 1aa2844efa Android release v1.0.148 2018-10-13 10:39:55 +01:00
Laurent Cozic f22b2adaad Mobile: Improved camera attachment 2018-10-13 10:32:44 +01:00
Laurent Cozic b547f9aa13 Android: Updated project to build on macOS 2018-10-13 00:30:41 +01:00
Laurent Cozic e4166e9da7 Electron: Fixes #312 (maybe): Removed power saving feature, which wasn\'t doing anything and added a possible fix to the UI freezing issue on Linux 2018-10-12 23:44:00 +01:00
Laurent Cozic 1634fdb421 Merge branch 'master' of github.com:laurent22/joplin 2018-10-12 23:26:11 +01:00
Laurent Cozic 7f51035f91 Mobile: Reload note when resource got downloaded. Also fixed Android build script to make it work in macOS. 2018-10-12 23:25:11 +01:00
ebayer 70e71cbc2a Mobile: Fixes #856: Add option to open source url (#872)
* Mobile: Fixes #856: Add option to open source url

* Mobile: Fixes #856: Change menu wording for opening source url
2018-10-12 19:30:00 +01:00
Laurent Cozic ffd03bf34c Merge branch 'master' of github.com:laurent22/joplin 2018-10-11 17:53:40 +01:00
Christian Baer f59a3dee78 Fixed some more inconsistencies in german language file. (#855)
* Fixed some typos and inconsistencies in the german language file and added missing translations.

* Fixed some more inconsistencies in german language file.
2018-10-11 17:21:12 +01:00
Timothy Cyrus 3ba3037242 Update README.md (#874) 2018-10-11 17:20:42 +01:00
Helmut K. C. Tessarek dbb269fef6 add support for webp images (#858)
fixes #848
2018-10-11 17:18:33 +01:00
Laurent Cozic e209189faa All: Added resource test units 2018-10-11 17:18:24 +01:00
Laurent Cozic 2d7065cde2 Android release v1.0.143 2018-10-10 20:36:42 +01:00
Laurent Cozic 59f5972c93 Electron release v1.0.113 2018-10-10 20:32:45 +01:00
Laurent Cozic 8bac5275c3 All: Fixed fetch logic - mark resource as fetched by default, unless it comes from sync 2018-10-10 18:53:09 +01:00
Helmut K. C. Tessarek 58d748e235 fix permissions for shell scripts (add executable flag) (#866) 2018-10-09 22:58:18 +01:00
Laurent Cozic e69ac3e62a Android release v1.0.142 2018-10-09 22:05:29 +01:00
Laurent Cozic 7fc8ac4c0f Electron release v1.0.112 2018-10-09 22:02:47 +01:00
Laurent Cozic 069dce69cd Mobile: Added support for ResourceFetcher service 2018-10-09 22:01:50 +01:00
Laurent Cozic 3bdf621026 Api: Document tags parameter 2018-10-08 19:38:27 +01:00
Laurent Cozic 2f62897fb6 All: Improved resource side loading 2018-10-08 19:11:53 +01:00
Laurent Cozic dbdd602f50 All: Created ResourceFetcher class to handle resource downloads 2018-10-08 07:36:45 +01:00
Laurent Cozic d66fa87b2b All: Allow excluding certain keys during sync 2018-10-07 20:18:43 +01:00
Laurent Cozic 124a959c8d All: Simplifying serialisation of base items 2018-10-07 20:11:33 +01:00
Laurent Cozic 127dce1cd6 Fixed typo 2018-10-07 19:28:19 +01:00
Laurent Cozic 44986a35a4 Android: Fix crash when attaching certain files 2018-10-07 18:55:49 +01:00
Laurent Cozic ea516301fd Udpated German translation 2018-10-05 19:53:54 +01:00
Christian Baer 90b684457a Fixed some typos and inconsistencies in the german language file and added missing translations. (#854) 2018-10-05 19:53:13 +01:00
Laurent Cozic 8517e2aa42 Mobile: Fixes #840: Images were not being displayed right after being attached in view mode 2018-10-05 19:49:36 +01:00
Laurent Cozic b880be8b7c All: Fixes #853: Replace characters to equivalent US-ASCII ones when exporting files 2018-10-05 17:53:55 +01:00
Laurent Cozic 57fd1a7588 Electron: Prevent URLs added via A tag from being opened inside app 2018-10-05 18:21:23 +00:00
Laurent Cozic 5ed458f634 Electron: Fixed potential crash that can happen if editor is not ready 2018-10-05 18:19:47 +00:00
Laurent Cozic ac12143d00 All: Fixes #671: Make string translatable 2018-10-05 18:17:49 +00:00
Helmut K. C. Tessarek b6c36d1961 fix file permissions (#851) 2018-10-04 22:32:19 +01:00
FoxMaSk 3c2de70baa add shared folder (#850)
shared 📁 is needed, so the encryption menu will be translated
2018-10-04 22:30:48 +01:00
Laurent Cozic f6c5620682 Electron: Resolves #751: Allow switching between todo and note when multiple notes are selected 2018-10-04 18:34:30 +01:00
Laurent Cozic 79b6f64bd0 Merge branch 'master' of github.com:laurent22/joplin 2018-10-04 18:01:23 +01:00
Laurent Cozic ed89f55bff Electron: Fixes #847: Prevent view from scrolling to top when clicking checkbox and editor not visible 2018-10-04 17:56:39 +01:00
Laurent Cozic 8841a92142 Update README.md 2018-10-04 09:10:46 +01:00
Laurent Cozic 0bd19c97eb Merge branch 'master' of github.com:laurent22/joplin 2018-10-04 08:53:11 +01:00
Laurent Cozic 2fd026d107 Mentioned Hacktoberfest 🎃 in Readme 2018-10-04 08:51:48 +01:00
Laurent Cozic 5e7eb37ca7 Merge branch 'master' of github.com:laurent22/joplin 2018-10-04 08:18:19 +01:00
Laurent Cozic 6b10d5d821 Api: Fixes #843: Fixed regression that was preventing resource metadata from being downloaded 2018-10-04 08:17:53 +01:00
Laurent Cozic 0f4dbfbcbf Merge pull request #841 from shorty2380/patch-1
Joplin_install_and_update.sh
2018-10-04 08:10:51 +01:00
Laurent Cozic 99493174ec API: Fixed handling of PUT method and log errors to file 2018-10-04 08:05:22 +01:00
Patrick Petermann 333253fd4f Joplin_install_and_update.sh
The script was original written for “Ubuntu – Gnome” only. I change it a little bit to support more distributions and desktop enviroments.

This script could be used to install and update Joplin at several Linux distributions. I could test this script with “Fedora 28 – Cinnamon” and “Mint LMDE 3”.   There are a lot of requests how to install / start Joplin at Linux in the FAQ’s. Hopefully this could help the people
2018-10-03 20:48:14 +02:00
Laurent Cozic 01470e8d3b Android release v1.0.141 2018-10-03 08:30:19 +01:00
Laurent Cozic bda2fe6717 Merge branch 'master' of github.com:laurent22/joplin 2018-10-03 08:19:15 +01:00
Laurent Cozic d1f4c5be18 Disable non-working ShareExtension on iOS 2018-10-03 08:17:37 +01:00
Laurent Cozic 377adea51d Android release v1.0.140 2018-10-02 18:19:27 +01:00
Laurent Cozic cda3d20834 Android release v1.0.138 2018-10-02 18:10:37 +01:00
Laurent Cozic d11870b1eb Trying to get RN 0.57.1 to work 2018-10-02 19:02:38 +00:00
Laurent Cozic 53bda3eea7 Trying RN 0.57.1 upgrade 2018-10-02 18:57:31 +00:00
Laurent Cozic 30165e8d6a Electron: Fixes #798: Enable Select All shortcut in macOS 2018-10-02 17:45:39 +01:00
Laurent Cozic 2202eb6570 Merge branch 'master' of github.com:laurent22/joplin 2018-10-01 20:55:52 +01:00
Laurent Cozic 720927f488 All: Fixes #832: Enex import: Don't add extra line breaks at the beginning of list item when it contains a block element 2018-10-01 20:55:24 +01:00
Helmut K. C. Tessarek 2858c0fce0 CLI v1.0.116 2018-09-30 18:28:54 -04:00
Laurent Cozic 36c3521f40 Update website 2018-09-30 21:15:21 +01:00
Laurent Cozic 98a3b99d17 Electron release v1.0.111 2018-09-30 20:45:03 +01:00
Laurent Cozic 95a06c4531 All: Fixes #818: Use sort options when displayed tagged notes 2018-09-30 20:43:46 +01:00
Laurent Cozic 6ea77b36ce Electron: Resolves #820: Allow dragging and dropping a note in another note to create a link 2018-09-30 20:15:30 +01:00
Laurent Cozic 0cd7ebf9d3 Electron: Fixes resources being incorrectly auto-deleted when inside an IMG tag 2018-09-30 19:24:02 +01:00
Laurent Cozic a816498fc6 Android release v1.0.135 2018-09-30 10:52:30 +01:00
Laurent Cozic 549c1a6767 Android: Make camera features optional to, maybe, enable Chromebooks 2018-09-30 10:48:10 +01:00
Laurent Cozic f87d1f11b0 API: Allow downloading a resource data 2018-09-30 10:15:46 +01:00
Laurent Cozic fb913bc33c Mobile: Fixes #654: Fixed auto-title logic so that set title doesn't get overwritten in some conditions for new notes 2018-09-29 15:57:18 +01:00
Laurent Cozic 53d7a51cb0 Removed API doc from translations and updated FR translation 2018-09-29 13:29:07 +01:00
Laurent Cozic 12da48c756 Electron release v1.0.110 2018-09-29 13:17:48 +01:00
Laurent Cozic a0a6bdb684 Update website 2018-09-29 13:15:36 +01:00
Laurent Cozic eb4aa2c026 API: Added more calls 2018-09-29 12:54:44 +01:00
Laurent Cozic a9e789f845 Clipper: Fixed screenshot text box label colour 2018-09-29 12:53:16 +01:00
Laurent Cozic 89b76918bd Merge branch 'master' of github.com:laurent22/joplin 2018-09-28 21:04:23 +01:00
Laurent Cozic e98575643c API: Added documentation generator and built documentation 2018-09-28 21:03:28 +01:00
Laurent Cozic 7c9e7743f1 Merge pull request #825 from sensor-freak/patch-2
Fixed some german translations
2018-09-28 20:58:32 +01:00
sensor-freak 435aa4845b Fixed some german translations 2018-09-28 21:43:17 +02:00
Laurent Cozic 9841488ce4 Updated translations 2018-09-28 19:25:56 +01:00
Laurent Cozic 9c907989a5 Merge branch 'master' of github.com:laurent22/joplin 2018-09-28 19:25:18 +01:00
Laurent Cozic f684d8e59a Merge pull request #824 from sensor-freak/patch-1
Update de_DE.json
2018-09-28 19:25:05 +01:00
Laurent Cozic a1ad6c9712 API: Added more API calls 2018-09-28 19:24:57 +01:00
Laurent Cozic b6ca3090df Merge pull request #822 from foxmask/master
Forbidden is 403 - typo :)
2018-09-28 19:23:48 +01:00
Helmut K. C. Tessarek ff2d793fbb CLI v1.0.115 2018-09-28 14:08:21 -04:00
sensor-freak fcfb7f1111 Update de_DE.json
Fix and add some german translations
2018-09-28 07:39:13 +02:00
FoxMaSk 6125cde223 Forbidden is 403 - typo :) 2018-09-27 21:38:16 +02:00
Laurent Cozic c83391e624 Update website 2018-09-27 19:02:01 +01:00
Laurent Cozic a3a818ea74 Clipper release v1.0.7 2018-09-27 19:00:04 +01:00
Laurent Cozic 54a4965503 Android release v1.0.133 2018-09-27 18:54:14 +01:00
Laurent Cozic 2233d88c01 Electron release v1.0.109 2018-09-27 18:50:38 +01:00
Laurent Cozic 9680ab74a3 All: Allow loading image resources in IMG html tags 2018-09-27 18:42:34 +01:00
Laurent Cozic ef711af5b5 Api: Added method to get notes 2018-09-27 18:35:10 +00:00
Laurent Cozic 8a619e4b8b All: Refactored REST API to make it testable and to allow further extension 2018-09-27 09:14:05 +01:00
Laurent Cozic bc09d2c640 Clipper: Fixes #817: Added support for PICTURE tags, which will fix issues with certain pages from which images were not being imported 2018-09-25 21:19:54 +01:00
Laurent Cozic f82dfde6f4 Clipper: Fixed importing certain images with sources that contain brackets 2018-09-24 20:15:23 +01:00
Laurent Cozic 312c7f2d27 Electron: Fixed regression following security fix - links were being opened inside Joplin instead of in external browser 2018-09-24 20:14:21 +01:00
Laurent Cozic 953cc327c6 Electron: Fixes #805: Fixed app freezing when opening note in external editor and then creating new note 2018-09-24 07:10:00 +01:00
Laurent Cozic 14cff96713 Mobile: Fix potential crash when going back to OneDrive login screen 2018-09-23 20:45:34 +01:00
Laurent Cozic 34b9af2ce0 Electron: Fixes #802: Scale note text correctly when using zoom 2018-09-23 19:48:50 +01:00
Laurent Cozic 6a6ee280c3 All: Fixes #801: Replaced freegeoip which is no longer free with ip-api 2018-09-23 19:45:13 +01:00
Laurent Cozic 861387707a CLI: Fixes #795: Display tree of notebooks correctly 2018-09-23 19:33:44 +01:00
Laurent Cozic 830e665366 Updated translation 2018-09-23 19:15:49 +01:00
Laurent Cozic f14ae68ea0 Merge pull request #812 from ikunya/update-japo
Update Japanese Translations.
2018-09-23 19:15:16 +01:00
Laurent Cozic c7084bf27e Updated French translation 2018-09-23 19:15:04 +01:00
Laurent Cozic fc8ffcbe46 Clipper: Fixes #672: Make sure selected notebook is saved and restored correctly 2018-09-23 18:44:39 +01:00
Laurent Cozic 77f089654e Clipper: Resolves #681: Allow adding tags from Web Clipper 2018-09-23 18:03:11 +01:00
Laurent Cozic e7a12bb0dd Clipper: Fixes #809: Saves full URL with note, including query parameters 2018-09-22 17:41:09 +01:00
AWASHIRO Ikuya 22fe3a4e44 Update Japanese Translations. 2018-09-22 23:34:07 +09:00
Laurent Cozic afb8b92528 Clipper: Fixed init sequence 2018-09-22 11:21:39 +01:00
Laurent Cozic 5178f99100 Electron release v1.0.108 2018-09-21 18:20:34 +01:00
Laurent Cozic 72af564382 Electron: Fixed security issue by enabling contextIsolation and proxying IPC messages via preload script 2018-09-21 18:20:06 +01:00
Laurent Cozic 0a2b83998c Merge pull request #811 from mvonmaltitz/master
Fix ubuntu install script
2018-09-21 12:00:54 +01:00
Marcel von Maltitz 73e79213dc Fix ubuntu install script
If no former version is present, the script fails since the rm commands do not succeed.
Added -f to rm in order to ignore non-existent directories to be deleted.
2018-09-21 12:55:01 +02:00
Laurent Cozic e31ffc9474 Update website 2018-09-16 20:51:28 +01:00
Laurent Cozic fdb8706a5f Android release v1.0.132 2018-09-16 20:12:56 +01:00
Laurent Cozic 4c0262bd82 Electron release v1.0.107 2018-09-16 20:09:07 +01:00
Laurent Cozic 3b2dcb37a6 CLI: Updated Readme 2018-09-16 20:03:29 +01:00
Laurent Cozic 46a3b020a6 Merge pull request #784 from Kriechi/cli-decrypt
CLI: improve e2ee decrypt command
2018-09-16 20:01:09 +01:00
Laurent Cozic 8373392e99 Merge pull request #793 from tanrax/patch-4
Added comments and information texts
2018-09-16 19:53:33 +01:00
Laurent Cozic 695c2623c2 Added Romanian translation 2018-09-16 19:53:06 +01:00
Laurent Cozic 979e7f2486 Merge pull request #796 from cdorin93/ro-translation-added
Romanian translation added
2018-09-16 19:50:03 +01:00
Laurent Cozic e7a9f630ec All: Fixes #799: Handle restricted_content error for Dropbox 2018-09-16 19:49:07 +01:00
Laurent Cozic 4e8372174b Electron: Resolves #755: Added note properties dialog box to view and edit created time, updated time, source URL and geolocation 2018-09-16 19:37:31 +01:00
cdorin93 1b8912d7e9 Romanian translation added 2018-09-15 22:49:40 +02:00
Andros Fenollosa 8c3669588b Added comments and information texts
Comments, presentation title, final informative text have been added and temporary variable is deleted.
2018-09-14 19:03:09 +02:00
Laurent Cozic 1b784fe3b0 Merge branch 'master' of github.com:laurent22/joplin 2018-09-13 20:53:39 +01:00
Laurent Cozic 5ab1d8dfd6 All: Resolves #781: Allow creating notebooks with duplicate titles to allow two notebooks with same name to exist under different parents 2018-09-13 20:53:31 +01:00
Laurent Cozic cda8b95bfa Merge pull request #768 from sebastienjust/master
Notebooks list is sorted alphabetically as default
2018-09-13 19:56:57 +01:00
Laurent Cozic 9664842b1a Update Chinese translation 2018-09-13 19:48:00 +01:00
Laurent Cozic 09836e1d34 Merge branch 'master' of github.com:laurent22/joplin 2018-09-13 19:46:12 +01:00
Laurent Cozic 8974e20c7f Update readme 2018-09-13 19:46:06 +01:00
Laurent Cozic 761a49803e Merge pull request #775 from tanrax/patch-1
Script to install on Ubuntu with Gnome Shell
2018-09-13 19:45:24 +01:00
Laurent Cozic a40028f0c0 Merge pull request #776 from tanrax/patch-2
Create install_ubuntu.sh
2018-09-13 19:45:14 +01:00
Laurent Cozic d4fca7e313 Merge pull request #787 from tessus/external-storage
allow the app to be installed on external storage (SD card)
2018-09-13 19:42:34 +01:00
Laurent Cozic 6748d4d825 Merge branch 'master' of github.com:laurent22/joplin 2018-09-13 19:31:18 +01:00
Laurent Cozic 0a5ad1d628 Electron: Fixes #710: Don't unwatch file when it is temporarily deleted 2018-09-13 19:29:48 +01:00
Laurent Cozic 4080958e10 Merge pull request #790 from chaifeng/zh_CN
Update zh_CN.po
2018-09-12 23:15:32 +01:00
Chai Feng 95c4a717e3 Update zh_CN.po 2018-09-12 09:13:10 +08:00
Helmut K. C. Tessarek c5b9353105 fix whitespace errors (spaces to tabs) 2018-09-10 20:06:38 -04:00
Helmut K. C. Tessarek 17595f7ceb allow the app to be installed on external storage (SD card) 2018-09-10 20:04:54 -04:00
Andros Fenollosa dcf78e8a06 Prevent the folder from being deleted 2018-09-10 22:57:50 +02:00
Andros Fenollosa de0c54c3c3 Add set -e 2018-09-10 22:54:01 +02:00
Laurent Cozic 38970e9a52 Merge branch 'master' of github.com:laurent22/joplin 2018-09-10 19:19:42 +01:00
Laurent Cozic 563f43168b All: Fix #764: Fix equation tag positioning 2018-09-10 19:19:33 +01:00
Thomas Kriechbaumer 6e235605ed CLI: improve e2ee decrypt command 2018-09-10 18:39:19 +02:00
Laurent Cozic 0749e0b675 Merge pull request #777 from tanrax/patch-3
Add fastmail WebDAV synchronisation list
2018-09-09 20:54:30 +01:00
Laurent Cozic 756f3e627c All: Fixes #718: Allow recursively importing Markdown folder 2018-09-09 20:32:23 +01:00
Andros Fenollosa 4b39ed42b1 Add fastmail WebDAV synchronisation list 2018-09-09 21:16:42 +02:00
Andros Fenollosa abe85ca4bd Update README.md 2018-09-09 21:11:42 +02:00
Andros Fenollosa a559565ace Create install_ubuntu.sh 2018-09-09 21:08:23 +02:00
Laurent Cozic d35e3163ca Update translations 2018-09-09 20:05:36 +01:00
Laurent Cozic f22ad85681 Removed incorrectly duplicated translation 2018-09-09 20:02:08 +01:00
Andros Fenollosa 727bdaeea4 Update README.md 2018-09-09 20:58:30 +02:00
Laurent Cozic 42f7764eed Merge pull request #773 from Vistaus/master
Added Dutch (Netherlands) translation
2018-09-09 19:54:20 +01:00
Andros Fenollosa 1fbc1073ca Script to install on Ubuntu with Gnome Shell
Add script to install on Ubuntu or Debian with Gnome Shell Icon
2018-09-09 20:47:57 +02:00
Heimen Stoffels 66b683e5e7 Added Dutch (Netherlands) translation 2018-09-09 18:26:58 +02:00
Laurent Cozic 7d1f61e47b Electron release v1.0.106 2018-09-08 15:47:15 +01:00
Laurent Cozic 643e5a6a2a Electron: Resolves #714: Allow starting application minimised in the tray icon 2018-09-06 18:56:23 +01:00
Laurent Cozic a1e7e29279 All: Fixes #709: Now that HTML is supported in notes, remove BR tag replacement hack. 2018-09-06 18:40:05 +01:00
Laurent Cozic abf6c3f3f1 Electron: Fixes #697: Focus search text input after clearing search 2018-09-06 18:37:39 +01:00
Laurent Cozic 32c81ad8c2 All: Fixes #657: Disallow giving name of existing tag to another tag 2018-09-06 18:33:21 +01:00
Sebastien Just 0f461c4caa #206 Notebooks list defaults to alphabetical order 2018-09-06 12:26:35 +02:00
Sebastien Just 57ed718993 #206 Notebooks list defaults to alphabetical order 2018-09-06 12:22:09 +02:00
Laurent Cozic ef1ae63233 Electron: Fix #759: Add border around code block when exporting to PDF 2018-09-05 14:59:33 +01:00
Laurent Cozic 81ac200cc0 All: Resolves #761: Highlight single tick code segments 2018-09-05 14:51:50 +01:00
Laurent Cozic 3a2d62f6c7 Update website 2018-09-05 12:30:37 +01:00
Laurent Cozic 7f80f67fd6 CLI v1.0.114 2018-09-05 12:30:09 +01:00
Laurent Cozic cebd8de77a Android release v1.0.131 2018-09-05 12:19:53 +01:00
Laurent Cozic 417218fc34 Electron release v1.0.105 2018-09-05 12:11:56 +01:00
Laurent Cozic 29586437c2 Merge pull request #719 from gufertum/tag-list-long-op
added support for 'tag list -l [tag]' to show long format as for 'not…
2018-09-05 12:11:03 +01:00
Thomas Schädler f51d0ad914 fixed indention (again, this time for real) 2018-09-05 12:46:49 +02:00
Laurent Cozic 35294b5f97 Electron: Resolves #679: Drag a note on a tag to associate the tag. 2018-09-05 11:43:03 +01:00
Laurent Cozic 758562cff9 Electron: Fixes #113: Upgraded Ace Editor to try to fix Korean input issue (to be confirmed). 2018-09-05 11:35:40 +01:00
Laurent Cozic da0678c6fe Merge pull request #726 from tfinnberg/enable_file-urls_in_notes_html_view
enable file-URLs in note html view
2018-09-05 11:23:12 +01:00
Laurent Cozic afe4fd70cc Update FAQ 2018-09-05 11:22:04 +01:00
Laurent Cozic 4cef383fe7 Added warning when changing WebDAV URL 2018-09-05 11:20:26 +01:00
Laurent Cozic b58c30889e Updated FAQ and contribution guide 2018-09-05 11:17:47 +01:00
Laurent Cozic 1561c0e4d7 Merge pull request #756 from tessus/cli-correct-date-time-ls
show correct date/time for cli command `ls`
2018-09-05 10:56:44 +01:00
Thomas Schädler 32b11c15a4 fixed indention 2018-09-05 08:45:18 +02:00
Helmut K. C. Tessarek 5e06efc1b9 show correct date/time for cli command ls
closes #729
2018-09-04 18:03:21 -04:00
Helmut K. C. Tessarek 43bd88703c fix 'No newline at end of file' and whitespace errors 2018-09-04 18:00:12 -04:00
Laurent Cozic cdd70230af Electron: Fixes #663: Fixed copy, cut and paste context menu on text editor 2018-09-04 18:20:41 +01:00
Laurent Cozic eaf3eef2d3 All: Resolves #734: Allow exporting to a hierarchy of Markdown files, and fixed a few issues related to exporting notebooks 2018-09-04 11:59:09 +01:00
Laurent Cozic 81ec8eaf83 Merge pull request #757 from pensierocrea/patch-1
Update it_IT.po
2018-09-04 11:10:17 +01:00
Laurent Cozic 23f7e350c6 Redirect to app logger 2018-09-04 11:08:55 +01:00
Laurent Cozic cea368cd3f Fix sharing text when no folder exists 2018-09-04 11:08:08 +01:00
Laurent Cozic 50c8f2ae61 Merge pull request #689 from CalebJohn/android-sharing
Add text sharing on android
2018-09-04 11:06:08 +01:00
pensierocrea ed0ecababb Update it_IT.po
Hi,
i'm new to github... i hope this help and i've not done some mistake
i think that:
"notebook" should be named "taccuini" in italian like evenote does 
"to-do" can be translated in "Cose-da-fare" not in "attività" that means "activity/activities"

now... i've also a feature request to improve the user interaction with the sidebar and to focus more on the "to-do" stuff
where i can send/post my little suggestion?

thank you
2018-09-04 11:12:19 +02:00
Thomas Schädler 72aa4c40a5 added correct time format method (using user properties)
cleanup (spaces -> tabs, consistent line endings)
2018-09-03 22:18:15 +02:00
Laurent Cozic 4f6784e2e5 Upgraded Katex to support tag 2018-09-03 16:08:56 +01:00
Laurent Cozic 01f015a54f Update translations 2018-09-03 15:11:12 +01:00
Laurent Cozic 806acad22a Fix Sweden flag 2018-09-03 12:16:35 +01:00
Laurent Cozic 1d322d8a39 Fix Korean flag 2018-09-03 12:13:59 +01:00
Laurent Cozic aef94e6950 Updated translations 2018-09-03 12:08:50 +01:00
Laurent Cozic 456fcec334 Merge branch 'master' of github.com:laurent22/joplin 2018-09-03 12:08:02 +01:00
Laurent Cozic 3b6937c2f0 Merge pull request #746 from jony0008/master
Add Swedish translation
2018-09-03 12:01:46 +01:00
Laurent Cozic 7cdd1d41c1 Merge pull request #728 from fmrtn/master
Spanish translation updated
2018-09-03 12:00:33 +01:00
Laurent Cozic 1fc535a740 Merge pull request #706 from tessus/fix-421
use correct date/time format for sync time - fix for #421
2018-09-03 11:56:04 +01:00
Laurent Cozic 033b37077a Merge pull request #705 from tessus/res-icon-j
use the Joplin icon for internal links
2018-09-03 11:55:25 +01:00
Laurent Cozic 07f6a4a08b Merge pull request #676 from RaphaelKimmig/electron_focus_new_notes_only
focus NoteText only when creating new notes
2018-09-03 11:53:03 +01:00
Laurent Cozic 8c1b592a51 Updated translations 2018-09-03 11:49:41 +01:00
Jony 9460f7a17a Add Swedish translation 2018-08-30 19:48:41 +02:00
Fernando 106260ed69 Spanish translation updated 2018-08-20 02:43:18 +02:00
tfinnberg 123162e946 enable file-URLs in note html view 2018-08-18 11:14:34 +02:00
Thomas Schädler 54e81966e5 added support for 'tag list -l [tag]' to show long format as for 'notebook' lists using 'ls -l' 2018-08-13 23:28:19 +02:00
Helmut K. C. Tessarek 9bf6ab60bb use correct date/time format for sync time
fixes #421
2018-08-01 17:22:24 -04:00
Helmut K. C. Tessarek 4f0ff3cdfc fix whitespace errors 2018-08-01 17:05:09 -04:00
Helmut K. C. Tessarek 47cfaaa5ab replace the resource icon (for internal links) with the Joplin icon (from ForkAwesome) 2018-07-31 23:04:33 -04:00
Helmut K. C. Tessarek 1f49788f21 fix 'No newline at end of file' 2018-07-31 23:00:28 -04:00
Laurent Cozic 7e4cf9aeda All: Resolves #678: Added Korean translation 2018-07-25 18:01:56 +02:00
Laurent Cozic 4b6964b683 CLI v1.0.113 2018-07-25 17:59:00 +02:00
Caleb John 3caf398021 refresh notes list on AppState Changes
- remove mistaken console.log calls in root.js
2018-07-20 15:59:55 +02:00
Caleb John 8840631266 Add simple sharing facilities for Android
- react code should be cross platform but support needs to be added
    for ios
  - only shares plain text notes for now
2018-07-20 11:04:25 +02:00
Raphael Kimmig c4411bb895 focus NoteText only when creating new notes
This changes the behaviour so that loading a note does automatically
focus the note text/title only when a new note is being created.

This reduces accidental edits and is in line with other note taking
applications such as Simplenote, Evernote and Apple Notes.
2018-07-10 08:35:21 +02:00
Laurent Cozic f63668350b CLI v1.0.110 2018-06-30 19:58:36 +01:00
Laurent Cozic 3fc54d7ffd CLI: Updating SQLite to support Node 10 2018-06-30 19:57:49 +01:00
Laurent Cozic 2c6c20f44f Mobile: Resolves #350: Open non-image resources in external application 2018-06-30 19:45:21 +01:00
Laurent Cozic 08ee939951 Electron: Resolves #594: Enable support for SVG graphics 2018-06-30 19:05:45 +01:00
Laurent Cozic 463b1441d3 Updated DE translation 2018-06-30 16:20:22 +01:00
Laurent Cozic 6754d4ee89 Electron: Fixes #653: Don't detect horizontal rule as bullet list item 2018-06-30 16:15:44 +01:00
Laurent Cozic d5d0732bf3 Clipper: Upgrade joplin-turndonw to fix import of literal HTML code 2018-06-30 16:12:01 +01:00
Laurent Cozic d27cbaa663 Electron: Improve speed of loading notes that include many resources, and prevent UI from freezing 2018-06-29 18:51:50 +00:00
Laurent Cozic 70adf10f2e Clipper: Skip noscript elements 2018-06-29 18:45:33 +00:00
Laurent Cozic e75417d26e Tools: Automate updating Git repo when creating new Clipper release 2018-06-28 22:16:15 +01:00
Laurent Cozic 2ded983828 Clipper: Resolves #641: Allow clipping selected part of the page 2018-06-28 22:01:55 +01:00
Laurent Cozic 0c708f766b All: Resolves #427: Import source-url from Enex files 2018-06-28 21:36:32 +01:00
Laurent Cozic a801f8d8ed Update website 2018-06-28 21:27:54 +01:00
Laurent Cozic 26fc26c9fe CLI v1.0.109 2018-06-28 20:49:26 +01:00
Laurent Cozic df4c07d204 CLI: Added way to decrypt string 2018-06-28 20:48:39 +01:00
Laurent Cozic cf565d1563 Android release v1.0.129 2018-06-27 22:02:15 +01:00
Laurent Cozic 6b425cf543 Electron release v1.0.104 2018-06-27 22:00:38 +01:00
Laurent Cozic 6188e7a0fa Updated translations 2018-06-27 22:00:02 +01:00
Laurent Cozic 310afb0ad6 Electron: Resolves #612: Allow duplicating a note 2018-06-27 21:45:31 +01:00
Laurent Cozic 7d7e1e1637 Electron: Resolves #647: Allow specifying text editor path and arguments in setting 2018-06-27 21:34:41 +01:00
Laurent Cozic 424c8a2723 Clipper: Support 'author' property 2018-06-27 20:14:20 +01:00
Laurent Cozic 187fb1b85d Electron: Resolves #619: Context menu to cut, copy and paste. Also added menu to copy link in web view 2018-06-26 00:52:46 +01:00
Laurent Cozic 595fd7a9aa All: Resolves #644: Added support for .markdown extension when importing files 2018-06-26 00:07:53 +01:00
Laurent Cozic 0027cb9036 All: Fixes #646: Mentioned that TLS settings must be saved before checking sync config 2018-06-25 23:54:28 +01:00
Laurent Cozic db6878b978 Electron: Fixes #639: Make sure text wraps when printing or exporting as PDF 2018-06-25 23:32:23 +01:00
Laurent Cozic 1c78722573 CLI: Upgraded Turndown plugins 2018-06-25 18:19:27 +01:00
Laurent Cozic fea83e28c4 All: Optimised encryption and decryption of items so that it doesn't freeze the UI, especially on mobile 2018-06-25 18:14:57 +01:00
Laurent Cozic 84adf64271 Electron: Set PDF default file name 2018-06-22 18:36:15 +00:00
Laurent Cozic 74e2b0d15d Electron: Fixes #634: Press ESC to dismiss dialog in non-English languages 2018-06-22 18:31:55 +00:00
Laurent Cozic df302206dd Electron: Allow HTML in Markdown documents in a secure way 2018-06-22 18:18:15 +00:00
Laurent Cozic 6d8941c005 Update website 2018-06-21 22:14:47 +01:00
Laurent Cozic 971b20062f Electron release v1.0.103 2018-06-21 19:13:10 +01:00
Laurent Cozic 936f334b61 Electron: Remove 'New notebook' shortcut 2018-06-21 19:12:08 +01:00
Laurent Cozic 7e3a290939 Merge pull request #628 from Abijeet/master
Adds a shortcut to insert the date and time.
2018-06-21 19:09:36 +01:00
Laurent Cozic c6466a780e Android release v1.0.128 2018-06-21 19:08:59 +01:00
Laurent Cozic 43774ad3fb Electron release v1.0.102 2018-06-21 19:05:58 +01:00
Laurent Cozic b3ba5b7747 All: Revert #554 to try to fix #624: WebDAV error when syncing with SeaFile 2018-06-21 19:00:20 +01:00
Laurent Cozic 599f4ccef4 Electron: Fixes #626: Auto-completion for indented items 2018-06-21 18:53:42 +01:00
Laurent Cozic a67600d264 Updated Chinese and French translation 2018-06-21 18:04:10 +01:00
Laurent Cozic ebf4c89ef0 All: Fixes #343, Fixes #191: Added options to specify custom TLS certificates 2018-06-20 01:18:58 +01:00
Laurent Cozic aa7da784fc All: Fixes #343, Fixes #191: Added options to ignore TLS cert errors to allow self-signed certificates on desktop and CLI 2018-06-20 00:28:50 +01:00
Laurent Cozic 617ed42d8c Update website 2018-06-18 19:08:13 +01:00
Laurent Cozic 5848e7d90d Doc: Fixed image 2018-06-18 19:08:07 +01:00
Abijeet Patro 01d032261c Merge branch 'master' into master 2018-06-18 23:32:10 +05:30
Laurent Cozic 54d06646aa Update website 2018-06-18 19:01:52 +01:00
Laurent Cozic 81da46035a Doc: Fixed image 2018-06-18 19:01:42 +01:00
Laurent Cozic 74d0f75802 Update website 2018-06-18 19:00:07 +01:00
Laurent Cozic f25a352dcb Doc: Mentioned Web Clipper 2018-06-18 18:59:54 +01:00
Laurent Cozic 21ef8da45f Clipper: Completed doc and simplified logic to get clipper port to make it easier to use by third-party 2018-06-18 18:54:48 +01:00
Laurent Cozic 1f3a1c49df Electron: Resolves #611: Allow opening and editing note in external editor 2018-06-18 18:56:07 +00:00
Laurent Cozic a8b58aaec3 All: Fixes #632: Handle restricted_content error in Dropbox 2018-06-18 08:47:51 +01:00
Laurent Cozic 44f9b35d93 Update website 2018-06-17 19:35:25 +01:00
Laurent Cozic 711af9beed Electron release v1.0.101 2018-06-17 19:12:28 +01:00
Laurent Cozic 971339ca9a Electron: Fixes #630: PDF export in context menu 2018-06-17 17:12:28 +01:00
Laurent Cozic f5a72ffbaf All: Fixes #593: Resource should not be auto-deleted if they've never been linked to any note 2018-06-17 16:59:06 +01:00
Laurent Cozic cf4331c5af Electron: Fixes #623: Improved handling of text selection and fixed infinite loop 2018-06-17 02:44:37 +01:00
Abijeet 07b85388fc Adds a shortcut to insert the date and time.
Closes #521
2018-06-16 20:46:27 +05:30
Laurent Cozic 553b086ba2 Update website 2018-06-15 19:56:17 +01:00
Laurent Cozic ff89537899 Update website 2018-06-15 19:28:58 +01:00
Laurent Cozic f20792889a Removed Twitter and FB share buttons 2018-06-15 19:28:35 +01:00
Laurent Cozic ee22a7ff73 Update website 2018-06-15 18:23:23 +01:00
Laurent Cozic 4fc4353859 Update translation 2018-06-15 18:23:15 +01:00
Laurent Cozic f4f9e25e6b Update website 2018-06-15 18:14:55 +01:00
Laurent Cozic e54f9934b5 Fixed Catalan flag 2018-06-15 18:14:31 +01:00
Laurent Cozic f599ae065a CLI v1.0.108 2018-06-14 22:42:43 +01:00
Laurent Cozic 5bd9bf6a4e Update dependencies 2018-06-14 22:42:15 +01:00
Laurent Cozic cb9e8d4f76 Update website 2018-06-14 18:41:57 +01:00
Laurent Cozic f64596672e Android release v1.0.127 2018-06-14 18:23:14 +01:00
Laurent Cozic 961150b2d3 Electron release v1.0.100 2018-06-14 18:19:48 +01:00
Laurent Cozic 0cd8e1cbc0 Updated translations 2018-06-14 18:18:48 +01:00
Laurent Cozic b503aff5e9 Clipper: v1.0.5 2018-06-14 18:17:42 +01:00
Laurent Cozic 54bde47c67 Merge pull request #607 from jmontane/patch-1
Add Catalan Translation
2018-06-14 18:16:53 +01:00
Laurent Cozic d345f8dc13 Clipper: Fixed extension being incorrectly detected as dev mode. Improved build process. 2018-06-14 18:11:22 +00:00
Laurent Cozic 979b0c0e78 Electron: Fixed prompt dialog font 2018-06-14 09:04:58 +01:00
Laurent Cozic 13525f3327 Electron: Switched icons to Fork Awesome 2018-06-14 09:02:01 +01:00
Laurent Cozic 5d9c2c0904 Electron: Added more toolbar icons and upgraded Font Awesome 2018-06-14 08:52:12 +01:00
Laurent Cozic c748281d86 Update website 2018-06-13 19:22:49 +01:00
Laurent Cozic fa619eba7c Added zh_TW translation 2018-06-13 19:22:18 +01:00
Laurent Cozic 17a75f7cf5 Electron: Made checkbox button more consistent 2018-06-13 17:53:41 +01:00
Joan Montané a74cfbfb25 Add Catalan Translation 2018-06-12 14:46:51 +02:00
Laurent Cozic af01fed950 Electron: Added hyperlink, checkbox and code options in toolbar 2018-06-12 00:12:06 +01:00
Laurent Cozic 218b446915 Electron: Added Bold and Italic toolbar buttons 2018-06-11 23:47:44 +01:00
Laurent Cozic a68df18cd5 Updated website 2018-06-11 22:18:34 +01:00
Laurent Cozic f79326b2d5 Updated website 2018-06-11 22:10:04 +01:00
Laurent Cozic b08dcdfd90 Electron: Fixes #598: Allow opening any URL with a valid protocol in an external app 2018-06-11 00:35:01 +01:00
Laurent Cozic ced14e578f Merge branch 'master' of github.com:laurent22/joplin 2018-06-11 00:24:44 +01:00
Laurent Cozic 0528c6e970 All: Try to display more info when there is a Dropbox API error 2018-06-11 00:24:29 +01:00
Laurent Cozic df9c1e0aeb Electron: Fixes #570: Allow opening files by right-clicking on a resource in macOS 2018-06-11 00:08:57 +01:00
Laurent Cozic b6619b41df All: Fixes #600: Improved resuming of long sync operations so that it doesn't needlessly re-download the items from the beginning 2018-06-10 23:16:27 +01:00
Laurent Cozic ab9675544c All: Fixes #597: Also import sub-notebooks when importing JEX data 2018-06-10 19:15:40 +01:00
Laurent Cozic 0d9f703c75 Update DE translation 2018-06-10 17:44:00 +01:00
Laurent Cozic f6ee5dd0e7 Mobile: Display decryption progress in side bar 2018-06-10 17:43:24 +01:00
Laurent Cozic 423d880b92 Merge branch 'master' of github.com:laurent22/joplin 2018-06-10 15:18:10 +01:00
Laurent Cozic 41017b9ab8 Update website 2018-06-10 15:18:07 +01:00
Laurent Cozic e3314c859f Merge pull request #554 from bradmcl/master
Handle Nginx DAV PROPFIND responses correctly
2018-06-10 15:11:38 +01:00
bradmcl 8f794fdbc6 Search for 404 anywhere in return status 2018-06-10 10:04:52 -04:00
Laurent Cozic 80b0773618 Update website 2018-06-10 14:18:50 +01:00
Laurent Cozic ac848241b9 Electron release v1.0.99 2018-06-10 14:03:17 +01:00
Laurent Cozic b4432e2efc Removed snap support 2018-06-10 14:02:55 +01:00
Laurent Cozic 52f60a2cf6 Electron release v1.0.98 2018-06-10 13:52:11 +01:00
Laurent Cozic 03c8438050 Removed broken snap package 2018-06-10 13:45:05 +01:00
Laurent Cozic 0e1c36ccf1 Electron: Fixes #601: Linux app cannot start anymore due to build error 2018-06-10 12:37:12 +01:00
Laurent Cozic 1b2b68c485 Electron: Fixes #562: Disable power saving when syncing in Linux 2018-06-10 12:19:36 +01:00
Laurent Cozic 5c36f3e78a Update translations 2018-06-10 11:54:29 +01:00
Laurent Cozic d4ec8ae823 Merge pull request #588 from zblesk/search-display-notebook
Displaying the notebook's name in the Note toolbar when search is act…
2018-06-10 11:50:08 +01:00
Laurent Cozic 449a70d840 Merge pull request #575 from foxmask/issue572
fix #572 - Translation submenu
2018-06-10 11:41:12 +01:00
zblesk 8375030135 Reverting previous change; using disabled button for the label. 2018-06-10 11:18:02 +02:00
Laurent Cozic e9f938b0fb Electron: Fixes #560: Drag the note that was clicked, which might be different from the note that was selected 2018-06-10 01:27:20 +01:00
Laurent Cozic b0e57a5990 All: Fixes #557: Handle ENEX am-pm date format 2018-06-10 01:19:24 +01:00
Laurent Cozic f47610e6fd Update website 2018-06-09 20:23:52 +01:00
Laurent Cozic c131cb9bb8 Electron release v1.0.97 2018-06-09 20:02:00 +01:00
Laurent Cozic 023f775bd2 Merge branch 'master' of github.com:laurent22/joplin 2018-06-09 20:00:35 +01:00
Laurent Cozic 1127eb6e09 Clipper: Fixes #573: Better handling of certain code blocks 2018-06-09 20:00:26 +01:00
Ladislav Benc 0d7437c7d2 Also showing the display when browsing tags. 2018-06-06 15:18:58 +02:00
Ladislav Benc 6dbc691973 Fixing locale and making the Notebook name no longer behave like a button. 2018-06-06 14:11:46 +02:00
Laurent Cozic fe53200a3a Added link to NixNote info 2018-06-06 00:16:21 +01:00
zblesk c7f61271a0 Displaying the notebook's name in the Note toolbar when search is active. 2018-06-05 10:27:07 +02:00
Laurent Cozic b826e2d97b Clipper: Fixes #569: Make clipper service available on localhost only 2018-06-01 16:44:16 +01:00
Laurent Cozic d8ad42b04a Clipper: Take zoom into account when clipping screenshot 2018-06-01 16:12:49 +01:00
Laurent Cozic b3ca30b8b6 Merge branch 'master' of github.com:laurent22/joplin 2018-06-01 15:50:23 +01:00
Laurent Cozic bdd9da3d22 Clipper: More consistent REST API 2018-06-01 15:50:11 +01:00
Laurent Cozic eb43ddc701 Merge pull request #576 from zuphilip/patch-1
Update de_DE.po
2018-05-31 11:16:40 +01:00
Philipp Zumstein f9c65a148f Update de_DE.po 2018-05-30 19:43:10 +02:00
FoxMaSk bd0b9dff51 fix #572 - Translation submenu 2018-05-30 19:22:07 +02:00
Laurent Cozic 3822309657 All: Auto-delete resources only after 10 days to handle some edge cases 2018-05-27 12:50:12 +01:00
Laurent Cozic ac2ec65c81 Update ES translation 2018-05-27 12:44:41 +01:00
Laurent Cozic c0943f1776 Merge branch 'master' of github.com:laurent22/joplin 2018-05-27 12:44:09 +01:00
Laurent Cozic 5a2ab5fae7 Mobile: Fixes #565: Translate strings in dialog 2018-05-27 12:42:31 +01:00
bradmcl 281e36fde7 Update file-api-driver-webdav.js 2018-05-26 21:06:51 -04:00
Laurent Cozic 1af1c445c6 Merge pull request #564 from fmrtn/master
Updated Spanish translation
2018-05-26 22:31:20 +01:00
Fernando e6d2e028ad Updated Spanish translation 2018-05-26 21:01:34 +02:00
Laurent Cozic 8d25b8075d Update website 2018-05-26 17:37:17 +01:00
Laurent Cozic 58201fd6c3 Clipper: Disable incorrect detection of dev mode for Firefox extension 2018-05-26 17:37:03 +01:00
Laurent Cozic 2b624a9aed Electron release v1.0.96 2018-05-26 17:25:15 +01:00
Laurent Cozic 792fd7c50d Update translations 2018-05-26 17:25:11 +01:00
Laurent Cozic 90d37a15bd Electron: Added link to Firefox extension 2018-05-26 17:13:27 +01:00
Laurent Cozic ef57ee803f Clipper: Fixes to get it working in Firefox 2018-05-26 16:28:55 +01:00
Laurent Cozic e2bfb74895 Clipper: Minor improvement to screenshot usability 2018-05-26 15:53:50 +01:00
Laurent Cozic 89b486a3ee Clipper: Allow selecting a folder and fixed screenshot taking issue 2018-05-26 15:46:57 +01:00
Laurent Cozic d6c6ef20d4 Update website 2018-05-26 12:58:44 +01:00
Laurent Cozic 6cb6e9541f Clipper: started doc 2018-05-26 12:57:14 +01:00
Laurent Cozic a8acecb703 Clipper: Display server status in popup 2018-05-26 12:17:41 +01:00
Laurent Cozic 0938297250 Clipper: Make dev icon look different and run dev server on different port 2018-05-26 11:18:54 +01:00
Laurent Cozic a2da2f681c Update website 2018-05-25 14:04:48 +01:00
Laurent Cozic 32477e901d Electron release v1.0.95 2018-05-25 13:31:42 +01:00
Laurent Cozic 1841c4dc11 Merge branch 'master' of github.com:laurent22/joplin 2018-05-25 13:31:27 +01:00
Laurent Cozic f81dce3321 Merge branch 'clipper' 2018-05-25 13:31:15 +01:00
Laurent Cozic e15f84716a Clipper: Added Clipper config screen and improved server 2018-05-25 13:30:27 +01:00
Laurent Cozic d11ecd8fac Clipper: Better handling of clipper server detection 2018-05-25 11:18:47 +01:00
Laurent Cozic 012e70d668 Clipper: Dynamically allocate and detect clipper service port 2018-05-25 11:08:22 +01:00
Laurent Cozic 264ee4f319 Clipper: Support clipping screenshots 2018-05-25 08:51:54 +01:00
Laurent Cozic 4640d6d6e3 Clipper: Made extension compatible with Chrome and started screenshot clipping 2018-05-24 18:32:30 +01:00
Laurent Cozic 9db9d98419 Clipper: Skip style section when importing HTML 2018-05-24 13:32:43 +01:00
Laurent Cozic f79d7b9626 Clipper: Set source URL and fixed issues with tables and urls 2018-05-24 12:44:13 +01:00
Laurent Cozic a8da469523 Clipper: Improved download of images and conversion to resources 2018-05-23 14:25:59 +01:00
Laurent Cozic 3c5eb99c59 Clipper: Download images and convert them to resources 2018-05-23 12:14:38 +01:00
bradmcl 8dc14516d6 Handle Nginx DAV PROPFIND responses correctly
Parse the d:status field for d:propstat sections within a d:multistatus response to a DAV PROPFIND because Nginx returns 404 statuses wrapped in an overall 207
2018-05-22 21:08:14 -04:00
Laurent Cozic 84efc6a04e ios-v10.0.24 2018-05-22 16:09:25 +01:00
Laurent Cozic 86e3038cfe Mobile: Fixes #531: Get WebDAV to work with certain servers that require a trailing slash on directories 2018-05-22 15:55:38 +01:00
Laurent Cozic 6898b9ca4c All: Identify another Dropbox missing auth error, to allow resetting the token 2018-05-22 15:03:55 +01:00
Laurent Cozic 9eb62920f7 Update SyncTargetDropbox.js 2018-05-22 15:02:35 +01:00
Laurent Cozic 7cf267254f Clipper: Improved Html To Md conversion 2018-05-22 00:54:23 +01:00
Laurent Cozic 5a0e3cbbf2 ios-v10.0.23 2018-05-21 23:02:47 +01:00
Laurent Cozic 4b376ec5c2 Update website 2018-05-21 21:53:13 +01:00
Laurent Cozic 92b71d3eb2 Electron release v1.0.94 2018-05-21 20:17:13 +01:00
Laurent Cozic c32d7de7c4 Updated French transaltion 2018-05-21 20:17:00 +01:00
Laurent Cozic c83a61d45d Android: Resolves #538 (kind of): Added info to ask user to set app permissions 2018-05-21 17:24:09 +01:00
Laurent Cozic 429f2d5aab All: Fixes #536: Allow changing sync target file path 2018-05-21 16:26:01 +01:00
Laurent Cozic ed70cf571c Electron: partially resolves #532: Better handling of Dropbox error message 2018-05-21 16:24:57 +01:00
Laurent Cozic fd77671575 Electron: Fixes #535: Note preview was not always updated when it should 2018-05-21 15:29:35 +01:00
Laurent Cozic 9d915a916e Fixed test 2018-05-21 15:21:08 +01:00
Laurent Cozic acb90935c7 Fixed tests 2018-05-20 13:33:26 +01:00
Laurent Cozic 6301ba0a12 Electron: Fixes #527: Remove empty section separators from menus 2018-05-20 13:01:07 +01:00
Laurent Cozic 44e1245416 Electron: Fixes #528: Set translation in bridge functions too 2018-05-20 12:54:42 +01:00
Laurent Cozic 6527d9db83 Update translation 2018-05-20 12:31:54 +01:00
Laurent Cozic 2bcaf62a2f Merge pull request #543 from Abijeet/tag-rename
Adds functionality to allow for renaming of tags.
2018-05-20 12:24:15 +01:00
Laurent Cozic 2db3998f11 Merge pull request #540 from Abijeet/master
Added styles to fix margin bottom for  nested lists
2018-05-20 12:24:01 +01:00
Laurent Cozic 04724c58d1 All: Fixes #491: Handle non-standard ports and better handling of fetchBlob errors 2018-05-20 12:20:15 +01:00
Laurent Cozic 7ed9c2770c Clipper: Improved UI and integration with main app 2018-05-20 10:19:59 +01:00
Abijeet 48883bfa13 Adds functionality to allow for renaming of tags.
Towards #374

Signed-off-by: Abijeet <abijeetpatro@gmail.com>
2018-05-20 13:09:32 +05:30
Abijeet b6d9e695d1 Added styles to fix margin bottom for nested lists
Fixes #482

Signed-off-by: Abijeet <abijeetpatro@gmail.com>
2018-05-19 23:39:27 +05:30
Laurent Cozic 43bab3c1bd Merge branch 'master' of github.com:laurent22/joplin 2018-05-16 15:34:09 +01:00
Laurent Cozic dd67602b87 ios v10.0.22 2018-05-16 15:33:52 +01:00
Laurent Cozic c96a416c2c Clipper: Clean up 2018-05-16 14:21:33 +01:00
Laurent Cozic c4ca9cde32 Electron: Allow copying path of resources 2018-05-16 14:16:43 +01:00
Laurent Cozic 6c5d208893 Clipper: Added first files 2018-05-16 14:16:14 +01:00
Laurent Cozic 795fd8b58c HtmlToMD: Finish restoring codes that could be saved, and scoped tests to ENEX-like data 2018-05-16 10:56:30 +01:00
Laurent Cozic c226940792 HtmlToMd: Re-applied recent changes that can be kept 2018-05-16 10:09:46 +01:00
Laurent Cozic bdd0a6106f HtmlToMd: Revert to version a677b2e844 2018-05-16 10:09:07 +01:00
Laurent Cozic d1ea7ad3ea HtmlToMd: Minor fix on table 2018-05-16 09:54:13 +01:00
Laurent Cozic a2b1181f7c HtmlToMd: Fixed handling of inline tags 2018-05-15 13:26:53 +01:00
Laurent Cozic 8cce2f17d5 HtmlToMd: Improved import of inline and code block 2018-05-15 13:13:55 +01:00
Laurent Cozic 658b911513 HtmlToMd: Minor tweak on LI tag 2018-05-15 09:52:56 +01:00
Laurent Cozic 3c95979d94 HtmlToMd: Fix LI tags that contains blocks 2018-05-14 23:13:17 +01:00
Laurent Cozic 2e32211a28 HtmlToMd: Fix conversion of tables 2018-05-14 23:04:40 +01:00
Laurent Cozic ba2874173d HtmlToMd: Added more test cases and fixed some issues 2018-05-14 19:48:52 +01:00
Laurent Cozic ba9598682c HtmlToMd: Fixed various tests 2018-05-14 18:46:04 +01:00
Laurent Cozic 30bfd82683 Update website 2018-05-14 12:47:51 +01:00
Laurent Cozic 10c6774c28 Fix download links 2018-05-14 12:47:36 +01:00
Laurent Cozic c4ad9019aa Update website 2018-05-14 12:42:06 +01:00
Laurent Cozic 7c99ab9947 Update Readme for portable app 2018-05-14 12:41:45 +01:00
Laurent Cozic feb7778fe4 Electron release v1.0.93 2018-05-14 12:18:40 +01:00
Laurent Cozic b45185780f Fixed auto-update download url 2018-05-14 12:18:00 +01:00
Laurent Cozic 4e032c0c55 Electron release v1.0.92 2018-05-14 11:36:40 +01:00
Laurent Cozic 2e2b35dfeb Fixed import of tables and added tests 2018-05-14 11:36:02 +01:00
Laurent Cozic 526ef7e1d2 Don't add new table when processing a table 2018-05-14 11:24:19 +01:00
Laurent Cozic a37005446a Fixed tests 2018-05-14 11:23:18 +01:00
Laurent Cozic e012b927dc Merge branch 'clipper' 2018-05-14 11:09:57 +01:00
Laurent Cozic 359b8d5545 Various tweaks to build portable version 2018-05-14 11:08:33 +01:00
Laurent Cozic 23c592b322 Merge branch 'master' of github.com:laurent22/joplin 2018-05-14 10:31:32 +01:00
Laurent Cozic 9aeddf86f4 Updated PortableApps build files 2018-05-14 10:31:16 +01:00
FoxMaSk 0e1887988e add OneDrive
add OneDrive to the general description of the supported services
2018-05-13 14:42:36 +02:00
Laurent Cozic 394f2df664 All: More robust HTML to MD conversion and started adding test units for it 2018-05-12 11:48:39 +01:00
Laurent Cozic 2a04378a0d Merge branch 'clipper' 2018-05-11 15:32:45 +01:00
Laurent Cozic bac68f2c42 All: Various changes to improve import of HTML 2018-05-11 15:29:44 +01:00
Laurent Cozic 0f0ff86ffa Merge pull request #409 from petrz12/better-evernote-import
Merge monospace text lines when importing from Evernote
2018-05-11 15:25:26 +01:00
Laurent Cozic 8b38752cbf Fix downloads 2018-05-11 14:36:52 +01:00
Laurent Cozic 3c24589450 Fixed deployment script 2018-05-11 14:36:22 +01:00
Laurent Cozic 65065a62d8 CLI v1.0.107 2018-05-11 13:50:19 +01:00
Laurent Cozic 482e9340bc Android release v1.0.125 2018-05-10 21:31:58 +01:00
Laurent Cozic 69d490996e Mobile: Remove uneeded GCM and C2DM dependencies from Android to make it acceptable for F-Droid 2018-05-10 21:25:06 +01:00
Laurent Cozic 3494937e34 Mobile: Resolves #503: Share note with other apps 2018-05-10 20:39:41 +01:00
Laurent Cozic 41ba1043be All: Fixed incorrect timeout for sync-after-save (was using ms instead of sec). Removed needless caching of note IDs in database. 2018-05-10 19:50:44 +01:00
Laurent Cozic cc57de60c0 Update website 2018-05-10 15:48:16 +01:00
Laurent Cozic 60a2b9e5c6 Electron release v1.0.91 2018-05-10 15:24:46 +01:00
Laurent Cozic 8e1fb666a5 Electron: Fixes #510: Removed reference to missing file 2018-05-10 15:24:38 +01:00
Laurent Cozic f4ad777bbf Update website 2018-05-10 14:32:33 +01:00
Laurent Cozic 2eacf6146a Android release v1.0.124 2018-05-10 12:24:36 +01:00
Laurent Cozic fe2ba34cb4 Electron release v1.0.90 2018-05-10 12:22:33 +01:00
Laurent Cozic 84daa0db61 Update readme 2018-05-10 12:22:14 +01:00
Laurent Cozic b9118a90be All: Resolves #443: Various optimisations to make dealing with large notes easier and make Katex re-rendering faster 2018-05-10 12:02:39 +01:00
Laurent Cozic ef2ffd4e52 Electron: Resolves #200, Resolves #416: Allow attaching images by pasting them in. Allow attaching files by drag and dropping them. Insert attachement at cursor position. 2018-05-10 10:45:44 +01:00
Laurent Cozic 5e3063abe0 Updated translations 2018-05-09 21:05:52 +01:00
Laurent Cozic f460b2497a Merge pull request #506 from fmrtn/master
Updated Spanish translation
2018-05-09 21:04:20 +01:00
Laurent Cozic c080d7054f Merge branch 'master' of github.com:laurent22/joplin 2018-05-09 21:00:33 +01:00
Laurent Cozic 61dd4cefbc All: Resolves #345: Option to hide completed todos 2018-05-09 21:00:05 +01:00
Laurent Cozic 63d99b2d70 Mobile: Fixes #497: Make sure Dropbox text input is visible when keyboard is visible on iPhone SE 2018-05-09 19:11:48 +01:00
Laurent Cozic 55332d7671 Electron: Fixes #481: Shortcuts were not working when text editor had focus 2018-05-09 18:41:32 +01:00
Laurent Cozic 16635defcd Mobile: Fixes #455: Use active folder when creating new note from Welcome screen 2018-05-09 18:12:00 +01:00
Laurent Cozic 595cf3fcad Mobile: Fixes #433: Don't scroll note back to top when changing checkbox state 2018-05-09 18:04:48 +01:00
Fernando c9b9f82130 Updated Spanish translation 2018-05-09 18:48:32 +02:00
Laurent Cozic f5bca733d7 Fixed translator email encoding issue 2018-05-09 17:06:02 +01:00
Laurent Cozic 494e235e18 Electron: Resolves #500: Fixed XSS security vulnerability 2018-05-09 16:59:33 +01:00
Laurent Cozic 85219a6004 Android release v1.0.123 2018-05-09 16:43:33 +01:00
Laurent Cozic e4a7851e57 Update debugging.md 2018-05-09 16:33:16 +01:00
Laurent Cozic b7529b40b5 Updated tests 2018-05-09 16:14:27 +01:00
Laurent Cozic 74827e5324 Electron: Fixed tag display 2018-05-09 15:31:42 +01:00
Laurent Cozic 2e16cc5433 ios-v10.0.21 2018-05-09 14:15:04 +01:00
Laurent Cozic 7f41bc5703 Update website 2018-05-09 14:10:13 +01:00
Laurent Cozic a2380fb752 Android release v1.0.122 2018-05-09 13:18:39 +01:00
Laurent Cozic f6a902809d Electron release v1.0.89 2018-05-09 13:17:08 +01:00
Laurent Cozic 33a853397d Electron release v1.0.88 2018-05-09 13:16:55 +01:00
Laurent Cozic 4f02481899 Electron release v1.0.87 2018-05-09 13:14:42 +01:00
Laurent Cozic b18076565f Update translations 2018-05-09 13:14:17 +01:00
Laurent Cozic 853ddc5840 Update website 2018-05-09 13:11:03 +01:00
Laurent Cozic 7930ab66c6 Merge branch 'master' into subnotebooks 2018-05-09 13:10:20 +01:00
Laurent Cozic c7716c0d59 All: Resolves #122: Sub-notebook support in desktop, mobile and cli app 2018-05-09 13:08:00 +01:00
Laurent Cozic 49cbb254d0 CLI: Fixed link handling 2018-05-09 12:50:50 +01:00
Laurent Cozic cf9246796d CLI: Added support for sub-notebooks 2018-05-09 12:39:27 +01:00
Laurent Cozic e1dee546dc Mobile: Added support for sub-notebooks 2018-05-09 12:39:17 +01:00
Laurent Cozic da6fdad2de All: Handle saving collapsed states of sub-notebook 2018-05-09 10:49:31 +01:00
Laurent Cozic 567596643c Electron: Handle drag and dropping notebooks to change the parent 2018-05-09 09:53:47 +01:00
Laurent Cozic cb617e1b14 All: Fixes #61: Handle path that ends with slash for file system sync. 2018-05-08 11:29:25 +01:00
Laurent Cozic facf8afa8b Update translations 2018-05-08 11:12:36 +01:00
Laurent Cozic f0dd61a711 Merge pull request #495 from fmrtn/master
Updated Spanish translation
2018-05-08 11:12:01 +01:00
Laurent Cozic e958211a13 Merge pull request #496 from zuphilip/patch-1
Update address pronouns "du" in German translation
2018-05-08 11:11:45 +01:00
Philipp Zumstein 0ed170b5bc Update address pronouns "du" in German translation 2018-05-07 07:12:01 +02:00
Fernando 473d3453a2 Updated Spanish translation 2018-05-06 20:29:35 +02:00
Laurent Cozic fa9d7b0408 Electron: Started UI and backend for sub-notebook support 2018-05-06 12:11:59 +01:00
Laurent Cozic d4a28f48c9 Update website 2018-05-06 11:17:34 +01:00
Laurent Cozic ead6fff861 Merge branch 'master' of github.com:laurent22/joplin 2018-05-06 11:16:52 +01:00
Laurent Cozic c7d06b35cd Merge pull request #494 from stweil/typo
Fix some typos
2018-05-06 11:16:43 +01:00
Laurent Cozic fa939e5c76 Merge branch 'master' of github.com:laurent22/joplin 2018-05-06 11:16:19 +01:00
Laurent Cozic 1bf2601f4f Merge pull request #492 from zuphilip/patch-1
Update de_DE.po
2018-05-06 11:15:59 +01:00
Stefan Weil feb0c02c9a ReactNativeClient: Fix some typos (found by codespell)
Signed-off-by: Stefan Weil <sw@weilnetz.de>
2018-05-05 16:25:37 +02:00
Stefan Weil 40a34a7c05 Fix typos in documentation (found by codespell)
Signed-off-by: Stefan Weil <sw@weilnetz.de>
2018-05-05 16:23:48 +02:00
Stefan Weil c62dcd96b0 CliClient: Fix some typos (found by codespell)
Remove also a "translation" which was none from locales/hr_HR.po.

Signed-off-by: Stefan Weil <sw@weilnetz.de>
2018-05-05 16:22:14 +02:00
Philipp Zumstein 1364d6786d Update de_DE.po 2018-05-05 11:08:47 +02:00
petrz12 9f2666aef9 Evernote code block conversion added, better handling of monospace empty lines 2018-05-04 00:23:19 +02:00
Laurent Cozic a6a351e68d Electron: Export/Import links to notes 2018-05-03 13:11:45 +01:00
Laurent Cozic 1db38a9699 Merge pull request #484 from fmrtn/master
Spanish translation updated
2018-05-03 12:08:57 +01:00
Fernando c57db1834f Spanish translation updated 2018-05-03 13:07:36 +02:00
Laurent Cozic 3aeb49b469 Merge branch 'master' of github.com:laurent22/joplin 2018-05-03 11:31:17 +01:00
Laurent Cozic 80b467eead All: For now, disable attaching resources larger than 10MB due to #371 2018-05-03 11:31:07 +01:00
Laurent Cozic 61572f287a Update README.md
Added note about large resources
2018-05-03 11:06:12 +01:00
petrz12 f136664c11 codeblock detection added 2018-05-02 22:39:50 +02:00
Laurent Cozic 0e545baf10 Update issue_template.md 2018-05-02 21:39:11 +01:00
Laurent Cozic e65e647359 Update issue_template.md 2018-05-02 21:38:49 +01:00
Laurent Cozic 238268884e Update debugging.md 2018-05-02 20:16:08 +01:00
Laurent Cozic 4c210d0956 Electron: Fixes #480: Ignore invalid flag automatically passed by macOS 2018-05-02 15:51:33 +01:00
Laurent Cozic 5f32c6466a Update website 2018-05-02 15:33:18 +01:00
Laurent Cozic 71bd39a8a3 Update website 2018-05-02 15:31:17 +01:00
Laurent Cozic ffb660f0f4 Move tool file 2018-05-02 15:28:13 +01:00
Laurent Cozic dde23632c1 Move tool file 2018-05-02 15:27:12 +01:00
Laurent Cozic 9d26f13db0 Android release v1.0.120 2018-05-02 15:18:13 +01:00
Laurent Cozic 2a4c9c4427 Electron release v1.0.86 2018-05-02 15:16:02 +01:00
Laurent Cozic 3bfde26b74 Merge branch 'master' of github.com:laurent22/joplin 2018-05-02 15:13:28 +01:00
Laurent Cozic a419bc7253 All: Resolves #134: Allow linking to a note from another note 2018-05-02 15:13:20 +01:00
Laurent Cozic 89e0dad88b Update README.md
32-bit is now supported
2018-05-02 13:16:04 +01:00
Laurent Cozic ff1ee1249b Mobile: Resolves #61: Enable File System sync on mobile as the driver seems to be working now 2018-05-02 10:27:37 +01:00
Laurent Cozic ba9cfd8041 Electron: Increased timeout for sync-after-save to 30 seconds 2018-05-02 08:34:54 +01:00
Laurent Cozic 80a51e02a4 Update readme downloads 2018-05-01 22:33:01 +01:00
Laurent Cozic a2e2a9a2f5 Electron release v1.0.85 2018-05-01 21:16:24 +01:00
Laurent Cozic 49e4c37cac Electron: Check that the filename contains 'Setup' when auto-updating 2018-05-01 21:13:41 +01:00
Laurent Cozic 11d323d8b7 Electron: Fixes #479: Currently loaded note was cleared when creating new note 2018-05-01 21:13:17 +01:00
Laurent Cozic 784ba45f1f Electron release v1.0.84 2018-05-01 19:39:06 +01:00
Laurent Cozic e534414874 All: Fixes #434: Handle Katex block mode 2018-05-01 19:34:42 +01:00
Laurent Cozic 01f4faf8f1 Mobile: Fixes #426: Fix missing menu icon on Android 4 2018-05-01 19:30:41 +01:00
Laurent Cozic b33d30ca47 Merge branch 'master' of github.com:laurent22/joplin 2018-05-01 19:05:33 +01:00
Laurent Cozic 1ba3fae101 All: Resolves #470: Make it clear that spaces in URLs are invalid. 2018-05-01 19:05:14 +01:00
Laurent Cozic 9550347e04 Merge pull request #448 from solariz/master
Fix for Issue #430
2018-05-01 18:54:43 +01:00
Laurent Cozic 398946d39a Mobile: Fixes #393: Fixed moving new notes before they are saved 2018-05-01 18:53:45 +01:00
Laurent Cozic 05faf55e8d All: Fixes #363: Fixed indentation and rendering of lists 2018-05-01 16:45:17 +01:00
Laurent Cozic 4cf5525e20 Electron: Fixes #355: Set undo state properly when loading new note 2018-05-01 10:48:15 +01:00
Laurent Cozic 62e91c44d7 Electron: Fixes #346: Make sure links have an address when exporting to PDF 2018-05-01 10:14:48 +01:00
Laurent Cozic e4ec4ae92b Mobile: Fix action button when note is being edited. 2018-05-01 10:09:36 +01:00
Laurent Cozic c1f5dfd9cc Keep Blob tests to revisit in a few weeks 2018-04-30 21:21:17 +01:00
Laurent Cozic 0c0efeac1f Android release v1.0.119 2018-04-30 18:34:55 +01:00
Laurent Cozic 5e0f2642e3 Android release v1.0.118 2018-04-30 17:41:39 +01:00
Laurent Cozic 93966b0fa1 Mobile: Trying to upgrade to React Native 0.55 2018-04-30 17:38:19 +01:00
Laurent Cozic e90abf3517 Updated translations 2018-04-28 11:44:07 +02:00
Laurent Cozic d3fa0dce96 Updated translations 2018-04-28 11:40:55 +02:00
Laurent Cozic 58a7c2fa94 Doc: Added forum link to website 2018-04-28 11:40:27 +02:00
Laurent Cozic 962a8700c2 Added ptBR translation 2018-04-28 11:35:28 +02:00
Laurent Cozic b5c704e2bb Doc: Updated website 2018-04-25 20:08:59 +02:00
Laurent Cozic e7b52b19d7 Doc: Updated website 2018-04-25 20:04:25 +02:00
Laurent Cozic 903c2e6d92 Doc: Updated website 2018-04-25 19:25:54 +02:00
Laurent Cozic abcb1ac760 Doc: Update website 2018-04-25 19:24:13 +02:00
Laurent Cozic b6bf76cc4c Doc: Mentioned forums and other community-related links 2018-04-25 11:59:43 +02:00
Laurent Cozic 2bf87655da Electron: Various tweaks to get PortableApps format to work 2018-04-23 21:50:29 +02:00
Laurent Cozic d4b19f19a1 Electron: Use built-in image resizing instead of Sharp 2018-04-22 21:10:43 +02:00
Laurent Cozic d8ccc38d5b All: Better handling of resources that are incorrectly flagged as encrypted 2018-04-22 14:33:12 +02:00
petrz12 c8c9f80cc5 Making monospace merging permanent 2018-04-21 13:55:18 +02:00
Marco G 577bef5704 Fix for Issue #430 2018-04-21 10:25:13 +02:00
Laurent Cozic 4e3b8a06ea Merge branch 'master' of github.com:laurent22/joplin 2018-04-19 19:43:27 +02:00
Laurent Cozic 363632ffa7 Doc: Added Arch Linux package info 2018-04-19 19:42:44 +02:00
Laurent Cozic 994c99f47f Merge pull request #442 from solariz/master
Common EU Date format DD.MM.YYYY added, issue #405
2018-04-19 19:32:22 +02:00
Marco G 96571baadc Common EU Date format DD.MM.YYYY added, issue #405 2018-04-19 17:03:16 +02:00
Laurent Cozic 4ce2b2c948 Doc: Added link to AUR package 2018-04-19 11:14:43 +02:00
Laurent Cozic 5d69f7a0a7 Doc: Added link to AUR package 2018-04-19 11:13:33 +02:00
petrz12 69ddcc6e30 Remove debug lines, fixing some comments 2018-04-18 14:13:19 +02:00
Laurent Cozic bcb1f36ad8 Merge pull request #428 from Abijeet/master
Add the toggle sidebar option to the View app menu bar.
2018-04-17 11:17:24 +02:00
Abijeet 34c65a686c Add the toggle sidebar option to the View app menu bar.
Towards #183

Signed-off-by: Abijeet <abijeetpatro@gmail.com>
2018-04-16 22:57:36 +05:30
Laurent Cozic 0b32741a12 Electron: Resolves #252: Allow enabling tray icon in Linux 2018-04-16 19:18:28 +02:00
Laurent Cozic dbb321a3cc CLI: Resolves #411: Fixed documentation 2018-04-16 16:29:34 +02:00
Laurent Cozic a6e4f47adf All: Resolves #389: Documented method being used to encrypt master keys 2018-04-16 16:16:31 +02:00
Laurent Cozic fb6dee32ac All: Resolves #380: Fixed documentation inconsitencies for webdav url 2018-04-16 16:09:38 +02:00
Laurent Cozic 984dd6f2c0 Electron: Rotate sidebar icon when it is hidden 2018-04-16 15:32:33 +02:00
Laurent Cozic 02bde2c6e9 Merge pull request #424 from Abijeet/master
Adds support to toggle the sidebar.
2018-04-16 15:24:33 +02:00
Laurent Cozic 782d24cc04 Updated Spanish translation 2018-04-16 15:16:29 +02:00
Laurent Cozic 4d0af575e5 Mobile: Resolves #360: Don't crash if theme not set and improved logging. 2018-04-16 15:15:29 +02:00
Laurent Cozic be8bda8e73 Added Joplin letter as SVG 2018-04-16 11:20:33 +02:00
Abijeet 1242de532e Adds support to toggle the sidebar.
Closes #183

Signed-off-by: Abijeet <abijeetpatro@gmail.com>
2018-04-15 21:20:39 +05:30
Laurent Cozic 7d7ec7f15e Update translation 2018-04-11 21:39:37 +02:00
Laurent Cozic ca112ec5d3 Merge branch 'master' of github.com:laurent22/joplin 2018-04-11 21:39:13 +02:00
Laurent Cozic 5deb8cf76d Update translation 2018-04-11 19:27:45 +02:00
Laurent Cozic a2c9737c17 utf-8 2018-04-11 19:27:20 +02:00
Laurent Cozic d3fca3d6cc Mobile: Fixes #358: Fix cursor color in dark mode 2018-04-11 19:25:07 +02:00
petrz12 16554b22c7 Merge monospace text lines when importing from Evernote 2018-04-10 22:59:45 +02:00
Laurent Cozic d5574098f0 Resolves #392: Clarified deletion of resources 2018-04-09 21:00:47 +02:00
Laurent Cozic f5a683f25c Update issue_template.md 2018-04-09 20:58:35 +02:00
Laurent Cozic 5f04adb392 Merge pull request #376 from mjjzf/master
Updated Danish translation
2018-04-05 22:41:21 +02:00
Laurent Cozic edd0f7e255 Update issue_template.md 2018-04-04 21:50:45 +02:00
Laurent Cozic 67145d9104 Updated website 2018-04-04 21:48:42 +02:00
Laurent Cozic 003e2afff7 Update readme downloads 2018-04-04 21:44:25 +02:00
Laurent Cozic 6e9d70c5cb Electron release v1.0.83 2018-04-04 21:25:45 +02:00
Laurent Cozic 4821b4cdf2 Electron: Fixes #365: Cannot paste in Dropbox screen 2018-04-04 21:25:27 +02:00
Morten Juhl-Johansen Zölde-Fejer 734d4db431 Updated Danish translation
Translated new strings, minor corrections
2018-04-04 12:32:30 +02:00
Morten Juhl-Johansen Zölde-Fejer 317aaed0ac Updated Danish translation
New strings and minor corrections.
2018-04-04 11:52:26 +02:00
Laurent Cozic 9778098d6c Merge pull request #366 from bimlas/patch-1
Clarify Windows build dependencies
2018-04-02 21:17:10 +02:00
Bimba Laszlo 5b1755f988 Clarify Windows build dependencies 2018-04-02 19:14:04 +02:00
Laurent Cozic 2a772895dd ios v10.0.20 2018-03-31 20:24:32 +02:00
Laurent Cozic 5fbb01cf2f Electron release v1.0.82 2018-03-31 19:23:06 +01:00
Laurent Cozic f9e0870b4e Android release v1.0.116 2018-03-31 19:21:07 +01:00
Laurent Cozic a58f1e9b4b Update Galician translation 2018-03-31 19:19:11 +01:00
Laurent Cozic 6fc0d89b30 Update website 2018-03-29 20:55:15 +01:00
Laurent Cozic 2dcadab7d2 Update website 2018-03-29 20:50:18 +01:00
Laurent Cozic bb3307e156 Update website 2018-03-29 20:48:22 +01:00
Laurent Cozic ecd07f1209 Update website 2018-03-29 20:42:11 +01:00
Laurent Cozic 266cb1174f Update website 2018-03-29 20:36:34 +01:00
Laurent Cozic bfb9b77b6e Update website 2018-03-29 20:25:37 +01:00
Laurent Cozic 01b1361dcb Update website 2018-03-29 20:21:14 +01:00
Laurent Cozic 3a921720d6 Update website 2018-03-29 20:17:11 +01:00
Laurent Cozic cdfd3d9c31 Updated French translation and added Galician translation 2018-03-29 18:30:33 +01:00
Laurent Cozic 9961fb64bb Updated website 2018-03-29 00:52:27 +01:00
Laurent Cozic 3137c355cf Added stats and changelog document 2018-03-28 17:41:14 +00:00
Laurent Cozic 16abaf60d2 Update readme downloads 2018-03-28 09:14:24 +01:00
Laurent Cozic 9004b710ea CLI v1.0.106 2018-03-27 23:22:06 +01:00
Laurent Cozic 6ebac21c2b Electron release v1.0.81 2018-03-27 23:03:25 +01:00
Laurent Cozic 99f79faf83 Android release v1.0.115 2018-03-27 23:01:56 +01:00
Laurent Cozic 613fa20806 Merge branch 'dropbox' 2018-03-27 23:00:49 +01:00
Laurent Cozic 1b5f812278 Merge branch 'master' of github.com:laurent22/joplin 2018-03-27 23:00:32 +01:00
Laurent Cozic 3a9643c1ea Electron release v1.0.80 2018-03-27 22:57:23 +01:00
Laurent Cozic aee7f5a8ac Android release v1.0.114 2018-03-27 22:55:46 +01:00
Laurent Cozic d3cd378922 Android release v1.0.113 2018-03-27 17:57:34 +01:00
Laurent Cozic 4f5e7367d0 Minor tweals 2018-03-27 17:48:55 +01:00
Laurent Cozic 2280fb5c43 Styled Dropbox mobile GUI 2018-03-27 17:41:19 +00:00
Laurent Cozic 96fb7c2087 Getting Dropbox to work in mobile app 2018-03-27 00:55:44 +01:00
Laurent Cozic 6e994fd8b9 All: Dropbox: Handle various error conditions 2018-03-27 00:05:39 +01:00
Laurent Cozic a7cde1e269 All: Resolves #329: Add link to E2EE doc 2018-03-26 17:55:09 +00:00
Laurent Cozic f8310ba0d5 Mobile: Fixed tag box styling in dark theme 2018-03-26 17:52:49 +00:00
Laurent Cozic b239c3faba Update README.md 2018-03-26 18:51:03 +01:00
Laurent Cozic 3c2281dbf9 Merge branch 'master' into dropbox 2018-03-26 18:37:04 +01:00
Laurent Cozic ac07bf784d Adding Dropbox sync to Electron app 2018-03-26 18:33:55 +01:00
Laurent Cozic 067455542f Update README.md 2018-03-25 20:02:54 +01:00
Laurent Cozic 5bfeaa357b Updated translations and added Czech translation 2018-03-24 20:15:36 +00:00
Laurent Cozic fe27a64331 Merge branch 'master' of github.com:laurent22/joplin 2018-03-24 20:14:04 +00:00
Laurent Cozic ed638612aa Moved to https:// domain 2018-03-24 20:13:52 +00:00
Laurent Cozic 1d7ec83510 Merge pull request #328 from hydrandt/czech_translation
adding Czech translation
2018-03-24 20:12:44 +00:00
Laurent Cozic 75c710232d Update readme downloads 2018-03-24 20:08:23 +00:00
hydrandt 5af52afadb adding Czech translation 2018-03-25 04:01:51 +08:00
Laurent Cozic 0f4324c2f8 All: Added backend for Dropbox support 2018-03-24 19:35:10 +00:00
Laurent Cozic b48e1dac94 Update README.md
Fixes #327
2018-03-24 16:50:10 +00:00
Laurent Cozic f0ca8e1e31 Update debugging.md 2018-03-24 15:37:33 +00:00
Laurent Cozic 74b83eb71e All: Fixes #318: Display full links in editor 2018-03-24 15:16:58 +00:00
Laurent Cozic 28dce0fbb5 iOS 19 2018-03-23 19:19:15 +00:00
Laurent Cozic c12d402c7e Merge branch 'master' of github.com:laurent22/joplin 2018-03-23 18:19:46 +00:00
Laurent Cozic 014f5b123c iOS 15 2018-03-23 18:19:38 +00:00
Laurent Cozic 58601dfc04 CLI v1.0.104 2018-03-23 18:06:06 +00:00
Laurent Cozic 9fe7f0adae Android release v1.0.112 2018-03-23 17:32:29 +00:00
Laurent Cozic ea1374371f Electron release v1.0.79 2018-03-23 17:30:24 +00:00
Laurent Cozic bce4294529 Fix Mark loading state logic 2018-03-23 17:29:08 +00:00
Laurent Cozic de409b632a Merge branch 'master' into highlight-search 2018-03-23 17:25:20 +00:00
Laurent Cozic a677b2e844 Electron: Fixes #318, Fixes #317: ENEX: Improved handling and rendering of plain text links. Improved detection and import of resources. Improved import of tables. 2018-03-23 17:59:18 +00:00
Laurent Cozic c63bb19cb6 Updated French translation and added Danish translation 2018-03-22 18:25:50 +00:00
Laurent Cozic 72fd77812e Update README.md 2018-03-21 07:48:29 +00:00
Laurent Cozic 40f3e72bd1 Update website 2018-03-20 17:41:48 +00:00
Laurent Cozic d6d86f2aff Merge branch 'master' of github.com:laurent22/joplin 2018-03-20 17:37:36 +00:00
Laurent Cozic c71809438b Updated website CSS 2018-03-20 17:36:07 +00:00
Laurent Cozic 3e6e1a0a36 Added badges 2018-03-20 10:24:26 +00:00
Laurent Cozic f590ce4a34 Added Nextcloud logo and intro text 2018-03-19 23:25:55 +00:00
Laurent Cozic 67608e29c8 Electron: Resolves #144, Resolves #311: Highlight search results and search in real time. Associated Ctrl+F with searching. 2018-03-19 23:04:48 +00:00
Laurent Cozic d5c2982093 Merge branch 'master' of github.com:laurent22/joplin 2018-03-18 12:45:59 +00:00
Laurent Cozic 90fad2a3ab Electron: Resolves #307: Use blue colour for sidebar, to be consistent with mobile app and logo 2018-03-18 12:45:39 +00:00
Laurent Cozic bc7c82e3da Update README.md 2018-03-18 10:16:08 +00:00
Laurent Cozic cb824f7dd7 Android release v1.0.110 2018-03-17 23:55:09 +00:00
Laurent Cozic 32c47a96f1 Electron: Resolves #73: Show modified date next to note in editor 2018-03-17 23:51:15 +00:00
Laurent Cozic 4e3f8893f7 Merge branch 'master' of github.com:laurent22/joplin 2018-03-17 23:00:22 +00:00
Laurent Cozic ca3946689a Mobile: Made tag UI a dialog 2018-03-17 23:00:01 +00:00
Laurent Cozic e2ad2dfcaa Update CONTRIBUTING.md 2018-03-17 22:23:50 +00:00
Laurent Cozic d6f7893c56 Update readme downloads 2018-03-17 15:28:56 +00:00
Laurent Cozic 8c65a7cc31 Electron release v1.0.78 2018-03-17 15:13:00 +00:00
Laurent Cozic aabb9be7de Mobile: Resolves #285: Create, edit and remove tags from notes 2018-03-16 20:17:52 +00:00
Laurent Cozic 544f93bf22 All: Handle deletion of resources that are not linked to any note 2018-03-16 17:39:44 +00:00
Laurent Cozic f81dbf4a4c CLI v1.0.103 2018-03-16 14:36:09 +00:00
Laurent Cozic fbec8263a3 Electron release v1.0.77 2018-03-16 14:34:10 +00:00
Laurent Cozic 68d77a69e6 Updated translations 2018-03-16 14:33:53 +00:00
Laurent Cozic f2ef2446c6 Merge branch 'master' of github.com:laurent22/joplin 2018-03-16 14:33:16 +00:00
Laurent Cozic 875cb5387a Merge pull request #306 from tobias-grasse/tobias-grasse-patch-1
Update de_DE.po
2018-03-16 14:33:02 +00:00
Laurent Cozic ae9ecdad40 All: Fix database upgrade 2018-03-16 14:32:47 +00:00
Laurent Cozic 86a0e34975 Update faq.md 2018-03-16 14:19:24 +00:00
Laurent Cozic 1141074745 Update faq.md 2018-03-16 14:19:10 +00:00
Tobias Grasse efc46d9989 Update de_DE.po
Add missing translations, minor corrections for existing translations.
2018-03-16 12:13:42 +01:00
Laurent Cozic 2b45f745b6 Electron release v1.0.76 2018-03-16 10:12:27 +00:00
Laurent Cozic 37fb81e9b2 Trying to build only master branch 2018-03-16 10:12:23 +00:00
Laurent Cozic 255a4fac93 Electron release v1.0.75 2018-03-16 10:03:47 +00:00
Laurent Cozic 3e3fb88de8 Merge branch 'master' into resource_cleanup 2018-03-16 10:03:05 +00:00
Laurent Cozic e4cf03ae46 Only build master branch 2018-03-16 10:02:58 +00:00
Laurent Cozic 554a3eb10d Electron release v1.0.74 2018-03-16 09:11:25 +00:00
Laurent Cozic 61881b528a Electron: Trying to fix signed executable issue 2018-03-16 09:11:10 +00:00
Laurent Cozic c2507cbc4e CLI v1.0.101 2018-03-16 08:17:27 +00:00
Laurent Cozic ed0f6d165c Android release v1.0.107 2018-03-16 08:10:32 +00:00
Laurent Cozic 8e22d38eb3 Electron release v1.0.73 2018-03-16 08:08:10 +00:00
Laurent Cozic 2599c425c3 Updated translations 2018-03-15 18:15:33 +00:00
Laurent Cozic 0e15821a81 Merge branch 'master' of github.com:laurent22/joplin 2018-03-15 18:10:11 +00:00
Laurent Cozic c1bb51c12b All: Finished service to clean up resources 2018-03-15 18:08:46 +00:00
Laurent Cozic 1532b6d159 All: Made WebDAV options dynamics so that changing username or password doesn't require restarting the app 2018-03-15 17:57:11 +00:00
Laurent Cozic 945018b698 All: Allow deleting and syncing deleted resources 2018-03-15 17:46:54 +00:00
Laurent Cozic df7b981e5e Merge branch 'master' into resource_cleanup 2018-03-15 18:19:06 +00:00
Laurent Cozic 4fe495675b Merge pull request #301 from fmrtn/master
Updated Spanish translation
2018-03-15 14:26:28 +00:00
Fernando 7828eef2ad Updated Spanish translation 2018-03-15 15:24:37 +01:00
Laurent Cozic 694f81b75f Merge pull request #300 from rtmkrlv/master
Updated Russian translation
2018-03-15 13:15:09 +00:00
rtmkrlv 8364b6e08d Updated Russian translation 2018-03-15 11:14:04 +02:00
rtmkrlv 3f4328ce9d Merge pull request #5 from laurent22/master
Update fork from original repository
2018-03-15 10:41:44 +02:00
Laurent Cozic 9e0bf1acb2 Mobile: Fixes #299: App freezes when connecting to OneDrive login page while internet connection is down 2018-03-14 23:17:02 +00:00
Laurent Cozic c9e130a771 Merge branch 'master' into resource_cleanup 2018-03-14 17:41:06 +00:00
Laurent Cozic 26331f61e1 Electron: Resolves #298: Removed extraneous first characters from auto-title 2018-03-14 17:37:47 +00:00
Laurent Cozic 694672859a Updated translations 2018-03-14 17:32:05 +00:00
Laurent Cozic 858ead40b9 /bin/bash: qa: command not found 2018-03-14 17:29:13 +00:00
Laurent Cozic b07fe5cc34 CLI: Fixes #288: Don't log commands in release versions 2018-03-14 17:28:41 +00:00
Laurent Cozic 0317171097 Electron: Fixes #292: Removed buggy electron-updater and implemented custom check 2018-03-14 17:23:19 +00:00
Laurent Cozic 9741a3a53d Merge pull request #283 from jcgerhard/master
Updated german translation de_DE
2018-03-14 16:44:54 +00:00
Laurent Cozic 7937fab5ff Electron: Fixes #291: Crash with empty backtick 2018-03-13 17:54:40 +00:00
Laurent Cozic f595be07d4 Adding service to keep track of note resources associations 2018-03-12 23:40:43 +00:00
Laurent Cozic eef106c99b Electron: Resolves #237: Export to PDF and print option 2018-03-12 18:01:47 +00:00
Laurent Cozic dbe1833f92 Made easier to add export options 2018-03-12 08:30:10 +00:00
Jan C. Gerhard 520dc0ae21 Updated german translation de_DE 2018-03-12 08:08:14 +01:00
Laurent Cozic c9be287f4a Electron release v1.0.72 2018-03-11 19:34:07 +00:00
Laurent Cozic 711f5dcaba Android release v1.0.106 2018-03-11 19:32:41 +00:00
Laurent Cozic ebc0aa9809 Electron release v1.0.71 2018-03-11 19:31:07 +00:00
Laurent Cozic dcaaf50a5a All: Fixes #271: Sort by created time was not respected 2018-03-10 15:34:55 +00:00
Laurent Cozic 3370b57134 Finished removing prettier 2018-03-10 15:34:29 +00:00
Laurent Cozic 55c5ddedf4 Revert "Applied prettier to code base"
This reverts commit c4f19465a6.
2018-03-09 20:59:12 +00:00
Laurent Cozic 5e8b09f5af All: Display icon next to resources and allow downloading them from Electron client 2018-03-09 20:46:28 +00:00
Laurent Cozic 1acffce62d All: Display last sync error unless it's a timeout or network error 2018-03-09 19:51:01 +00:00
Laurent Cozic 8555ecce87 Merge branch 'master' of github.com:laurent22/joplin 2018-03-09 19:07:47 +00:00
Laurent Cozic 4df5f668dc All: Improved sync when dealing with many items, in particular when using Nextcloud 2018-03-09 19:07:38 +00:00
Laurent Cozic cceebeebef Update CONTRIBUTING.md 2018-03-09 17:59:41 +00:00
Laurent Cozic c4f19465a6 Applied prettier to code base 2018-03-09 17:49:35 +00:00
Laurent Cozic e868102c98 Revert "Adding prettier to all projects"
This reverts commit d6a4436313.
2018-03-09 17:45:42 +00:00
Laurent Cozic 0d4a1837f5 Merge branch 'master' of github.com:laurent22/joplin 2018-03-09 17:32:26 +00:00
Laurent Cozic d6a4436313 Adding prettier to all projects 2018-03-09 17:32:10 +00:00
Laurent Cozic 03b5c6aa5e Added prettier options to ST project 2018-03-09 17:48:08 +00:00
Laurent Cozic 250cd47e02 Added prettier config file 2018-03-09 17:41:34 +00:00
Laurent Cozic 943fef32e7 Merge pull request #281 from fmrtn/master
Updated Spanish translation
2018-03-09 16:59:55 +00:00
Fernando 408634671c Updated Spanish translation 2018-03-09 17:28:39 +01:00
Laurent Cozic 570b5856ba Updated translations 2018-03-09 09:11:13 +00:00
Laurent Cozic d114d14e87 Added donation links 2018-03-09 09:09:13 +00:00
Laurent Cozic 32791f502e More consistent links 2018-03-09 08:57:34 +00:00
Laurent Cozic 083ab0c788 Updated website 2018-03-09 08:53:26 +00:00
Laurent Cozic 003c4c4e26 Moved readme files to own folder 2018-03-09 08:47:21 +00:00
Laurent Cozic f08f89ebd4 Added donate page 2018-03-09 08:30:36 +00:00
Laurent Cozic 3c973144c4 Added image 2018-03-09 08:18:02 +00:00
Laurent Cozic 82e99ca658 All: Better handling of startup errors 2018-03-07 19:11:55 +00:00
Laurent Cozic b04d750cec Merge branch 'master' of github.com:laurent22/joplin 2018-03-07 17:40:00 +00:00
Laurent Cozic c804e9f541 CLI: Fixes #268: Improve error message for invalid flags 2018-03-07 17:39:45 +00:00
Laurent Cozic 7753f3f842 Minor tweaks 2018-03-07 17:35:11 +00:00
Laurent Cozic c985b7c682 Merge pull request #277 from fmrtn/master
Updated Spanish translation
2018-03-07 17:30:48 +00:00
Fernando 4509919c22 Updated Spanish translation 2018-03-07 17:04:10 +01:00
Laurent Cozic 89b164c7ca Merge pull request #272 from alexdevero/windows-build-instructions
Add build instructions for Windows
2018-03-06 23:16:32 +00:00
Alex Devero e52d17b39a Add build instructions for Windows 2018-03-06 08:42:29 +01:00
Laurent Cozic 5014914dc9 Android release v1.0.104 2018-03-05 18:23:11 +00:00
Laurent Cozic 122ab83a84 Android: Fix when downloading many encrypted items 2018-03-05 18:21:42 +00:00
Laurent Cozic 7a985c2c8a Android release v1.0.103 2018-03-02 18:15:09 +00:00
Laurent Cozic b11ad30a31 Updated translations 2018-03-02 18:12:58 +00:00
Laurent Cozic 5914fc97df Merge branch 'master' of github.com:laurent22/joplin 2018-03-02 18:03:28 +00:00
Laurent Cozic e41ae1832d Minor tweaks 2018-03-02 18:24:02 +00:00
Laurent Cozic 89b50909ed Electron: Resolves #266: Allow setting text editor font family 2018-03-02 18:16:48 +00:00
Laurent Cozic edccd7412f Merge pull request #265 from jaredcrowe/docs-correct-checkbox-syntax
correct the documentation about adding checkboxes
2018-03-02 17:59:33 +00:00
Jared Crowe c76beae057 correct the documentation about adding checkboxes 2018-03-02 09:30:27 +11:00
Laurent Cozic 23c5934a7d Electron: Allow exporting only selected notes or notebook 2018-03-01 20:14:06 +00:00
Laurent Cozic a078947d6d Allow importing and exporting single notes and notebooks 2018-03-01 18:35:17 +00:00
rtmkrlv 0faaf660b4 Merge pull request #4 from laurent22/master
Update fork from original repository
2018-03-01 15:31:51 +02:00
Laurent Cozic 5ba98b4200 CLI v1.0.100 2018-02-28 21:18:27 +00:00
Laurent Cozic c36513b99d Updated translation 2018-02-28 20:46:15 +00:00
Laurent Cozic 97814531fa Update readme downloads 2018-02-28 20:06:06 +00:00
Laurent Cozic fd3e335a02 Electron release v1.0.70 2018-02-28 18:57:10 +00:00
Laurent Cozic e676fa2b57 Trying to fix Electron builder 2018-02-28 18:56:57 +00:00
Laurent Cozic 122cbbf673 Electron release v1.0.69 2018-02-28 18:43:12 +00:00
Laurent Cozic 271793b324 Trying to upgrade Electron Builder 2018-02-28 18:43:03 +00:00
Laurent Cozic 134b31933b Electron release v1.0.68 2018-02-28 18:13:02 +00:00
Laurent Cozic 0ec5518a62 Android release v1.0.102 2018-02-28 18:10:33 +00:00
Laurent Cozic 76931370d7 Updated readme for import/export 2018-02-27 22:15:20 +00:00
Laurent Cozic 8cf0e4517a Merge branch 'master' of github.com:laurent22/joplin 2018-02-28 17:27:06 +00:00
Laurent Cozic e75c62bf0f Electron: Fix logic of hidding app in macOS 2018-02-27 21:54:40 +00:00
Laurent Cozic 058285e0b9 All: Made scheduled sync delay slightly shorter 2018-02-27 21:19:11 +00:00
Laurent Cozic 795568d8c2 Electron: Fixed note sorting bug 2018-02-27 21:11:53 +00:00
Laurent Cozic df4933fddd All: Prevent export of encrypted items 2018-02-27 20:51:07 +00:00
Laurent Cozic 4046a51472 Electron: Handle import export 2018-02-27 20:04:38 +00:00
Laurent Cozic 45845f645d Refactored Interop service to make export/import code more modular 2018-02-26 19:25:54 +00:00
Laurent Cozic d7fd8944f7 Moved Enex import to InteropService 2018-02-26 19:16:01 +00:00
Laurent Cozic 3cee671f25 Done MD importer 2018-02-26 18:43:50 +00:00
Laurent Cozic 8f2e5faff3 Support importing JEX and raw data 2018-02-25 17:01:16 +00:00
Laurent Cozic 39ddd934f6 Changed export format extension to JEX and made it a non-compressed tar file 2018-02-25 21:08:40 +00:00
Laurent Cozic 9f8a46b9d9 All: Added more export options including jpz format 2018-02-23 19:32:19 +00:00
Laurent Cozic c6698eaea6 Electron: Fixes #256: Check that no other instance of Joplin is running before launching a new one 2018-02-23 17:51:23 +00:00
Laurent Cozic 8a96cf3434 All: Allow sorting notes by various fields 2018-02-22 18:58:15 +00:00
Laurent Cozic 74d255c056 Updated readme 2018-02-21 18:19:22 +00:00
Laurent Cozic 71aa841265 Mobile: Fixes #244: When accessing configuration or encrypt configuration option while making a note and the going back, the note gets erased 2018-02-21 22:08:34 +00:00
Laurent Cozic 14a93a9f26 All: Fixed sync interval sorting order 2018-02-21 19:58:28 +00:00
Laurent Cozic e1fd9c6922 Clean up 2018-02-21 19:20:33 +00:00
Laurent Cozic b9db747b5c Minor refactoring to make function purpose clearer 2018-02-21 18:36:29 +00:00
Laurent Cozic 4a56c76901 Electron: Fixes #247: Unreadable error messages when checking for updates 2018-02-20 18:07:31 +00:00
Laurent Cozic 6bb3184a72 macOS: Resolves #243: Added black and white tray icon for macOS 2018-02-20 00:41:52 +00:00
Laurent Cozic 7fb8fbd450 iOS: Added compatibility with iPad 2018-02-19 23:41:53 +00:00
Laurent Cozic 9d5bba472e iOS v1.0.13 2018-02-19 23:41:12 +00:00
Laurent Cozic e6d821a45f CLI v1.0.99 2018-02-19 22:59:09 +00:00
Laurent Cozic 72f0027e21 Electron release v1.0.67 2018-02-19 21:05:43 +00:00
Laurent Cozic 29a13a9943 Android release v1.0.101 2018-02-19 21:04:27 +00:00
Laurent Cozic 3691ae4d13 Electron: Fixes #217: Display a message when the note has no content and only the note viewer is visible 2018-02-19 18:56:56 +00:00
Laurent Cozic 4dda397c29 Removed es_CR translation as it's unfortunately too incomplete and there's already a 100% Spanish translation 2018-02-19 18:44:41 +00:00
Laurent Cozic b4b058998d Updated French and Español translation 2018-02-19 18:41:39 +00:00
Laurent Cozic 10919e415e Merge branch 'master' of github.com:laurent22/joplin 2018-02-19 18:38:56 +00:00
Laurent Cozic 4966d74864 All: Fixes #240: Tags should be handled in a case-insensitive way 2018-02-19 18:38:27 +00:00
Laurent Cozic c70ecb30a5 All: Fixes #241: Ignore response for certain calls. Also re-enabled If-None-Match fix. 2018-02-19 18:37:44 +00:00
Laurent Cozic acc0d17e0f Minor changes 2018-02-19 18:36:31 +00:00
Laurent Cozic b509b878bf Merge pull request #238 from fmrtn/master
Improved Spanish translations
2018-02-19 18:02:58 +00:00
Laurent Cozic 322ec2efa1 Android release v1.0.100 2018-02-18 22:58:37 +00:00
Laurent Cozic 1232661b1e Electron release v1.0.66 2018-02-18 22:56:57 +00:00
Laurent Cozic c46d123503 All: Fixed: Local items were no longer being deleted via sync. Also fixed Nextcloud sync target. 2018-02-18 21:52:07 +00:00
Laurent Cozic 8f4060999f Merge branch 'master' of github.com:laurent22/joplin 2018-02-18 21:16:26 +00:00
Laurent Cozic 0addd86069 iOS: Improved compatbility with some WebDAV services (Seafile) 2018-02-18 21:16:18 +00:00
Fernando 760086307b Improved Spanish translations 2018-02-18 17:15:18 +01:00
Laurent Cozic fc6558a64c Electron release v1.0.65 2018-02-17 19:29:26 +00:00
Laurent Cozic eca500880d All: Convert new lines in tables to BR tag, and added support for HTML tags in Markdown viewers 2018-02-17 19:29:10 +00:00
Laurent Cozic 90bcd7c977 Merge pull request #226 from fmrtn/master
Nextcloud typos and Spanish update
2018-02-17 11:05:25 +00:00
Fernando cca0c6eaf3 Updated Spanish translation 2018-02-17 01:09:32 +01:00
Fernando b0736002be Fixed several Nextcloud typos 2018-02-17 01:09:00 +01:00
Laurent Cozic 51fc2d8e51 CLI v1.0.98 2018-02-16 23:49:22 +00:00
Laurent Cozic d87c192ff1 Updated readme and translation 2018-02-16 23:26:31 +00:00
Laurent Cozic 52ccf398a6 Update readme 2018-02-16 23:17:55 +00:00
Laurent Cozic 344d0e2687 Update readme 2018-02-16 23:14:26 +00:00
Laurent Cozic 1bc4d6b423 CLI v1.0.97 2018-02-16 23:08:57 +00:00
Laurent Cozic baa9ca7ea3 Updated terminal readme 2018-02-16 23:08:04 +00:00
Laurent Cozic e4d477fb4c CLI: Resolve #63: Allow customizing shortcuts 2018-02-16 22:53:53 +00:00
Laurent Cozic 71319eee28 Also add link to po file in translation table 2018-02-16 21:45:28 +00:00
Laurent Cozic 68b31526f8 Updated translations 2018-02-16 21:39:54 +00:00
Laurent Cozic 0b2b7324d9 Merge pull request #224 from fmrtn/master
Fixed and updated Spanish translation
2018-02-16 20:35:46 +00:00
Fernando 43512cf27b Fixed and updated Spanish translation 2018-02-16 20:36:58 +01:00
Laurent Cozic 4218b65969 Electron: Added several keyboard shortcuts 2018-02-16 18:08:02 +00:00
Laurent Cozic 7244e12b78 Electron: Fixed: Confirmation message boxes, and release notes text 2018-02-16 18:06:02 +00:00
Laurent Cozic a796ef5c66 All: Fixed: Notify DecryptionWorker when item added due to conflict, to make sure it is decrypted as early as possible 2018-02-16 17:55:50 +00:00
Laurent Cozic 9474a05aaa Update readme 2018-02-16 00:17:05 +00:00
Laurent Cozic 41df355a7e CLI v1.0.96 2018-02-15 23:51:00 +00:00
Laurent Cozic 4f3ab87914 Electron release v1.0.64 2018-02-15 23:21:47 +00:00
Laurent Cozic 5d1a08707c Android release v1.0.98 2018-02-15 23:20:28 +00:00
Laurent Cozic 4f822df80e Merge branch 'master' of github.com:laurent22/joplin 2018-02-15 23:05:34 +00:00
Laurent Cozic 951be5cbf6 Electron: Fixes #201, Fixes #216: Make sure only one update check can run at a time, and improved modal dialog boxes 2018-02-15 23:05:04 +00:00
Laurent Cozic b6c2341542 Merge pull request #219 from fmrtn/patch-1
Update README.md
2018-02-15 18:33:48 +00:00
Laurent Cozic a6e6b49a9d Merge branch 'master' of github.com:laurent22/joplin 2018-02-15 18:33:21 +00:00
Laurent Cozic 3a4bbd571e All: Provide Content-Length header for WebDAV for better compatibility with more servers 2018-02-15 18:33:08 +00:00
Laurent Cozic feccc6150e Merge branch 'master' of github.com:laurent22/joplin 2018-02-15 18:19:11 +00:00
Laurent Cozic a37b599a6b macOS: Allow copy and paste from config and encryption screen 2018-02-15 18:19:00 +00:00
Laurent Cozic 9347683fe3 All: Fixed Nextcloud sync target ID (which was incorrectly set to WebDAV sync ID) 2018-02-15 18:01:05 +00:00
Laurent Cozic 3551c26e28 Fixed race condition when testing with memory driver and fixed encoding issue 2018-02-15 17:12:09 +00:00
Fernando cfca0107eb Update README.md 2018-02-15 13:09:59 +01:00
rtmkrlv dfbe37fdaf Merge pull request #3 from laurent22/master
Update fork from original repository
2018-02-15 10:37:59 +02:00
Laurent Cozic 81bc975193 Update readme 2018-02-14 21:54:34 +00:00
Laurent Cozic 7908fda451 Android release v1.0.97 2018-02-14 19:11:35 +00:00
Laurent Cozic cdbb7c4b0d Merge branch 'master' of github.com:laurent22/joplin 2018-02-14 19:10:42 +00:00
Laurent Cozic 414e57ec55 Electron release v1.0.63 2018-02-14 19:08:24 +00:00
Laurent Cozic 1871123066 All: Improved WebDAV driver compatibility with some services (eg. Seafile) 2018-02-14 19:08:07 +00:00
Laurent Cozic 87bc08bef5 iOS: Fixed resource decryption issue, log page crash and text input rendering issue 2018-02-14 15:28:56 +00:00
Laurent Cozic 214a39c3d3 All: Improved the way settings are changed. Should also fixed issue with sync context being accidentally broken. 2018-02-13 18:26:33 +00:00
Laurent Cozic ef0cc5e33e Update readme 2018-02-12 20:23:16 +00:00
Laurent Cozic 3a1fa583ab CLI v1.0.95 2018-02-12 18:07:20 +00:00
Laurent Cozic c1161ae017 Android release v1.0.95 2018-02-12 17:58:55 +00:00
Laurent Cozic 1023ec6206 Electron release v1.0.62 2018-02-12 17:56:42 +00:00
Laurent Cozic 7841421c0d All: Fixes #209: Items with non-ASCII characters end up truncated on Nextcloud 2018-02-12 18:15:22 +00:00
Laurent Cozic 995d8c35dd Updated readme 2018-02-11 20:49:28 +00:00
Laurent Cozic b179471eff Electron: Fixes #205: Importing Evernote notes while on import page re-imports previous import 2018-02-11 20:31:26 +00:00
Laurent Cozic 19a126ebfe Android release v1.0.94 2018-02-11 17:29:09 +00:00
Laurent Cozic 7e56e5b587 Mobile: Fixes #207: Crash when changing dropdown value in config screen 2018-02-11 17:26:20 +00:00
Laurent Cozic acf0c79341 Graduated E2EE and WebDAV from beta, and moved to v1.0 2018-02-11 13:50:59 +00:00
Laurent Cozic 9fe7e23ffe Android release v0.10.92 2018-02-11 13:20:32 +00:00
Laurent Cozic c94cc93971 Fixed translator names 2018-02-10 13:03:01 +00:00
Laurent Cozic b26094eba8 Fixed Basque flag 2018-02-10 12:52:57 +00:00
Laurent Cozic 89a5ccdf93 Added Basque translation, fixed issue with handling invalid translations. Updated translation FR. 2018-02-10 12:43:45 +00:00
Laurent Cozic ce2da0e6dc Update readme 2018-02-09 16:03:43 +00:00
Laurent Cozic f49d644b6a Electron release v0.10.61 2018-02-08 18:15:49 +00:00
Laurent Cozic 02ac0b8593 Removed uneeded created_time property 2018-02-07 20:42:52 +00:00
Laurent Cozic 78e5eaf1e2 Electron: Toolbar button to set tags 2018-02-07 20:35:11 +00:00
Laurent Cozic fc0d227396 Electron: Allowing opening and saving resource images 2018-02-07 20:23:17 +00:00
Laurent Cozic f91c52cdf7 Mobile: Update time when app is activated 2018-02-07 19:51:58 +00:00
Laurent Cozic 3f14878d0f All: Improved request repeating mechanism 2018-02-07 19:46:07 +00:00
Laurent Cozic 69fd32e7c6 All: Use mutex when saving model to avoid race conditions when decrypting and syncing at the same time 2018-02-07 19:02:07 +00:00
Laurent Cozic 80801cedf0 Android release v0.10.91 2018-02-07 17:57:08 +00:00
Laurent Cozic 480e4fa94b Merge branch 'master' of github.com:laurent22/joplin 2018-02-07 17:56:36 +00:00
Laurent Cozic 717c789836 Android release v0.10.90 2018-02-07 17:55:54 +00:00
Laurent Cozic f099376446 Update README.md 2018-02-07 17:55:17 +00:00
Laurent Cozic 41fa9d093e Android release v0.10.89 2018-02-07 17:54:06 +00:00
Laurent Cozic e2f3f81eb6 Android release v0.10.88 2018-02-07 17:51:31 +00:00
Laurent Cozic 5cab7aeb55 Fixed: Make sure alarms and resources are attached to right note when creating new note 2018-02-06 19:31:22 +00:00
Laurent Cozic fa5f418c22 All: Added sync config check to config screens 2018-02-06 18:59:36 +00:00
Laurent Cozic a25fcacace Electron: Display message when creating new note or to-do 2018-02-06 18:12:43 +00:00
Laurent Cozic 727ba7300e All: Also support $ as delimiter for Katex expressoins 2018-02-06 17:58:54 +00:00
Laurent Cozic d25d9b3f44 CLI v0.10.93 2018-02-06 13:17:10 +00:00
Laurent Cozic 9d762a4319 Android release v0.10.86 2018-02-06 13:01:20 +00:00
Laurent Cozic 18d94c7585 Electron release v0.10.60 2018-02-06 12:57:40 +00:00
Laurent Cozic af82345eb8 Fixed tray icon and update issue 2018-02-06 13:11:59 +00:00
Laurent Cozic 1e94a22986 Merge branch 'master' of github.com:laurent22/joplin 2018-02-06 13:06:59 +00:00
Laurent Cozic e19a8a99ff macOS: Fixed startup crash 2018-02-06 13:05:36 +00:00
Laurent Cozic f975009e24 Update readme 2018-02-05 19:02:11 +00:00
Laurent Cozic 90640fafc7 Merge branch 'master' of github.com:laurent22/joplin 2018-02-05 18:49:58 +00:00
Laurent Cozic 42e0e1e5a5 Updated build instructions 2018-02-06 09:42:20 +00:00
Laurent Cozic 61f64fa933 Added Markdown doc 2018-02-05 22:53:10 +00:00
Laurent Cozic 0d0ffd6d27 Added Markdown doc 2018-02-05 22:50:17 +00:00
Laurent Cozic 023ccffd2e Electron release v0.10.59 2018-02-05 22:20:31 +00:00
Laurent Cozic bc26098c7d Android release v0.10.85 2018-02-05 22:19:21 +00:00
Laurent Cozic 7257a71a18 Mobile: Fixes #159: Make sure text fields aren't hidden by keyboard on iOS 2018-02-05 18:32:59 +00:00
Laurent Cozic 8ad8b73585 Better error handling for Katex and handling of code blocks and inline 2018-02-05 17:55:35 +00:00
Laurent Cozic 9a06815db9 Electron release v0.10.58 2018-02-05 17:34:39 +00:00
Laurent Cozic 66947d4954 Fixing appveyor script 2018-02-05 17:34:31 +00:00
Laurent Cozic 3ec22185d5 Electron release v0.10.57 2018-02-05 17:32:54 +00:00
Laurent Cozic 0f05c23e26 Fixing deployment script 2018-02-05 17:32:48 +00:00
Laurent Cozic 74493fece0 Android release v0.10.83 2018-02-05 17:32:00 +00:00
Laurent Cozic 557a96e814 Electron release v0.10.56 2018-02-05 17:27:38 +00:00
Laurent Cozic 4b23b419a4 Electron release v0.10.55 2018-02-05 17:27:09 +00:00
Laurent Cozic 8b7f5b1151 Fix scrolling issue in Electron app 2018-02-04 18:45:52 +00:00
Laurent Cozic 29e9ccf216 Electron: Reverted to older Sharp version to fix Ubuntu issue 2018-02-04 18:31:13 +00:00
Laurent Cozic 2c04f5c8bc Improved Android and Electron release process 2018-02-04 18:05:07 +00:00
Laurent Cozic 5430a747e9 Improved Android and Electron release process 2018-02-04 17:55:22 +00:00
Laurent Cozic 13bc185829 Improved Android and Electron release process 2018-02-04 17:51:42 +00:00
Laurent Cozic ed87581a8a Improved Android and Electron release process 2018-02-04 17:48:29 +00:00
Laurent Cozic 2645ec96a8 Fixed tool utils 2018-02-04 17:44:32 +00:00
Laurent Cozic d278d830f0 Improved Android and Electron release process 2018-02-04 17:42:33 +00:00
Laurent Cozic b4dce0ed46 All: Added Katex support 2018-02-04 17:12:24 +00:00
Laurent Cozic e8416042d4 Merge branch 'master' into math-support 2018-02-02 20:35:32 +00:00
Laurent Cozic 70adbe5e76 Added flags 2018-02-01 20:21:54 +00:00
Laurent Cozic f66be08d1d Added list of translated languages to README file 2018-02-01 20:15:31 +00:00
Laurent Cozic fad96f5266 All: Added section to list missing master keys 2018-02-01 19:01:20 +00:00
Laurent Cozic c33a7f5f47 Updated French translation 2018-02-02 00:08:37 +00:00
Laurent Cozic 28afbcde02 Updated translations 2018-02-02 00:02:47 +00:00
Laurent Cozic 691292d2b3 Merge branch 'master' of github.com:laurent22/joplin 2018-02-01 23:40:15 +00:00
Laurent Cozic 30ff81064f All: Made WebDAV driver more generic to support services other than Nextcloud and added WebDAV sync target 2018-02-01 23:40:05 +00:00
Laurent Cozic f9f398ad98 Merge pull request #194 from rtmkrlv/russian-locale
Update Russian translation
2018-02-01 15:26:15 +01:00
rtmkrlv 537884bdcd Merge branch 'master' into russian-locale 2018-02-01 15:50:39 +02:00
rtmkrlv d54400a7cb Updated Russian translation 2018-02-01 15:43:26 +02:00
rtmkrlv 37e7ea0b52 Merge pull request #2 from laurent22/master
Update fork from original repository
2018-02-01 14:43:34 +02:00
Laurent Cozic 42c78264fb Update website 2018-01-31 20:21:38 +00:00
Laurent Cozic c52da82447 Electron: Fix: Don't allow adding notes and to-do to conflict notebook 2018-01-31 20:19:11 +00:00
Laurent Cozic cca43624e4 Electron: Added tray icon support 2018-01-31 20:10:32 +00:00
Laurent Cozic dac1cd7668 Mobile: Allow filtering log by warning/error 2018-01-31 19:51:29 +00:00
Laurent Cozic b4c00db0e3 Electron release v0.10.54 2018-01-31 19:40:40 +00:00
Laurent Cozic 3ce393a8b2 Electron release v0.10.53 2018-01-31 19:34:47 +00:00
Laurent Cozic 2b627fe4ab Fixed auto-update check 2018-01-31 19:34:38 +00:00
Laurent Cozic fcf8a1649d CLI v0.10.92 2018-01-31 19:28:31 +00:00
Laurent Cozic 8d3b050831 Update website 2018-01-31 19:26:21 +00:00
Laurent Cozic 43297ef0a3 Updated translations 2018-01-31 19:14:32 +00:00
Laurent Cozic 551fabdfc9 Tweak and error handling on auto-update 2018-01-31 19:10:45 +00:00
Laurent Cozic d6de56b2db All: Fixed crash when having invalid UTF-8 string in text editor 2018-01-31 19:01:11 +00:00
Laurent Cozic 9e979804f3 Electron release v0.10.52 2018-01-31 17:53:18 +00:00
Laurent Cozic b8e0f182cc Android release v0.10.81 2018-01-31 17:51:22 +00:00
Laurent Cozic 9a41b9e192 Electron: Improved auto-update process to avoid random crashes 2018-01-30 22:35:50 +00:00
Laurent Cozic 9b8f520b9f Electron: Allow focusing either title or body when creating a new note or to-odo 2018-01-30 21:49:22 +00:00
Laurent Cozic 5b6019805c Electron: Fixed auto-title when title is manually entered first 2018-01-30 21:36:54 +00:00
Laurent Cozic a4106436c4 Fixed delta function when processing many items 2018-01-30 21:10:54 +00:00
Laurent Cozic f6b4eb511e Add Content-Size header for WebDAV, which is required by some services 2018-01-30 20:24:09 +00:00
Laurent Cozic eb67ac17a0 Allow decryption to continue even if an item cannot be decrypted 2018-01-30 20:15:05 +00:00
Laurent Cozic 7b760d03ef All: Handle case where file is left half-uploaded on Nextcloud instance (possibly an ocloud.de issue only) 2018-01-30 20:10:36 +00:00
Laurent Cozic 2805ae2acf Fixed crash when calling fetch() with invalid URL in RN app 2018-01-30 19:01:07 +00:00
Laurent Cozic 5cb5ccc781 All: Optimised Nextcloud sync delta functionality 2018-01-29 20:51:14 +00:00
Laurent Cozic 0dba2821b6 Merge pull request #189 from strobeltobias/patch-2
Update German translation
2018-01-29 18:59:20 +00:00
Tobias Strobel 1db7825b22 Update German translation
Grammar and wording fixes, translating new strings.
2018-01-29 14:24:50 +01:00
Laurent Cozic 8a92d6ad70 Update website 2018-01-28 18:47:22 +00:00
Laurent Cozic 138ad9fcad Mobile: Fixes #114: Update geolocation in metadata after it has been set 2018-01-28 18:42:43 +00:00
Laurent Cozic 08cb518c25 Check if current folder exists 2018-01-28 18:19:56 +00:00
Laurent Cozic 6d04eab200 Merge pull request #185 from pf-siedler/autocomp_file_and_item
Autocompletion for files and items
2018-01-28 18:17:01 +00:00
Laurent Cozic 8a8cb51e1b Electron release v0.10.51 2018-01-28 18:07:08 +00:00
Laurent Cozic 5c66042a2d CLI v0.10.91 2018-01-28 17:59:34 +00:00
Laurent Cozic ae75181b02 Electron release v0.10.50 2018-01-28 17:52:15 +00:00
Laurent Cozic 9dc3238182 Added beta notice 2018-01-28 17:51:38 +00:00
Laurent Cozic 0a68749373 Android release v0.10.79 2018-01-28 17:45:54 +00:00
Laurent Cozic 1519116291 Updated French translation 2018-01-28 17:43:21 +00:00
Laurent Cozic d023d841e2 Update translations 2018-01-28 17:38:30 +00:00
Laurent Cozic d7a1465d8e Skip sync report events in log 2018-01-28 17:38:17 +00:00
Laurent Cozic 15848fc696 Closing a resource is async 2018-01-28 17:37:51 +00:00
Laurent Cozic 837ae2c9f2 Send only one NOT_LOADED event per master key 2018-01-28 17:37:29 +00:00
Laurent Cozic 6789b98ead Return fileNotFound error when file cannot be opened so that it is skipped by synchroniser 2018-01-28 17:37:03 +00:00
Laurent Cozic 29f6e74ee3 Convert fs errors to normal errors 2018-01-28 17:36:36 +00:00
Laurent Cozic 2780c38c45 Fixed WebDAV error handling 2018-01-28 17:36:11 +00:00
Laurent Cozic 4531838217 Display stars for secure config value 2018-01-28 17:35:20 +00:00
pf-siedler 7bccf7f65d Implement auto completaion for <item> usage 2018-01-28 23:12:54 +09:00
pf-siedler c62a24a9cb Implement auto completion for <file> usage
Suggest file names from current directory.
2018-01-28 22:59:58 +09:00
Laurent Cozic c6830499f7 Fixed Travis 2018-01-28 11:48:29 +00:00
Laurent Cozic d9f00a2539 Electron release v0.10.49 2018-01-26 17:21:34 +00:00
Laurent Cozic def83c9119 Merge branch 'master' of github.com:laurent22/joplin 2018-01-26 17:19:58 +00:00
Laurent Cozic b6cb0056c7 CLI v0.10.90 2018-01-26 17:19:42 +00:00
Laurent Cozic 1669b5258a Fixed detection of encrypted item 2018-01-25 23:01:18 +00:00
Laurent Cozic 5a9e0bfc26 Handle password text input in mobile and desktop 2018-01-25 22:44:09 +00:00
Laurent Cozic 8f3fdb3afe Tweaks to make sure Nextcloud driver passes all test units 2018-01-25 21:15:58 +00:00
Laurent Cozic 7ab135c099 Various tweaks to get Nextcloud working in mobile 2018-01-25 20:48:01 +00:00
Laurent Cozic 1cc27f2509 Got Nextcloud sync to work in Electron 2018-01-25 19:01:14 +00:00
Laurent Cozic ef700b421c Update CONTRIBUTING.md 2018-01-25 13:35:04 +00:00
Laurent Cozic b9af5ac052 Update issue_template.md 2018-01-25 13:34:07 +00:00
Laurent Cozic 173f2d421d Update PULL_REQUEST_TEMPLATE 2018-01-25 13:32:19 +00:00
Laurent Cozic 9f82c069c9 Update CONTRIBUTING.md 2018-01-25 13:31:17 +00:00
Laurent Cozic 6ade09c228 Merge branch 'master' into webdav 2018-01-24 17:25:34 +00:00
Laurent Cozic 5393a1399c Finished WebDAV driver 2018-01-23 20:10:20 +00:00
Laurent Cozic fd29f20b2e Electron: Fix checkbox issue in config screen 2018-01-23 18:31:49 +00:00
Laurent Cozic c011b53d1f Electron: Upgraded Electron to 1.7.11 to fix security vulnerability 2018-01-23 18:10:30 +00:00
Laurent Cozic 26e3a7b68c Merge branch 'master' of github.com:laurent22/joplin 2018-01-23 17:53:19 +00:00
Laurent Cozic e70a291698 Merge pull request #174 from gabcoh/fix171
Fix #171
2018-01-23 11:26:11 +00:00
Laurent Cozic 511bd57726 Merge pull request #175 from alexdevero/add-font-size-settings
Add font size settings
2018-01-23 11:25:47 +00:00
Laurent Cozic c6de8598dc Electron release v0.10.48 2018-01-22 19:10:29 +00:00
Laurent Cozic 7bee25599d Removed uneeded code 2018-01-22 19:06:50 +00:00
Laurent Cozic 773a1ad829 Travis: only build tags 2018-01-21 20:03:40 +00:00
Laurent Cozic 1a1e264fa4 All: Refactored so that memory and file sync target use same delta logic 2018-01-21 19:45:32 +00:00
Laurent Cozic 5b99ecefca Merge branch 'master' into webdav 2018-01-21 19:10:39 +00:00
Laurent Cozic 1bfeed377a All: Optimised file sync logic so that it doesn't fetch the content of
all the items on each sync. Also limit the number of items in a batch
to 1000
2018-01-21 18:54:47 +00:00
Laurent Cozic 86eee376bb All: Handle case where resource blob is missing during sync 2018-01-21 17:48:50 +00:00
Laurent Cozic 6a7d368184 All: Started Nextcloud support 2018-01-21 17:01:37 +00:00
Alex Devero 1da19ae98d Fix indentation 2018-01-19 14:11:40 +01:00
Alex Devero f52c117b09 Add font size settings 2018-01-19 13:27:44 +01:00
Laurent Cozic 2551f96149 Fixed Readme 2018-01-18 22:43:37 +00:00
Laurent Cozic c984c19fee Android release v0.10.78 2018-01-18 22:35:05 +00:00
Laurent Cozic ac8e91e82e Started FAQ 2018-01-18 22:34:27 +00:00
Gabe Cohen af50d80541 Fix #171 2018-01-18 14:29:13 -06:00
Laurent Cozic e355f4e49b Fixed license 2018-01-18 20:14:05 +00:00
Laurent Cozic 738ef2b0fa Android release v0.10.75 2018-01-18 17:29:57 +00:00
Laurent Cozic 9746a3964b All: Removed certain log statements so that sensitive info doesn't end up in logs 2018-01-17 21:17:40 +00:00
Laurent Cozic 9efbf74b6f All: Various changes to get filesystem target to work on mobile 2018-01-17 21:01:41 +00:00
Laurent Cozic c16ea6b237 Typo 2018-01-17 20:19:45 +00:00
Laurent Cozic b06a3b588f Add APK download link 2018-01-17 20:19:20 +00:00
Laurent Cozic 6ff67e0995 Automate building and deploying Android app 2018-01-17 20:16:13 +00:00
Laurent Cozic 1a5c8d126d All: Refactored filesystem sync driver to support mobile 2018-01-17 18:51:15 +00:00
Laurent Cozic f632580eed CLI: Display error when cannot open note with editor 2018-01-17 18:10:07 +00:00
Laurent Cozic 1d73f0cdee Simplified and fixed caching issue 2018-01-17 17:59:33 +00:00
Laurent Cozic 99c7111f8c CLI: Fixes #168: Invalid code block would crash app 2018-01-17 17:52:55 +00:00
Laurent Cozic ae9806561a Added tech spec info 2018-01-16 19:51:37 +00:00
Laurent Cozic fffdf5b5b7 Fixed link 2018-01-17 00:47:45 +00:00
Laurent Cozic 3de19c3db7 All: Added Dutch translation. Thanks @tcassaert 2018-01-17 00:43:47 +00:00
Laurent Cozic 56e074b4ef Merge branch 'master' of github.com:laurent22/joplin 2018-01-17 00:41:04 +00:00
Laurent Cozic 1a79253780 Update doc 2018-01-17 00:40:35 +00:00
Laurent Cozic b67908df11 Merge pull request #165 from tcassaert/master
Dutch translation
2018-01-16 17:32:33 +00:00
tcassaert 6a5089f71d Dutch translation
All EN keys are translated to nl_BE.
2018-01-15 22:33:05 +01:00
Laurent Cozic f710463b67 Electron: Fixes #155: Caret alignment issue with Russian text 2018-01-15 19:01:00 +00:00
Laurent Cozic 6ae0c3aba0 Electron release v0.10.47 2018-01-15 18:41:19 +00:00
Laurent Cozic 07c6347014 Android v0.10.74 2018-01-15 18:40:44 +00:00
Laurent Cozic b10999e83e All: Update French translation 2018-01-15 18:35:39 +00:00
Laurent Cozic 961b5bfd25 All: Fixes #85: Don't record deleted_items entries for folders deleted via sync 2018-01-15 18:10:14 +00:00
Laurent Cozic d1f1d1068a Electron release v0.10.46 2018-01-15 12:29:58 +00:00
Laurent Cozic faade0afe2 All: Fixed model ID issue 2018-01-14 17:11:44 +00:00
Laurent Cozic a442a49e2f Electron release v0.10.45 2018-01-15 12:27:10 +00:00
Laurent Cozic 7d3fbbcaba Updated translations 2018-01-14 17:07:34 +00:00
Laurent Cozic d9bb7c3271 Android v0.10.73 2018-01-14 17:05:59 +00:00
Laurent Cozic 4d1dd17fa2 All: Fixed issue with timestamp when saving notes 2018-01-14 17:01:22 +00:00
Laurent Cozic c5c6c777be Electron release v0.10.44 2018-01-12 18:11:39 +01:00
Laurent Cozic 1fd1a73fda Electron: Improved the way new note are created, and automatically add a title. Made saving and loading notes more reliable. 2018-01-12 19:58:01 +00:00
Laurent Cozic feeb498a79 All: Fixed OneDrive sync when resync is requested 2018-01-12 19:01:34 +00:00
Laurent Cozic 1d7f30d441 Electron: Fixed logic to save, and make sure scheduled save always happen even when changing note 2018-01-11 21:05:34 +01:00
Laurent Cozic 53da63e371 Trying to add math support 2018-01-11 19:51:01 +00:00
Laurent Cozic 424443a2d8 CLI: Display arrays and objects in settings 2018-01-09 21:25:31 +01:00
Laurent Cozic 08b58f0e4c All: Fixed table font size and family 2018-01-09 21:09:49 +01:00
Laurent Cozic c2a0d8600f Electron: Move prompt to top to avoid issue with date picker being hidden 2018-01-09 21:06:47 +01:00
Laurent Cozic ede3c2ce2f Electron: Fixed display of too long notebook titles 2018-01-09 19:34:06 +01:00
Laurent Cozic 0b93515711 Electron: Display URL for links 2018-01-09 19:26:46 +01:00
Laurent Cozic 2f13e689b9 Electron: Don't scroll back to top when note is reloaded via sync 2018-01-09 20:26:20 +00:00
Laurent Cozic ea135a0d28 Electron: Fixed logic of what note is used when right-clicking one or more notes 2018-01-09 20:16:09 +00:00
Laurent Cozic f67e4a03e4 CLI: Detect installed Node version 2018-01-09 19:56:38 +00:00
Laurent Cozic e9268edeff All: Fixes #150: Extra comma causes crash 2018-01-09 19:45:08 +00:00
Laurent Cozic a8576a55d6 CLI v0.10.87 2018-01-09 09:31:03 +01:00
Laurent Cozic eb500cdf9e All: Display sync items being fetched 2018-01-08 21:36:00 +01:00
Laurent Cozic 7b9dc66121 All: Schedule sync after enabling or disabling encryption 2018-01-08 21:25:38 +01:00
Laurent Cozic bba2c68c6f All: Schedule sync only after 30 seconds 2018-01-08 21:05:08 +01:00
Laurent Cozic c70d8bea78 All: Fixes #129: Tags are case insensitive 2018-01-08 21:04:44 +01:00
Laurent Cozic 176bda66ad Merge branch 'master' of github.com:laurent22/joplin 2018-01-08 20:09:12 +01:00
Laurent Cozic 78ce10ddf0 All: Fixed race condition when a note is being uploaded while it's being modified in the text editor 2018-01-08 20:09:01 +01:00
Laurent Cozic 29f14681a8 Mobile: Fixed mix of tabs and spaces 2018-01-08 19:31:04 +00:00
Laurent Cozic aaf617e41c iOS v0.10.9 2018-01-08 18:26:30 +01:00
Laurent Cozic b99146ed7f Merge pull request #111 from marcosvega91/fix_scroll_note_keyboard
Fix scroll note keyboard on IOS
2018-01-08 16:45:58 +00:00
Laurent Cozic d136161650 Android v0.10.71 2018-01-07 19:29:57 +00:00
Laurent Cozic 39051a27a1 Update website 2018-01-08 11:12:22 +01:00
Laurent Cozic 30bc9dd551 Electron release v0.10.43 2018-01-08 10:57:36 +01:00
Laurent Cozic cc2f665313 Electron: Undone tests 2018-01-08 10:57:29 +01:00
Laurent Cozic 37c989ed28 Electron release v0.10.42 2018-01-08 10:27:02 +01:00
Laurent Cozic adc5885980 All: Better handling of null values in settings 2018-01-07 19:20:10 +00:00
Laurent Cozic 8de5b4219d All: Updated translations 2018-01-06 21:05:34 +01:00
Laurent Cozic e096ddebd4 Merge branch 'master' of github.com:laurent22/joplin 2018-01-06 20:40:47 +01:00
Laurent Cozic 83398dd0bc Mobile: Fixes #139: Crash when creating new notebook 2018-01-06 20:37:42 +01:00
Laurent Cozic ddc78ebb41 Merge pull request #138 from rtmkrlv/russian-locale
Updated Russian translation
2018-01-06 19:34:02 +00:00
rtmkrlv 70b69eb31e Merge branch 'master' into russian-locale 2018-01-06 14:59:28 +02:00
rtmkrlv 3fa891e136 Merge branch 'master' into russian-locale 2018-01-06 14:54:46 +02:00
rtmkrlv 6f7a9f3295 Updated Russian translation
Added translation of new strings and small corrections
2018-01-06 14:45:30 +02:00
rtmkrlv 44bf518244 Revert "Updated Russian translation"
This reverts commit 63cb9b4968.
2018-01-06 14:36:37 +02:00
rtmkrlv 63cb9b4968 Updated Russian translation
Added translation of new strings and small corrections
2018-01-06 14:33:32 +02:00
rtmkrlv a6cecc103c Merge pull request #1 from laurent22/master
Update
2018-01-06 13:43:28 +02:00
Laurent Cozic 8e8793943b Update README.md 2018-01-06 10:19:50 +01:00
Laurent Cozic 83d9faf2fe Create PULL_REQUEST_TEMPLATE 2018-01-06 10:17:14 +01:00
Laurent Cozic f45a4fff8b Mobile: Fixes #136, fixes #137: styling issues on E2EE 2018-01-06 10:06:41 +01:00
Laurent Cozic 1e02aa3120 Update website 2018-01-05 21:38:37 +01:00
Laurent Cozic 77fec75f23 CLI v0.10.86 2018-01-05 21:02:23 +01:00
Laurent Cozic 2c9feae20b Merge branch 'master' of github.com:laurent22/joplin 2018-01-05 20:52:41 +01:00
Laurent Cozic a81788b3fa Electron release v0.10.41 2018-01-05 20:52:22 +01:00
Laurent Cozic 88cfba53a3 Update CONTRIBUTING.md 2018-01-05 20:50:28 +01:00
Laurent Cozic d659d975cd All: Documentation and minor tweaks for E2EE 2018-01-05 18:40:57 +01:00
marcosvega91 277ad90f72 Indent with tab 2017-12-19 21:14:40 +01:00
marcosvega91 f2e3bedde6 Fix scroll
After fixing the issue on ios, it caused an issue on android that I solved with this commit
2017-12-19 10:28:52 +01:00
marcosvega91 98c0f2315a Fix scroll
Fixed the issue that not permit to view edited text when the keyboard is shown.
2017-12-19 10:08:22 +01:00
Laurent Cozic 0926755635 Create README_debugging.md 2017-12-17 18:54:29 +01:00
Laurent Cozic 75f8234db5 All: Added Russian translation. Thanks @rtmkrlv 2017-12-17 12:34:56 +01:00
Laurent Cozic b8e85e1587 Merge pull request #106 from rtmkrlv/russian-locale
Russian localisation
2017-12-17 11:33:34 +00:00
Laurent Cozic b6add857f9 Merge branch 'master' of github.com:laurent22/joplin 2017-12-17 12:30:47 +01:00
Laurent Cozic 4e41731c08 All: Updated translations 2017-12-17 12:30:32 +01:00
rtmkrlv 6ac3b8a8f9 Add files via upload
Russian localisation for Joplin. 100% done, but some corrections may be required.
2017-12-16 20:41:04 +02:00
Laurent Cozic 7ab2b11c9d Update README.md
Updated list of supported languages
2017-12-15 10:07:55 +00:00
Laurent Cozic 1eb1c5914c Merge branch 'master' of github.com:laurent22/joplin 2017-12-15 08:46:39 +00:00
Laurent Cozic 5780951f7d Updated translations 2017-12-15 08:46:30 +00:00
Laurent Cozic 67e790e393 Merge pull request #95 from tbroadley/fix-typos
Fix typos
2017-12-15 07:21:26 +00:00
Thomas Broadley 0d472486ca Fix typos 2017-12-14 19:10:47 -05:00
Laurent Cozic 2d218904d0 Merge branch 'master' of github.com:laurent22/joplin 2017-12-11 21:20:57 +00:00
Laurent Cozic c3fbcb8feb Update website 2017-12-11 21:20:49 +00:00
Laurent Cozic 64031ac6cf Merge pull request #40 from Cogitri/german-locale
WIP: Add German (Germany) locale
2017-12-11 20:43:07 +00:00
Laurent Cozic caae7f7cf8 CLI v0.10.83 2017-12-11 20:12:41 +00:00
Laurent Cozic d56b247adf Electron release v0.10.39 2017-12-11 20:09:38 +00:00
Laurent Cozic 11bdfbde61 Fixed Readme typo 2017-12-10 16:44:43 +00:00
Laurent Cozic a59bf55c16 Electron: Fixes #3: Paths with '.' would cause JSX compilation to fail 2017-12-10 16:06:43 +00:00
Laurent Cozic 043be1916c CLI: Display welcome message the first time the app is run. 2017-12-10 15:56:12 +00:00
Laurent Cozic 42e34b5c3b All: Fixes #87: Show warningn when deleting notebook that contains notes. 2017-12-10 14:09:12 +00:00
Laurent Cozic 931083b2e2 Electron: Fixes #86: App icon missing on Linux 2017-12-10 14:04:07 +00:00
Rasmus Thomsen 09b9df4228 German locale: adjust articulation 2017-12-07 16:02:18 +01:00
Laurent Cozic 37663bd110 Merge pull request #68 from dbinary/master
adding translate spanish Latin America
2017-12-06 23:59:22 +00:00
Laurent Cozic f01c6aa8d1 Merge branch 'master' of github.com:laurent22/joplin 2017-12-06 23:56:18 +00:00
Laurent Cozic 8838017830 All: Updated translations 2017-12-06 23:55:22 +00:00
Laurent Cozic 1d6fb8058f Update BUILD.md 2017-12-06 23:34:56 +00:00
Laurent Cozic bb51729bea Update BUILD.md 2017-12-06 23:34:31 +00:00
Laurent Cozic 507e7e6014 All: Improved ENEX import for web pages that have been saved as notes 2017-12-06 19:29:58 +00:00
Laurent Cozic f42908b11c Merge branch 'sync-limits' 2017-12-05 17:30:16 +00:00
Laurent Cozic 03ec406627 All: Filter to sync target and refactored so that same code can be used by all clients 2017-12-05 19:21:01 +00:00
Laurent Cozic c703521b6c All: Handling of unsyncable items 2017-12-05 18:56:39 +00:00
Laurent Cozic cf97bf9a77 Updated readme 2017-12-05 08:47:48 +00:00
Laurent Cozic 304b9a582f Electron release v0.10.36 2017-12-04 23:57:30 +00:00
Laurent Cozic 4d5c4b1743 Electron: started unsynchronisable items UI 2017-12-04 23:57:13 +00:00
Laurent Cozic 4abe5d07c4 All: Handling of impossible-to-sync items (such as when they are over the size limit of the cloud provider) 2017-12-04 23:38:09 +00:00
Laurent Cozic f6633e23f5 Minor tweaks 2017-12-04 23:01:22 +00:00
Laurent Cozic a6d6201ecb All: Improved synchronisation process and saving of models so that reducer can deal with full objects 2017-12-04 22:58:42 +00:00
Laurent Cozic 0115e74163 All: Minor tweaks regarding encryption 2017-12-04 19:29:34 +00:00
Luis Pérez 4314c392f6 adding translate spanish Latin America 2017-12-04 13:24:55 -06:00
Laurent Cozic 685f541bb4 All: Fixed issue with local resource needlessly marked as encrypted 2017-12-04 19:15:14 +00:00
Laurent Cozic f9634ea283 CLI: Added e2ee command to check encryption status of a sync target 2017-12-04 19:01:56 +00:00
Laurent Cozic 6252a4d8c8 Merge branch 'master' into encryption 2018-01-03 20:23:26 +01:00
Laurent Cozic d13d7bec45 Minor changes 2018-01-03 20:20:16 +01:00
Laurent Cozic 74e284d795 Merge branch 'master' of github.com:laurent22/joplin 2018-01-03 00:17:39 +01:00
Laurent Cozic 7b82dacbf2 Update website 2018-01-03 00:17:31 +01:00
Laurent Cozic f82162f94a Create CONTRIBUTING.md
Started "contributing" guide
2018-01-02 22:04:41 +01:00
Laurent Cozic e2d5128624 Update README.md
More information on how to import notes into Joplin
2018-01-02 21:51:18 +01:00
Laurent Cozic 9074412472 Merge pull request #128 from tanrax/master
Update README with Importing from Standard Notes
2018-01-02 21:46:13 +01:00
Laurent Cozic 0db9c66317 Electron release v0.10.40 2018-01-02 21:28:56 +01:00
Laurent Cozic b22211fada All: Updated translations. Added Japanese and Chinese. 2018-01-02 21:27:38 +01:00
Laurent Cozic 7efeaa3a22 All: Fixed minor issue when logger not defined 2018-01-02 21:23:35 +01:00
Laurent Cozic 79efac2f71 Merge pull request #130 from SamuelBlickle/master
Improved german translation
2018-01-02 21:22:27 +01:00
Laurent Cozic 9d7b7092f5 Merge pull request #132 from kcrt/master
Japanese localization
2018-01-02 21:22:14 +01:00
Laurent Cozic 71e877d369 All: Improved encryption and synchronisation 2018-01-02 20:17:14 +01:00
TAKAHASHI Kyohei 7e086a7730 Japanese localization 2018-01-02 14:17:39 +09:00
SamuelBlickle 3f810c71b0 improved german translations 2018-01-01 13:41:02 +01:00
Laurent Cozic 500fbc5294 Merge branch 'master' into encryption 2017-12-31 15:26:16 +01:00
Laurent Cozic 6d0f60d9a1 All: Fixed tests and minor fixes 2017-12-31 15:23:05 +01:00
Laurent Cozic e19c26fdd1 Mobile: Done UI for E2EE 2017-12-31 14:58:50 +01:00
Andros Fenollosa 86b86513d9 Update README with Importing from Standard Notes 2017-12-30 21:37:37 +01:00
Laurent Cozic 6ff19063ef All: Got E2EE working in mobile app 2017-12-30 20:57:34 +01:00
Laurent Cozic 6a75451539 Merge pull request #120 from marcosvega91/fix_undo_note
Fix #119
2017-12-29 19:42:48 +01:00
Laurent Cozic 70a33f8533 CLI 0.10.84 2017-12-29 11:17:07 +01:00
Laurent Cozic 23722719f0 Merge pull request #82 from gabcoh/autocomplete
Added auto complete
2017-12-29 10:54:38 +01:00
Laurent Cozic d499251206 Update app-gui.js
Invalidate root after inputting command
2017-12-29 10:39:50 +01:00
Laurent Cozic d180e7b5e1 Mobile: Handle encrypted items on UI side 2017-12-28 19:57:21 +00:00
Laurent Cozic 9e869a5b1f CLI: Various UI improvements for E2EE 2017-12-28 19:51:24 +00:00
Laurent Cozic ab959623aa CLI: Fixes #117: 'edit' command raising error in shell mode 2017-12-28 19:14:03 +00:00
Laurent Cozic 08d2655f13 All: Various improvements to E2EE 2017-12-26 11:38:53 +01:00
Gabe Cohen 20632ae1c1 Correctly implement autocomplete menu with prefix 2017-12-24 12:27:25 -06:00
Laurent Cozic bef7c38724 Electron: Improved enabling/disabling E2EE 2017-12-24 11:23:51 +01:00
Laurent Cozic d1abf4971d Electron: E2EE config 2017-12-24 09:36:31 +01:00
Laurent Cozic d13c2cf8d7 All: Fixed reading file by chuncks 2017-12-23 21:21:11 +01:00
Gabe Cohen 3146273409 Improve autocomplete
All commands and sub commands should now autocomplete. Titles are now wrapped in spaces and quoted titles are now properly parsed.
2017-12-22 19:48:56 -06:00
Laurent Cozic 1891eb4998 All: Upgraded to fs-extra 5.0 2017-12-22 18:58:09 +00:00
Laurent Cozic 70b03971f6 All: Fixed handling of unloaded master key 2017-12-22 18:50:27 +00:00
marcosvega91 38c050b47e Removed duplicate editor variable 2017-12-22 15:43:01 +01:00
marcosvega91 0bf5c9ebdd Fix #119
Fix the bug that permit to undo changes from different notes.
I save the editor instance into the state and in the componentWillReceiveProps i reset the undo state
2017-12-22 14:48:44 +01:00
Laurent Cozic 6683da804b All: Fixed various issues regarding encryption and decryptino of resources, and started doing GUI for Electron app 2017-12-21 20:06:08 +01:00
Laurent Cozic 7750b954fc All: Make sure existing resources are encrypted once E2EE has been enabled 2017-12-20 19:43:43 +00:00
Laurent Cozic edbff5a26a All: Simplified encryption header 2017-12-20 19:14:27 +00:00
Laurent Cozic 18846c11ed All: Allow disabling encryption and added more test cases 2017-12-20 20:45:25 +01:00
Laurent Cozic cc02c1d585 All: Simplified synchronisation of resources to simplify encryption, and implemented resource encryption 2017-12-19 19:01:29 +00:00
Laurent Cozic 26bf7c4d46 All: Improved file and memory drivers to make it easier to use same sync method for all the drivers 2017-12-18 21:47:25 +01:00
Laurent Cozic 2959fa1080 All: Added uploadBlob method to Node apps 2017-12-18 21:46:22 +01:00
Laurent Cozic 3f4f154949 All: Refactored encryption/decryption method to use same algorithm for both file and string encryption 2017-12-18 20:54:03 +01:00
Laurent Cozic 4c0b472f67 All: Testing and better handling of E2EE initialisation 2017-12-17 20:51:45 +01:00
Gabe Cohen 4756238821 Remove unused import 2017-12-15 06:39:50 -06:00
Laurent Cozic f5d26e0d81 All: Fixed filesystem driver bug when downloading resources. Added support for encrypting all items when encryption enabled. 2017-12-14 21:12:02 +00:00
Laurent Cozic e9bb5bee9d All: Better handling of encrypted data on UI side and prevent modification of encrypted notes 2017-12-14 20:21:36 +00:00
Laurent Cozic 2c608bca3c All: getting encryption service and UI to work 2017-12-14 19:39:13 +00:00
Laurent Cozic d9c1e30e9b Merge master into encryption branch 2017-12-15 07:31:57 +00:00
Laurent Cozic 5bc72e2b44 All: Decryption worker and handling of missing master key passwords 2017-12-14 18:53:08 +00:00
Laurent Cozic df05d04dad All: Made model naming more consistent 2017-12-14 18:12:14 +00:00
Laurent Cozic 888ac8f4c2 Electron: Started integrating encryption 2017-12-14 17:58:10 +00:00
Laurent Cozic 55266e5694 Fixed test units 2017-12-14 17:41:53 +00:00
Gabe Cohen 39c73e1649 Improve autocompletion
1. Removed autocomplete menu because it lists the entire line, not just what is
being autocompleted.

2. Autocomplete positional args first unless cursor is at - then autocomplete
long options

3. Don't autocomplete an options that is already present.

4. Other fixes
2017-12-14 07:53:49 -06:00
Gabe Cohen 3bf9d01f0a Remove unused code and retab 2017-12-14 07:01:00 -06:00
Gabe Cohen 89ef33f7ca convert spaces to tabs 2017-12-13 21:25:18 -06:00
Gabe Cohen f71fe9a1a6 Make autocomplete more intelligent 2017-12-13 21:13:43 -06:00
Laurent Cozic 1008b1835b All: Handle tag encryption and started CLI and Electron encryption front-end 2017-12-14 00:23:32 +00:00
Laurent Cozic 2ffa5419e2 Merge branch 'encryption' of github.com:laurent22/joplin into encryption 2017-12-13 22:53:30 +00:00
Laurent Cozic bd20ecff78 All: Handle conflict for encrypted notes 2017-12-13 22:53:20 +00:00
Laurent Cozic a073514c46 Update README_spec.md 2017-12-13 22:38:47 +00:00
Laurent Cozic c6ff14226f Fixed readme 2017-12-13 22:37:11 +00:00
Laurent Cozic ee02f8255e All: Encryption setup on apps 2017-12-13 19:01:04 +00:00
Laurent Cozic 5951ed3f55 All: Support encrypting notes and notebooks 2017-12-13 18:57:40 +00:00
Laurent Cozic f6fbf3ba0f All: Handle master key in backend 2017-12-12 21:58:57 +00:00
Laurent Cozic 9bce52a92a All: Utilities to create and encrypt master keys 2017-12-12 18:41:02 +00:00
Laurent Cozic e44975622a CLI: Handling of password prompt 2017-12-12 18:17:30 +00:00
Laurent Cozic 92b857d83b All: Added methods to get secure random bytes 2017-12-12 17:51:07 +00:00
Gabe Cohen 671e538740 Contain autocomplete in StatusBarWidget.js
StatusBarWidget.js now imports app itself and gets command names.
app-gui.js no longer sets the autocomplete of StatusBarWidget itself.
2017-12-11 19:31:11 -06:00
Laurent Cozic 8a282fd2e1 All: Added fs drivers and encryption service 2017-12-11 23:52:42 +00:00
Gabe Cohen cda623a95c Added command auto complete
File based autocompletion is not yet implemented. This will require knowledge of
the command, and it's parameters. The autocomplete feture is pretty powerful
however, so this should not be very difficult to add.
2017-12-09 23:08:28 -06:00
Laurent Cozic 0f343bccda Electron: resolve #7: Show storage location in Options screen 2017-12-08 21:51:59 +00:00
Laurent Cozic a513f6f3f0 Merge branch 'master' of github.com:laurent22/joplin 2017-12-08 21:42:37 +00:00
Laurent Cozic 3b4809714e iOS: version 0.10.6 2017-12-08 21:42:09 +00:00
Laurent Cozic 238b5ab9b9 CLI: version bump to fix Homebrew formula 2017-12-08 21:41:41 +00:00
Laurent Cozic 08d9e9b6aa All: Added support for HTML tags found in ENEX files: colgroup, col, ins, kbd, address, caption, var, area, map 2017-12-08 17:41:32 +00:00
Laurent Cozic b22900eb3a Update website 2017-12-08 10:12:52 +00:00
Laurent Cozic 89fc2c4779 Removed uneeded assets 2017-12-07 23:29:47 +00:00
Laurent Cozic 353b79f5e5 Electron release v0.10.38 2017-12-07 23:25:06 +00:00
Laurent Cozic b929b46281 Mobile: Fixed dropdown positioning 2017-12-07 23:24:14 +00:00
Laurent Cozic 5c4a536dad Android v0.10.65 2017-12-07 23:11:34 +00:00
Laurent Cozic 91e337307c Mobile: Upgrade react-native-popup-menu to fix scrolling bug 2017-12-07 23:00:22 +00:00
Laurent Cozic 2855b68ed4 Merge branch 'master' of github.com:laurent22/joplin 2017-12-07 22:56:41 +00:00
Laurent Cozic 45ca6284f9 iOS: Added safe area for iPhone X support 2017-12-07 22:42:40 +00:00
Laurent Cozic 145ee13356 Merge branch 'master' of github.com:laurent22/joplin 2017-12-07 22:42:08 +00:00
Laurent Cozic 6f97747199 Electron: Add support for file system sync 2017-12-07 22:29:02 +00:00
Laurent Cozic f3751e4ba6 Mobile: Fixed auto-assignment of title for new notes 2017-12-07 21:32:22 +00:00
Laurent Cozic 5cd55cada6 Mobile: Made context menu scrollable 2017-12-07 21:23:41 +00:00
Laurent Cozic bad4b2ecb8 Electron: Added dialog to export sync status 2017-12-07 21:18:18 +00:00
Laurent Cozic 7aafd63ff3 Update website 2017-12-07 19:38:24 +00:00
Laurent Cozic 3227a13035 Electron release v0.10.37 2017-12-07 18:00:28 +00:00
Laurent Cozic 027f96d100 Electron: Fixes #36: Set installation directory for Windows installer 2017-12-07 18:17:41 +00:00
Laurent Cozic f242a3c215 Merge branch 'fix-cli' 2017-12-07 17:43:44 +00:00
Laurent Cozic ad6c347180 CLI: Fixed shell mode 2017-12-07 18:12:46 +00:00
Laurent Cozic 4f0431da55 Merge branch 'master' of github.com:laurent22/joplin 2017-12-07 13:33:26 +00:00
Laurent Cozic b873fdd029 iOS: Release 2017-12-07 17:46:59 +00:00
Laurent Cozic c1ff820913 Electron: Fixes #65: Display 'no notebook' message on startup. 2017-12-07 13:16:38 +00:00
Laurent Cozic 7008daf92a All: Improved handling of empty links when importing ENEX files. Fixed minor layout issues in Electron app 2017-12-07 00:57:36 +00:00
Laurent Cozic ed914c6907 All: Improved rendering of imported ENEX tables 2017-12-07 00:35:15 +00:00
Laurent Cozic 73e81a54b4 All: Fixed sync issue when target does not have reliable timestamps 2017-12-04 18:39:40 +00:00
Laurent Cozic ab8c66a361 Updated tools 2017-12-04 18:16:14 +00:00
Laurent Cozic 4b55fefcb1 Cleaned up build tools 2017-12-04 17:55:06 +00:00
Laurent Cozic 0eac8b25e1 Deleted uneeded file 2017-12-03 23:06:02 +00:00
Laurent Cozic aec556ff7d Delete package-lock.json 2017-12-03 23:03:16 +00:00
Laurent Cozic 110dc29bd4 Merge pull request #57 from mgroth0/patch-1
Add node-gyp dependency to instructions
2017-12-03 21:45:40 +00:00
Laurent Cozic b1efea1bd9 Update BUILD.md 2017-12-03 21:44:04 +00:00
Laurent Cozic 8671467ed3 Update BUILD.md 2017-12-03 21:43:55 +00:00
Laurent Cozic 7851b6b429 Version update 2017-12-02 15:57:19 +00:00
Laurent Cozic 8eb5f8b74e Electron release v0.10.35 2017-12-02 15:18:23 +00:00
Laurent Cozic 1830ee9fd2 All: Fixed sync issue and database migration issue 2017-12-02 15:18:15 +00:00
Laurent Cozic dd615d6a8f Update website 2017-12-02 14:50:56 +00:00
Laurent Cozic 08a518db70 Revert to 0.10.31 for now 2017-12-02 14:30:33 +00:00
Laurent Cozic 581372de0b Electron release v0.10.34 2017-12-02 14:26:55 +00:00
Laurent Cozic fe2c1c197e All: fixed database creation error 2017-12-02 14:26:49 +00:00
Laurent Cozic 9854fddeb2 Electron release v0.10.33 2017-12-02 12:50:52 +00:00
Laurent Cozic 6c3918ebd2 All: Improved Evernote import for blockquotes and sup tags 2017-12-02 12:49:42 +00:00
Laurent Cozic 4af496632f Update website 2017-12-02 11:03:19 +00:00
Matt Groth 485ef1f2c2 Add node-gyp dependency to instructions
I was getting an error on `yarn dist` which I solved with the command `npm install -g node-gyp`.

This was the error:
```
Error: /usr/local/Cellar/node/8.9.1/bin/node exited with code 1
Output:
$ node-pre-gyp install --fallback-to-build
Failed to execute 'node-gyp clean' (Error: spawn node-gyp ENOENT)
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Error output:
node-pre-gyp info it worked if it ends with ok
node-pre-gyp info using node-pre-gyp@0.6.38
node-pre-gyp info using node@8.9.1 | darwin | x64
node-pre-gyp http GET https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v3.1.13/electron-v1.7-darwin-x64.tar.gz
node-pre-gyp http 403 https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v3.1.13/electron-v1.7-darwin-x64.tar.gz
node-pre-gyp ERR! Tried to download(403): https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v3.1.13/electron-v1.7-darwin-x64.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for sqlite3@3.1.13 and electron@1.7.9 (electron-v1.7 ABI) (falling back to source compile with node-gyp)
node-pre-gyp http 403 status code downloading tarball https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v3.1.13/electron-v1.7-darwin-x64.tar.gz
node-pre-gyp ERR! build error
node-pre-gyp ERR! stack Error: Failed to execute 'node-gyp clean' (Error: spawn node-gyp ENOENT)
node-pre-gyp ERR! stack     at ChildProcess.<anonymous> (/Users/matt/joplin/ElectronClient/app/node_modules/sqlite3/node_modules/node-pre-gyp/lib/util/compile.js:77:29)
node-pre-gyp ERR! stack     at emitOne (events.js:116:13)
node-pre-gyp ERR! stack     at ChildProcess.emit (events.js:211:7)
node-pre-gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:196:12)
node-pre-gyp ERR! stack     at onErrorNT (internal/child_process.js:372:16)
node-pre-gyp ERR! stack     at _combinedTickCallback (internal/process/next_tick.js:138:11)
node-pre-gyp ERR! stack     at process._tickCallback (internal/process/next_tick.js:180:9)
node-pre-gyp ERR! System Darwin 16.7.0
node-pre-gyp ERR! command "/usr/local/Cellar/node/8.9.1/bin/node" "/Users/matt/joplin/ElectronClient/app/node_modules/sqlite3/node_modules/.bin/node-pre-gyp" "install" "--fallback-to-build"
node-pre-gyp ERR! cwd /Users/matt/joplin/ElectronClient/app/node_modules/sqlite3
node-pre-gyp ERR! node -v v8.9.1
node-pre-gyp ERR! node-pre-gyp -v v0.6.38
node-pre-gyp ERR! not ok
error Command failed with exit code 1.

    at ChildProcess.childProcess.once.code (/Users/matt/joplin/ElectronClient/app/node_modules/builder-util/src/util.ts:219:14)
    at Object.onceWrapper (events.js:317:30)
    at emitTwo (events.js:126:13)
    at ChildProcess.emit (events.js:214:7)
    at maybeClose (internal/child_process.js:925:16)
    at Socket.stream.socket.on (internal/child_process.js:346:11)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    at Pipe._handle.close [as _onclose] (net.js:554:12)
From previous event:
    at spawn (/Users/matt/joplin/ElectronClient/app/node_modules/builder-util/src/util.ts:182:3)
    at default.map.concurrency (/Users/matt/joplin/ElectronClient/app/node_modules/electron-builder/src/util/yarn.ts:154:7)
    at runCallback (timers.js:789:20)
    at tryOnImmediate (timers.js:751:5)
    at processImmediate [as _immediateCallback] (timers.js:722:5)
From previous event:
    at /Users/matt/joplin/ElectronClient/app/node_modules/electron-builder/src/util/yarn.ts:152:27
From previous event:
    at rebuild (/Users/matt/joplin/ElectronClient/app/node_modules/electron-builder/out/util/yarn.js:94:22)
    at /Users/matt/joplin/ElectronClient/app/node_modules/electron-builder/src/util/yarn.ts:21:11
    at Generator.next (<anonymous>)
    at runCallback (timers.js:789:20)
    at tryOnImmediate (timers.js:751:5)
    at processImmediate [as _immediateCallback] (timers.js:722:5)
From previous event:
    at installOrRebuild (/Users/matt/joplin/ElectronClient/app/node_modules/electron-builder/out/util/yarn.js:32:21)
    at /Users/matt/joplin/ElectronClient/app/node_modules/electron-builder/src/packager.ts:388:7
    at Generator.next (<anonymous>)
From previous event:
    at Packager.installAppDependencies (/Users/matt/joplin/ElectronClient/app/node_modules/electron-builder/out/packager.js:433:11)
    at /Users/matt/joplin/ElectronClient/app/node_modules/electron-builder/src/packager.ts:284:20
    at Generator.next (<anonymous>)
From previous event:
    at Packager.doBuild (/Users/matt/joplin/ElectronClient/app/node_modules/electron-builder/out/packager.js:369:11)
    at /Users/matt/joplin/ElectronClient/app/node_modules/electron-builder/src/packager.ts:236:52
    at Generator.next (<anonymous>)
From previous event:
    at Packager.build (/Users/matt/joplin/ElectronClient/app/node_modules/electron-builder/out/packager.js:298:11)
    at /Users/matt/joplin/ElectronClient/app/node_modules/electron-builder/src/builder.ts:277:40
    at Generator.next (<anonymous>)
From previous event:
    at build (/Users/matt/joplin/ElectronClient/app/node_modules/electron-builder/out/builder.js:63:21)
    at then (/Users/matt/joplin/ElectronClient/app/node_modules/electron-builder/src/cli/cli.ts:49:4)
    at runCallback (timers.js:789:20)
    at tryOnImmediate (timers.js:751:5)
    at processImmediate [as _immediateCallback] (timers.js:722:5)
From previous event:
    at Object.args [as handler] (/Users/matt/joplin/ElectronClient/app/node_modules/electron-builder/src/cli/cli.ts:49:4)
    at Object.runCommand (/Users/matt/joplin/ElectronClient/app/node_modules/yargs/lib/command.js:228:22)
    at Object.parseArgs [as _parseArgs] (/Users/matt/joplin/ElectronClient/app/node_modules/yargs/yargs.js:1041:24)
    at Object.get [as argv] (/Users/matt/joplin/ElectronClient/app/node_modules/yargs/yargs.js:957:21)
    at Object.<anonymous> (/Users/matt/joplin/ElectronClient/app/node_modules/electron-builder/src/cli/cli.ts:43:15)
    at Module._compile (module.js:635:30)
    at Object.Module._extensions..js (module.js:646:10)
    at Module.load (module.js:554:32)
    at tryModuleLoad (module.js:497:12)
    at Function.Module._load (module.js:489:3)
    at Function.Module.runMain (module.js:676:10)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:608:3
```
2017-12-01 21:28:13 -05:00
Laurent Cozic cd1e7a1083 Electron release v0.10.32 2017-12-02 00:21:29 +00:00
Laurent Cozic 4dce9e9e47 Electron: Allow attaching multiple files 2017-12-01 23:26:08 +00:00
Laurent Cozic dbeff4fd7d All: Allow attaching files of unknown mime type 2017-12-01 23:15:49 +00:00
Laurent Cozic aef2e4845d Electron: Fixes #32: Error when manually input alarm date 2017-12-01 21:55:02 +00:00
Laurent Cozic 739c6be476 Update website 2017-12-01 20:06:42 +00:00
Laurent Cozic ff502670bf Updated Readme, mentioned Homebrew 2017-12-01 20:06:20 +00:00
Laurent Cozic 3894dd1191 Merge branch 'master' of github.com:laurent22/joplin 2017-12-01 19:44:41 +00:00
Laurent Cozic 818537933a Android: Fixes #53: Back button should exit app if nothing to go back to 2017-12-01 19:44:34 +00:00
Laurent Cozic ec50808ba1 Merge branch 'master' of github.com:laurent22/joplin 2017-12-01 19:15:56 +00:00
Laurent Cozic 33fd8325be Electron: Fix #33: Allow copy and paste in OneDrive login 2017-12-01 19:15:46 +00:00
Laurent Cozic c72e0a14c0 Electron, Mobile: Fixed header sizes 2017-12-01 19:04:14 +00:00
Laurent Cozic 58bc708014 Merge branch 'master' of github.com:laurent22/joplin 2017-12-01 18:56:43 +00:00
Laurent Cozic ede1ed8b22 macOS: Allow BACKSPACE instead of DELETE in CLI app 2017-12-01 18:56:35 +00:00
Laurent Cozic 22e39b4434 Merge branch 'master' of github.com:laurent22/joplin 2017-12-01 18:14:06 +00:00
Laurent Cozic 9d984596cc CLI: fixed crash when inputting command without closed quote 2017-12-01 17:51:27 +00:00
Laurent Cozic fe909f659d All: Added error message for OneDrive for Business 2017-12-01 17:47:18 +00:00
Laurent Cozic ea120eae91 Update README.md 2017-12-01 15:29:58 +00:00
Laurent Cozic fa819d25b0 Update README.md 2017-12-01 13:06:26 +00:00
Laurent Cozic 65739a5077 Update website 2017-12-01 09:57:32 +00:00
Laurent Cozic 228d06e27f Electron release v0.10.31 2017-12-01 00:00:33 +00:00
Laurent Cozic d386b83c53 Merge branch 'master' of github.com:laurent22/joplin 2017-12-01 00:00:26 +00:00
Laurent Cozic e1b1f31cf1 Electron: #22 Fixes keyboard cursor jumps while typing. 2017-12-01 00:00:18 +00:00
Laurent Cozic f80b403dfe Create BUILD.md 2017-11-30 23:02:14 +00:00
Laurent Cozic 5af55d7da3 Create issue_template.md 2017-11-30 22:33:18 +00:00
Laurent Cozic 5e6a389f97 Merge branch 'master' of github.com:laurent22/joplin 2017-11-30 21:48:36 +00:00
Laurent Cozic 6f26910243 Android v0.10.61 2017-11-30 21:47:55 +00:00
Laurent Cozic b2056f9e4d Merge pull request #41 from dflock/patch-1
Minor grammar fix
2017-11-30 21:25:05 +00:00
Duncan Lock dca4bb204b Minor grammar fix
loss -> lost.
2017-11-30 13:23:04 -08:00
Laurent Cozic ade39837de Update README.md 2017-11-30 21:18:48 +00:00
Laurent Cozic 2ef2296566 Update website 2017-11-30 20:30:01 +00:00
Laurent Cozic 04ed914894 Electron release v0.10.30 2017-11-30 18:53:35 +00:00
Laurent Cozic 332dd0d859 Merge branch 'alarm-support' 2017-11-30 18:53:26 +00:00
Laurent Cozic d9a1f7855d Merge branch 'alarm-support' of github.com:laurent22/joplin into alarm-support 2017-11-30 18:53:03 +00:00
Laurent Cozic 3ec59a835c Electron release v0.10.29 2017-11-30 18:44:53 +00:00
Laurent Cozic 620225bb2d Electron: Fixed copy/cut/paste problem in macOS 2017-11-30 18:44:37 +00:00
Laurent Cozic 9d7d469908 Electron: Fixed option page checkboxes 2017-11-30 18:36:26 +00:00
Laurent Cozic 16bf0cf646 All: Added Spanish (Costa Rica) locale 2017-11-30 18:29:10 +00:00
Laurent Cozic 8079106c3e Update websiyte 2017-11-30 01:08:29 +00:00
Laurent Cozic 28143db968 Electron release v0.10.28 2017-11-30 00:25:59 +00:00
Laurent Cozic 7f1a14fa22 All: Fixed note update issue 2017-11-30 00:25:52 +00:00
Laurent Cozic 4de1edda05 Electron release v0.10.27 2017-11-29 23:27:28 +00:00
Laurent Cozic 52f09d2638 Electron: Fixed import of certain images 2017-11-29 23:27:20 +00:00
Laurent Cozic 97b8cad755 Merge branch 'master' of github.com:laurent22/joplin 2017-11-29 23:04:08 +00:00
Laurent Cozic 52cb10dd4e Electron: added toolbar and fixed various state issues 2017-11-29 23:03:10 +00:00
Laurent Cozic 135a8a9273 Update README.md
Mentioned NextCloud support
2017-11-29 19:49:46 +00:00
Laurent Cozic a346116d5f Update website 2017-11-29 16:03:19 +00:00
Laurent Cozic 934c3c8001 Update readme 2017-11-29 16:02:45 +00:00
Laurent Cozic 565c17df37 Mobile: Improved OneDrive login 2017-11-28 21:49:58 +00:00
Laurent Cozic b9194e94aa Electron: Fixes #84: Fields losing focus in Config screen 2017-11-08 11:41:23 +00:00
1387 changed files with 110581 additions and 11827 deletions

No files matched your search

Executable → Regular
+6 -1
View File
@@ -35,4 +35,9 @@ _vieux/
_mydocs
.DS_Store
Assets/DownloadBadges*.psd
node_modules
node_modules
Tools/github_oauth_token.txt
_releases
ReactNativeClient/lib/csstojs/
ElectronClient/app/gui/note-viewer/fonts/
Tools/commit_hook.txt
+15 -3
View File
@@ -1,5 +1,16 @@
# Only build tags (Doesn't work - doesn't build anything)
if: tag IS present
rvm: 2.3.3
# It's important to only build production branches otherwise Electron Builder
# might take assets from dev branches and overwrite those of production.
# https://docs.travis-ci.com/user/customizing-the-build/#Building-Specific-Branches
branches:
only:
- master
- /^v\d+\.\d+(\.\d+)?(-\S*)?$/
matrix:
include:
- os: osx
@@ -43,7 +54,8 @@ before_install:
script:
- |
cd ElectronClient/app
rsync -aP ../../ReactNativeClient/lib/ lib/
cd Tools
npm install
yarn dist
cd ../ElectronClient/app
rsync -aP --delete ../../ReactNativeClient/lib/ lib/
npm install && yarn dist
BIN
View File
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

+62
View File
@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="116.54575mm"
height="131.19589mm"
viewBox="0 0 116.54575 131.19589"
version="1.1"
id="svg8"
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
sodipodi:docname="JoplinLetter.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.49497475"
inkscape:cx="152.11122"
inkscape:cy="-26.090631"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-2.7903623,-2.175533)">
<path
style="fill:#000000;stroke-width:0.26458332"
d="m 43.790458,133.13317 c -8.32317,-1.11843 -12.937,-2.40956 -18.46857,-5.16822 -10.21924,-5.09644 -18.1023498,-13.95338 -21.1745998,-23.79038 -1.22214,-3.91319 -1.3607,-4.872332 -1.35685,-9.392712 0.003,-3.72804 0.0907,-4.66941 0.59927,-6.44569 1.0664,-3.7246 2.49409,-6.1704 5.19529,-8.90014 3.2574198,-3.29184 6.6565798,-4.77332 11.3929598,-4.96548 4.53189,-0.18388 7.54661,0.59927 10.40386,2.70266 1.82035,1.34007 3.67693,3.96421 4.71565,6.66525 0.65839,1.71204 0.70959,2.1839 0.90042,8.29756 0.19973,6.39855 0.36372,7.6318 1.39223,10.469902 1.40468,3.87611 3.78939,6.56189 7.33039,8.25588 3.20047,1.53108 5.63801,2.00183 9.60817,1.8556 2.58182,-0.0951 3.60332,-0.25442 5.15337,-0.80371 4.61358,-1.63493 8.46322,-5.31381 10.31326,-9.85579 1.91154,-4.693002 1.90785,-4.609372 1.90213,-43.127082 -0.005,-33.78395 -0.0106,-34.14337 -0.54484,-35.32188 -1.30698,-2.882895 -2.68223,-3.398165 -9.66971,-3.622945 l -5.12472,-0.16486 V 10.998334 2.175533 l 31.41927,0.06723 31.419272,0.06723 0.0697,8.755726 0.0697,8.755724 -5.09675,0.1793 c -2.82759,0.0995 -5.60596,0.33101 -6.24051,0.52006 -1.72896,0.5151 -2.82899,1.538795 -3.52569,3.281045 l -0.61059,1.5269 -0.16762,34.7927 c -0.16988,35.26321 -0.19381,36.08914 -1.18496,40.914372 -1.81292,8.82581 -8.301582,17.89221 -16.959672,23.69719 -6.95182,4.66099 -14.48972,7.21214 -24.82645,8.40235 -2.7431,0.31585 -14.57797,0.31433 -16.93333,-0.002 z"
id="path21"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.
BIN
View File
Binary file not shown.
-2
View File
@@ -1,2 +0,0 @@
#!/bin/bash
iconutil --convert icns macOs.iconset
-2
View File
@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1472 930v318q0 119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119 84.5-203.5t203.5-84.5h832q63 0 117 25 15 7 18 23 3 17-9 29l-49 49q-10 10-23 10-3 0-9-2-23-6-45-6h-832q-66 0-113 47t-47 113v832q0 66 47 113t113 47h832q66 0 113-47t47-113v-254q0-13 9-22l64-64q10-10 23-10 6 0 12 3 20 8 20 29zm231-489l-814 814q-24 24-57 24t-57-24l-430-430q-24-24-24-57t24-57l110-110q24-24 57-24t57 24l263 263 647-647q24-24 57-24t57 24l110 110q24 24 24 57t-24 57z"/></svg>

Before

Width:  |  Height:  |  Size: 612 B

-2
View File
@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M813 1299l614-614q19-19 19-45t-19-45l-102-102q-19-19-45-19t-45 19l-467 467-211-211q-19-19-45-19t-45 19l-102 102q-19 19-19 45t19 45l358 358q19 19 45 19t45-19zm851-883v960q0 119-84.5 203.5t-203.5 84.5h-960q-119 0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960q119 0 203.5 84.5t84.5 203.5z"/></svg>

Before

Width:  |  Height:  |  Size: 447 B

-2
View File
@@ -1,2 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<svg viewBox='0 0 1792 1792' xmlns='http://www.w3.org/2000/svg'><path d='M1312 256h-832q-66 0-113 47t-47 113v832q0 66 47 113t113 47h832q66 0 113-47t47-113v-832q0-66-47-113t-113-47zm288 160v832q0 119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119 84.5-203.5t203.5-84.5h832q119 0 203.5 84.5t84.5 203.5z'/></svg>

Before

Width:  |  Height:  |  Size: 370 B

+78
View File
@@ -0,0 +1,78 @@
# General information
- All the applications share the same library, which, for historical reasons, is in ReactNativeClient/lib. This library is copied to the relevant directories when building each app.
- The translations are built by running CliClient/build-translation.sh. You normally don't need to run this if you haven't updated the translation since the compiled files are on the repository.
## macOS dependencies
brew install yarn node
echo 'export PATH="/usr/local/opt/gettext/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
## Linux and Windows (WSL) dependencies
- Install yarn - https://yarnpkg.com/lang/en/docs/install/
- Install node v8.x (check with `node --version`) - https://nodejs.org/en/
- If you get a node-gyp related error you might need to manually install it: `npm install -g node-gyp`
# Building the tools
Before building any of the applications, you need to build the tools:
```
cd Tools
npm install
```
# Building the Electron application
```
cd ElectronClient/app
rsync --delete -a ../../ReactNativeClient/lib/ lib/
npm install
yarn dist
```
If there's an error `while loading shared libraries: libgconf-2.so.4: cannot open shared object file: No such file or directory`, run `sudo apt-get install libgconf-2-4`
If you get a node-gyp related error you might need to manually install it: `npm install -g node-gyp`.
If you get the error `libtool: unrecognized option '-static'`, follow the instructions [in this post](https://stackoverflow.com/a/38552393/561309) to use the correct libtool version.
That will create the executable file in the `dist` directory.
From `/ElectronClient` you can also run `run.sh` to run the app for testing.
## Building Electron application on Windows
```
cd Tools
npm install
cd ..\ElectronClient\app
xcopy /C /I /H /R /Y /S ..\..\ReactNativeClient\lib lib
npm install
yarn dist
```
If node-gyp does not works (MSBUILD: error MSB3428: Could not load the Visual C++ component "VCBuild.exe"), you might need to install the `windows-build-tools` using `npm install --global windows-build-tools`.
If `yarn dist` fails, it may need administrative rights.
The [building\_win32\_tips on this page](./readme/building_win32_tips.md) might be helpful.
# Building the Mobile application
First you need to setup React Native to build projects with native code. For this, follow the instructions on the [Get Started](https://facebook.github.io/react-native/docs/getting-started.html) tutorial, in the "Building Projects with Native Code" tab.
Then, from `/ReactNativeClient`, run `npm install`, then `react-native run-ios` or `react-native run-android`.
# Building the Terminal application
```
cd CliClient
npm install
./build.sh
rsync --delete -aP ../ReactNativeClient/locales/ build/locales/
```
Run `run.sh` to start the application for testing.
+28
View File
@@ -0,0 +1,28 @@
# User support
For general discussion about Joplin, user support, software development questions, and to discuss new features, please go to the [Joplin Forum](https://discourse.joplin.cozic.net/). It is possible to login with your GitHub account.
# Reporting a bug
Please check first that it [has not already been reported](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue). Also consider [enabling debug mode](https://github.com/laurent22/joplin/blob/master/readme/debugging.md) before reporting the issue so that you can provide as much details as possible to help fix it.
If possible, **please provide a screenshot**. A screenshot showing the problem is often more useful than a paragraph describing it as it can make it immediately clear what the issue is.
# Feature requests
Again, please check that it has not already been requested. If it has, simply **up-vote the issue** - the ones with the most up-votes are likely to be implemented. "+1" comments are not tracked.
# Adding new features
If you want to add a new feature, consider asking about it before implementing it or checking existing discussions to make sure it is within the scope of the project. Of course you are free to create the pull request directly but it is not guaranteed it is going to be accepted.
Building the apps is relatively easy - please [see the build instructions](https://github.com/laurent22/joplin/blob/master/BUILD.md) for more details.
Pull requests that automatically change many files tend to be rejected (for example changes that automatically update the code styling, or to add new lines to many files, or to automatically convert images to a different format) so if you have such a pull request in mind, please discuss it first in the forum.
# Coding style
There are only two rules, but not following them means the pull request will not be accepted (it can be accepted once the issues are fixed):
- **Please use tabs, NOT spaces.**
- **Please do not add or remove optional characters, such as spaces or colons.** Please setup your editor so that it only changes what you are working on and is not making automated changes elsewhere. The reason for this is that small white space changes make diff hard to read and can cause needless conflicts.
+3 -1
View File
@@ -13,9 +13,11 @@ tests/fuzzing.*
tests/fuzzing -*
tests/logs/*
tests/cli-integration/
tests/tmp/
*.mo
*.*~
tests/sync
out.txt
linkToLocal.sh
yarn-error.log
yarn-error.log
tests/support/dropbox-auth.txt
+1 -1
View File
@@ -1,6 +1,6 @@
const { _ } = require('lib/locale.js');
const { Logger } = require('lib/logger.js');
const { Resource } = require('lib/models/resource.js');
const Resource = require('lib/models/Resource.js');
const { netUtils } = require('lib/net-utils.js');
const http = require("http");
+212 -209
View File
@@ -1,19 +1,23 @@
const { Logger } = require('lib/logger.js');
const { Folder } = require('lib/models/folder.js');
const { Tag } = require('lib/models/tag.js');
const { BaseModel } = require('lib/base-model.js');
const { Note } = require('lib/models/note.js');
const { Resource } = require('lib/models/resource.js');
const Folder = require('lib/models/Folder.js');
const BaseItem = require('lib/models/BaseItem.js');
const Tag = require('lib/models/Tag.js');
const BaseModel = require('lib/BaseModel.js');
const Note = require('lib/models/Note.js');
const Resource = require('lib/models/Resource.js');
const { cliUtils } = require('./cli-utils.js');
const { reducer, defaultState } = require('lib/reducer.js');
const { splitCommandString } = require('lib/string-utils.js');
const { reg } = require('lib/registry.js');
const { _ } = require('lib/locale.js');
const Entities = require('html-entities').AllHtmlEntities;
const htmlentities = (new Entities()).encode;
const chalk = require('chalk');
const tk = require('terminal-kit');
const TermWrapper = require('tkwidgets/framework/TermWrapper.js');
const Renderer = require('tkwidgets/framework/Renderer.js');
const DecryptionWorker = require('lib/services/DecryptionWorker');
const BaseWidget = require('tkwidgets/BaseWidget.js');
const ListWidget = require('tkwidgets/ListWidget.js');
@@ -34,37 +38,55 @@ const ConsoleWidget = require('./gui/ConsoleWidget.js');
class AppGui {
constructor(app, store) {
this.app_ = app;
this.store_ = store;
constructor(app, store, keymap) {
try {
this.app_ = app;
this.store_ = store;
BaseWidget.setLogger(app.logger());
BaseWidget.setLogger(app.logger());
this.term_ = new TermWrapper(tk.terminal);
this.term_ = new TermWrapper(tk.terminal);
this.renderer_ = null;
this.logger_ = new Logger();
this.buildUi();
// Some keys are directly handled by the tkwidget framework
// so they need to be remapped in a different way.
this.tkWidgetKeys_ = {
'focus_next': 'TAB',
'focus_previous': 'SHIFT_TAB',
'move_up': 'UP',
'move_down': 'DOWN',
'page_down': 'PAGE_DOWN',
'page_up': 'PAGE_UP',
};
this.renderer_ = new Renderer(this.term(), this.rootWidget_);
this.renderer_ = null;
this.logger_ = new Logger();
this.buildUi();
this.app_.on('modelAction', async (event) => {
await this.handleModelAction(event.action);
});
this.renderer_ = new Renderer(this.term(), this.rootWidget_);
this.shortcuts_ = this.setupShortcuts();
this.app_.on('modelAction', async (event) => {
await this.handleModelAction(event.action);
});
this.inputMode_ = AppGui.INPUT_MODE_NORMAL;
this.keymap_ = this.setupKeymap(keymap);
this.commandCancelCalled_ = false;
this.inputMode_ = AppGui.INPUT_MODE_NORMAL;
this.currentShortcutKeys_ = [];
this.lastShortcutKeyTime_ = 0;
this.commandCancelCalled_ = false;
// Recurrent sync is setup only when the GUI is started. In
// a regular command it's not necessary since the process
// exits right away.
reg.setupRecurrentSync();
this.currentShortcutKeys_ = [];
this.lastShortcutKeyTime_ = 0;
// Recurrent sync is setup only when the GUI is started. In
// a regular command it's not necessary since the process
// exits right away.
reg.setupRecurrentSync();
DecryptionWorker.instance().scheduleStart();
} catch (error) {
this.fullScreen(false);
console.error(error);
process.exit(1);
}
}
store() {
@@ -80,8 +102,16 @@ class AppGui {
await this.renderer_.renderRoot();
}
prompt(initialText = '', promptString = ':') {
return this.widget('statusBar').prompt(initialText, promptString);
termSaveState() {
return this.term().saveState();
}
termRestoreState(state) {
return this.term().restoreState(state);
}
prompt(initialText = '', promptString = ':', options = null) {
return this.widget('statusBar').prompt(initialText, promptString, options);
}
stdoutMaxWidth() {
@@ -95,6 +125,7 @@ class AppGui {
buildUi() {
this.rootWidget_ = new ReduxRootWidget(this.store_);
this.rootWidget_.name = 'root';
this.rootWidget_.autoShortcutsEnabled = false;
const folderList = new FolderListWidget();
folderList.style = {
@@ -259,148 +290,31 @@ class AppGui {
addCommandToConsole(cmd) {
if (!cmd) return;
const isConfigPassword = cmd.indexOf('config ') >= 0 && cmd.indexOf('password') >= 0;
if (isConfigPassword) return;
this.stdout(chalk.cyan.bold('> ' + cmd));
}
setupShortcuts() {
const shortcuts = {};
setupKeymap(keymap) {
const output = [];
shortcuts['TAB'] = {
friendlyName: 'Tab',
description: () => _('Give focus to next pane'),
isDocOnly: true,
}
for (let i = 0; i < keymap.length; i++) {
const item = Object.assign({}, keymap[i]);
shortcuts['SHIFT_TAB'] = {
friendlyName: 'Shift+Tab',
description: () => _('Give focus to previous pane'),
isDocOnly: true,
}
if (!item.command) throw new Error('Missing command for keymap item: ' + JSON.stringify(item));
shortcuts[':'] = {
description: () => _('Enter command line mode'),
action: async () => {
const cmd = await this.widget('statusBar').prompt();
if (!cmd) return;
this.addCommandToConsole(cmd);
await this.processCommand(cmd);
},
};
if (!('type' in item)) item.type = 'exec';
shortcuts['ESC'] = { // Built into terminal-kit inputField
description: () => _('Exit command line mode'),
isDocOnly: true,
};
shortcuts['ENTER'] = {
description: () => _('Edit the selected note'),
action: () => {
const w = this.widget('mainWindow').focusedWidget;
if (w.name === 'folderList') {
this.widget('noteList').focus();
} else if (w.name === 'noteList' || w.name === 'noteText') {
this.processCommand('edit $n');
}
},
}
shortcuts['CTRL_C'] = {
description: () => _('Cancel the current command.'),
friendlyName: 'Ctrl+C',
isDocOnly: true,
}
shortcuts['CTRL_D'] = {
description: () => _('Exit the application.'),
friendlyName: 'Ctrl+D',
isDocOnly: true,
}
shortcuts['DELETE'] = {
description: () => _('Delete the currently selected note or notebook.'),
action: async () => {
if (this.widget('folderList').hasFocus) {
const item = this.widget('folderList').selectedJoplinItem;
if (item.type_ === BaseModel.TYPE_FOLDER) {
await this.processCommand('rmbook ' + item.id);
} else if (item.type_ === BaseModel.TYPE_TAG) {
this.stdout(_('To delete a tag, untag the associated notes.'));
} else if (item.type_ === BaseModel.TYPE_SEARCH) {
this.store().dispatch({
type: 'SEARCH_DELETE',
id: item.id,
});
}
} else if (this.widget('noteList').hasFocus) {
await this.processCommand('rmnote $n');
} else {
this.stdout(_('Please select the note or notebook to be deleted first.'));
}
if (item.command in this.tkWidgetKeys_) {
item.type = 'tkwidgets';
}
};
shortcuts[' '] = {
friendlyName: 'SPACE',
description: () => _('Set a to-do as completed / not completed'),
action: 'todo toggle $n',
item.canRunAlongOtherCommands = item.type === 'function' && ['toggle_metadata', 'toggle_console'].indexOf(item.command) >= 0;
output.push(item);
}
shortcuts['tc'] = {
description: () => _('[t]oggle [c]onsole between maximized/minimized/hidden/visible.'),
action: () => {
if (!this.consoleIsShown()) {
this.showConsole();
this.minimizeConsole();
} else {
if (this.consoleIsMaximized()) {
this.hideConsole();
} else {
this.maximizeConsole();
}
}
},
canRunAlongOtherCommands: true,
}
shortcuts['/'] = {
description: () => _('Search'),
action: { type: 'prompt', initialText: 'search ""', cursorPosition: -2 },
};
shortcuts['tm'] = {
description: () => _('[t]oggle note [m]etadata.'),
action: () => {
this.toggleNoteMetadata();
},
canRunAlongOtherCommands: true,
}
shortcuts['mn'] = {
description: () => _('[M]ake a new [n]ote'),
action: { type: 'prompt', initialText: 'mknote ""', cursorPosition: -2 },
}
shortcuts['mt'] = {
description: () => _('[M]ake a new [t]odo'),
action: { type: 'prompt', initialText: 'mktodo ""', cursorPosition: -2 },
}
shortcuts['mb'] = {
description: () => _('[M]ake a new note[b]ook'),
action: { type: 'prompt', initialText: 'mkbook ""', cursorPosition: -2 },
}
shortcuts['yn'] = {
description: () => _('Copy ([Y]ank) the [n]ote to a notebook.'),
action: { type: 'prompt', initialText: 'cp $n ""', cursorPosition: -2 },
}
shortcuts['dn'] = {
description: () => _('Move the note to a notebook.'),
action: { type: 'prompt', initialText: 'mv $n ""', cursorPosition: -2 },
}
return shortcuts;
return output;
}
toggleConsole() {
@@ -475,8 +389,16 @@ class AppGui {
return this.logger_;
}
shortcuts() {
return this.shortcuts_;
keymap() {
return this.keymap_;
}
keymapItemByKey(key) {
for (let i = 0; i < this.keymap_.length; i++) {
const item = this.keymap_[i];
if (item.keys.indexOf(key) >= 0) return item;
}
return null;
}
term() {
@@ -507,40 +429,104 @@ class AppGui {
}
}
async processCommand(cmd) {
async processFunctionCommand(cmd) {
if (cmd === 'activate') {
const w = this.widget('mainWindow').focusedWidget;
if (w.name === 'folderList') {
this.widget('noteList').focus();
} else if (w.name === 'noteList' || w.name === 'noteText') {
this.processPromptCommand('edit $n');
}
} else if (cmd === 'delete') {
if (this.widget('folderList').hasFocus) {
const item = this.widget('folderList').selectedJoplinItem;
if (!item) return;
if (item.type_ === BaseModel.TYPE_FOLDER) {
await this.processPromptCommand('rmbook ' + item.id);
} else if (item.type_ === BaseModel.TYPE_TAG) {
this.stdout(_('To delete a tag, untag the associated notes.'));
} else if (item.type_ === BaseModel.TYPE_SEARCH) {
this.store().dispatch({
type: 'SEARCH_DELETE',
id: item.id,
});
}
} else if (this.widget('noteList').hasFocus) {
await this.processPromptCommand('rmnote $n');
} else {
this.stdout(_('Please select the note or notebook to be deleted first.'));
}
} else if (cmd === 'toggle_console') {
if (!this.consoleIsShown()) {
this.showConsole();
this.minimizeConsole();
} else {
if (this.consoleIsMaximized()) {
this.hideConsole();
} else {
this.maximizeConsole();
}
}
} else if (cmd === 'toggle_metadata') {
this.toggleNoteMetadata();
} else if (cmd === 'enter_command_line_mode') {
const cmd = await this.widget('statusBar').prompt();
if (!cmd) return;
this.addCommandToConsole(cmd);
await this.processPromptCommand(cmd);
} else {
throw new Error('Unknown command: ' + cmd);
}
}
async processPromptCommand(cmd) {
if (!cmd) return;
cmd = cmd.trim();
if (!cmd.length) return;
this.logger().info('Got command: ' + cmd);
// this.logger().debug('Got command: ' + cmd);
if (cmd === 'q' || cmd === 'wq' || cmd === 'qa') { // Vim bonus
await this.app().exit();
return;
}
try {
let note = this.widget('noteList').currentItem;
let folder = this.widget('folderList').currentItem;
let args = splitCommandString(cmd);
let note = this.widget('noteList').currentItem;
let folder = this.widget('folderList').currentItem;
let args = splitCommandString(cmd);
for (let i = 0; i < args.length; i++) {
if (args[i] == '$n') {
args[i] = note ? note.id : '';
} else if (args[i] == '$b') {
args[i] = folder ? folder.id : '';
} else if (args[i] == '$c') {
const item = this.activeListItem();
args[i] = item ? item.id : '';
for (let i = 0; i < args.length; i++) {
if (args[i] == '$n') {
args[i] = note ? note.id : '';
} else if (args[i] == '$b') {
args[i] = folder ? folder.id : '';
} else if (args[i] == '$c') {
const item = this.activeListItem();
args[i] = item ? item.id : '';
}
}
}
try {
await this.app().execCommand(args);
} catch (error) {
this.stdout(error.message);
}
this.widget('console').scrollBottom();
// Invalidate so that the screen is redrawn in case inputting a command has moved
// the GUI up (in particular due to autocompletion), it's moved back to the right position.
this.widget('root').invalidate();
}
async updateFolderList() {
@@ -655,12 +641,27 @@ class AppGui {
return true;
}
if (link.type === 'resource') {
const resourceId = link.id;
let resource = await Resource.load(resourceId);
if (!resource) throw new Error('No resource with ID ' + resourceId); // Should be nearly impossible
if (resource.mime) response.setHeader('Content-Type', resource.mime);
response.write(await Resource.content(resource));
if (link.type === 'item') {
const itemId = link.id;
let item = await BaseItem.loadItemById(itemId);
if (!item) throw new Error('No item with ID ' + itemId); // Should be nearly impossible
if (item.type_ === BaseModel.TYPE_RESOURCE) {
if (item.mime) response.setHeader('Content-Type', item.mime);
response.write(await Resource.content(item));
} else if (item.type_ === BaseModel.TYPE_NOTE) {
const html = [`
<!DOCTYPE html>
<html class="client-nojs" lang="en" dir="ltr">
<head><meta charset="UTF-8"/></head><body>
`];
html.push('<pre>' + htmlentities(item.title) + '\n\n' + htmlentities(item.body) + '</pre>');
html.push('</body></html>');
response.write(html.join(''));
} else {
throw new Error('Unsupported item type: ' + item.type_);
}
return true;
}
@@ -676,7 +677,7 @@ class AppGui {
if (resourceIdRegex.test(url)) {
noteLinks[index] = {
type: 'resource',
type: 'item',
id: url.substr(2),
};
} else if (hasProtocol(url, ['http', 'https', 'file', 'ftp'])) {
@@ -765,32 +766,34 @@ class AppGui {
// -------------------------------------------------------------------------
const shortcutKey = this.currentShortcutKeys_.join('');
const cmd = shortcutKey in this.shortcuts_ ? this.shortcuts_[shortcutKey] : null;
let keymapItem = this.keymapItemByKey(shortcutKey);
let processShortcutKeys = !this.app().currentCommand() && cmd;
if (cmd && cmd.canRunAlongOtherCommands) processShortcutKeys = true;
// If this command is an alias to another command, resolve to the actual command
let processShortcutKeys = !this.app().currentCommand() && keymapItem;
if (keymapItem && keymapItem.canRunAlongOtherCommands) processShortcutKeys = true;
if (statusBar.promptActive) processShortcutKeys = false;
if (cmd && cmd.isDocOnly) processShortcutKeys = false;
if (processShortcutKeys) {
this.logger().info('Shortcut:', shortcutKey, cmd.description());
this.logger().debug('Shortcut:', shortcutKey, keymapItem);
this.currentShortcutKeys_ = [];
if (typeof cmd.action === 'function') {
await cmd.action();
} else if (typeof cmd.action === 'object') {
if (cmd.action.type === 'prompt') {
let promptOptions = {};
if ('cursorPosition' in cmd.action) promptOptions.cursorPosition = cmd.action.cursorPosition;
const commandString = await statusBar.prompt(cmd.action.initialText ? cmd.action.initialText : '', null, promptOptions);
this.addCommandToConsole(commandString);
await this.processCommand(commandString);
} else {
throw new Error('Unknown command: ' + JSON.stringify(cmd.action));
}
} else { // String
this.stdout(cmd.action);
await this.processCommand(cmd.action);
if (keymapItem.type === 'function') {
this.processFunctionCommand(keymapItem.command);
} else if (keymapItem.type === 'prompt') {
let promptOptions = {};
if ('cursorPosition' in keymapItem) promptOptions.cursorPosition = keymapItem.cursorPosition;
const commandString = await statusBar.prompt(keymapItem.command ? keymapItem.command : '', null, promptOptions);
this.addCommandToConsole(commandString);
await this.processPromptCommand(commandString);
} else if (keymapItem.type === 'exec') {
this.stdout(keymapItem.command);
await this.processPromptCommand(keymapItem.command);
} else if (keymapItem.type === 'tkwidgets') {
this.widget('root').handleKey(this.tkWidgetKeys_[keymapItem.command]);
} else {
throw new Error('Unknown command type: ' + JSON.stringify(keymapItem));
}
}
@@ -816,4 +819,4 @@ class AppGui {
AppGui.INPUT_MODE_NORMAL = 1;
AppGui.INPUT_MODE_META = 2;
module.exports = AppGui;
module.exports = AppGui;
+119 -37
View File
@@ -5,12 +5,13 @@ const { JoplinDatabase } = require('lib/joplin-database.js');
const { Database } = require('lib/database.js');
const { FoldersScreenUtils } = require('lib/folders-screen-utils.js');
const { DatabaseDriverNode } = require('lib/database-driver-node.js');
const { BaseModel } = require('lib/base-model.js');
const { Folder } = require('lib/models/folder.js');
const { BaseItem } = require('lib/models/base-item.js');
const { Note } = require('lib/models/note.js');
const { Tag } = require('lib/models/tag.js');
const { Setting } = require('lib/models/setting.js');
const ResourceService = require('lib/services/ResourceService');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const BaseItem = require('lib/models/BaseItem.js');
const Note = require('lib/models/Note.js');
const Tag = require('lib/models/Tag.js');
const Setting = require('lib/models/Setting.js');
const { Logger } = require('lib/logger.js');
const { sprintf } = require('sprintf-js');
const { reg } = require('lib/registry.js');
@@ -20,7 +21,7 @@ const { _, setLocale, defaultLocale, closestSupportedLocale } = require('lib/loc
const os = require('os');
const fs = require('fs-extra');
const { cliUtils } = require('./cli-utils.js');
const EventEmitter = require('events');
const Cache = require('lib/Cache');
class Application extends BaseApplication {
@@ -34,6 +35,7 @@ class Application extends BaseApplication {
this.allCommandsLoaded_ = false;
this.showStackTraces_ = false;
this.gui_ = null;
this.cache_ = new Cache();
}
gui() {
@@ -144,13 +146,15 @@ class Application extends BaseApplication {
message += ' (' + options.answers.join('/') + ')';
}
let answer = await this.gui().prompt('', message + ' ');
let answer = await this.gui().prompt('', message + ' ', options);
if (options.type === 'boolean') {
if (answer === null) return false; // Pressed ESCAPE
if (!answer) answer = options.answers[0];
let positiveIndex = options.booleanAnswerDefault == 'y' ? 0 : 1;
return answer.toLowerCase() === options.answers[positiveIndex].toLowerCase();
} else {
return answer;
}
});
@@ -177,22 +181,33 @@ class Application extends BaseApplication {
await doExit();
}
commands() {
if (this.allCommandsLoaded_) return this.commands_;
commands(uiType = null) {
if (!this.allCommandsLoaded_) {
fs.readdirSync(__dirname).forEach((path) => {
if (path.indexOf('command-') !== 0) return;
const ext = fileExtension(path)
if (ext != 'js') return;
fs.readdirSync(__dirname).forEach((path) => {
if (path.indexOf('command-') !== 0) return;
const ext = fileExtension(path)
if (ext != 'js') return;
let CommandClass = require('./' + path);
let cmd = new CommandClass();
if (!cmd.enabled()) return;
cmd = this.setupCommand(cmd);
this.commands_[cmd.name()] = cmd;
});
let CommandClass = require('./' + path);
let cmd = new CommandClass();
if (!cmd.enabled()) return;
cmd = this.setupCommand(cmd);
this.commands_[cmd.name()] = cmd;
});
this.allCommandsLoaded_ = true;
}
this.allCommandsLoaded_ = true;
if (uiType !== null) {
let temp = [];
for (let n in this.commands_) {
if (!this.commands_.hasOwnProperty(n)) continue;
const c = this.commands_[n];
if (!c.supportsUi(uiType)) continue;
temp[n] = c;
}
return temp;
}
return this.commands_;
}
@@ -210,12 +225,8 @@ class Application extends BaseApplication {
async commandMetadata() {
if (this.commandMetadata_) return this.commandMetadata_;
const osTmpdir = require('os-tmpdir');
const storage = require('node-persist');
await storage.init({ dir: osTmpdir() + '/commandMetadata', ttl: 1000 * 60 * 60 * 24 });
let output = await storage.getItem('metadata');
if (Setting.value('env') != 'dev' && output) {
let output = await this.cache_.getItem('metadata');
if (output) {
this.commandMetadata_ = output;
return Object.assign({}, this.commandMetadata_);
}
@@ -229,7 +240,7 @@ class Application extends BaseApplication {
output[n] = cmd.metadata();
}
await storage.setItem('metadata', output);
await this.cache_.setItem('metadata', output, 1000 * 60 * 60 * 24);
this.commandMetadata_ = output;
return Object.assign({}, this.commandMetadata_);
@@ -246,9 +257,13 @@ class Application extends BaseApplication {
try {
CommandClass = require(__dirname + '/command-' + name + '.js');
} catch (error) {
let e = new Error('No such command: ' + name);
e.type = 'notFound';
throw e;
if (error.message && error.message.indexOf('Cannot find module') >= 0) {
let e = new Error(_('No such command: %s', name));
e.type = 'notFound';
throw e;
} else {
throw error;
}
}
let cmd = new CommandClass();
@@ -260,7 +275,7 @@ class Application extends BaseApplication {
dummyGui() {
return {
isDummy: () => { return true; },
prompt: (initialText = '', promptString = '') => { return cliUtils.prompt(initialText, promptString); },
prompt: (initialText = '', promptString = '', options = null) => { return cliUtils.prompt(initialText, promptString, options); },
showConsole: () => {},
maximizeConsole: () => {},
stdout: (text) => { console.info(text); },
@@ -268,13 +283,16 @@ class Application extends BaseApplication {
exit: () => {},
showModalOverlay: (text) => {},
hideModalOverlay: () => {},
stdoutMaxWidth: () => { return 78; }
stdoutMaxWidth: () => { return 100; },
forceRender: () => {},
termSaveState: () => {},
termRestoreState: (state) => {},
};
}
async execCommand(argv) {
if (!argv.length) return this.execCommand(['help']);
reg.logger().info('execCommand()', argv);
// reg.logger().debug('execCommand()', argv);
const commandName = argv[0];
this.activeCommand_ = this.findCommandByName(commandName);
@@ -294,6 +312,63 @@ class Application extends BaseApplication {
return this.activeCommand_;
}
async loadKeymaps() {
const defaultKeyMap = [
{ "keys": [":"], "type": "function", "command": "enter_command_line_mode" },
{ "keys": ["TAB"], "type": "function", "command": "focus_next" },
{ "keys": ["SHIFT_TAB"], "type": "function", "command": "focus_previous" },
{ "keys": ["UP"], "type": "function", "command": "move_up" },
{ "keys": ["DOWN"], "type": "function", "command": "move_down" },
{ "keys": ["PAGE_UP"], "type": "function", "command": "page_up" },
{ "keys": ["PAGE_DOWN"], "type": "function", "command": "page_down" },
{ "keys": ["ENTER"], "type": "function", "command": "activate" },
{ "keys": ["DELETE", "BACKSPACE"], "type": "function", "command": "delete" },
{ "keys": [" "], "command": "todo toggle $n" },
{ "keys": ["tc"], "type": "function", "command": "toggle_console" },
{ "keys": ["tm"], "type": "function", "command": "toggle_metadata" },
{ "keys": ["/"], "type": "prompt", "command": "search \"\"", "cursorPosition": -2 },
{ "keys": ["mn"], "type": "prompt", "command": "mknote \"\"", "cursorPosition": -2 },
{ "keys": ["mt"], "type": "prompt", "command": "mktodo \"\"", "cursorPosition": -2 },
{ "keys": ["mb"], "type": "prompt", "command": "mkbook \"\"", "cursorPosition": -2 },
{ "keys": ["yn"], "type": "prompt", "command": "cp $n \"\"", "cursorPosition": -2 },
{ "keys": ["dn"], "type": "prompt", "command": "mv $n \"\"", "cursorPosition": -2 }
];
// Filter the keymap item by command so that items in keymap.json can override
// the default ones.
const itemsByCommand = {};
for (let i = 0; i < defaultKeyMap.length; i++) {
itemsByCommand[defaultKeyMap[i].command] = defaultKeyMap[i]
}
const filePath = Setting.value('profileDir') + '/keymap.json';
if (await fs.pathExists(filePath)) {
try {
let configString = await fs.readFile(filePath, 'utf-8');
configString = configString.replace(/^\s*\/\/.*/, ''); // Strip off comments
const keymap = JSON.parse(configString);
for (let keymapIndex = 0; keymapIndex < keymap.length; keymapIndex++) {
const item = keymap[keymapIndex];
itemsByCommand[item.command] = item;
}
} catch (error) {
let msg = error.message ? error.message : '';
msg = 'Could not load keymap ' + filePath + '\n' + msg;
error.message = msg;
throw error;
}
}
const output = [];
for (let n in itemsByCommand) {
if (!itemsByCommand.hasOwnProperty(n)) continue;
output.push(itemsByCommand[n]);
}
return output;
}
async start(argv) {
argv = await super.start(argv);
@@ -306,20 +381,25 @@ class Application extends BaseApplication {
if (argv.length) {
this.gui_ = this.dummyGui();
this.currentFolder_ = await Folder.load(Setting.value('activeFolderId'));
try {
await this.execCommand(argv);
} catch (error) {
if (this.showStackTraces_) {
console.info(error);
console.error(error);
} else {
console.info(error.message);
}
process.exit(1);
}
} else { // Otherwise open the GUI
this.initRedux();
const keymap = await this.loadKeymaps();
const AppGui = require('./app-gui.js');
this.gui_ = new AppGui(this, this.store());
this.gui_ = new AppGui(this, this.store(), keymap);
this.gui_.setLogger(this.logger_);
await this.gui_.start();
@@ -332,9 +412,11 @@ class Application extends BaseApplication {
const tags = await Tag.allWithNotes();
ResourceService.runInBackground();
this.dispatch({
type: 'TAG_UPDATE_ALL',
tags: tags,
items: tags,
});
this.store().dispatch({
+199
View File
@@ -0,0 +1,199 @@
var { app } = require('./app.js');
var Note = require('lib/models/Note.js');
var Folder = require('lib/models/Folder.js');
var Tag = require('lib/models/Tag.js');
var { cliUtils } = require('./cli-utils.js');
var yargParser = require('yargs-parser');
var fs = require('fs-extra');
async function handleAutocompletionPromise(line) {
// Auto-complete the command name
const names = await app().commandNames();
let words = getArguments(line);
//If there is only one word and it is not already a command name then you
//should look for commmands it could be
if (words.length == 1) {
if (names.indexOf(words[0]) === -1) {
let x = names.filter((n) => n.indexOf(words[0]) === 0);
if (x.length === 1) {
return x[0] + ' ';
}
return x.length > 0 ? x.map((a) => a + ' ') : line;
} else {
return line;
}
}
//There is more than one word and it is a command
const metadata = (await app().commandMetadata())[words[0]];
//If for some reason this command does not have any associated metadata
//just don't autocomplete. However, this should not happen.
if (metadata === undefined) {
return line;
}
//complete an option
let next = words.length > 1 ? words[words.length - 1] : '';
let l = [];
if (next[0] === '-') {
for (let i = 0; i<metadata.options.length; i++) {
const options = metadata.options[i][0].split(' ');
//if there are multiple options then they will be separated by comma and
//space. The comma should be removed
if (options[0][options[0].length - 1] === ',') {
options[0] = options[0].slice(0, -1);
}
if (words.includes(options[0]) || words.includes(options[1])) {
continue;
}
//First two elements are the flag and the third is the description
//Only autocomplete long
if (options.length > 1 && options[1].indexOf(next) === 0) {
l.push(options[1]);
} else if (options[0].indexOf(next) === 0) {
l.push(options[0]);
}
}
if (l.length === 0) {
return line;
}
let ret = l.map(a=>toCommandLine(a));
ret.prefix = toCommandLine(words.slice(0, -1)) + ' ';
return ret;
}
//Complete an argument
//Determine the number of positional arguments by counting the number of
//words that don't start with a - less one for the command name
const positionalArgs = words.filter((a)=>a.indexOf('-') !== 0).length - 1;
let cmdUsage = yargParser(metadata.usage)['_'];
cmdUsage.splice(0, 1);
if (cmdUsage.length >= positionalArgs) {
let argName = cmdUsage[positionalArgs - 1];
argName = cliUtils.parseCommandArg(argName).name;
const currentFolder = app().currentFolder();
if (argName == 'note' || argName == 'note-pattern') {
const notes = currentFolder ? await Note.previews(currentFolder.id, { titlePattern: next + '*' }) : [];
l.push(...notes.map((n) => n.title));
}
if (argName == 'notebook') {
const folders = await Folder.search({ titlePattern: next + '*' });
l.push(...folders.map((n) => n.title));
}
if (argName == 'item') {
const notes = currentFolder ? await Note.previews(currentFolder.id, { titlePattern: next + '*' }) : [];
const folders = await Folder.search({ titlePattern: next + '*' });
l.push(...notes.map((n) => n.title), folders.map((n) => n.title));
}
if (argName == 'tag') {
let tags = await Tag.search({ titlePattern: next + '*' });
l.push(...tags.map((n) => n.title));
}
if (argName == 'file') {
let files = await fs.readdir('.');
l.push(...files);
}
if (argName == 'tag-command') {
let c = filterList(['add', 'remove', 'list'], next);
l.push(...c);
}
if (argName == 'todo-command') {
let c = filterList(['toggle', 'clear'], next);
l.push(...c);
}
}
if (l.length === 1) {
return toCommandLine([...words.slice(0, -1), l[0]]);
} else if (l.length > 1) {
let ret = l.map(a=>toCommandLine(a));
ret.prefix = toCommandLine(words.slice(0, -1)) + ' ';
return ret;
}
return line;
}
function handleAutocompletion(str, callback) {
handleAutocompletionPromise(str).then(function(res) {
callback(undefined, res);
});
}
function toCommandLine(args) {
if (Array.isArray(args)) {
return args.map(function(a) {
if(a.indexOf('"') !== -1 || a.indexOf(' ') !== -1) {
return "'" + a + "'";
} else if (a.indexOf("'") !== -1) {
return '"' + a + '"';
} else {
return a;
}
}).join(' ');
} else {
if(args.indexOf('"') !== -1 || args.indexOf(' ') !== -1) {
return "'" + args + "' ";
} else if (args.indexOf("'") !== -1) {
return '"' + args + '" ';
} else {
return args + ' ';
}
}
}
function getArguments(line) {
let inSingleQuotes = false;
let inDoubleQuotes = false;
let currentWord = '';
let parsed = [];
for(let i = 0; i<line.length; i++) {
if(line[i] === '"') {
if(inDoubleQuotes) {
inDoubleQuotes = false;
//maybe push word to parsed?
//currentWord += '"';
} else {
inDoubleQuotes = true;
//currentWord += '"';
}
} else if(line[i] === "'") {
if(inSingleQuotes) {
inSingleQuotes = false;
//maybe push word to parsed?
//currentWord += "'";
} else {
inSingleQuotes = true;
//currentWord += "'";
}
} else if (/\s/.test(line[i]) &&
!(inDoubleQuotes || inSingleQuotes)) {
if (currentWord !== '') {
parsed.push(currentWord);
currentWord = '';
}
} else {
currentWord += line[i];
}
}
if (!(inSingleQuotes || inDoubleQuotes) && /\s/.test(line[line.length - 1])) {
parsed.push('');
} else {
parsed.push(currentWord);
}
return parsed;
}
function filterList(list, next) {
let output = [];
for (let i = 0; i < list.length; i++) {
if (list[i].indexOf(next) !== 0) continue;
output.push(list[i]);
}
return output;
}
module.exports = { handleAutocompletion };
+4 -4
View File
@@ -12,6 +12,10 @@ class BaseCommand {
throw new Error('Usage not defined');
}
encryptionCheck(item) {
if (item && item.encryption_applied) throw new Error(_('Cannot change encrypted item'));
}
description() {
throw new Error('Description not defined');
}
@@ -28,10 +32,6 @@ class BaseCommand {
return this.compatibleUis().indexOf(ui) >= 0;
}
aliases() {
return [];
}
options() {
return [];
}
+1 -1
View File
@@ -102,7 +102,7 @@ function getFooter() {
output.push('WEBSITE');
output.push('');
output.push(INDENT + 'http://joplin.cozic.net');
output.push(INDENT + 'https://joplin.cozic.net');
output.push('');
-154
View File
@@ -1,154 +0,0 @@
"use strict"
require('app-module-path').addPath(__dirname);
const processArgs = process.argv.splice(2, process.argv.length);
const silentLog = processArgs.indexOf('--silent') >= 0;
const { basename, dirname } = require('lib/path-utils.js');
const fs = require('fs-extra');
const gettextParser = require('gettext-parser');
const rootDir = dirname(dirname(__dirname));
const cliDir = rootDir + '/CliClient';
const cliLocalesDir = cliDir + '/locales';
const rnDir = rootDir + '/ReactNativeClient';
const electronDir = rootDir + '/ElectronClient/app';
function execCommand(command) {
if (!silentLog) console.info('Running: ' + command);
const exec = require('child_process').exec
return new Promise((resolve, reject) => {
let childProcess = exec(command, (error, stdout, stderr) => {
if (error) {
if (error.signal == 'SIGTERM') {
resolve('Process was killed');
} else {
reject(error);
}
} else {
resolve(stdout.trim());
}
});
});
}
function parsePoFile(filePath) {
const content = fs.readFileSync(filePath);
return gettextParser.po.parse(content);
}
function serializeTranslation(translation) {
let output = {};
const translations = translation.translations[''];
for (let n in translations) {
if (!translations.hasOwnProperty(n)) continue;
if (n == '') continue;
const t = translations[n];
if (t.comments && t.comments.flag && t.comments.flag.indexOf('fuzzy') >= 0) {
output[n] = t['msgid'];
} else {
output[n] = t['msgstr'][0];
}
}
return JSON.stringify(output);
}
function saveToFile(filePath, data) {
fs.writeFileSync(filePath, data);
}
function buildLocale(inputFile, outputFile) {
const r = parsePoFile(inputFile);
const translation = serializeTranslation(r);
saveToFile(outputFile, translation);
}
async function removePoHeaderDate(filePath) {
await execCommand('sed -i -e\'/POT-Creation-Date:/d\' "' + filePath + '"');
await execCommand('sed -i -e\'/PO-Revision-Date:/d\' "' + filePath + '"');
}
async function createPotFile(potFilePath, sources) {
let baseArgs = [];
baseArgs.push('--from-code=utf-8');
baseArgs.push('--output="' + potFilePath + '"');
baseArgs.push('--language=JavaScript');
baseArgs.push('--copyright-holder="Laurent Cozic"');
baseArgs.push('--package-name=Joplin-CLI');
baseArgs.push('--package-version=1.0.0');
baseArgs.push('--no-location');
for (let i = 0; i < sources.length; i++) {
let args = baseArgs.slice();
if (i > 0) args.push('--join-existing');
args.push(sources[i]);
const result = await execCommand('xgettext ' + args.join(' '));
if (result) console.error(result);
await removePoHeaderDate(potFilePath);
}
}
async function mergePotToPo(potFilePath, poFilePath) {
const command = 'msgmerge -U "' + poFilePath + '" "' + potFilePath + '"';
const result = await execCommand(command);
if (result) console.error(result);
await removePoHeaderDate(poFilePath);
}
function buildIndex(locales) {
let output = [];
output.push('var locales = {};');
for (let i = 0; i < locales.length; i++) {
const locale = locales[i];
output.push("locales['" + locale + "'] = require('./" + locale + ".json');");
}
output.push('module.exports = { locales: locales };');
return output.join("\n");
}
async function main() {
let potFilePath = cliLocalesDir + '/joplin.pot';
let jsonLocalesDir = cliDir + '/build/locales';
const defaultLocale = 'en_GB';
await createPotFile(potFilePath, [
cliDir + '/app/*.js',
cliDir + '/app/gui/*.js',
electronDir + '/*.js',
electronDir + '/gui/*.js',
rnDir + '/lib/*.js',
rnDir + '/lib/models/*.js',
rnDir + '/lib/services/*.js',
rnDir + '/lib/components/*.js',
rnDir + '/lib/components/screens/*.js',
]);
await execCommand('cp "' + potFilePath + '" ' + '"' + cliLocalesDir + '/' + defaultLocale + '.po"');
fs.mkdirpSync(jsonLocalesDir, 0o755);
let locales = [defaultLocale, 'fr_FR'];
for (let i = 0; i < locales.length; i++) {
const locale = locales[i];
const poFilePäth = cliLocalesDir + '/' + locale + '.po';
const jsonFilePath = jsonLocalesDir + '/' + locale + '.json';
if (locale != defaultLocale) await mergePotToPo(potFilePath, poFilePäth);
buildLocale(poFilePäth, jsonFilePath);
}
saveToFile(jsonLocalesDir + '/index.js', buildIndex(locales));
const rnJsonLocaleDir = rnDir + '/locales';
await execCommand('rsync -a "' + jsonLocalesDir + '/" "' + rnJsonLocaleDir + '"');
const electronJsonLocaleDir = electronDir + '/locales';
await execCommand('rsync -a "' + jsonLocalesDir + '/" "' + electronJsonLocaleDir + '"');
}
main().catch((error) => {
console.error(error);
});
+4 -4
View File
@@ -5,10 +5,10 @@ const { Logger } = require('lib/logger.js');
const { dirname } = require('lib/path-utils.js');
const { DatabaseDriverNode } = require('lib/database-driver-node.js');
const { JoplinDatabase } = require('lib/joplin-database.js');
const { BaseModel } = require('lib/base-model.js');
const { Folder } = require('lib/models/folder.js');
const { Note } = require('lib/models/note.js');
const { Setting } = require('lib/models/setting.js');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const Setting = require('lib/models/Setting.js');
const { sprintf } = require('sprintf-js');
const exec = require('child_process').exec
+19 -18
View File
@@ -178,38 +178,39 @@ cliUtils.promptConfirm = function(message, answers = null) {
});
}
cliUtils.promptInput = function(message) {
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
return new Promise((resolve, reject) => {
rl.question(message + ' ', (answer) => {
rl.close();
resolve(answer);
});
});
}
// Note: initialText is there to have the same signature as statusBar.prompt() so that
// it can be a drop-in replacement, however initialText is not used (and cannot be
// with readline.question?).
cliUtils.prompt = function(initialText = '', promptString = ':') {
cliUtils.prompt = function(initialText = '', promptString = ':', options = null) {
if (!options) options = {};
const readline = require('readline');
const Writable = require('stream').Writable;
const mutableStdout = new Writable({
write: function(chunk, encoding, callback) {
if (!this.muted)
process.stdout.write(chunk, encoding);
callback();
}
});
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
output: mutableStdout,
terminal: true,
});
return new Promise((resolve, reject) => {
mutableStdout.muted = false;
rl.question(promptString, (answer) => {
rl.close();
if (!!options.secure) this.stdout_('');
resolve(answer);
});
mutableStdout.muted = !!options.secure;
});
}
+289
View File
@@ -0,0 +1,289 @@
const { BaseCommand } = require('./base-command.js');
const { _ } = require('lib/locale.js');
const { cliUtils } = require('./cli-utils.js');
const EncryptionService = require('lib/services/EncryptionService');
const DecryptionWorker = require('lib/services/DecryptionWorker');
const MasterKey = require('lib/models/MasterKey');
const BaseItem = require('lib/models/BaseItem');
const BaseModel = require('lib/BaseModel');
const Setting = require('lib/models/Setting.js');
const { toTitleCase } = require('lib/string-utils.js');
const { reg } = require('lib/registry.js');
const markdownUtils = require('lib/markdownUtils');
const { Database } = require('lib/database.js');
class Command extends BaseCommand {
usage() {
return 'apidoc';
}
description() {
return 'Build the API doc';
}
createPropertiesTable(tableFields) {
const headers = [
{ name: 'name', label: 'Name' },
{ name: 'type', label: 'Type', filter: (value) => {
return Database.enumName('fieldType', value);
}},
{ name: 'description', label: 'Description' },
];
return markdownUtils.createMarkdownTable(headers, tableFields);
}
async action(args) {
const models = [
{
type: BaseModel.TYPE_NOTE,
},
{
type: BaseModel.TYPE_FOLDER,
},
{
type: BaseModel.TYPE_RESOURCE,
},
{
type: BaseModel.TYPE_TAG,
},
];
const lines = [];
lines.push('# Joplin API');
lines.push('');
lines.push('When the Web Clipper service is enabled, Joplin exposes a [REST API](https://en.wikipedia.org/wiki/Representational_state_transfer) which allows third-party applications to access Joplin\'s data and to create, modify or delete notes, notebooks, resources or tags.');
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('');
lines.push('```javascript');
lines.push('let port = null;');
lines.push('for (let portToTest = 41184; portToTest <= 41194; portToTest++) {');
lines.push(' const result = pingPort(portToTest); // Call GET /ping');
lines.push(' if (result == \'JoplinClipperServer\') {');
lines.push(' port = portToTest; // Found the port');
lines.push(' break;');
lines.push(' }');
lines.push('}');
lines.push('```');
lines.push('');
lines.push('# Authorisation')
lines.push('');
lines.push('To prevent unauthorised applications from accessing the API, the calls must be authentified. To do so, you must provide a token as a query parameter for each API call. You can get this token from the Joplin desktop application, on the Web Clipper Options screen.');
lines.push('');
lines.push('This would be an example of valid cURL call using a token:');
lines.push('');
lines.push('\tcurl http://localhost:41184/notes?token=ABCD123ABCD123ABCD123ABCD123ABCD123');
lines.push('');
lines.push('In the documentation below, the token will not be specified every time however you will need to include it.');
lines.push('');
lines.push('# Using the API');
lines.push('');
lines.push('All the calls, unless noted otherwise, receives and send **JSON data**. For example to create a new note:');
lines.push('');
lines.push('\tcurl --data \'{ "title": "My note", "body": "Some note in **Markdown**"}\' http://localhost:41184/notes');
lines.push('');
lines.push('In the documentation below, the calls may include special parameters such as :id or :note_id. You would replace this with the item ID or note ID.');
lines.push('');
lines.push('For example, for the endpoint `DELETE /tags/:id/notes/:note_id`, to remove the tag with ID "ABCD1234" from the note with ID "EFGH789", you would run for example:');
lines.push('');
lines.push('\tcurl -X DELETE http://localhost:41184/tags/ABCD1234/notes/EFGH789');
lines.push('');
lines.push('The four verbs supported by the API are the following ones:');
lines.push('');
lines.push('* **GET**: To retrieve items (notes, notebooks, etc.).');
lines.push('* **POST**: To create new items. In general most item properties are optional. If you omit any, a default value will be used.');
lines.push('* **PUT**: To update an item. Note in a REST API, traditionally PUT is used to completely replace an item, however in this API it will only replace the properties that are provided. For example if you PUT {"title": "my new title"}, only the "title" property will be changed. The other properties will be left untouched (they won\'t be cleared nor changed).');
lines.push('* **DELETE**: To delete items.');
lines.push('');
lines.push('# Filtering data');
lines.push('');
lines.push('You can change the fields that will be returned by the API using the `fields=` query parameter, which takes a list of comma separated fields. For example, to get the longitude and latitude of a note, use this:');
lines.push('');
lines.push('\tcurl http://localhost:41184/notes/ABCD123?fields=longitude,latitude');
lines.push('');
lines.push('To get the IDs only of all the tags:');
lines.push('');
lines.push('\tcurl http://localhost:41184/tags?fields=id');
lines.push('');
lines.push('# About the property types');
lines.push('');
lines.push('* Text is UTF-8.');
lines.push('* All date/time are Unix timestamps in milliseconds.');
lines.push('* Booleans are integer values 0 or 1.');
lines.push('');
lines.push('# Testing if the service is available');
lines.push('');
lines.push('Call **GET /ping** to check if the service is available. It should return "JoplinClipperServer" if it works.');
lines.push('');
for (let i = 0; i < models.length; i++) {
const model = models[i];
const ModelClass = BaseItem.getClassByItemType(model.type);
const tableName = ModelClass.tableName();
let tableFields = reg.db().tableFields(tableName, { includeDescription: true });
const singular = tableName.substr(0, tableName.length - 1);
if (model.type === BaseModel.TYPE_NOTE) {
tableFields = tableFields.slice();
tableFields.push({
name: 'body_html',
type: Database.enumId('fieldType', 'text'),
description: 'Note body, in HTML format',
});
tableFields.push({
name: 'base_url',
type: Database.enumId('fieldType', 'text'),
description: 'If `body_html` is provided and contains relative URLs, provide the `base_url` parameter too so that all the URLs can be converted to absolute ones. The base URL is basically where the HTML was fetched from, minus the query (everything after the \'?\'). For example if the original page was `https://stackoverflow.com/search?q=%5Bjava%5D+test`, the base URL is `https://stackoverflow.com/search`.',
});
tableFields.push({
name: 'image_data_url',
type: Database.enumId('fieldType', 'text'),
description: 'An image to attach to the note, in [Data URL](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs) format.',
});
tableFields.push({
name: 'crop_rect',
type: Database.enumId('fieldType', 'text'),
description: 'If an image is provided, you can also specify an optional rectangle that will be used to crop the image. In format `{ x: x, y: y, width: width, height: height }`',
});
tableFields.push({
name: 'tags',
type: Database.enumId('fieldType', 'text'),
description: 'Comma-separated list of tags. eg. `tag1,tag2`.',
});
}
lines.push('# ' + toTitleCase(tableName));
lines.push('');
if (model.type === BaseModel.TYPE_FOLDER) {
lines.push('This is actually a notebook. Internally notebooks are called "folders".');
lines.push('');
}
lines.push('## Properties');
lines.push('');
lines.push(this.createPropertiesTable(tableFields));
lines.push('');
lines.push('## GET /' + tableName);
lines.push('');
lines.push('Gets all ' + tableName);
lines.push('');
if (model.type === BaseModel.TYPE_FOLDER) {
lines.push('The folders are returned as a tree. The sub-notebooks of a notebook, if any, are under the `children` key.');
lines.push('');
}
lines.push('## GET /' + tableName + '/:id');
lines.push('');
lines.push('Gets ' + singular + ' with ID :id');
lines.push('');
if (model.type === BaseModel.TYPE_TAG) {
lines.push('## GET /tags/:id/notes');
lines.push('');
lines.push('Gets all the notes with this tag.');
lines.push('');
}
if (model.type === BaseModel.TYPE_NOTE) {
lines.push('## GET /notes/:id/tags');
lines.push('');
lines.push('Gets all the tags attached to this note.');
lines.push('');
}
if (model.type === BaseModel.TYPE_FOLDER) {
lines.push('## GET /folders/:id/notes');
lines.push('');
lines.push('Gets all the notes inside this folder.');
lines.push('');
}
if (model.type === BaseModel.TYPE_RESOURCE) {
lines.push('## GET /resources/:id/file');
lines.push('');
lines.push('Gets the actual file associated with this resource.');
lines.push('');
}
lines.push('## POST /' + tableName);
lines.push('');
lines.push('Creates a new ' + singular);
lines.push('');
if (model.type === BaseModel.TYPE_RESOURCE) {
lines.push('Creating a new resource is special because you also need to upload the file. Unlike other API calls, this one must have the "multipart/form-data" Content-Type. The file data must be passed to the "data" form field, and the other properties to the "props" form field. An example of a valid call with cURL would be:');
lines.push('');
lines.push('\tcurl -F \'data=@/path/to/file.jpg\' -F \'props={"title":"my resource title"}\' http://localhost:41184/resources');
lines.push('');
lines.push('The "data" field is required, while the "props" one is not. If not specified, default values will be used.');
lines.push('');
}
if (model.type === BaseModel.TYPE_TAG) {
lines.push('## POST /tags/:id/notes');
lines.push('');
lines.push('Post a note to this endpoint to add the tag to the note. The note data must at least contain an ID property (all other properties will be ignored).');
lines.push('');
}
if (model.type === BaseModel.TYPE_NOTE) {
lines.push('You can either specify the note body as Markdown by setting the `body` parameter, or in HTML by setting the `body_html`.');
lines.push('');
lines.push('Examples:');
lines.push('');
lines.push('* Create a note from some Markdown text');
lines.push('');
lines.push(' curl --data \'{ "title": "My note", "body": "Some note in **Markdown**"}\' http://127.0.0.1:41184/notes');
lines.push('');
lines.push('* Create a note from some HTML');
lines.push('');
lines.push(' curl --data \'{ "title": "My note", "body_html": "Some note in <b>HTML</b>"}\' http://127.0.0.1:41184/notes');
lines.push('');
lines.push('* Create a note and attach an image to it:');
lines.push('');
lines.push(' curl --data \'{ "title": "Image test", "body": "Here is Joplin icon:", "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="}\' http://127.0.0.1:41184/notes');
lines.push('');
lines.push('### Creating a note with a specific ID');
lines.push('');
lines.push('When a new note is created, it is automatically assigned a new unique ID so **normally you do not need to set the ID**. However, if for some reason you want to set it, you can supply it as the `id` property. It needs to be a 32 characters long hexadecimal string. **Make sure it is unique**, for example by generating it using whatever GUID function is available in your programming language.');
lines.push('');
lines.push(' curl --data \'{ "id": "00a87474082744c1a8515da6aa5792d2", "title": "My note with custom ID"}\' http://127.0.0.1:41184/notes');
lines.push('');
}
lines.push('## PUT /' + tableName + '/:id');
lines.push('');
lines.push('Sets the properties of the ' + singular + ' with ID :id');
lines.push('');
lines.push('## DELETE /' + tableName + '/:id');
lines.push('');
lines.push('Deletes the ' + singular + ' with ID :id');
lines.push('');
if (model.type === BaseModel.TYPE_TAG) {
lines.push('## DELETE /tags/:id/notes/:note_id');
lines.push('');
lines.push('Remove the tag from the note.');
lines.push('');
}
}
this.stdout(lines.join('\n'));
}
}
module.exports = Command;
+2 -1
View File
@@ -1,7 +1,7 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { BaseModel } = require('lib/base-model.js');
const BaseModel = require('lib/BaseModel.js');
const { shim } = require('lib/shim.js');
const fs = require('fs-extra');
@@ -19,6 +19,7 @@ class Command extends BaseCommand {
let title = args['note'];
let note = await app().loadItem(BaseModel.TYPE_NOTE, title, { parent: app().currentFolder() });
this.encryptionCheck(note);
if (!note) throw new Error(_('Cannot find "%s".', title));
const localFilePath = args['file'];
+6 -7
View File
@@ -1,9 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { BaseModel } = require('lib/base-model.js');
const { Folder } = require('lib/models/folder.js');
const { Note } = require('lib/models/note.js');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
@@ -21,10 +21,6 @@ class Command extends BaseCommand {
];
}
enabled() {
return false;
}
async action(args) {
let title = args['note'];
@@ -33,6 +29,9 @@ class Command extends BaseCommand {
const content = args.options.verbose ? await Note.serialize(item) : await Note.serializeForEdit(item);
this.stdout(content);
app().gui().showConsole();
app().gui().maximizeConsole();
}
}
+6 -2
View File
@@ -1,7 +1,7 @@
const { BaseCommand } = require('./base-command.js');
const { _, setLocale } = require('lib/locale.js');
const { app } = require('./app.js');
const { Setting } = require('lib/models/setting.js');
const Setting = require('lib/models/Setting.js');
class Command extends BaseCommand {
@@ -23,7 +23,11 @@ class Command extends BaseCommand {
const verbose = args.options.verbose;
const renderKeyValue = (name) => {
const value = Setting.value(name);
const md = Setting.settingMetadata(name);
let value = Setting.value(name);
if (typeof value === 'object' || Array.isArray(value)) value = JSON.stringify(value);
if (md.secure && value) value = '********';
if (Setting.isEnum(name)) {
return _('%s = %s (%s)', name, value, Setting.enumOptionsDoc(name));
} else {
+3 -3
View File
@@ -1,9 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { BaseModel } = require('lib/base-model.js');
const { Folder } = require('lib/models/folder.js');
const { Note } = require('lib/models/note.js');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
+6 -5
View File
@@ -1,9 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { BaseModel } = require('lib/base-model.js');
const { Folder } = require('lib/models/folder.js');
const { Note } = require('lib/models/note.js');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const { time } = require('lib/time-utils.js');
class Command extends BaseCommand {
@@ -16,8 +16,9 @@ class Command extends BaseCommand {
return _('Marks a to-do as done.');
}
static async handleAction(args, isCompleted) {
static async handleAction(commandInstance, args, isCompleted) {
const note = await app().loadItem(BaseModel.TYPE_NOTE, args.note);
commandInstance.encryptionCheck(note);
if (!note) throw new Error(_('Cannot find "%s".', args.note));
if (!note.is_todo) throw new Error(_('Note is not a to-do: "%s"', args.note));
@@ -32,7 +33,7 @@ class Command extends BaseCommand {
}
async action(args) {
await Command.handleAction(args, true);
await Command.handleAction(this, args, true);
}
}
+3 -3
View File
@@ -1,9 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { Folder } = require('lib/models/folder.js');
const { Note } = require('lib/models/note.js');
const { Tag } = require('lib/models/tag.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const Tag = require('lib/models/Tag.js');
class Command extends BaseCommand {
+218
View File
@@ -0,0 +1,218 @@
const { BaseCommand } = require('./base-command.js');
const { _ } = require('lib/locale.js');
const { cliUtils } = require('./cli-utils.js');
const EncryptionService = require('lib/services/EncryptionService');
const DecryptionWorker = require('lib/services/DecryptionWorker');
const MasterKey = require('lib/models/MasterKey');
const BaseItem = require('lib/models/BaseItem');
const Setting = require('lib/models/Setting.js');
class Command extends BaseCommand {
usage() {
return 'e2ee <command> [path]';
}
description() {
return _('Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status` and `target-status`.');
}
options() {
return [
// This is here mostly for testing - shouldn't be used
['-p, --password <password>', 'Use this password as master password (For security reasons, it is not recommended to use this option).'],
['-v, --verbose', 'More verbose output for the `target-status` command'],
];
}
async action(args) {
// change-password
const options = args.options;
if (args.command === 'enable') {
const password = options.password ? options.password.toString() : await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
if (!password) {
this.stdout(_('Operation cancelled'));
return;
}
await EncryptionService.instance().generateMasterKeyAndEnableEncryption(password);
return;
}
if (args.command === 'disable') {
await EncryptionService.instance().disableEncryption();
return;
}
if (args.command === 'decrypt') {
while (true) {
try {
if (args.path) {
const plainText = await EncryptionService.instance().decryptString(args.path);
this.stdout(plainText);
return;
} else {
if (process.stdin.isTTY) {
this.stdout(_('Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.'));
await DecryptionWorker.instance().start();
this.stdout(_('Completed decryption.'));
return;
} else {
// var repl = require("repl");
// var r = repl.start("node> ");
const text = await new Promise((accept, reject) => {
var buffer = '';
process.stdin.setEncoding('utf8');
process.stdin.on('data', function(chunk) {
buffer += chunk;
// process.stdout.write(chunk);
});
process.stdin.on('end', function() {
accept(buffer.trim());
});
});
if (text.length > 0) {
var cipherText = text;
try {
var item = await BaseItem.unserialize(text);
cipherText = item.encryption_cipher_text;
} catch (error) {
// we already got the pure cipher text
}
const plainText = await EncryptionService.instance().decryptString(cipherText);
this.stdout(plainText);
}
return;
}
}
} catch (error) {
if (error.code === 'masterKeyNotLoaded') {
const masterKeyId = error.masterKeyId;
const password = await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
if (!password) {
this.stdout(_('Operation cancelled'));
return;
}
Setting.setObjectKey('encryption.passwordCache', masterKeyId, password);
await EncryptionService.instance().loadMasterKeysFromSettings();
continue;
}
throw error;
}
}
return;
}
if (args.command === 'status') {
this.stdout(_('Encryption is: %s', Setting.value('encryption.enabled') ? _('Enabled') : _('Disabled')));
return;
}
if (args.command === 'target-status') {
const fs = require('fs-extra');
const pathUtils = require('lib/path-utils.js');
const fsDriver = new (require('lib/fs-driver-node.js').FsDriverNode)();
const targetPath = args.path;
if (!targetPath) throw new Error('Please specify the sync target path.');
const dirPaths = function(targetPath) {
let paths = [];
fs.readdirSync(targetPath).forEach((path) => {
paths.push(path);
});
return paths;
}
let itemCount = 0;
let resourceCount = 0;
let encryptedItemCount = 0;
let encryptedResourceCount = 0;
let otherItemCount = 0;
let encryptedPaths = [];
let decryptedPaths = [];
let paths = dirPaths(targetPath);
for (let i = 0; i < paths.length; i++) {
const path = paths[i];
const fullPath = targetPath + '/' + path;
const stat = await fs.stat(fullPath);
// this.stdout(fullPath);
if (path === '.resource') {
let resourcePaths = dirPaths(fullPath);
for (let j = 0; j < resourcePaths.length; j++) {
const resourcePath = resourcePaths[j];
resourceCount++;
const fullResourcePath = fullPath + '/' + resourcePath;
const isEncrypted = await EncryptionService.instance().fileIsEncrypted(fullResourcePath);
if (isEncrypted) {
encryptedResourceCount++;
encryptedPaths.push(fullResourcePath);
} else {
decryptedPaths.push(fullResourcePath);
}
}
} else if (stat.isDirectory()) {
continue;
} else {
const content = await fs.readFile(fullPath, 'utf8');
const item = await BaseItem.unserialize(content);
const ItemClass = BaseItem.itemClass(item);
if (!ItemClass.encryptionSupported()) {
otherItemCount++;
continue;
}
itemCount++;
const isEncrypted = await EncryptionService.instance().itemIsEncrypted(item);
if (isEncrypted) {
encryptedItemCount++;
encryptedPaths.push(fullPath);
} else {
decryptedPaths.push(fullPath);
}
}
}
this.stdout('Encrypted items: ' + encryptedItemCount + '/' + itemCount);
this.stdout('Encrypted resources: ' + encryptedResourceCount + '/' + resourceCount);
this.stdout('Other items (never encrypted): ' + otherItemCount);
if (options.verbose) {
this.stdout('');
this.stdout('# Encrypted paths');
this.stdout('');
for (let i = 0; i < encryptedPaths.length; i++) {
const path = encryptedPaths[i];
this.stdout(path);
}
this.stdout('');
this.stdout('# Decrypted paths');
this.stdout('');
for (let i = 0; i < decryptedPaths.length; i++) {
const path = decryptedPaths[i];
this.stdout(path);
}
}
return;
}
}
}
module.exports = Command;
+11 -7
View File
@@ -3,10 +3,10 @@ const { BaseCommand } = require('./base-command.js');
const { uuid } = require('lib/uuid.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { Folder } = require('lib/models/folder.js');
const { Note } = require('lib/models/note.js');
const { Setting } = require('lib/models/setting.js');
const { BaseModel } = require('lib/base-model.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const Setting = require('lib/models/Setting.js');
const BaseModel = require('lib/BaseModel.js');
const { cliUtils } = require('./cli-utils.js');
const { time } = require('lib/time-utils.js');
@@ -44,6 +44,8 @@ class Command extends BaseCommand {
if (!app().currentFolder()) throw new Error(_('No active notebook.'));
let note = await app().loadItem(BaseModel.TYPE_NOTE, title);
this.encryptionCheck(note);
if (!note) {
const ok = await this.prompt(_('Note does not exist: "%s". Create it?', title));
if (!ok) return;
@@ -76,12 +78,14 @@ class Command extends BaseCommand {
app().gui().showModalOverlay(_('Starting to edit note. Close the editor to get back to the prompt.'));
await app().gui().forceRender();
const termState = app().gui().term().saveState();
const termState = app().gui().termSaveState();
const spawnSync = require('child_process').spawnSync;
spawnSync(editorPath, editorArgs, { stdio: 'inherit' });
const result = spawnSync(editorPath, editorArgs, { stdio: 'inherit' });
app().gui().term().restoreState(termState);
if (result.error) this.stdout(_('Error opening note in editor: %s', result.error.message));
app().gui().termRestoreState(termState);
app().gui().hideModalOverlay();
app().gui().forceRender();
+4
View File
@@ -12,6 +12,10 @@ class Command extends BaseCommand {
return _('Exits the application.');
}
compatibleUis() {
return ['gui'];
}
async action(args) {
await app().exit();
}
+1 -1
View File
@@ -1,7 +1,7 @@
const { BaseCommand } = require('./base-command.js');
const { Database } = require('lib/database.js');
const { app } = require('./app.js');
const { Setting } = require('lib/models/setting.js');
const Setting = require('lib/models/Setting.js');
const { _ } = require('lib/locale.js');
const { ReportService } = require('lib/services/report.js');
const fs = require('fs-extra');
+17 -15
View File
@@ -1,7 +1,7 @@
const { BaseCommand } = require('./base-command.js');
const { Exporter } = require('lib/services/exporter.js');
const { BaseModel } = require('lib/base-model.js');
const { Note } = require('lib/models/note.js');
const InteropService = require('lib/services/InteropService.js');
const BaseModel = require('lib/BaseModel.js');
const Note = require('lib/models/Note.js');
const { reg } = require('lib/registry.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
@@ -10,15 +10,21 @@ const fs = require('fs-extra');
class Command extends BaseCommand {
usage() {
return 'export <directory>';
return 'export <path>';
}
description() {
return _('Exports Joplin data to the given directory. By default, it will export the complete database including notebooks, notes, tags and resources.');
return _('Exports Joplin data to the given path. By default, it will export the complete database including notebooks, notes, tags and resources.');
}
options() {
const service = new InteropService();
const formats = service.modules()
.filter(m => m.type === 'exporter')
.map(m => m.format + (m.description ? ' (' + m.description + ')' : ''));
return [
['--format <format>', _('Destination format: %s', formats.join(', '))],
['--note <note>', _('Exports only the given note.')],
['--notebook <notebook>', _('Exports only the given notebook.')],
];
@@ -26,13 +32,9 @@ class Command extends BaseCommand {
async action(args) {
let exportOptions = {};
exportOptions.destDir = args.directory;
exportOptions.writeFile = (filePath, data) => {
return fs.writeFile(filePath, data);
};
exportOptions.copyFile = (source, dest) => {
return fs.copy(source, dest, { overwrite: true });
};
exportOptions.path = args.path;
exportOptions.format = args.options.format ? args.options.format : 'jex';
if (args.options.note) {
@@ -48,10 +50,10 @@ class Command extends BaseCommand {
}
const exporter = new Exporter();
const result = await exporter.export(exportOptions);
const service = new InteropService();
const result = await service.export(exportOptions);
reg.logger().info('Export result: ', result);
result.warnings.map((w) => this.stdout(w));
}
}
+3 -3
View File
@@ -1,9 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { BaseModel } = require('lib/base-model.js');
const { Folder } = require('lib/models/folder.js');
const { Note } = require('lib/models/note.js');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
+15 -14
View File
@@ -2,7 +2,7 @@ const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { renderCommandHelp } = require('./help-utils.js');
const { Database } = require('lib/database.js');
const { Setting } = require('lib/models/setting.js');
const Setting = require('lib/models/Setting.js');
const { wrap } = require('lib/string-utils.js');
const { _ } = require('lib/locale.js');
const { cliUtils } = require('./cli-utils.js');
@@ -18,7 +18,7 @@ class Command extends BaseCommand {
}
allCommands() {
const commands = app().commands();
const commands = app().commands(app().uiType());
let output = [];
for (let n in commands) {
if (!commands.hasOwnProperty(n)) continue;
@@ -36,21 +36,22 @@ class Command extends BaseCommand {
async action(args) {
const stdoutWidth = app().commandStdoutMaxWidth();
if (args.command === 'shortcuts') {
if (args.command === 'shortcuts' || args.command === 'keymap') {
this.stdout(_('For information on how to customise the shortcuts please visit %s', 'https://joplin.cozic.net/terminal/#shortcuts'));
this.stdout('');
if (app().gui().isDummy()) {
throw new Error(_('Shortcuts are not available in CLI mode.'));
}
const shortcuts = app().gui().shortcuts();
const keymap = app().gui().keymap();
let rows = [];
for (let n in shortcuts) {
if (!shortcuts.hasOwnProperty(n)) continue;
const shortcut = shortcuts[n];
if (!shortcut.description) continue;
n = shortcut.friendlyName ? shortcut.friendlyName : n;
rows.push([n, shortcut.description()]);
for (let i = 0; i < keymap.length; i++) {
const item = keymap[i];
const keys = item.keys.map((k) => k === ' ' ? '(SPACE)' : k);
rows.push([keys.join(', '), item.command]);
}
cliUtils.printArray(this.stdout.bind(this), rows);
@@ -65,20 +66,20 @@ class Command extends BaseCommand {
} else {
const commandNames = this.allCommands().map((a) => a.name());
this.stdout(_('Type `help [command]` for more information about a command.'));
this.stdout(_('Type `help [command]` for more information about a command; or type `help all` for the complete usage information.'));
this.stdout('');
this.stdout(_('The possible commands are:'));
this.stdout('');
this.stdout(commandNames.join(', '));
this.stdout('');
this.stdout(_('In any command, a note or notebook can be refered to by title or ID, or using the shortcuts `$n` or `$b` for, respectively, the currently selected note or notebook. `$c` can be used to refer to the currently selected item.'));
this.stdout(_('In any command, a note or notebook can be referred to by title or ID, or using the shortcuts `$n` or `$b` for, respectively, the currently selected note or notebook. `$c` can be used to refer to the currently selected item.'));
this.stdout('');
this.stdout(_('To move from one pane to another, press Tab or Shift+Tab.'));
this.stdout(_('Use the arrows and page up/down to scroll the lists and text areas (including this console).'));
this.stdout(_('To maximise/minimise the console, press "TC".'));
this.stdout(_('To maximise/minimise the console, press "tc".'));
this.stdout(_('To enter command line mode, press ":"'));
this.stdout(_('To exit command line mode, press ESCAPE'));
this.stdout(_('For the complete list of available keyboard shortcuts, type `help shortcuts`'));
this.stdout(_('For the list of keyboard shortcuts and config options, type `help keymap`'));
}
app().gui().showConsole();
-68
View File
@@ -1,68 +0,0 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { Folder } = require('lib/models/folder.js');
const { importEnex } = require('import-enex');
const { filename, basename } = require('lib/path-utils.js');
const { cliUtils } = require('./cli-utils.js');
class Command extends BaseCommand {
usage() {
return 'import-enex <file> [notebook]';
}
description() {
return _('Imports an Evernote notebook file (.enex file).');
}
options() {
return [
['-f, --force', _('Do not ask for confirmation.')],
];
}
async action(args) {
let filePath = args.file;
let folder = null;
let folderTitle = args['notebook'];
let force = args.options.force === true;
if (!folderTitle) folderTitle = filename(filePath);
folder = await Folder.loadByField('title', folderTitle);
const msg = folder ? _('File "%s" will be imported into existing notebook "%s". Continue?', basename(filePath), folderTitle) : _('New notebook "%s" will be created and file "%s" will be imported into it. Continue?', folderTitle, basename(filePath));
const ok = force ? true : await this.prompt(msg);
if (!ok) return;
let lastProgress = '';
let options = {
onProgress: (progressState) => {
let line = [];
line.push(_('Found: %d.', progressState.loaded));
line.push(_('Created: %d.', progressState.created));
if (progressState.updated) line.push(_('Updated: %d.', progressState.updated));
if (progressState.skipped) line.push(_('Skipped: %d.', progressState.skipped));
if (progressState.resourcesCreated) line.push(_('Resources: %d.', progressState.resourcesCreated));
if (progressState.notesTagged) line.push(_('Tagged: %d.', progressState.notesTagged));
lastProgress = line.join(' ');
cliUtils.redraw(lastProgress);
},
onError: (error) => {
let s = error.trace ? error.trace : error.toString();
this.stdout(s);
},
}
folder = !folder ? await Folder.save({ title: folderTitle }) : folder;
app().gui().showConsole();
this.stdout(_('Importing notes...'));
await importEnex(folder.id, filePath, options);
cliUtils.redrawDone();
this.stdout(_('The notes have been imported: %s', lastProgress));
}
}
module.exports = Command;
+75
View File
@@ -0,0 +1,75 @@
const { BaseCommand } = require('./base-command.js');
const InteropService = require('lib/services/InteropService.js');
const BaseModel = require('lib/BaseModel.js');
const Note = require('lib/models/Note.js');
const { filename, basename, fileExtension } = require('lib/path-utils.js');
const { importEnex } = require('lib/import-enex');
const { cliUtils } = require('./cli-utils.js');
const { reg } = require('lib/registry.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const fs = require('fs-extra');
class Command extends BaseCommand {
usage() {
return 'import <path> [notebook]';
}
description() {
return _('Imports data into Joplin.');
}
options() {
const service = new InteropService();
const formats = service.modules().filter(m => m.type === 'importer').map(m => m.format);
return [
['--format <format>', _('Source format: %s', (['auto'].concat(formats)).join(', '))],
['-f, --force', _('Do not ask for confirmation.')],
];
}
async action(args) {
let folder = await app().loadItem(BaseModel.TYPE_FOLDER, args.notebook);
if (args.notebook && !folder) throw new Error(_('Cannot find "%s".', args.notebook));
const importOptions = {};
importOptions.path = args.path;
importOptions.format = args.options.format ? args.options.format : 'auto';
importOptions.destinationFolderId = folder ? folder.id : null;
let lastProgress = '';
// onProgress/onError supported by Enex import only
importOptions.onProgress = (progressState) => {
let line = [];
line.push(_('Found: %d.', progressState.loaded));
line.push(_('Created: %d.', progressState.created));
if (progressState.updated) line.push(_('Updated: %d.', progressState.updated));
if (progressState.skipped) line.push(_('Skipped: %d.', progressState.skipped));
if (progressState.resourcesCreated) line.push(_('Resources: %d.', progressState.resourcesCreated));
if (progressState.notesTagged) line.push(_('Tagged: %d.', progressState.notesTagged));
lastProgress = line.join(' ');
cliUtils.redraw(lastProgress);
};
importOptions.onError = (error) => {
let s = error.trace ? error.trace : error.toString();
this.stdout(s);
};
app().gui().showConsole();
this.stdout(_('Importing notes...'));
const service = new InteropService();
const result = await service.import(importOptions);
result.warnings.map((w) => this.stdout(w));
cliUtils.redrawDone();
if (lastProgress) this.stdout(_('The notes have been imported: %s', lastProgress));
}
}
module.exports = Command;
+7 -7
View File
@@ -1,10 +1,10 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { BaseModel } = require('lib/base-model.js');
const { Folder } = require('lib/models/folder.js');
const { Setting } = require('lib/models/setting.js');
const { Note } = require('lib/models/note.js');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const Setting = require('lib/models/Setting.js');
const Note = require('lib/models/Note.js');
const { sprintf } = require('sprintf-js');
const { time } = require('lib/time-utils.js');
const { cliUtils } = require('./cli-utils.js');
@@ -22,7 +22,7 @@ class Command extends BaseCommand {
enabled() {
return false;
}
options() {
return [
['-n, --limit <num>', _('Displays only the first top <num> notes.')],
@@ -93,7 +93,7 @@ class Command extends BaseCommand {
row.push(await Folder.noteCount(item.id));
}
row.push(time.unixMsToLocalDateTime(item.user_updated_time));
row.push(time.formatMsToLocal(item.user_updated_time));
}
let title = item.title;
@@ -123,4 +123,4 @@ class Command extends BaseCommand {
}
module.exports = Command;
module.exports = Command;
+1 -5
View File
@@ -1,7 +1,7 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { Folder } = require('lib/models/folder.js');
const Folder = require('lib/models/Folder.js');
const { reg } = require('lib/registry.js');
class Command extends BaseCommand {
@@ -14,10 +14,6 @@ class Command extends BaseCommand {
return _('Creates a new notebook.');
}
aliases() {
return ['mkdir'];
}
async action(args) {
let folder = await Folder.save({ title: args['new-notebook'] }, { userSideValidation: true });
app().switchCurrentFolder(folder);
+1 -1
View File
@@ -1,7 +1,7 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { Note } = require('lib/models/note.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
+1 -1
View File
@@ -1,7 +1,7 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { Note } = require('lib/models/note.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
+3 -3
View File
@@ -1,9 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { BaseModel } = require('lib/base-model.js');
const { Folder } = require('lib/models/folder.js');
const { Note } = require('lib/models/note.js');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
+4 -3
View File
@@ -1,9 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { BaseModel } = require('lib/base-model.js');
const { Folder } = require('lib/models/folder.js');
const { Note } = require('lib/models/note.js');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
@@ -20,6 +20,7 @@ class Command extends BaseCommand {
const name = args['name'];
const item = await app().loadItem('folderOrNote', pattern);
this.encryptionCheck(item);
if (!item) throw new Error(_('Cannot find "%s".', pattern));
const newItem = {
+5 -5
View File
@@ -1,10 +1,10 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { BaseItem } = require('lib/models/base-item.js');
const { Folder } = require('lib/models/folder.js');
const { Note } = require('lib/models/note.js');
const { BaseModel } = require('lib/base-model.js');
const BaseItem = require('lib/models/BaseItem.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const BaseModel = require('lib/BaseModel.js');
const { cliUtils } = require('./cli-utils.js');
class Command extends BaseCommand {
@@ -29,7 +29,7 @@ class Command extends BaseCommand {
const folder = await app().loadItem(BaseModel.TYPE_FOLDER, pattern);
if (!folder) throw new Error(_('Cannot find "%s".', pattern));
const ok = force ? true : await this.prompt(_('Delete notebook "%s"?', folder.title), { booleanAnswerDefault: 'n' });
const ok = force ? true : await this.prompt(_('Delete notebook? All notes and sub-notebooks within this notebook will also be deleted.'), { booleanAnswerDefault: 'n' });
if (!ok) return;
await Folder.delete(folder.id);
+4 -4
View File
@@ -1,10 +1,10 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { BaseItem } = require('lib/models/base-item.js');
const { Folder } = require('lib/models/folder.js');
const { Note } = require('lib/models/note.js');
const { BaseModel } = require('lib/base-model.js');
const BaseItem = require('lib/models/BaseItem.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const BaseModel = require('lib/BaseModel.js');
const { cliUtils } = require('./cli-utils.js');
class Command extends BaseCommand {
+3 -3
View File
@@ -1,9 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { BaseModel } = require('lib/base-model.js');
const { Folder } = require('lib/models/folder.js');
const { Note } = require('lib/models/note.js');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const { sprintf } = require('sprintf-js');
const { time } = require('lib/time-utils.js');
const { uuid } = require('lib/uuid.js');
+15 -12
View File
@@ -1,10 +1,11 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { BaseModel } = require('lib/base-model.js');
const { Folder } = require('lib/models/folder.js');
const { Note } = require('lib/models/note.js');
const { BaseItem } = require('lib/models/base-item.js');
const BaseModel = require('lib/BaseModel.js');
const { Database } = require('lib/database.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const BaseItem = require('lib/models/BaseItem.js');
class Command extends BaseCommand {
@@ -12,16 +13,16 @@ class Command extends BaseCommand {
return 'set <note> <name> [value]';
}
enabled() {
return false;
}
description() {
return _('Sets the property <name> of the given <note> to the given [value].');
}
const fields = Note.fields();
const s = [];
for (let i = 0; i < fields.length; i++) {
const f = fields[i];
if (f.name === 'id') continue;
s.push(f.name + ' (' + Database.enumName('fieldType', f.type) + ')');
}
hidden() {
return true;
return _('Sets the property <name> of the given <note> to the given [value]. Possible properties are:\n\n%s', s.join(', '));
}
async action(args) {
@@ -34,6 +35,8 @@ class Command extends BaseCommand {
if (!notes.length) throw new Error(_('Cannot find "%s".', title));
for (let i = 0; i < notes.length; i++) {
this.encryptionCheck(notes[i]);
let newNote = {
id: notes[i].id,
type_: notes[i].type_,
+1 -1
View File
@@ -1,7 +1,7 @@
const { BaseCommand } = require('./base-command.js');
const { Database } = require('lib/database.js');
const { app } = require('./app.js');
const { Setting } = require('lib/models/setting.js');
const Setting = require('lib/models/Setting.js');
const { _ } = require('lib/locale.js');
const { ReportService } = require('lib/services/report.js');
+56 -21
View File
@@ -2,15 +2,16 @@ const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { OneDriveApiNodeUtils } = require('./onedrive-api-node-utils.js');
const { Setting } = require('lib/models/setting.js');
const { BaseItem } = require('lib/models/base-item.js');
const Setting = require('lib/models/Setting.js');
const BaseItem = require('lib/models/BaseItem.js');
const ResourceFetcher = require('lib/services/ResourceFetcher');
const { Synchronizer } = require('lib/synchronizer.js');
const { reg } = require('lib/registry.js');
const { cliUtils } = require('./cli-utils.js');
const md5 = require('md5');
const locker = require('proper-lockfile');
const fs = require('fs-extra');
const osTmpdir = require('os-tmpdir');
const SyncTargetRegistry = require('lib/SyncTargetRegistry');
class Command extends BaseCommand {
@@ -32,7 +33,6 @@ class Command extends BaseCommand {
options() {
return [
['--target <target>', _('Sync to provided target (defaults to sync.target config value)')],
['--random-failures', 'For debugging purposes. Do not use.'],
];
}
@@ -62,14 +62,44 @@ class Command extends BaseCommand {
});
}
async doAuth(syncTargetId) {
async doAuth() {
const syncTarget = reg.syncTarget(this.syncTargetId_);
this.oneDriveApiUtils_ = new OneDriveApiNodeUtils(syncTarget.api());
const auth = await this.oneDriveApiUtils_.oauthDance({
log: (...s) => { return this.stdout(...s); }
});
this.oneDriveApiUtils_ = null;
return auth;
const syncTargetMd = SyncTargetRegistry.idToMetadata(this.syncTargetId_);
if (this.syncTargetId_ === 3 || this.syncTargetId_ === 4) { // OneDrive
this.oneDriveApiUtils_ = new OneDriveApiNodeUtils(syncTarget.api());
const auth = await this.oneDriveApiUtils_.oauthDance({
log: (...s) => { return this.stdout(...s); }
});
this.oneDriveApiUtils_ = null;
Setting.setValue('sync.' + this.syncTargetId_ + '.auth', auth ? JSON.stringify(auth) : null);
if (!auth) {
this.stdout(_('Authentication was not completed (did not receive an authentication token).'));
return false;
}
return true;
} else if (syncTargetMd.name === 'dropbox') { // Dropbox
const api = await syncTarget.api();
const loginUrl = api.loginUrl();
this.stdout(_('To allow Joplin to synchronise with Dropbox, please follow the steps below:'));
this.stdout(_('Step 1: Open this URL in your browser to authorise the application:'));
this.stdout(loginUrl);
const authCode = await this.prompt(_('Step 2: Enter the code provided by Dropbox:'), { type: 'string' });
if (!authCode) {
this.stdout(_('Authentication was not completed (did not receive an authentication token).'));
return false;
}
const response = await api.execAuthToken(authCode);
Setting.setValue('sync.' + this.syncTargetId_ + '.auth', response.access_token);
api.setAuthToken(response.access_token);
return true;
}
this.stdout(_('Not authentified with %s. Please provide any missing credentials.', syncTargetMd.label));
return false;
}
cancelAuth() {
@@ -87,7 +117,8 @@ class Command extends BaseCommand {
this.releaseLockFn_ = null;
// Lock is unique per profile/database
const lockFilePath = osTmpdir() + '/synclock_' + md5(Setting.value('profileDir'));
// TODO: use SQLite database to do lock?
const lockFilePath = require('os').tmpdir() + '/synclock_' + md5(escape(Setting.value('profileDir'))); // https://github.com/pvorb/node-md5/issues/41
if (!await fs.pathExists(lockFilePath)) await fs.writeFile(lockFilePath, 'synclock');
try {
@@ -117,16 +148,12 @@ class Command extends BaseCommand {
const syncTarget = reg.syncTarget(this.syncTargetId_);
if (!syncTarget.isAuthenticated()) {
if (!await syncTarget.isAuthenticated()) {
app().gui().showConsole();
app().gui().maximizeConsole();
const auth = await this.doAuth(this.syncTargetId_);
Setting.setValue('sync.' + this.syncTargetId_ + '.auth', auth ? JSON.stringify(auth) : null);
if (!auth) {
this.stdout(_('Authentication was not completed (did not receive an authentication token).'));
return cleanUp();
}
const authDone = await this.doAuth();
if (!authDone) return cleanUp();
}
const sync = await syncTarget.synchronizer();
@@ -140,7 +167,6 @@ class Command extends BaseCommand {
cliUtils.redrawDone();
this.stdout(msg);
},
randomFailures: args.options['random-failures'] === true,
};
this.stdout(_('Synchronisation target: %s (%s)', Setting.enumOptionLabel('sync.target', this.syncTargetId_), this.syncTargetId_));
@@ -166,6 +192,15 @@ class Command extends BaseCommand {
}
}
// When using the tool in command line mode, the ResourceFetcher service is
// not going to be running in the background, so the resources need to be
// explicitely downloaded below.
if (!app().hasGui()) {
this.stdout(_('Downloading resources...'));
await ResourceFetcher.instance().fetchAll();
await ResourceFetcher.instance().waitForAllFinished();
}
await app().refreshCurrentFolder();
} catch (error) {
cleanUp();
@@ -189,7 +224,7 @@ class Command extends BaseCommand {
const syncTarget = reg.syncTarget(syncTargetId);
if (syncTarget.isAuthenticated()) {
if (await syncTarget.isAuthenticated()) {
const sync = await syncTarget.synchronizer();
if (sync) await sync.cancel();
} else {
+35 -5
View File
@@ -1,8 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { Tag } = require('lib/models/tag.js');
const { BaseModel } = require('lib/base-model.js');
const Tag = require('lib/models/Tag.js');
const BaseModel = require('lib/BaseModel.js');
const { time } = require('lib/time-utils.js');
class Command extends BaseCommand {
@@ -11,11 +12,19 @@ class Command extends BaseCommand {
}
description() {
return _('<tag-command> can be "add", "remove" or "list" to assign or remove [tag] from [note], or to list the notes associated with [tag]. The command `tag list` can be used to list all the tags.');
return _('<tag-command> can be "add", "remove" or "list" to assign or remove [tag] from [note], or to list the notes associated with [tag]. The command `tag list` can be used to list all the tags (use -l for long option).');
}
options() {
return [
['-l, --long', _('Use long list format. Format is ID, NOTE_COUNT (for notebook), DATE, TODO_CHECKED (for to-dos), TITLE')],
];
}
async action(args) {
let tag = null;
let options = args.options;
if (args.tag) tag = await app().loadItem(BaseModel.TYPE_TAG, args.tag);
let notes = [];
if (args.note) {
@@ -41,7 +50,28 @@ class Command extends BaseCommand {
} else if (command == 'list') {
if (tag) {
let notes = await Tag.notes(tag.id);
notes.map((note) => { this.stdout(note.title); });
notes.map((note) => {
let line = '';
if (options.long) {
line += BaseModel.shortId(note.id);
line += ' ';
line += time.formatMsToLocal(note.user_updated_time);
line += ' ';
}
if (note.is_todo) {
line += '[';
if (note.todo_completed) {
line += 'X';
} else {
line += ' ';
}
line += '] ';
} else {
line += ' ';
}
line += note.title;
this.stdout(line);
});
} else {
let tags = await Tag.all();
tags.map((tag) => { this.stdout(tag.title); });
+5 -3
View File
@@ -1,9 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { BaseModel } = require('lib/base-model.js');
const { Folder } = require('lib/models/folder.js');
const { Note } = require('lib/models/note.js');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const { time } = require('lib/time-utils.js');
class Command extends BaseCommand {
@@ -25,6 +25,8 @@ class Command extends BaseCommand {
for (let i = 0; i < notes.length; i++) {
const note = notes[i];
this.encryptionCheck(note);
let toSave = {
id: note.id,
};
+4 -4
View File
@@ -1,9 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { BaseModel } = require('lib/base-model.js');
const { Folder } = require('lib/models/folder.js');
const { Note } = require('lib/models/note.js');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
const { time } = require('lib/time-utils.js');
const CommandDone = require('./command-done.js');
@@ -19,7 +19,7 @@ class Command extends BaseCommand {
}
async action(args) {
await CommandDone.handleAction(args, false);
await CommandDone.handleAction(this, args, false);
}
}
+4 -4
View File
@@ -1,8 +1,8 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const { BaseModel } = require('lib/base-model.js');
const { Folder } = require('lib/models/folder.js');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
class Command extends BaseCommand {
@@ -18,8 +18,8 @@ class Command extends BaseCommand {
return { data: autocompleteFolders };
}
enabled() {
return false;
compatibleUis() {
return ['cli'];
}
async action(args) {
+1 -1
View File
@@ -1,5 +1,5 @@
const { BaseCommand } = require('./base-command.js');
const { Setting } = require('lib/models/setting.js');
const Setting = require('lib/models/Setting.js');
const { _ } = require('lib/locale.js');
class Command extends BaseCommand {
+1 -1
View File
@@ -2,7 +2,7 @@
const { time } = require('lib/time-utils.js');
const { Logger } = require('lib/logger.js');
const { Resource } = require('lib/models/resource.js');
const Resource = require('lib/models/Resource.js');
const { dirname } = require('lib/path-utils.js');
const { FsDriverNode } = require('./fs-driver-node.js');
const lodash = require('lodash');
+38 -10
View File
@@ -1,6 +1,6 @@
const Folder = require('lib/models/folder.js').Folder;
const Tag = require('lib/models/tag.js').Tag;
const BaseModel = require('lib/base-model.js').BaseModel;
const Folder = require('lib/models/Folder.js');
const Tag = require('lib/models/Tag.js');
const BaseModel = require('lib/BaseModel.js');
const ListWidget = require('tkwidgets/ListWidget.js');
const _ = require('lib/locale.js')._;
@@ -18,26 +18,36 @@ class FolderListWidget extends ListWidget {
this.notesParentType_ = 'Folder';
this.updateIndexFromSelectedFolderId_ = false;
this.updateItems_ = false;
this.trimItemTitle = false;
this.itemRenderer = (item) => {
let output = [];
if (item === '-') {
output.push('-'.repeat(this.innerWidth));
} else if (item.type_ === Folder.modelType()) {
output.push(item.title);
output.push(' '.repeat(this.folderDepth(this.folders, item.id)) + Folder.displayTitle(item));
} else if (item.type_ === Tag.modelType()) {
output.push('[' + item.title + ']');
output.push('[' + Folder.displayTitle(item) + ']');
} else if (item.type_ === BaseModel.TYPE_SEARCH) {
output.push(_('Search:'));
output.push(item.title);
}
// if (item && item.id) output.push(item.id.substr(0, 5));
}
return output.join(' ');
};
}
folderDepth(folders, folderId) {
let output = 0;
while (true) {
const folder = BaseModel.byId(folders, folderId);
if (!folder.parent_id) return output;
output++;
folderId = folder.parent_id;
}
throw new Error('unreachable');
}
get selectedFolderId() {
return this.selectedFolderId_;
}
@@ -73,7 +83,6 @@ class FolderListWidget extends ListWidget {
}
set notesParentType(v) {
//if (this.notesParentType_ === v) return;
this.notesParentType_ = v;
this.updateIndexFromSelectedItemId()
this.invalidate();
@@ -111,6 +120,14 @@ class FolderListWidget extends ListWidget {
this.updateIndexFromSelectedItemId()
this.invalidate();
}
folderHasChildren_(folders, folderId) {
for (let i = 0; i < folders.length; i++) {
let folder = folders[i];
if (folder.parent_id === folderId) return true;
}
return false;
}
render() {
if (this.updateItems_) {
@@ -118,7 +135,18 @@ class FolderListWidget extends ListWidget {
const wasSelectedItemId = this.selectedJoplinItemId;
const previousParentType = this.notesParentType;
let newItems = this.folders.slice();
let newItems = [];
const orderFolders = (parentId) => {
for (let i = 0; i < this.folders.length; i++) {
const f = this.folders[i];
if (f.parent_id === parentId) {
newItems.push(f);
if (this.folderHasChildren_(this.folders, f.id)) orderFolders(f.id);
}
}
}
orderFolders('');
if (this.tags.length) {
if (newItems.length) newItems.push('-');
+2 -2
View File
@@ -1,4 +1,4 @@
const Note = require('lib/models/note.js').Note;
const Note = require('lib/models/Note.js');
const ListWidget = require('tkwidgets/ListWidget.js');
class NoteListWidget extends ListWidget {
@@ -10,7 +10,7 @@ class NoteListWidget extends ListWidget {
this.updateIndexFromSelectedNoteId_ = false;
this.itemRenderer = (note) => {
let label = note.title; // + ' ' + note.id;
let label = Note.displayTitle(note); // + ' ' + note.id;
if (note.is_todo) {
label = '[' + (note.todo_completed ? 'X' : ' ') + '] ' + label;
}
+1 -1
View File
@@ -1,4 +1,4 @@
const Note = require('lib/models/note.js').Note;
const Note = require('lib/models/Note.js');
const TextWidget = require('tkwidgets/TextWidget.js');
class NoteMetadataWidget extends TextWidget {
+17 -3
View File
@@ -1,5 +1,6 @@
const Note = require('lib/models/note.js').Note;
const Note = require('lib/models/Note.js');
const TextWidget = require('tkwidgets/TextWidget.js');
const { _ } = require('lib/locale.js');
class NoteWidget extends TextWidget {
@@ -32,11 +33,24 @@ class NoteWidget extends TextWidget {
this.reloadNote();
}
welcomeText() {
return _('Welcome to Joplin!\n\nType `:help shortcuts` for the list of keyboard shortcuts, or just `:help` for usage information.\n\nFor example, to create a notebook press `mb`; to create a note press `mn`.');
}
reloadNote() {
if (this.noteId_) {
if (!this.noteId_ && !this.notes.length) {
this.text = this.welcomeText();
this.scrollTop = 0;
} else if (this.noteId_) {
this.doAsync('loadNote', async () => {
this.note_ = await Note.load(this.noteId_);
this.text = this.note_ ? this.note_.title + "\n\n" + this.note_.body : '';
if (this.note_ && this.note_.encryption_applied) {
this.text = _('One or more items are currently encrypted and you may need to supply a master password. To do so please type `e2ee decrypt`. If you have already supplied the password, the encrypted items are being decrypted in the background and will be available soon.');
} else {
this.text = this.note_ ? this.note_.title + "\n\n" + this.note_.body : '';
}
if (this.lastLoadedNoteId_ !== this.noteId_) this.scrollTop = 0;
this.lastLoadedNoteId_ = this.noteId_;
});
+11 -2
View File
@@ -2,6 +2,7 @@ const BaseWidget = require('tkwidgets/BaseWidget.js');
const chalk = require('chalk');
const termutils = require('tkwidgets/framework/termutils.js');
const stripAnsi = require('strip-ansi');
const { handleAutocompletion } = require('../autocompletion.js');
class StatusBarWidget extends BaseWidget {
@@ -41,6 +42,7 @@ class StatusBarWidget extends BaseWidget {
};
if ('cursorPosition' in options) this.promptState_.cursorPosition = options.cursorPosition;
if ('secure' in options) this.promptState_.secure = options.secure;
this.promptState_.promise = new Promise((resolve, reject) => {
this.promptState_.resolve = resolve;
@@ -104,13 +106,19 @@ class StatusBarWidget extends BaseWidget {
this.term.showCursor(true);
const isSecurePrompt = !!this.promptState_.secure;
let options = {
cancelable: true,
history: this.history,
default: this.promptState_.initialText,
autoComplete: handleAutocompletion,
autoCompleteHint : true,
autoCompleteMenu : true,
};
if ('cursorPosition' in this.promptState_) options.cursorPosition = this.promptState_.cursorPosition;
if (isSecurePrompt) options.echoChar = true;
this.inputEventEmitter_ = this.term.inputField(options, (error, input) => {
let resolveResult = null;
@@ -125,7 +133,8 @@ class StatusBarWidget extends BaseWidget {
resolveResult = input ? input.trim() : input;
// Add the command to history but only if it's longer than one character.
// Below that it's usually an answer like "y"/"n", etc.
if (input && input.length > 1) this.history_.push(input);
const isConfigPassword = input.indexOf('config ') >= 0 && input.indexOf('password') >= 0;
if (!isSecurePrompt && input && input.length > 1 && !isConfigPassword) this.history_.push(input);
}
}
@@ -159,4 +168,4 @@ class StatusBarWidget extends BaseWidget {
}
module.exports = StatusBarWidget;
module.exports = StatusBarWidget;
+3 -4
View File
@@ -1,6 +1,6 @@
const fs = require('fs-extra');
const { wrap } = require('lib/string-utils.js');
const { Setting } = require('lib/models/setting.js');
const Setting = require('lib/models/Setting.js');
const { fileExtension, basename, dirname } = require('lib/path-utils.js');
const { _, setLocale, languageCode } = require('lib/locale.js');
@@ -53,9 +53,8 @@ function renderCommandHelp(cmd, width = null) {
desc.push(label);
}
if (md.description) {
desc.push(md.description());
}
const description = Setting.keyDescription(md.key, 'cli');
if (description) desc.push(description);
desc.push(_('Type: %s.', md.isEnum ? _('Enum') : Setting.typeToString(md.type)));
if (md.isEnum) desc.push(_('Possible values: %s.', Setting.enumOptionsDoc(md.key, '%s (%s)')));
+30 -12
View File
@@ -1,26 +1,36 @@
#!/usr/bin/env node
// Loading time: 20170803: 1.5s with no commands
// Make it possible to require("/lib/...") without specifying full path
require('app-module-path').addPath(__dirname);
const compareVersion = require('compare-version');
const nodeVersion = process && process.versions && process.versions.node ? process.versions.node : '0.0.0';
if (compareVersion(nodeVersion, '8.0.0') < 0) {
console.error('Joplin requires Node 8+. Detected version ' + nodeVersion);
process.exit(1);
}
const { app } = require('./app.js');
const { BaseModel } = require('lib/base-model.js');
const { Folder } = require('lib/models/folder.js');
const { Resource } = require('lib/models/resource.js');
const { BaseItem } = require('lib/models/base-item.js');
const { Note } = require('lib/models/note.js');
const { Tag } = require('lib/models/tag.js');
const { NoteTag } = require('lib/models/note-tag.js');
const { Setting } = require('lib/models/setting.js');
const Folder = require('lib/models/Folder.js');
const Resource = require('lib/models/Resource.js');
const BaseItem = require('lib/models/BaseItem.js');
const Note = require('lib/models/Note.js');
const Tag = require('lib/models/Tag.js');
const NoteTag = require('lib/models/NoteTag.js');
const MasterKey = require('lib/models/MasterKey');
const Setting = require('lib/models/Setting.js');
const { Logger } = require('lib/logger.js');
const { FsDriverNode } = require('lib/fs-driver-node.js');
const { shimInit } = require('lib/shim-init-node.js');
const { _ } = require('lib/locale.js');
const { FileApiDriverLocal } = require('lib/file-api-driver-local.js');
const EncryptionService = require('lib/services/EncryptionService');
const fsDriver = new FsDriverNode();
Logger.fsDriver_ = fsDriver;
Resource.fsDriver_ = fsDriver;
EncryptionService.fsDriver_ = fsDriver;
FileApiDriverLocal.fsDriver_ = fsDriver;
// That's not good, but it's to avoid circular dependency issues
// in the BaseItem class.
@@ -29,6 +39,7 @@ BaseItem.loadClass('Folder', Folder);
BaseItem.loadClass('Resource', Resource);
BaseItem.loadClass('Tag', Tag);
BaseItem.loadClass('NoteTag', NoteTag);
BaseItem.loadClass('MasterKey', MasterKey);
Setting.setConstant('appId', 'net.cozic.joplin-cli');
Setting.setConstant('appType', 'cli');
@@ -56,6 +67,13 @@ process.stdout.on('error', function( err ) {
});
application.start(process.argv).catch((error) => {
console.error(_('Fatal error:'));
console.error(error);
if (error.code == 'flagError') {
console.error(error.message);
console.error(_('Type `joplin help` for usage information.'));
} else {
console.error(_('Fatal error:'));
console.error(error);
}
process.exit(1);
});
-3
View File
@@ -1,3 +0,0 @@
#/bin/bash
CLIENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
NODE_PATH="$CLIENT_DIR/build" node "$CLIENT_DIR/build/build-translation.js" --silent
-4
View File
@@ -1,4 +0,0 @@
#!/bin/bash
set -e
ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
"$ROOT_DIR/build.sh" && NODE_PATH="$ROOT_DIR/build" node "$ROOT_DIR/build/build-website.js"
+2 -53
View File
@@ -4,57 +4,6 @@ ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
BUILD_DIR="$ROOT_DIR/build"
rsync -a --exclude "node_modules/" "$ROOT_DIR/app/" "$BUILD_DIR/"
rsync -a "$ROOT_DIR/../ReactNativeClient/lib/" "$BUILD_DIR/lib/"
rsync -a --delete "$ROOT_DIR/../ReactNativeClient/lib/" "$BUILD_DIR/lib/"
cp "$ROOT_DIR/package.json" "$BUILD_DIR"
chmod 755 "$BUILD_DIR/main.js"
cd "$BUILD_DIR"
node build-translation.js --silent
# ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# # require('cache-require-paths');
# mkdir -p "$ROOT_DIR/build"
# rm -f "$ROOT_DIR/app/lib"
# ln -s "$ROOT_DIR/../ReactNativeClient/lib" "$ROOT_DIR/app"
# npm run build || exit 1
# # Files under app/gui are in ES6 already but I cannot get Babel
# # to ignore them, so copy them back to the build directory.
# rsync -a "$ROOT_DIR/app/gui/" "$ROOT_DIR/build/gui/"
# cp "$ROOT_DIR/package.json" "$ROOT_DIR/build"
# chmod 755 "$ROOT_DIR/build/main.js"
# # if [[ ! -f "$ROOT_DIR/package.json.md5" ]]; then
# # "$ROOT_DIR/update-package-md5.sh"
# # fi
# # Add modules on top of main.js:
# # - cache-require-paths to cache require() calls
# # - app-module-path so that lib/something paths can be resolved.
# #PACKAGE_MD5=$(cat "$ROOT_DIR/package.json.md5")
# MAIN_PATH="$ROOT_DIR/build/main.js"
# #LINE_TO_ADD="var osTmpdir = require('os-tmpdir'); process.env.CACHE_REQUIRE_PATHS_FILE = osTmpdir() + '/joplin-module-path-cache-$PACKAGE_MD5'; require('cache-require-paths'); require('app-module-path').addPath(__dirname);"
# LINE_TO_ADD="require('app-module-path').addPath(__dirname);"
# RESULT="$(grep "$LINE_TO_ADD" "$MAIN_PATH")"
# if [[ -z "$RESULT" ]]; then
# echo "Adding extra modules..."
# sed -i "2i $LINE_TO_ADD" "$MAIN_PATH"
# else
# echo "Extra modules already added."
# fi
# NODE_PATH="$ROOT_DIR/build" node "$ROOT_DIR/build/build-translation.js" --silent
chmod 755 "$BUILD_DIR/main.js"
-6
View File
@@ -1,6 +0,0 @@
#!/bin/bash
CLIENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
"$CLIENT_DIR/publish.sh"
npm install -g joplin
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+818 -124
View File
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+1108 -193
View File
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
Loaded 100 of 1387 files, more files were not shown because too many files have changed in this diff. Show more