1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-08-24 20:19:10 +02:00

Compare commits

...

1185 Commits

Author SHA1 Message Date
Laurent Cozic
71a3a0176e Android release v1.0.294 2019-07-30 09:42:09 +02:00
Laurent Cozic
a363d119cf Electron release v1.0.162 2019-07-30 09:37:23 +02:00
Laurent Cozic
ff08bdbc0b Merge branch 'master' of github.com:laurent22/joplin 2019-07-30 09:35:49 +02:00
Laurent Cozic
71efff6827 Linter update (#1777)
* Update eslint config

* Applied linter to lib

* Applied eslint config to CliClient/app

* Removed prettier due to https://github.com/prettier/prettier/pull/4765

* First pass on test units

* Applied linter config to test units

* Applied eslint config to clipper

* Applied to plugin dir

* Applied to root of ElectronClient

* Applied on RN root

* Applied on CLI root

* Applied on Clipper root

* Applied config to tools

* test hook

* test hook

* test hook

* Added pre-commit hook

* Applied rule no-trailing-spaces

* Make sure root packages are installed when installing sub-dir

* Added doc
2019-07-30 09:35:42 +02:00
Laurent Cozic
7595fe4a8c Merge branch 'master' of github.com:laurent22/joplin 2019-07-30 09:32:34 +02:00
Laurent Cozic
7697e75466 Update eslint config 2019-07-29 21:23:14 +02:00
Helmut K. C. Tessarek
b8fbaa2029 Update en_US.po 2019-07-29 11:34:52 -04:00
Helmut K. C. Tessarek
38bc750ecf Update de_DE.po 2019-07-29 11:34:02 -04:00
Laurent Cozic
6cfacb1a48 Second pass at linting lib dir 2019-07-29 15:58:33 +02:00
Laurent Cozic
0b9078d034 config 2019-07-29 15:58:17 +02:00
Laurent Cozic
86dc72b204 First pass at linting lib dir 2019-07-29 15:43:53 +02:00
Laurent Cozic
64b7bc3d62 More config 2019-07-29 15:43:39 +02:00
Laurent Cozic
086f9e1123 Started applying config to Electron app 2019-07-29 14:13:23 +02:00
Laurent Cozic
4fe70fe8ee Ignore some files 2019-07-29 14:13:09 +02:00
Laurent Cozic
95a1f40404 Tweaked linter config 2019-07-29 14:10:07 +02:00
Laurent Cozic
88f04509ee Also added prettier config 2019-07-29 13:48:43 +02:00
Laurent Cozic
7eebd544d6 Fixed eslint 2019-07-29 12:55:50 +02:00
Laurent Cozic
e369a8decf Added eslint config 2019-07-29 12:55:39 +02:00
Helmut K. C. Tessarek
ad8054ba4b Desktop: Better handling of adding the title to print and export to PDF (#1744)
fixes #1743
2019-07-29 12:33:40 +02:00
J0J0 T
b47cb4e29a Desktop, Cli: Improved bold formatting support in Enex import (#1708)
* Dekstop,CLI: enex_to_md: add html/md test file pairs

* one pair for basic text formatting tags: strong, b, i, em
* and one using span tags with inline styles for bold formatting

Note: The html files include the Evernote-typical "linebreak tags inside of separate <div> tags"
to represent empty lines!

* Desktop,Cli: enex_to_md: support bold in span tags using inline styles

* function isSpanWithStyle() checks if further processing of a span tag
  makes sense
* function isSpanStyleBold() checks if bold formatting via styles is
  used - a similar function could be written for each span-inline-style-format
  that should be supported

* Desktop,Cli: enex_to_md: fix saving span attrs in state object

pushing attributes of span tag to state object now
happens outside of isSpanWithStyle()
2019-07-29 12:25:25 +02:00
Laurent Cozic
8c42ddf6c3 Merge branch 'master' of github.com:laurent22/joplin 2019-07-29 12:17:33 +02:00
tfinnberg
f7fcabbf41 Desktop: Create fileURLs via drag and drop (#1653)
* enable drag and drop fileURLs

* fix windows fileURL syntax

* introduce encodeURI function

* fixed encoding issue

* use path-utils.js to deal with fileURL path conversion

* add changes as requested

* Minor rewording 'On the' -> 'In the', additional info about attaching files

* change call of toFileProtocolPath

* enable test script to check syntax for all OS-platforms
2019-07-29 12:16:47 +02:00
Shane Kilkelly
38a51070fc Desktop: add depthColor for solarized light and dark themes (#1765) 2019-07-29 12:08:49 +02:00
Laurent Cozic
44fa099a77 Desktop: No longer crash if certain theme properties are not set 2019-07-29 12:05:58 +02:00
sumomo-99
af6f3999df Update ja_JP.po (#1776) 2019-07-29 11:55:02 +02:00
Laurent Cozic
6fbeb35951 Update translations 2019-07-29 11:52:19 +02:00
Laurent Cozic
b2eadffde0 Using British English by default for consistency 2019-07-29 11:51:09 +02:00
Laurent Cozic
200ba2775f All: Resolves #1459: Make translation files smaller by not including untranslated strings. Also add percentage translated to config screen. 2019-07-29 11:47:50 +02:00
Laurent Cozic
39ba021a79 Merge branch 'master' of github.com:laurent22/joplin 2019-07-29 10:12:45 +02:00
Laurent Cozic
2c6b291b9b Desktop: Only repeat failed requests up to 3 times during sync 2019-07-29 10:12:23 +02:00
Devon Zuegel
770846be2e Doc: Add docs to clarify how to test (#1775) 2019-07-29 09:42:10 +02:00
Laurent Cozic
af4aa01b75 Mobile: Upgraded packages to fix security issues 2019-07-28 23:03:54 +02:00
Laurent Cozic
1bf2bec805 CLI v1.0.141 2019-07-28 22:54:45 +02:00
Laurent Cozic
3a41ac9be0 CLI: Upgraded packages to fix security issues 2019-07-28 22:54:29 +02:00
Laurent Cozic
f2c9cdd7f1 Desktop: Upgraded packages to fix security issue 2019-07-28 22:48:30 +02:00
Laurent Cozic
058f418cc7 Tools: Do not display full release info when releasing Android app 2019-07-28 22:43:33 +02:00
Laurent Cozic
5fa84b0dfb Android release v1.0.293 2019-07-28 18:36:36 +02:00
Laurent Cozic
ec8ec3e38d Android release v1.0.292 2019-07-28 18:34:44 +02:00
Laurent Cozic
0e6190b42b Tools: Allow creating multiple Android releases 2019-07-28 18:33:48 +02:00
Laurent Cozic
fcfee36c8c Android release v1.0.291 2019-07-28 18:32:33 +02:00
Laurent Cozic
1d3d3b99bb Tools: Allow creating multiple Android releases 2019-07-28 18:31:31 +02:00
Laurent Cozic
2f80bf9647 Android release v1.0.290 2019-07-28 18:29:07 +02:00
Laurent Cozic
675a4c795f Android release v1.0.289 2019-07-28 18:22:33 +02:00
Laurent Cozic
ed3361df57 Merge branch 'master' of github.com:laurent22/joplin 2019-07-28 18:22:33 +02:00
Laurent Cozic
87396572e4 Tools: Allow creating multiple Android releases 2019-07-28 18:19:41 +02:00
Woosuk Park
143b610291 Korean Language Support (#1769)
* Korean Language Support

Korean Language 100% Translated, but something is roughted. soon fix it ;)

* some improved

Some Improved

* Improve v2

some polished

* Ok, now Completed

For Now, Completed Polish(Change Respect of Users, and several fixing & polishing) + 100% Translated. Ready to Shipping
2019-07-26 23:18:47 -04:00
Laurent Cozic
c952c4591f Android release v1.0.284 2019-07-26 23:11:08 +02:00
Laurent Cozic
e418701e68 Mobile: Fixes #1764 (maybe): Upgrading React-Native to 0.59.10 to try to fix crash in certain Samsung phone due to 64-bit version
See also:

https://github.com/facebook/react-native/issues/24261#issuecomment-514332549
2019-07-26 23:08:11 +02:00
Laurent Cozic
6fc0ee3062 Android release v1.0.283 2019-07-26 21:26:24 +02:00
Laurent Cozic
7b42d7d2c8 Mobile: Fixed freeze when last notebook was the conflict one and there are no longer any conflicted notes 2019-07-26 21:23:18 +02:00
Mr. Traduttore
eb083ae925 [Mobile/Desktop] Changed cancel, directory and delete translations (ITALIAN) (#1759)
* Changed cancel and delete translation (ITALIAN)

Changed cancel from "cancellare" to "annullare" (whic is used more to express the cancelling operations) and delete from "cancellare" to "eliminare". I think that doing this will help people understanding what is the main task of these option since they use the same verbs in the current translation.

* Update it_IT.po
2019-07-22 14:15:11 +01:00
Helmut K. C. Tessarek
905e65365f Update en_US.po 2019-07-22 06:28:04 -04:00
Helmut K. C. Tessarek
a0c04c0e6a Update de_DE.po 2019-07-22 06:27:55 -04:00
Laurent Cozic
635baa5b6f Updated translations 2019-07-22 00:02:25 +00:00
Laurent Cozic
7591b614c5 typos 2019-07-21 22:27:13 +00:00
Helmut K. C. Tessarek
5b5ec682c0 Update en_US.po 2019-07-21 22:18:35 -04:00
Helmut K. C. Tessarek
b0a80ddf65 Update de_DE.po 2019-07-21 22:17:25 -04:00
Laurent Cozic
893531f8c7 Desktop: Make depthColor theme property optional 2019-07-21 17:30:36 +01:00
Shane Kilkelly
3d498e7a75 Desktop: Add solarized themes to desktop client (#1733) 2019-07-21 17:27:42 +01:00
Laurent Cozic
45ad201132 Mobile: Fixed colour of placeholder text in dark theme 2019-07-21 17:16:15 +01:00
Laurent Cozic
6e64b950ca Merge branch 'master' of github.com:laurent22/joplin 2019-07-21 17:05:09 +01:00
Laurent Cozic
6d4e67769c Desktop: Fixed Back button icon on Config screen 2019-07-21 16:49:53 +01:00
Laurent Cozic
3aa0394062 Mobile: Fixes #1684: Trying to fix problem when attaching file that contains spaces in name 2019-07-21 14:39:52 +01:00
Laurent Cozic
b65767a43c Mobile: Fixes #1746: Populate note side menu when swiping right 2019-07-21 14:11:30 +01:00
Laurent Cozic
3a9817d11e Android release v1.0.282 2019-07-21 14:04:18 +01:00
Laurent Cozic
6a42ef50ec All: Fixes #1732: Fixed note order when dragging a note outside a notebook 2019-07-21 13:55:25 +01:00
Laurent Cozic
35b6b3fc46 Merge branch 'clipper_html_mode' 2019-07-21 13:46:54 +01:00
Laurent Cozic
f5515e3496 Doc: Fixed template doc 2019-07-21 09:07:33 +01:00
Laurent Cozic
fd509bb4af Doc: Fixed template table 2019-07-21 08:57:50 +01:00
Laurent Cozic
b21c0f5d69 Doc: Fixed website templating 2019-07-21 08:55:44 +01:00
Laurent Cozic
1033b3626f Update translations 2019-07-21 08:49:49 +01:00
Laurent Cozic
f407c8d756 Added Serbian translation - thanks Željko! 2019-07-21 08:19:32 +01:00
Laurent Cozic
6436dff94b Api: Fixed handling of markup language 2019-07-21 00:31:29 +01:00
Laurent Cozic
3f7b4e10b6 Merge branch 'master' into clipper_html_mode 2019-07-21 00:24:25 +01:00
Laurent Cozic
36168a9a5d Use regex instead of jsdom for compability with mobile app 2019-07-21 00:18:51 +01:00
Helmut K. C. Tessarek
118540c733 add config for stale bot 2019-07-20 17:41:49 -04:00
Caleb John
cd5d412c69 Desktop: Added support for templates (#1647)
* First pass of adding support for templates

* remove default value from template prompt

* Add template placeholder text

* Add mustache templates with datetime support for new notes

* Moved template code to utils, added separate prompt for templates

* Add templates to menu and allow for keyboad only use

* update template prompt for dark theme

* update with laurents suggestions, add refresh button

* revert template command, remove new note prompt
2019-07-20 22:13:10 +01:00
Helmut K. C. Tessarek
e29fb3eb66 new issue templates 2019-07-19 15:01:32 -04:00
Laurent Cozic
8ff1668c8f Minor changes 2019-07-19 18:18:05 +01:00
Laurent Cozic
14fc73b388 Use markupToHtml everywhere 2019-07-19 17:48:38 +01:00
Laurent Cozic
f34330f101 Doc: Contributor list on rows of 5 2019-07-18 20:46:01 +01:00
Laurent Cozic
2ba50321d4 Doc: Added contributors 2019-07-18 18:36:29 +01:00
Laurent Cozic
38177c7e54 All: Optimised loading of multiple items 2019-07-17 22:50:12 +01:00
Laurent Cozic
687e308a73 Desktop: Added markup language to property dialog 2019-07-17 22:49:40 +01:00
Laurent Cozic
490db0db62 Desktop: Disable Markdown actions for HTML notes 2019-07-17 22:49:12 +01:00
Laurent Cozic
feb5f17479 Clipper: Generate better HTML so that it loads faster in text editor 2019-07-17 22:48:13 +01:00
Laurent Cozic
fbb3543818 Desktop: Fixed race condition when loading a note while another one is still loading. Improved performance when loading large note. 2019-07-17 22:42:53 +01:00
Laurent Cozic
30d0dfb424 Clipper: Fixed sizing issue when importing HTML pages 2019-07-16 22:58:44 +01:00
Laurent Cozic
7239a2013c Clipper: Improved clipping of images in HTML mode 2019-07-16 22:23:04 +01:00
Laurent Cozic
2361c5a5e7 Clipper: Better handling of images when multiple images have the same source but with different dimensions 2019-07-16 21:47:44 +01:00
Laurent Cozic
38e8a881d5 More refactoring to easily handle multiple renderers 2019-07-16 19:05:47 +01:00
Helmut K. C. Tessarek
d45d1b4225 Mobile: Show correct time/date (as specified in settings) for note properties (#1749) 2019-07-16 15:11:58 +01:00
Helmut K. C. Tessarek
e9c88dfdc4 Update de_DE.po 2019-07-15 23:21:46 -04:00
Laurent Cozic
fbb0ac5892 Clipper: Refactored image rules to re-use more code 2019-07-15 20:43:28 +00:00
Helmut K. C. Tessarek
7a902bbd25 Desktop, Mobile: Update Markdown plugins: footnote, toc-done-right, anchor (#1741) 2019-07-15 01:29:44 +01:00
Laurent Cozic
c75618eb8f Clipper: Minor fixes 2019-07-15 01:17:17 +01:00
Laurent Cozic
74ee629266 Clipper: Fixed issue with relative links when importing HTML 2019-07-15 00:44:45 +01:00
Caleb John
8ecc58e1bf Desktop: Add support for cinnamon to install script (#1738) 2019-07-15 00:29:09 +01:00
Laurent Cozic
71078637db Android release v1.0.281 2019-07-14 19:56:46 +01:00
Laurent Cozic
5460a977b1 Clipper: Fixed issues related to viewing images and to HTML comments that were incorrectly being displayed 2019-07-14 19:52:57 +01:00
Laurent Cozic
a0dd0702fb Clipper: Adding support for clipping page as HTML 2019-07-14 16:00:02 +01:00
Laurent Cozic
3e48992eb4 Clipper: Disabled preview for now as too many problems with it and not so useful 2019-07-14 09:46:06 +01:00
Laurent Cozic
bdb31f2890 Mobile: Fixed issue that could slow down app when displaying large list of notes 2019-07-13 23:55:28 +01:00
Laurent Cozic
0255546ae1 Mobile: Auto-save after toggling to-do state 2019-07-13 23:49:35 +01:00
Laurent Cozic
d066350eea Electron release v1.0.161 2019-07-13 19:18:34 +01:00
Laurent Cozic
a1e3260309 Clipper: Resolves #1160: Allow importing MathJax formulas, in particular from StackExchange 2019-07-13 19:17:28 +01:00
Laurent Cozic
be1f57a8a6 Desktop: Fixes #1727: Keep back button when opening a note link from the search results 2019-07-13 17:58:59 +01:00
Laurent Cozic
ca4dfe0f0f Desktop: Fixes #1724: Improved note selection and scrolling when moving a note to a different notebook 2019-07-13 17:40:09 +01:00
Laurent Cozic
fa69957d3f Desktop, CLI: Fixes #1723: Import Evernote audio files correctly 2019-07-13 17:26:47 +01:00
Laurent Cozic
f7203ed7e2 Desktop: Fixes #1720: Fixed issue with certain commands being repeated in some cases 2019-07-13 16:57:33 +01:00
Laurent Cozic
331858bd4f Desktop: Fixes #1704: Set note title to correct size when zoom is enabled 2019-07-13 16:46:52 +01:00
Laurent Cozic
4d2c9523a3 Desktop: Fixes #1699: Hide toolbar button text when it is below a certain size 2019-07-13 16:42:57 +01:00
Laurent Cozic
4d9d84a8f3 Merge branch 'master' of github.com:laurent22/joplin 2019-07-13 15:58:06 +01:00
Laurent Cozic
ec1089870f All: Fixes #1694: When deleting resource from sync target also delete associated data blob 2019-07-13 15:57:53 +01:00
Helmut K. C. Tessarek
dbedefc021 Desktop: Fixes #1342: Add override for ACE editor shortcut Ctrl+K (#1705) 2019-07-13 14:52:32 +01:00
Kirill Goncharov
f6b0da3f5e Android: Check filesystem permission if filesystem sync target is selected (#1665)
* Android: Check filesystem permission if filesystem sync target is selected

* Android: Change permission error text, don't prevent user from saving settings
2019-07-13 14:51:54 +01:00
Laurent Cozic
85bf89fd97 Android release v1.0.279 2019-07-12 19:44:23 +01:00
Laurent Cozic
c2a80b12f0 Mobile: More rendering optimisations to make animations smoother and to allow typing fast on large notes 2019-07-12 19:36:12 +01:00
Laurent Cozic
981c97cca5 Mobile: Optimising screen rendering to make text input faster 2019-07-12 18:32:08 +01:00
Laurent Cozic
091cbc5355 Mobile: Added sync button animation; Added notebook header; Improved layout of Edit Notebook screen 2019-07-12 18:07:47 +01:00
Laurent Cozic
e5a8114887 Mobile: Added icons to left sidebar 2019-07-11 18:44:26 +01:00
Laurent Cozic
4779fc6f43 Mobile: Remove search and side menu button from config screen 2019-07-11 18:26:04 +01:00
Laurent Cozic
86e7daaec4 Mobile: Cleaned context menu and moved options and metadata to side menu bar 2019-07-11 18:23:29 +01:00
Laurent Cozic
cab73a26e7 Mobile: Adding note side menu 2019-07-11 17:43:55 +01:00
Laurent Cozic
554ddb3b51 Mobile: Grouped file attachment action under one menu 2019-07-11 17:41:13 +01:00
Laurent Cozic
3b22bdb8ae Doc: Fixed Linux install command line for website 2019-07-10 18:18:31 +01:00
Laurent Cozic
5fdd07679e All: Fix: Only log master key ID 2019-07-10 17:35:08 +01:00
Laurent Cozic
69f75a1520 Doc: Updated old links 2019-07-10 17:00:10 +01:00
Laurent Cozic
f9b7acb8b1 Merge branch 'master' of github.com:laurent22/joplin 2019-07-10 16:41:20 +01:00
Laurent Cozic
91f700ad54 Doc: Updated email addresses 2019-07-10 16:41:13 +01:00
Robert
966aca7753 Update nl_NL.po (#1709)
* Update nl_NL.po

* Added ampersands to main menu items 

for the nl-nl translation
2019-07-05 13:00:53 -04:00
Helmut K. C. Tessarek
4de8816ed5 Merge pull request #1710 from Marmo/Marmo-translation-20190705
Translation: minor fixes (de_DE)
2019-07-05 11:26:32 -04:00
Marmo
bea68a1056 Minor translation fixes (de_DE) 2019-07-05 13:54:11 +02:00
Laurent Cozic
6fea7116b6 Mobile: Removed now unneeded Welcome screen 2019-06-29 00:24:00 +01:00
Laurent Cozic
2955914ca5 Mobile: Fixes #1690 (maybe): Process less data simultaneously when building search index to prevent out of memory errors 2019-06-28 23:49:43 +01:00
Laurent Cozic
fd150b5b9d Update website 2019-06-28 16:08:50 +01:00
Laurent Cozic
334ffad196 Doc: Added link to Mastodon feed 2019-06-28 16:04:05 +01:00
Charles
a796a9d179 API: Support is_todo property to allow making a note a todo (#1688) 2019-06-28 13:46:55 +01:00
Helmut K. C. Tessarek
917dcea28a use a command to get the current branch that works with older git versions
closes #1695
2019-06-28 05:02:21 -04:00
Laurent Cozic
c901228dc5 Merge branch 'master' of github.com:laurent22/joplin 2019-06-28 00:51:14 +01:00
Laurent Cozic
da21580785 Mobile: Added 'All notes' screen; Cleaned up header bar buttons; Removed 'body' from note preview object to improve memory usage 2019-06-28 00:51:02 +01:00
Laurent Cozic
4d92187327 Mobile: Added button to fix search engine index 2019-06-28 00:48:52 +01:00
Helmut K. C. Tessarek
207d433fb3 Desktop: Improved: Show git branch and hash in About dialog (#1692)
* show git branch and hash in About dialog

This additional info will only be shown, if the code is not an official release.

An official release is calculated as follows:
- current commit has a tag
- the tag contains the version number of the package

However, the information will always be printed to the console.

* info will now always be shown in About dialog (if available)

ElectronClient/app/compile-package-info.js: added warning
ElectronClient/app/app.js: push info conditionally to the message array

* use sprintf syntax
2019-06-27 15:04:02 +01:00
Laurent Cozic
ffc311d7bd Mobile: Moved slider value to the left so that it is visible while dragging 2019-06-27 00:05:17 +01:00
Laurent Cozic
a1e8e71359 Mobile: Added auto-save 2019-06-26 23:26:26 +01:00
Laurent Cozic
7942e74dc6 Mobile: Fixed field focus logic 2019-06-26 23:21:12 +01:00
Laurent Cozic
c4e21c2b6a Mobile: Added placeholders for note title and body, and focus body by default for notes 2019-06-26 23:00:25 +01:00
Laurent Cozic
0a06aa6f9f Mobile: When inside a note, do not show side menu and search buttons 2019-06-26 22:54:09 +01:00
Laurent Cozic
f985cfa25c Mobile: Removed arrow icon as it is rendered weirdly on device 2019-06-26 18:51:12 +01:00
Laurent Cozic
6e143aef5c Android release v1.0.277 2019-06-26 18:40:43 +01:00
Laurent Cozic
bf16aa6192 All: Better logging in case of error while indexing search 2019-06-26 18:36:42 +01:00
Laurent Cozic
d96c58d192 Mobile: Edit and delete notebooks by long-pressing them, and removed context menu on note lists 2019-06-26 18:28:09 +01:00
Laurent Cozic
e7e0264411 Mobile: Improved side menu: Made button panel fixed at the bottom, and added dark overlay over right side content 2019-06-26 18:05:37 +00:00
Laurent Cozic
430a11282b Mobile: Moved 'New notebook' button to sidebar 2019-06-26 01:10:15 +01:00
Laurent Cozic
9957b2798c Mobile: Moved config menu item to button on side bar 2019-06-26 00:35:26 +01:00
Laurent Cozic
2c5b0010bf Mobile: Removed concept of Advanced Options and move tools to Config screen to clean up context menu 2019-06-26 00:13:13 +01:00
Laurent Cozic
1e3c6ed98c Desktop: When doing local search do not split query into words 2019-06-25 23:09:53 +01:00
Laurent Cozic
484f290eb0 Clipper: Improved clipping selection by removing unecessary elements 2019-06-25 22:11:12 +01:00
Helmut K. C. Tessarek
06ad539941 Clipper release v1.0.17 2019-06-23 23:23:07 -04:00
Laurent Cozic
5b84e80ac4 Clipper: Fixes #1214: Include data from form fields when clipping forms 2019-06-24 00:57:39 +01:00
Laurent Cozic
ca0f349348 Merge branch 'master' of github.com:laurent22/joplin 2019-06-24 00:00:24 +01:00
Laurent Cozic
d79089aea3 Clipper: Fixes #1682: Do not clip elements that should be hidden 2019-06-24 00:00:11 +01:00
Eugene Odeluga
03611ad5ca Desktop: For Ubuntu users, added unity to if condition for desktop icon creation (#1683) 2019-06-23 22:24:58 +01:00
Helmut K. C. Tessarek
c78c1cd3cf Clipper release v1.0.16 2019-06-23 03:06:34 -04:00
水货
55afa7b5b7 Update zh_CN.po (#1681) 2019-06-23 03:00:41 -04:00
Laurent Cozic
a6c407b62b Doc: Mentioned Goto Anything feature 2019-06-22 19:06:54 +01:00
Laurent Cozic
21897a3cd4 Clipper: Resolves #1669: Handle special case of code block used on Microsoft website 2019-06-22 18:57:41 +01:00
Laurent Cozic
5796dd2098 Update translations 2019-06-22 13:10:13 +01:00
abonte
d050071437 update it_IT.po (#1680) 2019-06-22 12:45:35 +01:00
Laurent Cozic
eaf8510f49 Doc: Added requirement for unit tests 2019-06-22 12:44:31 +01:00
Laurent Cozic
6ee2595dce Desktop: Fixes #1676: Preserve user timestamps when adding note via API 2019-06-22 12:31:04 +01:00
Laurent Cozic
0ecf2d6d9a Merge branch 'master' of github.com:laurent22/joplin 2019-06-22 11:23:35 +01:00
Laurent Cozic
50fd075168 Desktop, CLI: Fixes #1672: Fix line break issue when importing certain notes from Evernotes 2019-06-22 11:23:22 +01:00
Helmut K. C. Tessarek
6fa76bb83a fix minor typo in README.md 2019-06-21 23:58:44 -04:00
Laurent Cozic
b175c1fc94 Desktop: Resolves #1649: Cache code blocks in notes to speed up rendering 2019-06-21 08:28:59 +01:00
Caleb John
b461625518 Desktop: Fixed issue with issue with watching file on Linux (#1659)
Watch for rename events in the external editor and re-watch file
2019-06-20 00:44:51 +01:00
Laurent Cozic
3819897ba1 Merge branch 'master' of github.com:laurent22/joplin 2019-06-20 00:02:29 +01:00
Laurent Cozic
6a031857ba Desktop: Fixes #1664: Disable certain menu items when no note or multiple notes are selected, and fixed menu item to set tag 2019-06-20 00:02:13 +01:00
Laurent Cozic
0e57b7eb46 iOS v10.0.36 2019-06-19 23:22:35 +01:00
Laurent Cozic
e21a0ba5b7 Update translations 2019-06-19 23:18:24 +01:00
Laurent Cozic
78f731e616 Merge branch 'master' of github.com:laurent22/joplin 2019-06-19 23:16:45 +01:00
Laurent Cozic
f6688a65ae iOS: Fixed bug that was preventing images from displaying 2019-06-19 23:16:37 +01:00
Laurent Cozic
035b9c6d1a Android: This is now needed to build the app 2019-06-19 21:51:22 +01:00
Laurent Cozic
266ff244d9 Revert "Mobile: Added button to clear local sync state"
Can cause too many issues.

This reverts commit 6ce091f4d8.
2019-06-19 21:50:26 +01:00
Laurent Cozic
de1bfa5c34 Android release v1.0.276 2019-06-19 15:08:44 +01:00
Laurent Cozic
478b8f00d8 Fix release script 2019-06-19 15:04:46 +01:00
Laurent Cozic
860d2fd7f5 Merge branch 'master' of github.com:laurent22/joplin 2019-06-19 15:04:16 +01:00
Laurent Cozic
6ce091f4d8 Mobile: Added button to clear local sync state 2019-06-19 14:57:59 +01:00
Laurent Cozic
ce595ac5e4 Mentioned that it works on FreeBSD 2019-06-19 12:29:15 +01:00
Laurent Cozic
267436a00d Merge pull request #1660 from delta-emil/bulgarian-translation
Localization: add bulgarian
2019-06-18 22:54:52 +01:00
Helmut K. C. Tessarek
97e0f4258a Update localization en_US.po 2019-06-18 12:32:56 -04:00
delta-emil
faa6ccc150 add bulgarian translation 2019-06-16 23:39:20 +03:00
Laurent Cozic
349cade946 All: Optimised resource download queue by exiting early if resources are already downloaded 2019-06-15 21:48:37 +01:00
Laurent Cozic
0200aa92de Doc: Added doc for resource download mode 2019-06-15 21:28:31 +01:00
Laurent Cozic
60ed2cbee5 Mobile: Fixed bug where photo was not displayed just after having taken it 2019-06-15 21:23:30 +01:00
Laurent Cozic
0e7b2f36c8 Fixing release process for Android 2019-06-15 18:58:09 +01:00
Laurent Cozic
4083221b21 Android: Added support for 64-bit hardware 2019-06-15 18:48:07 +01:00
Laurent Cozic
d55c511b4a iOS v10.0.35 2019-06-15 18:18:17 +01:00
Laurent Cozic
7863e1dffe Update website 2019-06-15 10:27:44 +01:00
Laurent Cozic
7cfdf778de Android release v1.0.271 2019-06-15 09:44:34 +01:00
Laurent Cozic
075e55c077 Android release v1.0.269 2019-06-15 01:23:12 +01:00
Laurent Cozic
dc818e8a0c Electron release v1.0.160 2019-06-15 00:57:36 +01:00
Laurent Cozic
caa58dd913 name 2019-06-15 00:57:13 +01:00
Laurent Cozic
c84c3cd026 Merge pull request #1655 from laurent22/react-native-5-9
React Native 5 9
2019-06-14 23:32:12 +01:00
Laurent Cozic
bda5ac9fb5 Upgraded RNdocument-picker 2019-06-14 23:23:01 +01:00
Laurent Cozic
f928f645e5 Upgraded RNSqlite to remove warnings 2019-06-14 23:16:37 +01:00
Laurent Cozic
53d7e906d4 Removed unneeded class that was causing a require cycle 2019-06-14 23:04:05 +01:00
Laurent Cozic
e670b5d03f Upgraded RNDialogbox to remove warnings 2019-06-14 23:02:35 +01:00
Laurent Cozic
2a7d555859 Replaced deprecated Slider component 2019-06-14 22:59:27 +01:00
Laurent Cozic
e6675f500c Removed no longer used WebView module 2019-06-14 22:46:08 +01:00
Laurent Cozic
c3f20d3ebc Getting latest RNCamera to work with Android 2019-06-14 22:45:35 +01:00
Laurent Cozic
ff257060d1 Trying get RNCamera to work in iOS 2019-06-14 22:31:01 +01:00
Laurent Cozic
68cde202a4 Added JSC to improve performances of Android app 2019-06-14 18:37:46 +01:00
Laurent Cozic
1a7a87e170 Remove this for now as are not on AndroidX yet 2019-06-14 18:30:16 +01:00
Laurent Cozic
2990642923 Trying to fix rn-camera but cannot be full fixed yet due to https://github.com/react-native-community/react-native-camera/pull/2306 2019-06-14 09:15:38 +01:00
Laurent Cozic
0818de036e Fixing issue with webview so that WebKit rendering can be used 2019-06-14 09:14:01 +01:00
Laurent Cozic
122bc29035 Mobile: Upgraded WebView 2019-06-14 08:11:15 +01:00
Laurent Cozic
861cf8a1b2 Merge branch 'master' into react-native-5-9 2019-06-14 07:22:57 +01:00
Laurent Cozic
7d6959e9e4 Merge branch 'master' of github.com:laurent22/joplin 2019-06-14 07:22:38 +01:00
Laurent Cozic
85091052e7 iOS: Fixed missing Confirm and Cancel buttons on Alarm dialog 2019-06-14 07:22:25 +01:00
Laurent Cozic
f46ad5bfda Upgrading to React Native 5.9 2019-06-14 07:12:24 +01:00
Laurent Cozic
29f7937fc2 Merge branch 'master' of github.com:laurent22/joplin 2019-06-13 08:48:30 +01:00
Laurent Cozic
7fae9fda10 Desktop: Fixes #1443: Allow opening external editor on new notes 2019-06-13 08:48:19 +01:00
Laurent Cozic
a37961dccc Desktop: Removed placeholder in tag list because it repeats the label 2019-06-13 08:47:47 +01:00
Helmut K. C. Tessarek
55155646aa Clipper release v1.0.15 2019-06-12 19:38:32 -04:00
Laurent Cozic
7bffe86439 Merge branch 'master' of github.com:laurent22/joplin 2019-06-13 00:26:55 +01:00
Laurent Cozic
86136e0c6c Clipper: Fixes #1622: Import named anchors from clipped pages 2019-06-13 00:26:19 +01:00
Helmut K. C. Tessarek
21ae447d9c Clipper: Create a zip file of the source (for validation by Firefox reviewers) (#1648)
The file `joplin-webclipper-source.zip` will be in the `dist` directory of the webclipper.
2019-06-12 23:11:24 +01:00
Laurent Cozic
ad211b4b4e Clipper: Fixes #1600: Handle SVG images and fix issue with invalid file extensions 2019-06-12 09:45:31 +01:00
Laurent Cozic
d6218f35fe Clipper: Fixes #1526: Local files can be clipped again 2019-06-11 01:09:48 +01:00
Laurent Cozic
7af0dcd19a Merge branch 'master' of github.com:laurent22/joplin 2019-06-11 00:11:57 +01:00
Laurent Cozic
e1a52c5606 CLI: Remove Welcome notes because they are mostly relevent to desktop and mobile, and there is already intro text on CLI 2019-06-11 00:11:49 +01:00
Helmut K. C. Tessarek
468c345527 Desktop: Improved: Added shortuct for tags (Cmd+Opt+T / Ctrl+Alt+T) (#1638)
fixes #1626
2019-06-10 23:45:49 +01:00
Caleb John
041bdc08a2 Desktop: New: Highlight notebooks based on depth (#1634)
* Highlight notebooks based on depth

* Adjusted notebook depth targets, and dark theme select color
2019-06-10 23:44:51 +01:00
Laurent Cozic
7535f1a8c6 Update website 2019-06-10 23:41:32 +01:00
Laurent Cozic
0b24433db3 CLI v1.0.140 2019-06-10 08:56:11 +01:00
Laurent Cozic
f7de0c5ffd Merge branch 'master' of github.com:laurent22/joplin 2019-06-10 08:55:46 +01:00
Laurent Cozic
62c48b9a46 CLI: Fixed regression which was preventing decryption on newly created profiles 2019-06-10 08:55:36 +01:00
Helmut K. C. Tessarek
3fafda9684 Desktop: Added menu item to format inline code (#1641)
* Revert "Fix for #1426, aded backticks to auto-wrapping quotes."

This reverts commit 7dee93076a.

* changes to backtick behavior

- add shortcut ``` cmd+` ``` / ``` ctrl+` ```
- add menu item for `Inline code`

* rename menu item Inline Code -> Code
2019-06-10 08:05:20 +01:00
Helmut K. C. Tessarek
2cf1cda128 Update de_DE.po (#1640) 2019-06-10 01:18:07 -04:00
Laurent Cozic
fedee9499b Funding: Remove name for now because it causes an error 2019-06-08 10:38:42 +01:00
Laurent Cozic
7c6c7f34ba Android release v1.0.261 2019-06-08 00:49:41 +01:00
Laurent Cozic
0d65edd0e8 Electron release v1.0.159 2019-06-08 00:47:09 +01:00
Laurent Cozic
d57520c66a Merge branch 'master' of github.com:laurent22/joplin 2019-06-08 00:23:35 +01:00
Laurent Cozic
fa28ae1433 Mobile: Improved and cleaned up config screen 2019-06-08 00:23:17 +01:00
Laurent Cozic
0acf9823e5 Added missing test 2019-06-07 23:39:34 +01:00
Caleb John
799ad5f1da Desktop: Improved tag dialog to make it easier to add and remove tags (#1589) 2019-06-07 23:33:06 +01:00
Laurent Cozic
9f6b3ccf40 All: Improved: Allow using multiple connections to download items while synchronising (#1633)
* Task queue

* All: Improved sync speed by downloading items in parallel

* Improved download queue
2019-06-07 23:20:08 +01:00
Laurent Cozic
df714c357d All: Improved: Better handling of items that cannot be decrypted, including those that cause crashes 2019-06-07 23:11:08 +01:00
Laurent Cozic
de5fdc84f8 Added simple Key-Value store to support temporary data 2019-06-07 08:05:15 +00:00
Laurent Cozic
b5b228af15 Merge branch 'master' of github.com:laurent22/joplin 2019-06-06 16:05:26 +01:00
Laurent Cozic
7a85628f46 Doc: added Twitter feed and Product Hunt page 2019-06-06 16:05:14 +01:00
MichipX
075e76fc4b [Update] Language file: pl_PL.po (#1625)
Addition of strings and correction of mistakes.
2019-06-06 13:40:51 +01:00
Gustavo Reis
172a98fed4 Desktop: Fix icon path and directory in Linux install script (#1612) 2019-06-05 23:14:19 +01:00
Caleb John
409bdd7b78 Desktop, mobile: Upgrade TOC plugin version to 4.0.0 to fix various issues (#1603) 2019-06-05 23:13:00 +01:00
Caleb John
d012c689e1 Desktop: Improve how font size is applied (#1601) 2019-06-05 23:11:18 +01:00
Caleb John
89ec0629e6 Bump version of multimd-tables for mobile (#1597) 2019-06-05 23:02:10 +01:00
Laurent Cozic
b3475ae195 Android release v1.0.260 2019-06-05 18:31:59 +01:00
Laurent Cozic
a72ab67473 CLI v1.0.139 2019-06-05 18:09:10 +01:00
Laurent Cozic
90fbfec914 Update translations 2019-06-05 18:07:11 +01:00
Germán Martín
49ef023a90 Complete Spanish translation (#1613)
* Complete Spanish translation

Add missing translations

* Fix translation

* Review translation with Poedit
2019-06-05 18:02:36 +01:00
abonte
64bfd74f18 Translation: update it_IT.po (#1616)
* update Italian translation

* small fix
2019-06-05 18:02:20 +01:00
Laurent Cozic
655e35056e Merge branch 'master' of github.com:laurent22/joplin 2019-06-05 17:41:40 +01:00
Laurent Cozic
a13ba63ab8 Desktop: New: Added option to open development tools, to make it easier to create custom CSS 2019-06-05 17:41:30 +01:00
Laurent Cozic
e2e00d4c87 Doc: Added info to submit a web clipper bug 2019-06-05 15:09:22 +01:00
Helmut K. C. Tessarek
159dc44f6c Update website 2019-05-28 22:43:54 -04:00
Laurent Cozic
8fe2091926 Desktop, CLI: Fixes #1583: Handle multiple lines in attributes when importing Enex files 2019-05-28 22:52:09 +01:00
Laurent Cozic
c362c38dc0 Merge branch 'master' of github.com:laurent22/joplin 2019-05-28 22:05:25 +01:00
Laurent Cozic
316a52bbc2 All: Improved workflow of downloading and decrypting data during sync 2019-05-28 22:05:11 +01:00
Helmut K. C. Tessarek
0de9f6f944 Merge pull request #1596 from mmahmoudian/Update-Persian-localization
Improved and fixed Persian (fa) translation
2019-05-28 13:48:03 -04:00
Laurent Cozic
3ba021fdd9 Fixed test for Welcome notebook 2019-05-28 18:17:59 +01:00
Laurent Cozic
04c6579f2c All: Fix: Fix issue with revisions being needlessly created when decrypting notes 2019-05-28 18:10:21 +01:00
Mehrad Mahmoudian
bc7bd456a7 [update] Persian (fa) Language 2019-05-28 19:02:02 +03:00
Laurent Cozic
6d7511efbb Electron release v1.0.158 2019-05-27 19:54:04 +01:00
Caleb John
a0fb99d78f Desktop, Mobile: Improved: Enable more options on multimd-table plugin (#1586)
* Update multimd-table and enable options

* Add `options` option to markdown plugins
2019-05-27 19:53:02 +01:00
Laurent Cozic
685a52c2c5 Desktop, Mobile: Fixes #1587: Fix internal note links 2019-05-27 19:49:18 +01:00
Laurent Cozic
fc77419ca1 Desktop: Fixed empty separators in menu 2019-05-27 19:48:09 +01:00
Laurent Cozic
bab3a12e92 Doc: Updated build instructions for Windows 2019-05-27 18:04:24 +01:00
Laurent Cozic
21f0b90f48 Android release v1.0.255 2019-05-26 19:41:20 +01:00
Laurent Cozic
83682ab513 Desktop, Mobile: Improved config screen with dark theme 2019-05-26 19:39:07 +01:00
Laurent Cozic
7b987b5a8f Desktop: Resolves #1575: Make bold text more visible 2019-05-24 23:51:56 +01:00
Laurent Cozic
cb5aa425c8 Updated translations 2019-05-24 23:09:31 +01:00
Laurent Cozic
dd222381dd Translatiobs 2019-05-24 23:08:31 +01:00
Laurent Cozic
d7210811f6 Android release v1.0.254 2019-05-24 17:38:10 +01:00
Laurent Cozic
3a43cfeebf Electron release v1.0.157 2019-05-24 17:35:53 +01:00
Laurent Cozic
31e33c6628 Updated translations 2019-05-24 17:35:44 +01:00
Laurent Cozic
875f8d6997 Electron release v1.0.156 2019-05-24 17:35:04 +01:00
Laurent Cozic
aaaf27af6e Android: Fixed resource loading issue, and improved logging on desktop 2019-05-24 17:34:18 +01:00
Laurent Cozic
43624ffa75 Desktop: Improved: Add number of characters removed and added in revision list 2019-05-24 17:31:18 +01:00
Laurent Cozic
996b6623f1 Android release v1.0.253 2019-05-24 14:50:18 +01:00
Laurent Cozic
613041b806 Electron release v1.0.155 2019-05-24 14:47:35 +01:00
Laurent Cozic
ff1d01a864 Merge branch 'master' of github.com:laurent22/joplin 2019-05-24 14:47:30 +01:00
Laurent Cozic
bcbbe10bf8 Electron release v1.0.154 2019-05-24 14:47:12 +01:00
Laurent Cozic
3de0abfc84 Update FUNDING.yml 2019-05-24 09:57:53 +01:00
Laurent Cozic
133fd03469 Update FUNDING.yml 2019-05-24 09:55:29 +01:00
Laurent Cozic
4f97c5c017 Update FUNDING.yml 2019-05-24 09:55:07 +01:00
Laurent Cozic
2d8fbac58c Create FUNDING.yml 2019-05-24 09:53:31 +01:00
Laurent Cozic
95f7ac4a4a Merge branch 'master' of github.com:laurent22/joplin 2019-05-24 09:07:11 +01:00
Laurent Cozic
6a56a6ccf0 Doc: Added more technical info for revision history 2019-05-24 09:05:16 +01:00
Luis Orozco
1eb8df9fa6 Desktop: Fixes #1186, #1354: Clears search when clicking on a notebook. (#1504)
* Fixes #1186, #1354. Clears search when clicking on a notebook.

* use new resetSearch method where possible, replaced tabs with spaces

* replaced a couple more spaces with tabs
2019-05-24 08:13:01 +01:00
Helmut K. C. Tessarek
485b4baebb Update de_DE.po 2019-05-23 23:40:42 -04:00
Laurent Cozic
5590d887c9 Doc: Added note history info 2019-05-24 00:21:15 +01:00
Laurent Cozic
d00bfa997e Doc: Fixed more links 2019-05-22 16:57:45 +01:00
Laurent Cozic
1a8590e9b9 Update website 2019-05-22 16:49:57 +01:00
Laurent Cozic
5a978977df Fix Iran flag 2019-05-22 16:49:32 +01:00
Laurent Cozic
5d763c7e6c All: Remove tags from Welcome item due to issue with cleaning them up afterwards 2019-05-22 16:38:53 +01:00
Laurent Cozic
050b089e72 Update translations 2019-05-22 16:34:59 +01:00
Helmut K. C. Tessarek
733ea4027c Doc: use new forum link (#1545) 2019-05-22 16:20:10 +01:00
Helmut K. C. Tessarek
10500c78b1 All: Fix: Default sort order for notebooks should be title and ascending (#1541) 2019-05-22 16:18:16 +01:00
Caleb John
0040cc02a2 Only delete the .desktop file if it will be replaced by the script (#1537) 2019-05-22 16:16:41 +01:00
Luis Orozco
74afd20f0c Desktop: Fixes #1426: added backticks to auto-wrapping quotes. (#1534) 2019-05-22 16:16:03 +01:00
Luis Orozco
dc9bde2184 Github: updated Contributing.md (#1533)
* updated Contributing.md

- Added several guidelines
- Moved some rules to bulleted lists (for quicker reading).

* Replace links to old forum domain to new domain. Removed a word.
2019-05-22 16:14:59 +01:00
Mehrad Mahmoudian
5243ea7eb2 All: New: Added Persian translation (#1539)
* [init] the first version of the fa.po file

Providing translation for Persian language

* [fix] moved the fa.po file into correct path
2019-05-22 16:05:25 +01:00
水货
7d93492658 Update zh_CN.po (#1524) 2019-05-22 15:57:20 +01:00
Helmut K. C. Tessarek
c6b56345f5 add /%d to Fetching resources: %d (#1532) 2019-05-22 15:56:25 +01:00
Laurent Cozic
8a6fe20a69 All: Resolves #1481: New: Allow downloading attachments on demand or automatically (#1527)
* Allow downloading resources automatically, on demand, or when loading note

* Make needToBeFetched calls to return the right number of resources

* All: Improved handling of resource downloading and decryption

* Desktop: Click on resource to download it (and, optionally, to decrypt it)

* Desktop: Better handling of resource state (not downloaded, downloading, encrypted) in front end

* Renamed setting to sync.resourceDownloadMode

* Download resources when changing setting

* tweaks

* removed duplicate cs

* Better report resource download progress

* Make sure resource cache is properly cleared when needed

* Also handle manual download for non-image resources

* More improvements to logic when downloading and decrypting resources
2019-05-22 15:56:07 +01:00
Laurent Cozic
6bcbedd6a4 CLI v1.0.137 2019-05-19 12:05:02 +01:00
Laurent Cozic
4c935b78f9 Removed log statement 2019-05-19 12:04:09 +01:00
Laurent Cozic
94cddda6d0 Removed temp files 2019-05-19 11:22:00 +01:00
Laurent Cozic
1924ea062c CLI v1.0.136 2019-05-19 11:20:17 +01:00
Laurent Cozic
07e88b2eeb All: Handle missing resource blob when setting resource size 2019-05-19 11:18:44 +01:00
Laurent Cozic
e4a08c29d7 Desktop, Mobile: Improved: Gray out checkboxes that have been ticked inside notes 2019-05-17 22:41:30 +01:00
Laurent Cozic
d60afcaabe Fixed merge 2019-05-16 17:36:02 +00:00
Laurent Cozic
1a091460ca All: Fixed: Prevent app from trying to upload resource it has not downloaded yet 2019-05-16 17:34:16 +00:00
Laurent Cozic
8ebaa7f6eb All: Put back "Fetched items" message during sync 2019-05-15 08:14:36 +01:00
Laurent Cozic
e2a64e21a2 Electron release v1.0.153 2019-05-14 22:23:47 +01:00
Laurent Cozic
78ddd22f09 Log more revision information to allow debugging issues 2019-05-14 22:23:34 +01:00
Laurent Cozic
c546b7076a Fixed doc 2019-05-14 22:02:47 +01:00
Laurent Cozic
0e2bb5d784 Desktop: Improved: When opening a note using Goto Anything, open all its parent notebooks too 2019-05-14 00:11:27 +01:00
Laurent Cozic
5c069c38f5 CLI v1.0.135 2019-05-13 23:59:27 +01:00
Laurent Cozic
451b9c0ae9 CLI v1.0.133 2019-05-13 23:55:53 +01:00
Laurent Cozic
047897621a Fix CLI build script 2019-05-13 23:52:12 +01:00
Laurent Cozic
52e5cec585 Update website 2019-05-13 23:41:31 +01:00
Laurent Cozic
bc98b65efa Update website 2019-05-13 23:23:57 +01:00
Laurent Cozic
9250e77862 Added link to CLI changelog 2019-05-13 23:23:42 +01:00
Laurent Cozic
cd69e71945 Forgot to publish in publish script 2019-05-13 23:20:25 +01:00
Laurent Cozic
e705e6e990 CLI v1.0.129 2019-05-13 23:18:57 +01:00
Laurent Cozic
4638f11c5e Created CLI release script with changelog auto-generation 2019-05-13 23:18:44 +01:00
Laurent Cozic
9de7c15e93 CLI v1.0.128 2019-05-13 22:53:08 +01:00
Laurent Cozic
61736546b4 Updated translations 2019-05-13 22:52:42 +01:00
Laurent Cozic
82b6dd23a7 CLI v1.0.127 2019-05-13 10:11:10 +01:00
Laurent Cozic
64427f0160 iOS 10.0.34 2019-05-13 10:10:37 +01:00
Laurent Cozic
cbf47cb9ee Android release v1.0.252 2019-05-13 09:53:50 +01:00
Laurent Cozic
dba3e4202d Electron release v1.0.152 2019-05-13 09:51:04 +01:00
Laurent Cozic
173cd6de4d Fixed regression 2019-05-13 09:50:39 +01:00
Laurent Cozic
3d333bd8f2 Removed build files 2019-05-13 00:43:12 +01:00
Laurent Cozic
a82f8c7dd0 CLI v1.0.126 2019-05-13 00:42:16 +01:00
Helmut K. C. Tessarek
cde079e44e Clipper release v1.0.14 2019-05-12 17:52:20 -04:00
Laurent Cozic
f8d20b61ea Update website 2019-05-12 16:18:30 +01:00
Laurent Cozic
d279435502 Android release v1.0.251 2019-05-12 16:16:39 +01:00
Laurent Cozic
eb2065128e Electron release v1.0.151 2019-05-12 16:04:01 +01:00
Laurent Cozic
10e81aa476 Trying to fix iOS release issue 2019-05-12 16:03:22 +01:00
Laurent Cozic
3e808f05fd Improved logic to set resource file size 2019-05-12 15:53:42 +01:00
Laurent Cozic
e57bfad9b1 Android release v1.0.248 2019-05-12 11:50:21 +01:00
Laurent Cozic
5f344f07d4 Electron release v1.0.150 2019-05-12 11:41:35 +01:00
Laurent Cozic
e1b7b64e1b All: Make sure resource filesize is set in all cases 2019-05-12 11:41:07 +01:00
Laurent Cozic
ed3970be81 CLI: Fix: Do not resize images if they are already below the max dimensions 2019-05-12 11:38:33 +01:00
Laurent Cozic
c27861d40f Electron release v1.0.149 2019-05-12 01:22:02 +01:00
Laurent Cozic
565dfba8c9 All: Fixes #371 (sort of): Allow resources greater than 10 MB but they won't be synced on mobile 2019-05-12 01:15:52 +01:00
Laurent Cozic
553a26eb63 Desktop, CLI: Added option to disable creation of welcome items 2019-05-12 01:10:46 +01:00
Laurent Cozic
9c85bc2cd1 All: Save size of a resource to the database; and added mechanism to run non-database migrations 2019-05-11 17:55:40 +01:00
Laurent Cozic
e96bc9c48a All: Allow specifying the log level of a log target 2019-05-11 17:53:56 +01:00
Laurent Cozic
0d036d8183 Fixed regression following fix for #1425 2019-05-11 17:35:39 +01:00
Laurent Cozic
e5f2a7f2f5 Fixed regression caused by #1472 2019-05-11 17:34:45 +01:00
Laurent Cozic
016ce3dd61 Desktop: Resolves #1502: Improved note deletion dialog 2019-05-11 13:36:44 +01:00
Laurent Cozic
afb375955e Fixed regressions following fix for #1425 2019-05-11 12:08:28 +01:00
Laurent Cozic
b702b0b40c Desktop: Fixes #1425: Improved handling of images when using external editor, so that it works in Atom, VSCode and Typora 2019-05-11 11:46:13 +01:00
Laurent Cozic
91ecab51c5 Clipper: Fixed: Added Chrome workaround to prevent it from posting the same note twice 2019-05-11 11:18:09 +01:00
Laurent Cozic
7628506926 Merge branch 'master' of github.com:laurent22/joplin 2019-05-11 11:13:23 +01:00
Laurent Cozic
4e7f7c0c9c Clipper: Fixes #1510: Fixed display of some images in preview. Also display images at correct size inside preview. 2019-05-11 11:13:13 +01:00
Laurent Cozic
863f5bcf18 Desktop, Mobile: Fixed: Some images were not being displayed 2019-05-11 09:49:56 +01:00
Laurent Cozic
dccd489fcc Clipper: Fix: Fix handling of tables with empty headers 2019-05-11 09:23:31 +01:00
Helmut K. C. Tessarek
333c3f6369 added .gitignore to /Tools 2019-05-10 20:19:42 -04:00
Helmut K. C. Tessarek
808413d0bf remove section self-signed certs from FAQ for now - no Android rel available that has this feature yet 2019-05-10 03:19:47 -04:00
Helmut K. C. Tessarek
440be3d920 remove unintentionally committed files again 2019-05-09 23:01:49 -04:00
Helmut K. C. Tessarek
9b27a4f601 Update website 2019-05-09 22:58:56 -04:00
Don Bowman
6e36ca32b4 CLI: Fix: Bump sqlite3 to v4.0.7 for node12 support (#1508) 2019-05-10 01:18:04 +01:00
simonsan
85a9c303f2 Changed download links to v1.0.145 (#1507) 2019-05-10 01:17:08 +01:00
Krešimir Klas
7e9972d99f Android: Resolves #680: New: Allow self-signed certificates (#1466)
* Allow User-added CAs in Android

This will enable connecting to servers with self-signed certificates on
android as per issue #680.

Implemented as per:
- https://android-developers.googleblog.com/2016/07/changes-to-trusted-certificate.html
- https://github.com/facebook/react-native/issues/20488

* Allow User-added CAs in Android

This will enable connecting to servers with self-signed certificates on
android as per issue #680.

Implemented as per:
- https://android-developers.googleblog.com/2016/07/changes-to-trusted-certificate.html
- https://github.com/facebook/react-native/issues/20488
2019-05-10 01:15:13 +01:00
Laurent Cozic
771975cd35 Clipper: Fixes #1462: Allow importing images from local file with file:// URLs 2019-05-10 01:06:06 +01:00
Laurent Cozic
356f8e580b Clipper: Improved: Updated Readability library to improve Simplified Page clipping 2019-05-10 00:05:23 +01:00
Laurent Cozic
68268cb35d Merge branch 'master' of github.com:laurent22/joplin 2019-05-09 23:46:41 +01:00
Laurent Cozic
8e58ed12af Clipper: Resolves #1379: Improved: Display warning icon when a page might not render well in simplified mode 2019-05-09 23:41:52 +01:00
Laurent Cozic
beb428b246 Android release v1.0.246 2019-05-08 00:54:46 +01:00
Laurent Cozic
4d81caff0b Electron release v1.0.148 2019-05-08 00:52:20 +01:00
Laurent Cozic
78372c9bac All: Improved: Make sure a revision is saved a note has not been modified for over a week 2019-05-08 00:51:56 +01:00
Laurent Cozic
a4db1bc671 All: Improved: Do not save a revision if there is already a recent one that exists 2019-05-08 00:10:36 +01:00
Laurent Cozic
8ea1c373ed Fixed position of config button 2019-05-07 23:50:12 +01:00
Laurent Cozic
8ef27dfcdc Merge branch 'master' of github.com:laurent22/joplin 2019-05-07 23:43:40 +01:00
Laurent Cozic
23e43c7bc1 Desktop: Fix: Fixed note history sort order. 2019-05-07 23:42:46 +01:00
Helmut K. C. Tessarek
edb8f4c79f Merge pull request #1503 from ruzaq/master
CLI: CZech translation updated
2019-05-07 17:46:39 -04:00
Ruzicka Pavel
e115fa4bb3 CZech translation updated 2019-05-07 23:30:18 +02:00
Laurent Cozic
52a2daddbf All: Improved: Make sure user timestamp is preserved with revision information 2019-05-07 22:15:47 +01:00
Laurent Cozic
c400142996 All: Fix: Make sure a revision is not empty before saving it 2019-05-07 20:46:58 +01:00
Laurent Cozic
219171a18c Remove dependency to git2json and improved handling of new commit messages 2019-05-06 22:18:17 +01:00
Laurent Cozic
d7d573d9dd Android release v1.0.245 2019-05-06 21:51:42 +01:00
Laurent Cozic
c4b17f8919 Electron release v1.0.147 2019-05-06 21:48:50 +01:00
Laurent Cozic
da2f4b96c7 Electron release v1.0.146 2019-05-06 21:48:37 +01:00
Laurent Cozic
08af9de190 All: Resolves #712: New: Support for note history (#1415)
* Started revisions support

* More rev changes

* More rev changes

* More revs changes

* Fixed deletion algorithm

* More tests and moved updated time to separate field

* Display info when restoring note

* Better handling of existing notes

* wip

* Further improvements and fixed tests

* Better handling of changes created via sync

* Enable chokidar again

* Testing special case

* Further improved logic to handle notes that existed before the revision service

* Added tests

* Better handling of encrypted revisions

* Improved handling of deleted note revisions by moving logic to collectRevision

* Improved handling of old notes by moving logic to collectRevision()

* Handle case when deleting revisions while one is still encrypted

* UI tweaks

* Added revision service to mobile app

* Fixed config screens on mobile and desktop

* Enabled revisions on CLI app
2019-05-06 21:35:29 +01:00
Laurent Cozic
9e2982992a Merge branch 'master' of github.com:laurent22/joplin 2019-05-06 21:31:45 +01:00
Laurent Cozic
c03ac5c5f1 Make sure Appveyor only build tags 2019-05-06 21:31:37 +01:00
Luis Orozco
5934f2f08e Desktop: Fixes #355: Resets the undo manager when creating new notes (#1495) 2019-05-06 21:30:04 +01:00
Caleb John
f136f40fdc Doc: Update readme to warn about restarting the editor for userstyle (#1487) 2019-05-06 21:26:34 +01:00
Luis Orozco
d213e4ab57 All: Fixed: Prevents notes with no title to break after synchronize (#1472)
Tests to confirm serialize/unserialize don't change body and title

check if item title exists, otherwise display default title.

added test checking serializing/unserializing Folders don't modify data
2019-05-06 21:25:14 +01:00
Laurent Cozic
782aae4ddf Doc: Better handling of platform in changelog autogenerate 2019-05-03 15:02:32 +00:00
Laurent Cozic
4f47bd7bcd Android release v1.0.244 2019-05-03 00:22:11 +01:00
Laurent Cozic
4f76946140 Electron release v1.0.145 2019-05-03 00:20:01 +01:00
Laurent Cozic
aa60923cbd Doc: Better handling of platforms in changelog generation 2019-05-03 00:19:42 +01:00
doc75
7670ce32b1 removing sh in Linux installation command line as this is unnecessary (and failing on Ubuntu) (#1484) 2019-05-02 23:58:38 +01:00
Laurent Cozic
0b98632336 Update website 2019-05-02 23:54:52 +01:00
Laurent Cozic
49c998de83 Doc: Auto-generate anchors 2019-05-02 23:54:31 +01:00
Helmut K. C. Tessarek
da69d6b2c9 Desktop: Fix: Update chokidar to fix blank screen when returning from external editor (#1479) 2019-05-02 16:00:17 +01:00
Michael Schneider
a757aefce0 Remove separator between New Notebook and Close Window in File Menu (#1483) 2019-05-02 15:55:48 +01:00
Laurent Cozic
b2129cb8c4 Desktop, CLI: Fixes #1476: Import lists and sub-lists from Enex files with correct indentation 2019-05-01 18:06:37 +01:00
Laurent Cozic
27f14c175f Electron release v1.0.144 2019-04-30 23:42:42 +01:00
Laurent Cozic
aad49c520b All: Improved: Display better error message when trying to sync with a new sync target from an old version of Joplin 2019-04-30 23:42:06 +01:00
Michael Schneider
af794a16d6 Desktop (macOS): Add macOS "Close Window" menu item and add name to Quit menu (#1434)
* Add Close Window to macOS file menu

* Add Joplin to Quit menu item

On macOS the application name appears usually within the Quit menu item.

* Use performClose: selector for Close Window

* Revert Quit with name and add Quit string to translations

* Move Quit translation to joplin.pot

* Remove Quit string
2019-04-30 21:38:20 +01:00
Laurent Cozic
ca7266cd69 Fixing images 2019-04-30 19:04:24 +01:00
Laurent Cozic
fb758afc81 Update website 2019-04-30 18:58:35 +01:00
Laurent Cozic
b806f0da49 Removed dependency to unsafe and buggy marked 2019-04-30 18:58:19 +01:00
Laurent Cozic
4e3b1f3e13 Merge branch 'master' of github.com:laurent22/joplin 2019-04-30 18:29:46 +01:00
Laurent Cozic
475467c41c Update website 2019-04-30 18:29:43 +01:00
Caleb John
28e5039873 Update Joplin_install_and_update from #1422 and #1473 (#1475) 2019-04-30 18:28:36 +01:00
Laurent Cozic
1efc6e6151 Merge branch 'master' of github.com:laurent22/joplin 2019-04-30 18:27:08 +01:00
Laurent Cozic
e280a02643 Update doc 2019-04-30 18:26:58 +01:00
Christian Moritz
788dc42684 CLI: Improved: Update sharp (for node 12 compatibility) (#1471) 2019-04-30 17:32:51 +01:00
Laurent Cozic
01f2759a62 Added CLI changelog 2019-04-29 18:39:43 +01:00
Laurent Cozic
9419e3af9c CLI v1.0.125 2019-04-29 18:36:32 +01:00
Laurent Cozic
6d220005cc All: Fixes #1353: Remove message "Processing a path that has already been done" as this is not an error 2019-04-29 18:27:32 +01:00
Laurent Cozic
6d68e61bbd Exclude reverted commits from changelog 2019-04-29 07:42:40 +01:00
Laurent Cozic
29582623b0 Revert "Desktop: Improved: Removed gaps between note list and vertical resizers (#1464)"
This reverts commit d6e59c5238.
2019-04-29 07:28:16 +01:00
Laurent Cozic
4571e7853a Improved auto-generation of changelog 2019-04-28 15:09:07 +01:00
Luis Orozco
d6e59c5238 Desktop: Improved: Removed gaps between note list and vertical resizers (#1464) 2019-04-28 14:23:17 +01:00
Luis Orozco
6335cbedb8 Desktop: Improved: UI updates to sidebar and header, changing icon sizes and animations (#1463)
Added animation to icon in synchronize button

Moved sync report above button, which prevents the sync button from moving from its place when the report has text.

Added animation to icon in Toggle Sidebar button, using the css transition property.

Reduced font size for text and icons in header and sidebar

Changed theme color2 from white to a very light grey. It is barely
noticeable, but reduces contrast a bit, improving readability.
2019-04-28 14:20:18 +01:00
Laurent Cozic
f3344ce05d Removed "Demo" word from screenshot to comply with App Store 2019-04-28 13:11:15 +01:00
Laurent Cozic
155d38d24a Update website 2019-04-26 19:06:17 +01:00
Laurent Cozic
412f6d8316 Fixing Arabic flag 2019-04-26 18:58:40 +01:00
Laurent Cozic
d0f3ed80e0 Added new required iOS screenshots 2019-04-26 18:37:30 +01:00
Helmut K. C. Tessarek
b86f3b74bd build-translation.js: hack to show en_US as 100% (#1448) 2019-04-26 18:36:12 +01:00
Laurent Cozic
60054d1d8b ios-v10.0.31 2019-04-26 08:52:59 +01:00
Laurent Cozic
c40c6428d7 Merge branch 'master' of github.com:laurent22/joplin 2019-04-26 08:30:51 +01:00
Laurent Cozic
e708ecccee Updated FAQ 2019-04-26 08:30:40 +01:00
Helmut K. C. Tessarek
04f991d3bf Update website 2019-04-23 16:10:41 -04:00
Helmut K. C. Tessarek
d5d7368ba0 Merge pull request #1446 from Fvbor/patch-1
Readme: Change Download links from 1.0.142 to 1.0.143
2019-04-23 16:09:16 -04:00
Hagen Tasche
abff929d4e Change Download links from 1.0.142 to 1.0.143 2019-04-23 09:09:11 +02:00
Laurent Cozic
49edc82594 Tools: Allow auto-generating changelog from commit messages 2019-04-22 18:02:45 +00:00
Helmut K. C. Tessarek
7dd7d0ec17 Merge pull request #1439 from tessus/localization-de_DE
update localization de_DE.po
2019-04-22 00:01:34 -04:00
Helmut K. C. Tessarek
61aaf64f95 update localization de_DE.po 2019-04-22 00:00:54 -04:00
Helmut K. C. Tessarek
da35785951 Update website 2019-04-21 14:55:52 -04:00
Helmut K. C. Tessarek
e394034678 restore the content of API.md 2019-04-21 14:49:12 -04:00
Laurent Cozic
edf002ab32 Android release v1.0.243 2019-04-21 14:58:33 +01:00
Laurent Cozic
50f2076981 Electron release v1.0.143 2019-04-21 14:56:13 +01:00
Laurent Cozic
a9ae78bcde Updated translations 2019-04-21 14:55:12 +01:00
Laurent Cozic
0d7f9a2ab3 Merge branch 'master' of github.com:laurent22/joplin 2019-04-21 13:56:01 +01:00
Laurent Cozic
a5ee120281 All: Fixes #1433: Some resources could incorrectly be deleted even though they are still present in a note. Also added additional verifications before deleting a resource. 2019-04-21 13:49:40 +01:00
Helmut K. C. Tessarek
12ebf44e22 Desktop: add option to use soft breaks for markdown rendering (#1408)
* add option to use soft breaks for markdown rendering

* oops, I didn't use the British spelling

* moved setting to section Plugins

* change text -> Enable soft breaks
2019-04-21 10:03:10 +01:00
Laurent Cozic
220f5d0967 Desktop: Fixes #1425 (probably): Fix display of images when using VSCode as external editor 2019-04-20 21:12:19 +01:00
Laurent Cozic
4ef05272c4 Clipper: Fixes #1417: Sort the folders in the same order as the desktop app 2019-04-20 19:29:23 +01:00
Laurent Cozic
c3262aa5f8 Desktop: Allow CtrlCmd+G shortcut from text editor 2019-04-20 19:07:13 +01:00
Laurent Cozic
42119c8f42 All: Fixes #1427: Support checkoxes behind bullets 2019-04-20 19:00:22 +01:00
Laurent Cozic
27cce03968 Updated translations 2019-04-20 12:26:34 +01:00
Laurent Cozic
776aba1e49 Merge branch 'master' of github.com:laurent22/joplin 2019-04-20 12:23:55 +01:00
Laurent Cozic
9356841cfc Desktop: Fixes #423: Make sure links are clickable when exporting to PDF 2019-04-20 12:23:05 +01:00
Helmut K. C. Tessarek
7fc233e808 Desktop: change shortcuts for 'Print' and 'Goto Anything' (#1420)
Print            Command/Control + P
Goto Anything    Command/Control + G

closes #1413
2019-04-20 12:02:43 +01:00
Helmut K. C. Tessarek
7b2eac3abd add localization for English (United States) en_US (#1391) 2019-04-20 12:01:53 +01:00
Laurent Cozic
93323deea5 Desktop: Fix: Updated Electron and Chokidar to try to fix external editor crashing app 2019-04-20 12:00:42 +01:00
Laurent Cozic
e8fa399e9e Update website 2019-04-18 15:26:13 +01:00
Laurent Cozic
a974eb5d9f Fixing links 2019-04-18 15:11:56 +01:00
Laurent Cozic
6a3f04274d Update website 2019-04-18 15:00:32 +01:00
Laurent Cozic
f8e1395087 joplin.cozic.net => joplinapp.org 2019-04-18 14:59:17 +01:00
Laurent Cozic
82b5af51e5 Update CNAME 2019-04-18 14:06:15 +01:00
Laurent Cozic
cf40c14a86 All: Fixes #1405: Handle invalid resource tags that contain no data when importing ENEX 2019-04-12 01:43:15 +01:00
Laurent Cozic
be2b2b7836 Merge branch 'master' of github.com:laurent22/joplin 2019-04-04 08:14:36 +01:00
Laurent Cozic
0cebae8032 All: Allow longer folder paths 2019-04-04 08:01:16 +01:00
Laurent Cozic
6ebc77cbba Desktop: Fix: Goto Anything results were displayed lowercase 2019-04-04 07:53:20 +01:00
Tim Kilåker
542a5e88b7 All: 1383 Clear selected Notes when switching Notebook (#1387) 2019-04-04 07:48:33 +01:00
Laurent Cozic
72b36522e8 All: Improved support for Japanese, Chinese, Korean search queries (also applies to Goto Anything) 2019-04-03 07:46:41 +01:00
Laurent Cozic
252d937405 Update website 2019-04-02 17:46:39 +01:00
Laurent Cozic
a73b0309b9 Electron release v1.0.142 2019-04-02 17:27:52 +01:00
Laurent Cozic
c22283e799 Electron release v1.0.141 2019-04-02 17:27:39 +01:00
Laurent Cozic
1e51ab4a59 Updated translations 2019-04-02 17:27:19 +01:00
Caleb John
0c2f2667d3 All: Allow toggling markdown plugins and added several new plugins (#1347)
* Initial test of enabling plugins

* Added support for toggle-able plugins
- Also adds some new plugins

* Add instructions on adding toggle-plugins

* Fix subtle anchor bug
- webview was moving itself when scrolling to bottom anchors

* Moves the webview hack so that it only applies to anchors

* Add plugin descriptions to the README, also removed mermaid from README

* rename plugin.* to markdown.plugin.* to be more forward compatible
2019-04-02 17:14:48 +01:00
Laurent Cozic
496c9ddb91 Fixed tests to match new behaviour 2019-04-02 00:22:04 +01:00
Laurent Cozic
5ad0b2eed9 Clean up 2019-04-02 00:12:38 +01:00
Laurent Cozic
577d62e783 Updated translations 2019-04-02 00:11:40 +01:00
Laurent Cozic
dcb73c9916 Desktop: Fixed menu logic for non-macOS 2019-04-01 19:51:47 +00:00
Laurent Cozic
6b2910c3c7 Desktop: Added Goto Anything dialog and implemented basic plugin system 2019-04-01 19:43:13 +00:00
Helmut K. C. Tessarek
db04906416 Desktop: macOS: make the menu more like a macOS menu (#1348)
* macOS: make the menu more like a macOS menu

* remove duplcated code even more

* yep, I forgot to localize the new menu item

* more de-duplication, create File menu on macOS
2019-04-01 10:04:34 +01:00
s1nceri7y
54fceeb07d Update README.md (#1375)
added links to browser extensions
2019-03-31 18:27:36 +01:00
RaphaelKimmig
fa32678645 improve search bar text alignment (#1377) 2019-03-31 18:26:47 +01:00
RaphaelKimmig
ee1df1a396 fix sub pixel rendering for desktop (#1378) 2019-03-31 18:25:13 +01:00
Laurent Cozic
729be8767c Clipper release v1.0.13 2019-03-31 12:15:24 +01:00
Helmut K. C. Tessarek
8471f0d86d Merge pull request #1374 from s1nceri7y/patch-1
Update ru_RU.po
2019-03-30 16:34:43 -04:00
s1nceri7y
390b818d71 Update ru_RU.po
translation adjustments
2019-03-30 10:14:44 +00:00
Laurent Cozic
1a1c190ea3 Clipper: Move Confirm button up 2019-03-29 10:11:27 +00:00
Laurent Cozic
40d82b80f1 Clipper release v1.0.12 2019-03-29 09:45:19 +00:00
Laurent Cozic
7647ecbbc7 Clipper: Do not inline scripts to prevent CSP error 2019-03-29 09:44:56 +00:00
Laurent Cozic
b2a5cf9dd0 Clipper release v1.0.10 2019-03-29 09:06:55 +00:00
Laurent Cozic
cbf3ab2ec2 Merge branch 'master' of github.com:laurent22/joplin 2019-03-29 09:04:10 +00:00
Laurent Cozic
c4a37ff0ba Clipper: Better handling of error on tabs where extension is not available 2019-03-29 09:03:21 +00:00
Laurent Cozic
bdc7ea4346 All: Display warning when changing dir for filesystem sync 2019-03-29 08:01:58 +00:00
Tekki
d4c4b9b10a Replace curl with wget in installation script. (#1368) 2019-03-28 21:19:07 +00:00
Caleb John
4b9105edff Set blockScrolling to Infinty (fixes error message) (#1363) 2019-03-28 21:18:53 +00:00
Caleb John
c0980a5a9e prevent appimage integration prompt when joplin.desktop already exists (#1337) 2019-03-28 20:49:44 +00:00
Laurent Cozic
272055fc1d Updated translations 2019-03-28 17:06:06 +00:00
Laurent Cozic
cbb1851b12 Updated translations 2019-03-28 17:05:08 +00:00
Helmut K. C. Tessarek
45d758d52e Merge pull request #1362 from Shaxine/patch-1
Update pt_BR.po
2019-03-24 17:53:02 -04:00
Helmut K. C. Tessarek
49936ef095 update download links, stats, website 2019-03-24 17:50:27 -04:00
António Pereira
986d4be601 Update pt_BR.po
Keep command as intended.
2019-03-24 12:43:47 +00:00
Mats Estensen
b6ad9719ad Translation: complete norwegian, remove fuzzy entries (#1333)
* complete norwegian, remove fuzzy entries

* minor typos
2019-03-17 01:19:31 -04:00
Laurent Cozic
96a1546da1 Desktop: Improved search - when clearing search, stay on current item. When clicking on notebook name, jump to note within notebook. Improved toolbar layout. 2019-03-15 21:57:58 +00:00
Laurent Cozic
6884dd2b9e Cleaned up MdToHtml style 2019-03-13 23:03:55 +00:00
Laurent Cozic
9c027e59c4 Android release v1.0.242 2019-03-13 22:52:24 +00:00
Laurent Cozic
9e16ff3644 Mobile: Moved tags to separate screen to avoid slow down when having many tags 2019-03-13 22:42:16 +00:00
Laurent Cozic
4000cb5d1c All: Fixes #1325: Fixed nested checkbox indentation 2019-03-12 22:24:44 +00:00
Laurent Cozic
1030b412ff All: Fixes #1326: Restored inline code styling 2019-03-12 22:07:02 +00:00
Laurent Cozic
54f0fbcf6b Desktop: Fixes #1329: Could not edit created and updated time anymroe 2019-03-12 21:52:23 +00:00
Laurent Cozic
1602182085 Desktop: Fixes #1334 (maybe): Upgraded chokidar which it seems was randomly making Electron 4 crash (maybe due to fsevent package) 2019-03-12 21:41:13 +00:00
Laurent Cozic
20bb1238c5 CLI v1.0.124 2019-03-11 19:37:52 +00:00
Laurent Cozic
68fbe8125e Desktop: Fixed: The side bar was being refreshed too frequently. Fixed: Order of notebooks with sub-notebooks was sometimes incorrect when sorting by last updated time. 2019-03-10 21:16:05 +00:00
Laurent Cozic
23e6e6e69d Android release v1.0.241 2019-03-10 20:35:01 +00:00
Laurent Cozic
ade5af2559 Electron release v1.0.140 2019-03-10 20:32:43 +00:00
Laurent Cozic
0a993dc012 Update translations 2019-03-10 20:32:28 +00:00
xcffl
4baa46507f update zh-CN translation (#1321) 2019-03-10 20:31:39 +00:00
Laurent Cozic
0d8878abd3 Mobile: For now, make notebooks sorted by title 2019-03-10 20:30:31 +00:00
Helmut K. C. Tessarek
f962084591 Merge pull request #1318 from Ouvill/feature/update_jp_translation
update jp translation
2019-03-10 00:48:35 -05:00
Helmut K. C. Tessarek
921b45286b Merge pull request #1316 from tessus/localization-de_DE
Update de_DE.po
2019-03-10 00:48:13 -05:00
Ouvill
301bfed05e update jp translation 2019-03-09 12:56:55 +09:00
Helmut K. C. Tessarek
62e7d6fa86 Update de_DE.po 2019-03-08 13:51:08 -05:00
Laurent Cozic
7e34cd4452 Android release v1.0.240 2019-03-08 17:43:01 +00:00
Laurent Cozic
b35cb9a7ab Electron release v1.0.139 2019-03-08 17:40:11 +00:00
Laurent Cozic
18b836525c Updated translations 2019-03-08 17:39:26 +00:00
Caleb John
e34e49b88d Add joplin.desktop file for xfce and mate desktops (#1304) 2019-03-08 17:33:15 +00:00
Renato Rosa
5bf879c2d9 Update pt_BR.po (#1303)
Minor typo fixed.
2019-03-08 17:33:01 +00:00
Joel Simpson
61d6309c0e Desktop: Adding progress bar and text changes to install script. (#1294) 2019-03-08 17:32:20 +00:00
Helmut K. C. Tessarek
17c9c0f9ef Mobile: version info changes (#1290)
* update the version info string for mobiles to be consistent with the desktop

Joplin vX.Y.Z -> Joplin X.Y.Z
hardcoded the string. Joplin is a product name, no need for translation.

* show version as X.Y.Z in update dialog

* update .po files so that the previous commit won't break translations

* tag -> Schlagwort
2019-03-08 17:31:48 +00:00
Laurent Cozic
9bd62fd3d4 All: Refresh folder order when a new folder is added or modified 2019-03-08 17:25:32 +00:00
Laurent Cozic
de73d4baa7 Minor issue 2019-03-08 17:19:06 +00:00
Laurent Cozic
379ff5163b Merge branch 'master' of github.com:laurent22/joplin 2019-03-08 17:18:31 +00:00
Laurent Cozic
d9538ccb08 No longer using fixed IDs 2019-03-08 17:17:37 +00:00
Laurent Cozic
9289dbdf77 All: Refactor Markdown rendering (#1315)
* Refactoring MdToHtml to avoid manually rendering tokens

* Minor fix

* Fixed loading of resources

* Handle clicking on checkboxes

* Added back Katex support

* Fixed issues with Katex and note rendering

* Added back support for links

* Restored code block highlighting support

* clean up

* Applying update to mobile

* Fixed handling of links and cleaned up to share more code between mobile and desktop

* Restored content caching and improved handling of additional assets

* Clean up and a few fixes

* Applied more updates to mobile and added code highlighting support
2019-03-08 17:14:17 +00:00
Laurent Cozic
5719ae495a Merge branch 'master' of github.com:laurent22/joplin 2019-03-08 17:13:07 +00:00
Helmut K. C. Tessarek
a89e3b7924 fix another minor typo 2019-03-08 03:34:48 -05:00
Helmut K. C. Tessarek
e576d09712 Merge pull request #1310 from lyndonbarrie/master
fix spelling mistake
2019-03-08 03:12:33 -05:00
lyndonbarrie
43600a7824 fix spelling mistake 2019-03-07 09:13:34 +00:00
Laurent Cozic
921f01d9dc Desktop: Fixed regression on external edit 2019-03-06 22:22:37 +00:00
Laurent Cozic
dec5668582 CLI: Added command to decrypt a file 2019-03-05 20:57:15 +00:00
Laurent Cozic
e30bc12354 All: Disabled Mermaid support for now 2019-03-06 07:11:55 +00:00
Laurent Cozic
fca4fa666d Electron release v1.0.138 2019-03-03 17:14:28 +00:00
Laurent Cozic
59478160c8 Added Arabic translation 2019-03-03 17:14:17 +00:00
Laurent Cozic
8110fe89ef Electron release v1.0.137 2019-03-03 00:59:04 +00:00
Laurent Cozic
c7ed1b5eae Trying to fix Windows 32-bit build 2019-03-03 00:58:41 +00:00
Laurent Cozic
25951e7097 Trying to fix Windows 32-bit build 2019-03-03 00:51:54 +00:00
Laurent Cozic
687b9d1bef All: Improve rendering of Mermaid graphs 2019-03-03 00:31:41 +00:00
Laurent Cozic
630e77b9eb Electron release v1.0.136 2019-03-02 23:40:58 +00:00
Laurent Cozic
68ff2e17b3 Trying to fix Windows 32-bit build 2019-03-02 23:35:18 +00:00
Laurent Cozic
945d83608a All: Include injected Mermaid JS only when necessary 2019-03-02 23:22:41 +00:00
Laurent Cozic
833d473268 Desktop: Resolves #206: Added support for sorting notebooks by title or last modified 2019-03-02 17:35:57 +00:00
Laurent Cozic
2256b0c5ec Desktop: Fixes very slow startup since Electron 4 upgrade 2019-02-28 23:24:28 +00:00
Laurent Cozic
677aa7d59b Merge branch 'master' of github.com:laurent22/joplin 2019-02-28 22:32:47 +00:00
Laurent Cozic
4363005e92 All: Resolves #1105: Added support for macro persistence for Katex 2019-02-28 22:32:29 +00:00
Helmut K. C. Tessarek
2e3ef618db Merge pull request #1271 from RenatoXSR/pt_BR-update-20190227
Updated pt_BR locale to correct unicode char escapes.
2019-02-27 21:16:43 -05:00
Laurent Cozic
1adbbd14c6 Fix images 2019-02-28 00:36:44 +00:00
Laurent Cozic
4dfd7db729 Fixing image 2019-02-28 00:28:46 +00:00
Laurent Cozic
e70562a102 Fixing image 2019-02-28 00:27:25 +00:00
Laurent Cozic
a0e5947ba4 All: Resolves #163: Added Mermaid support to desktop and mobile 2019-02-28 00:22:53 +00:00
Laurent Cozic
e841ea8a91 Fixing bad commit 2019-02-27 23:41:32 +00:00
Laurent Cozic
770a435029 Revert "Revert "Update website""
This reverts commit 49b56e84a7.
2019-02-27 23:38:50 +00:00
Laurent Cozic
49b56e84a7 Revert "Update website"
This reverts commit ff1a6fdbbd.
2019-02-27 23:38:21 +00:00
Laurent Cozic
ff1a6fdbbd Update website 2019-02-27 23:37:16 +00:00
Laurent Cozic
2168090b96 Electron release v1.0.135 2019-02-27 22:52:08 +00:00
Laurent Cozic
33f7b680bc Desktop: Fixes #1273: Trying to improve accuracy of sidebar resizing 2019-02-27 22:44:10 +00:00
Laurent Cozic
0957298cb8 Desktop: Fixes #1268: Fix exporting to PDF and printing, which were broken following upgrade to Electron 4 2019-02-27 22:35:26 +00:00
Laurent Cozic
08f2f982cf Update website 2019-02-27 15:04:34 +00:00
RenatoXSR
3376fbfa55 Updated pt_BR locale to correct unicode char escapes. 2019-02-27 10:31:54 -03:00
Laurent Cozic
4a31e5fe73 Electron release v1.0.134 2019-02-27 10:03:07 +00:00
Laurent Cozic
baacec5ba6 Electron release v1.0.133 2019-02-27 00:14:24 +00:00
Laurent Cozic
95188b71b8 Desktop: Fixes #1265: Fixed column resize on Windows. Also increased minimum and maximum sizes of columns. 2019-02-27 00:13:56 +00:00
Laurent Cozic
cf57be6e98 Merge branch 'master' of github.com:laurent22/joplin 2019-02-26 23:40:16 +00:00
Laurent Cozic
b691092d7a iOS v10.0.30 2019-02-26 23:39:52 +00:00
Helmut K. C. Tessarek
03e60fc028 Merge pull request #1262 from cybertramp/patch-1
한국말 -> 한국어
2019-02-26 16:52:16 -05:00
Andros Fenollosa
2e25ec318f Update language es_ES (#1257)
* Update language es_ES

* Add Last-Translator

* Translation fix
2019-02-26 16:51:51 -05:00
cybertramp
7236e5e9ae 한국말 -> 한국어
"한국말" -> "한국어"
Korean translation error update.
2019-02-26 19:36:45 +09:00
Helmut K. C. Tessarek
6f7dd51a98 Merge pull request #1261 from tessus/localization-de_DE
Update de_DE.po
2019-02-25 20:32:09 -05:00
Helmut K. C. Tessarek
db1dab9293 Update de_DE.po 2019-02-25 20:24:59 -05:00
Laurent Cozic
06f1b9e4d7 Electron release v1.0.132 2019-02-24 23:46:17 +00:00
Laurent Cozic
8f958ac931 Desktop: Trying to fix sign server 2019-02-24 23:46:05 +00:00
Laurent Cozic
eae63bfb79 Electron release v1.0.131 2019-02-24 19:30:09 +00:00
Laurent Cozic
8adfc81c30 Trying to fix Windows build 2019-02-24 19:30:04 +00:00
Laurent Cozic
0c516443e3 Android release v1.0.239 2019-02-24 18:08:54 +00:00
Laurent Cozic
ad9bc0bf63 Electron release v1.0.130 2019-02-24 18:06:09 +00:00
Laurent Cozic
b0596670a6 Revert "New tag adding dialogue (#1206)"
This reverts commit 229dd7a6dd.
2019-02-24 18:04:25 +00:00
Laurent Cozic
998011ff43 Mobile: Apply tag duplication fix to mobile too 2019-02-24 18:02:50 +00:00
Laurent Cozic
081e1c5b62 Electron release v1.0.129 2019-02-24 17:27:11 +00:00
Laurent Cozic
edfd2c4d54 Desktop: Updated build process to fix buggy electron-builder https://github.com/electron-userland/electron-builder/issues/3660#issuecomment-465461491 2019-02-24 17:26:46 +00:00
Laurent Cozic
9d65a3a34c Android release v1.0.238 2019-02-24 12:53:00 +00:00
Laurent Cozic
1a86cbdb9d Electron release v1.0.128 2019-02-24 12:48:14 +00:00
Laurent Cozic
849cb4456c Update website 2019-02-24 12:38:20 +00:00
Laurent Cozic
1736717f2e Api: Require token for search end point, fixed a few issues and added doc 2019-02-24 12:37:37 +00:00
Laurent Cozic
50b75e1e63 API: Resolves #1148: Added support for search end-point and improved error handling 2019-02-24 12:24:55 +00:00
Laurent Cozic
179005dd6c All: Resolves #1198: In search results, give more weight to more recent notes and less to completed to-dos 2019-02-24 12:00:06 +00:00
Laurent Cozic
6b3fe6b2cb Update translations 2019-02-24 11:27:47 +00:00
Helmut K. C. Tessarek
c34872bb26 when deleting notebook or tag, display name (#1253)
The delete dialog for notebooks and tags does not display the name of the item to be deleted.
This can lead to an undesired result.

closes #1245
2019-02-24 11:11:34 +00:00
Helmut K. C. Tessarek
4845a21287 change notebook icon in toolbar and search result (#1252)
see f6f0bcf1c3
2019-02-24 11:10:55 +00:00
Laurent Cozic
ddd513fe09 Small tweaks to avoid confusion with enum name 2019-02-24 11:10:22 +00:00
Helmut K. C. Tessarek
4ce118d459 add shortcut to start a sync (#1231)
see https://github.com/laurent22/joplin/issues/1151#issuecomment-463845158
2019-02-24 11:09:15 +00:00
ruuti
99da184ba5 Set theme based background color to note webview to avoid white background on scroll when dark theme is enabled. (#1230) 2019-02-24 11:07:49 +00:00
Polshakov Dmitry
e2e4e62c4f Desktop: Fix alt key using (#1216)
Fix #934

On linux if you try to change the layout with Alt + Shift, the menu
will open instead
2019-02-24 11:07:07 +00:00
Caleb John
229dd7a6dd New tag adding dialogue (#1206)
* Update tag adding dialogue
- use datalist to autocomplete tags
- display tags with TagList

* Move the tagItem highlight color to theme.js
2019-02-24 10:55:19 +00:00
Mats Estensen
1e0c4cc5cd Desktop: Add type 'info' and 'OK' button to update dialog when version up-to-date (#1148)
* Add type 'info' and 'OK' button to update dialogue when current version is up to date

* remove whitespace and fix space to tabs

* remove created newline at end of file
2019-02-24 10:54:50 +00:00
Laurent Cozic
b40ccc7a15 All: Fixes #1251: Handle Show Uncompleted Tasks option when selecting a tag 2019-02-24 10:38:06 +00:00
Laurent Cozic
7d6b7e588c Desktop: use nodeIntegration 2019-02-24 10:17:37 +00:00
Laurent Cozic
22cacd2c5b Update website 2019-02-23 15:54:49 +00:00
Laurent Cozic
6a22e7836a Website: Add prerelease page 2019-02-23 15:54:34 +00:00
Laurent Cozic
32a67b9b33 minor tweaks 2019-02-23 15:53:14 +00:00
Laurent Cozic
b5dff09c28 All: Simplify Welcome notes and folders to avoid sync problems. Duplicate items will have to be manually deleted. 2019-02-23 15:47:29 +00:00
Laurent Cozic
c56d8153e8 Merge branch 'master' of github.com:laurent22/joplin 2019-02-18 18:12:00 +00:00
Laurent Cozic
eb5950d126 Desktop: Adding support for Mermaid 2019-02-18 18:11:53 +00:00
Helmut K. C. Tessarek
4241436e40 Merge pull request #1235 from tessus/localization-de_DE
Update de_DE.po
2019-02-18 12:04:47 -05:00
Helmut K. C. Tessarek
e93af7aed5 Update de_DE.po 2019-02-18 11:55:41 -05:00
Helmut K. C. Tessarek
d2416f850e Merge pull request #1234 from sczhg/master
Fix unclear Chinese translation.
2019-02-18 04:25:27 -05:00
Hao Huang
7af22eb006 Fix unclear Chinese translation. 2019-02-18 17:13:51 +08:00
Laurent Cozic
3f1be5e7e7 Merge branch 'master' of github.com:laurent22/joplin 2019-02-18 00:43:21 +00:00
Laurent Cozic
a4e649c82d Desktop: Clean up adding custom CSS and remove top margin and padding from rendered html 2019-02-18 00:42:52 +00:00
Laurent Cozic
cde1a8f0a8 Clipper: Fixed build error following package upgrade 2019-02-18 00:40:26 +00:00
Caleb John
cda6eb7c2f Fix little white corner between scrollbars (#1229) 2019-02-17 02:16:32 +00:00
Laurent Cozic
3c3e6aeca0 Merge branch 'master' of github.com:laurent22/joplin 2019-02-16 13:13:39 +00:00
Andros Fenollosa
99156311db Less verbose and visually more informative (#1226) 2019-02-16 13:13:33 +00:00
Laurent Cozic
91b2e5e703 Added Russian translation 2019-02-16 13:12:46 +00:00
Andros Fenollosa
573fd816d0 Update es_ES.po (#1227) 2019-02-16 13:10:54 +00:00
Laurent Cozic
e6aa002758 Desktop: Fixes #1215: Updated single instance logic for Electron 4 2019-02-16 13:10:37 +00:00
Laurent Cozic
361d46ac5d Clean up 2019-02-16 01:17:43 +00:00
Laurent Cozic
9bc7c2fd65 Added comments 2019-02-16 01:15:30 +00:00
Laurent Cozic
ce49f5f8b7 Merge branch 'master' of github.com:laurent22/joplin 2019-02-16 01:12:53 +00:00
Laurent Cozic
81e4cd319d Desktop: Allow resizing left panels 2019-02-16 01:12:43 +00:00
Zorbey Doğangüneş
71f905535f Turkish Language Improving (#1218)
* Fix & Improve

* Update tr_TR.po

Added missing " #, fuzzy " lanes.

* Update tr_TR.po

letter correction

* Update tr_TR.po

removed duplicate lanes.

* Update tr_TR.po

unnecessary space removed
2019-02-15 19:11:04 +00:00
0ndrey
d3bff0a9e3 Update ru_RU.po (#1219) 2019-02-15 19:10:37 +00:00
Laurent Cozic
88e6315d09 Security: Updated a few packages to fix CVE-2018-16469 2019-02-15 18:01:04 +00:00
Laurent Cozic
3d933c5244 Desktop: Trying to upgrade to Electron 4.0.4 2019-02-15 00:30:03 +00:00
Laurent Cozic
73af19314d Desktop: Trying to upgrade to Electron 4.0.4 2019-02-15 00:29:48 +00:00
Laurent Cozic
1d71712c8a Security: Updated parse-url to fix CVE-2018-3774 2019-02-14 23:18:17 +00:00
Laurent Cozic
1333c35389 Update website 2019-02-14 23:13:32 +00:00
ruuti
e0f5f47a15 Load background color from theme colours and set it for top and bottom safe area to respect iOS style guide. (#1195) 2019-02-14 23:09:21 +00:00
N Jannasch
34323042d5 Clipper: Feature added for storing urls (#1173)
* Clipper: Feature added for storing urls

* Clipper: Clip URL variable nameing changed
2019-02-14 23:05:28 +00:00
Joybin Chen
aa86fa9986 Clipper: bugfix, joplin icon not show up in Firefox using 32px size. (#1152) 2019-02-14 23:03:01 +00:00
Laurent Cozic
d2d659d5a9 Android release v1.0.237 2019-02-14 22:32:17 +00:00
Laurent Cozic
1595248b52 Electron release v1.0.127 2019-02-14 22:29:19 +00:00
Laurent Cozic
fc94c616b5 All: Updated translations 2019-02-14 22:28:04 +00:00
Laurent Cozic
f6f0bcf1c3 Desktop: Changed Folder icon to a Notebook 2019-02-14 22:27:53 +00:00
Laurent Cozic
6eeeda5dab All: Update welcome assets 2019-02-14 22:22:43 +00:00
Caleb John
58993d2ead Add styling to the scrollbars (#1204) 2019-02-14 22:21:21 +00:00
Caleb John
7c0b608769 Minor update to dark theme (#1181) 2019-02-14 22:18:42 +00:00
Zorbey Doğangüneş
259be84a3e Turkish Language Support (#1211)
* Add files via upload

* Delete tr_TR.po

* Updated translations
2019-02-14 22:17:36 +00:00
0ndrey
57c880cf85 Russian translate (#1179)
* Исправлен и обновлен перевод

* Update ru_RU.po

* Update ru_RU.po
2019-02-14 22:15:33 +00:00
Laurent Cozic
0469fe76d7 Desktop: Do not display tags that are not associated with any note 2019-02-13 23:33:07 +00:00
Laurent Cozic
a3e74320fa Desktop: Allow creating new note when multiple notes are selected 2019-02-13 22:57:43 +00:00
Laurent Cozic
4e0f4397b2 All: Fixed percent translated and added missing strings 2019-02-13 22:52:32 +00:00
Laurent Cozic
b26aab3863 Desktop: Print background images and colors, and improved checkoxes to avoid use of svg 2019-02-13 22:35:57 +00:00
Laurent Cozic
75ec97fe61 Updated Swedish translation 2019-02-13 17:34:26 +00:00
Laurent Cozic
9a356453fc Fix readme 2019-02-12 17:51:13 +00:00
Laurent Cozic
f0020b3393 Desktop: Highlight row backgroung in table 2019-02-10 17:16:11 +00:00
Laurent Cozic
ea9f1dc91d CLI v1.0.123 2019-02-10 16:47:42 +00:00
Laurent Cozic
2ef77dcf1f Revert "CLI: improve e2ee decrypt command"
This reverts commit 6e235605ed.
Fixed #1144: e2ee decrypt cannot be used inside cron. If we need
manually decrypting a file, we'll need to move this command
somewhere else.
2019-02-10 16:44:07 +00:00
Laurent Cozic
29e7ec4cc9 CLI: Fixes #1194: Fixed opening then saving note in text editor 2019-02-10 16:41:14 +00:00
Laurent Cozic
5710e3fad0 CLI v1.0.122 2019-02-10 16:34:41 +00:00
Laurent Cozic
a03aa62d58 Desktop: Moved buttons up on Config screen for consistency with other screens 2019-02-10 16:29:06 +00:00
Laurent Cozic
2203a39917 Desktop: Disable userstyle.css when printing or exporting to PDF 2019-02-10 16:11:41 +00:00
Laurent Cozic
bc58668483 Desktop: Fixes #1200: Note list was hidden when minimizing and
maximizing window
2019-02-10 15:59:28 +00:00
Ladislav Benc
0b4650f355 Suggesting some language improvements for the Welcome page (#1199)
I'm not sure about the "Joplin has three main columns" part. While it would be more correct to put definite articles
2019-02-10 15:44:43 +00:00
Laurent Cozic
aecdec48ad Electron release v1.0.126 2019-02-09 19:32:04 +00:00
Laurent Cozic
e49198a0d4 oops 2019-02-09 19:31:07 +00:00
Laurent Cozic
6aa4553dd3 Updated translations 2019-02-09 19:28:19 +00:00
Laurent Cozic
860e8a8f5a Desktop: Added a few more shortcuts for macOS and other platforms 2019-02-09 19:13:23 +00:00
Laurent Cozic
434037d793 Done Welcome integration on mobile and CLI 2019-02-09 19:04:34 +00:00
Laurent Cozic
214eae27da CLI: Fixed performance issue which was causing CLI to wait up to 10 seconds when closing the app 2019-02-09 19:04:00 +00:00
Laurent Cozic
0567188fa8 Desktop: Select Welcome notebook the first time it is created 2019-02-08 23:38:29 +00:00
Laurent Cozic
4326902683 Desktop: Fixes #1196: Moved webview to separate component to more precisely handle lifecycle events and precent uncessary reloading 2019-02-08 23:07:01 +00:00
Laurent Cozic
da3589149d Desktop: Fixed restored scroll position when only viewer is visible 2019-02-08 08:28:27 +00:00
Laurent Cozic
69b4b4d1f4 Deskop: Integrated Welcome notes to desktop 2019-02-07 23:27:50 +00:00
Laurent Cozic
dd4b46a88b All: Finished Welcome notebook 2019-02-07 23:17:58 +00:00
Laurent Cozic
6f2253b2f4 Updated Chinese translation (Thanks HongSen) 2019-02-07 22:25:50 +00:00
Laurent Cozic
4c00d9512e Desktop: Resolves #1041: Go back to previous note after clicking link 2019-02-07 18:17:09 +00:00
Laurent Cozic
6f511cb1e6 All: Tweaked blockquote CSS to make it fit more with styling update 2019-02-07 08:23:44 +00:00
Caleb John
029e84f538 Add new styling to tables and blockquote (#1185)
* Add new styling to tables and blockquote

* Update styling to tables
2019-02-07 08:01:38 +00:00
Laurent Cozic
42b1db1d08 Desktop: Use Arial for note viewer in Windows 2019-02-07 00:00:08 +00:00
Laurent Cozic
9d4b34cad7 All: Applied styles to mobile too 2019-02-06 23:52:29 +00:00
Laurent Cozic
cd9aff0f59 Desktop: Make default editor font a bit bigger 2019-02-06 23:06:37 +00:00
Laurent Cozic
032816fffc All: Made note font slightly smaller 2019-02-06 22:48:02 +00:00
Laurent Cozic
1408f06c8d All: darker text 2019-02-06 22:39:03 +00:00
Laurent Cozic
49f8d0c6d8 API: Allow specifying item ID for any item 2019-02-06 22:36:39 +00:00
Laurent Cozic
0d6443c30a All: Improve styling and layout of notes in note viewer 2019-02-05 23:55:09 +00:00
Laurent Cozic
e62d91dda8 Desktop: Allow using macOS App bundle as external editor, and improved error handling 2019-02-05 22:00:25 +00:00
Laurent Cozic
0e122c9dc5 Merge branch 'welcome' 2019-02-05 21:14:43 +00:00
Laurent Cozic
c2bd453e8c Updated welcome notes 2019-02-05 21:14:32 +00:00
Laurent Cozic
949ea7afb7 Merge branch 'welcome' of github.com:laurent22/joplin into welcome 2019-02-05 18:46:41 +00:00
Laurent Cozic
9f575101d2 Updated doc 2019-02-05 18:46:32 +00:00
Laurent Cozic
2b4470054e Merge branch 'welcome' of github.com:laurent22/joplin into welcome 2019-02-05 18:45:24 +00:00
Laurent Cozic
b220613e54 Remove logo 2019-02-05 18:45:16 +00:00
Laurent Cozic
11328babe8 Add NC logo 2019-02-05 18:26:49 +00:00
Laurent Cozic
735bc92bc4 Mobile: Added shim.createResourceFromPath to support Welcome assets 2019-02-05 18:11:03 +00:00
Laurent Cozic
6894b9b1b7 All: Added tests for Welcome asset handling 2019-02-05 17:39:10 +00:00
Laurent Cozic
4de7815f31 doc 2019-02-05 17:08:25 +00:00
Laurent Cozic
4ce7b48468 Merge branch 'master' of github.com:laurent22/joplin 2019-02-05 17:07:41 +00:00
Laurent Cozic
77e4cb87ad iOS v29 2019-02-05 17:06:36 +00:00
Laurent Cozic
dd6b43035e Link between notes on Welcome notes 2019-02-03 20:30:59 +00:00
Laurent Cozic
e76094c546 Also set tags on Welcome notes 2019-02-03 20:19:17 +00:00
Laurent Cozic
9c00dc4cab All: Added script to build welcome assets and to import them on startup 2019-02-03 18:58:44 +00:00
Laurent Cozic
fc416de348 Doc: Removed note 'tags' property from doc as not fully supported (only used in Web Clipper) 2019-02-03 17:01:49 +00:00
Laurent Cozic
a2156be4ec Mobile: Fixed search screen 2019-02-03 16:57:29 +00:00
Laurent Cozic
cf427eba0f Mobile: Fixed sidebar error 2019-02-03 16:15:07 +00:00
Laurent Cozic
0050c90678 Update translations 2019-02-03 15:57:10 +00:00
Laurent Cozic
5eeff02dbe Revert "Исправлен и обновлен перевод (#1175)"
This reverts commit eb283efc20.
2019-02-03 15:56:20 +00:00
0ndrey
eb283efc20 Исправлен и обновлен перевод (#1175) 2019-02-03 15:50:30 +00:00
Laurent Cozic
87121c9c21 All: Fixed importing ENEX file when note incorrectly contains a reminder tag 2019-02-02 13:04:42 +00:00
Laurent Cozic
a2dbbbf832 Merge branch 'master' of github.com:laurent22/joplin 2019-02-02 10:54:07 +00:00
Laurent Cozic
fd251cd9a9 Desktop: started writing welcome notes 2019-02-02 10:53:57 +00:00
Laurent Cozic
8ced2d288e Desktop: Note reloading issue 2019-02-02 10:47:26 +00:00
Laurent Cozic
242926d381 Fixed regressions in test units 2019-01-31 09:48:48 +00:00
Laurent Cozic
8c9a148e71 All: Better handle search queries that include dashes 2019-01-31 08:35:41 +00:00
Laurent Cozic
9e165fc7dc Desktop: Fixes #1161: Display highlighted text and other background colours and images when exporting to PDF or printing 2019-01-31 08:23:47 +00:00
Laurent Cozic
f46e4e0cec Desktop: Fixes #1142: Disallow dropping notes on sidebar Notebook header 2019-01-31 08:02:12 +00:00
Laurent Cozic
efcf5ecef4 Desktop: When deleting note, display title or number of notes 2019-01-31 07:55:51 +00:00
Laurent Cozic
b6ba843d09 Desktop: Added 'Insert date time' option to menu 2019-01-30 22:45:49 +00:00
Laurent Cozic
915112e274 Desktop: Restore scroll position when switching notes 2019-01-30 22:45:28 +00:00
Laurent Cozic
cc8f8fcd2c Desktop: Allow selecting editor path with dialog window 2019-01-30 19:19:06 +00:00
Laurent Cozic
bda3ea9a35 Desktop: Improve how new notes are created to make it more reliable 2019-01-30 18:06:47 +00:00
Laurent Cozic
a7aed1f93a Desktop: Fixed scrolling issue 2019-01-30 17:35:41 +00:00
Laurent Cozic
a33f602f3b Desktop: Record last selected note IDs and restore it when opening notebook 2019-01-29 18:32:52 +00:00
Laurent Cozic
4d08b49578 Desktop: Added Usage link next to search box 2019-01-29 18:11:31 +00:00
Laurent Cozic
21e049ab45 Desktop: When selecting multiple notes, display possible actions as buttons 2019-01-29 18:02:34 +00:00
Helmut K. C. Tessarek
1d4234caea Merge pull request #1155 from chenlhlinux/patch-1
Update zh_CN.po
2019-01-29 01:10:48 -05:00
Laurent Cozic
d1269de3a7 Desktop: Made confirmation buttons sticky on Config screen 2019-01-27 23:44:16 +00:00
Laurent Cozic
8c19fcf8fc Merge branch 'master' of github.com:laurent22/joplin 2019-01-27 23:16:37 +00:00
Laurent Cozic
beaba2be55 Desktop: Group config options into sections 2019-01-27 23:15:56 +00:00
chenlhlinux
32c9ad1d59 Update zh_CN.po 2019-01-27 19:35:10 +08:00
Helmut K. C. Tessarek
a194513252 de_DE.po: remove the last 2 occurences of fuzzy
Both 2 translations are accurate, thus I'm removing the fuzzy flag.
2019-01-26 22:22:09 -05:00
Helmut K. C. Tessarek
cd93a1d1e1 Merge pull request #1157 from xissy/patch-2
All: Update Korean translations
2019-01-26 21:53:36 -05:00
Taeho Kim
2867728996 Update ko.po
Added proper Korean translations into empty messages and fuzzy translations.
2019-01-26 17:34:57 -08:00
Laurent Cozic
394cc78851 Desktop: Use ENTER and ESCAPE to go to next search result or to close search bar 2019-01-26 18:40:43 +00:00
Laurent Cozic
76f0a26322 Desktop: Keep synchronise button and status at bottom of side bar 2019-01-26 18:36:20 +00:00
Laurent Cozic
92d7a577a0 Desktop: Use SPACE to collapse or expand a folder in sidebar 2019-01-26 18:09:09 +00:00
Laurent Cozic
9c1219b188 Desktop: Use arrow to move between items, and added shortcuts to focus different elements 2019-01-26 18:04:32 +00:00
Laurent Cozic
f62bbfe286 Desktop: Toggle todo checkbox using SPACE key 2019-01-26 15:33:45 +00:00
Laurent Cozic
fef176eb96 Merge branch 'master' of github.com:laurent22/joplin 2019-01-26 15:15:35 +00:00
Laurent Cozic
ed541dac3b Desktop: Delete note using keyboard 2019-01-26 15:15:16 +00:00
chenlhlinux
4a175b2158 Update zh_CN.po 2019-01-26 20:06:08 +08:00
Helmut K. C. Tessarek
4076899e11 Merge pull request #1149 from matsest/update-norwegian-190125
All: Update norwegian translations
2019-01-26 02:43:15 -05:00
Laurent Cozic
998bdf3b56 Desktop: Move up and down in note list using arrow keys 2019-01-25 19:59:36 +00:00
Laurent Cozic
76b211eb6d Electron release v1.0.125 2019-01-25 18:03:43 +00:00
Laurent Cozic
f781cb3922 Android release v1.0.236 2019-01-25 18:00:24 +00:00
Laurent Cozic
ced3e5d623 Android: Trying to remove Firebase libraries 2019-01-25 17:54:43 +00:00
Mats Estensen
2a4812cb87 update norwegian translations 2019-01-25 18:35:08 +01:00
Laurent Cozic
1f384c7ae4 Merge branch 'master' of github.com:laurent22/joplin 2019-01-25 17:14:26 +00:00
Laurent Cozic
01a3285636 Updated doc 2019-01-25 17:14:17 +00:00
Laurent Cozic
53166cb3f5 All: Fixes #1137: Fixed regression on SeaFile sync 2019-01-21 17:34:41 +00:00
Laurent Cozic
893462ae87 Check that resource could be loaded 2019-01-20 16:28:10 +00:00
Laurent Cozic
949dbf45f1 Desktop: Resolves #1099: Show Markdown images in external editor 2019-01-20 16:27:33 +00:00
Laurent Cozic
d7dc625042 Clipper: Fixes #1058: Import images at correct size 2019-01-20 15:26:43 +00:00
Laurent Cozic
cc91c77f9e Mobile: Prevent search box from being cleared when updated from somewhere else 2019-01-19 18:40:21 +00:00
Laurent Cozic
4847fd76de Android release v1.0.235 2019-01-19 18:26:17 +00:00
Laurent Cozic
25b711a8da Electron release v1.0.124 2019-01-19 18:23:00 +00:00
Laurent Cozic
b5e50fa62e Update translations 2019-01-19 18:22:18 +00:00
Laurent Cozic
28e40a5c86 Disable a few more tags when renderering to HTML 2019-01-19 18:14:01 +00:00
Laurent Cozic
a8a7b7c07b Merge branch 'master' into search_engine_fts_fix 2019-01-19 18:08:45 +00:00
Laurent Cozic
299008688d All: Search: Integration to CLI and mobile apps 2019-01-19 18:03:05 +00:00
Laurent Cozic
42a674008f All: Search: More multi-language support, and started updating mobile app 2019-01-18 18:31:07 +00:00
Laurent Cozic
8fdc0bf17c All: Search: More multi-language support 2019-01-18 17:56:56 +00:00
Laurent Cozic
4e3896c108 iOS: Fixes #792: Fix "Network request failed" error that some users were having 2019-01-18 17:42:46 +00:00
Laurent Cozic
96cd56548e Desktop: Improve search keyword highlighting 2019-01-17 19:01:35 +00:00
Joybin Chen
739fb2c3d2 Desktop: handle ESC key press to cancel the NotePropertiesDialog (#1125)
* Electron: enable ESC key press to dismiss NotePropertyDialog, when no editedKey.

* Desktop: handle ESC key press to cancel the NotePropertiesDialog
2019-01-16 20:19:48 +00:00
Laurent Cozic
0c98573700 All: Fixes #769: Disable META tags in Markdown viewers 2019-01-15 20:12:53 +00:00
Laurent Cozic
8dc0b34fdc Desktop: Search engine: Improved support for JA, KO, ZH scripts 2019-01-15 19:55:58 +00:00
Laurent Cozic
384ca09842 Merge branch 'master' into search_engine_fts_fix 2019-01-15 19:33:42 +00:00
Laurent Cozic
97d86825c2 Desktop: Fixes #1126: Open Katex link in external browser instead of inside app 2019-01-15 19:30:45 +00:00
Laurent Cozic
f5a824b1e6 Removing CLI demo 2019-01-15 19:12:19 +00:00
Laurent Cozic
4fc11e77e8 Removing CLI demo 2019-01-15 19:11:35 +00:00
Laurent Cozic
8d16ad7035 Updated dates 2019-01-15 19:10:27 +00:00
Laurent Cozic
3b1d84b00b Merge branch 'master' of github.com:laurent22/joplin 2019-01-15 18:37:54 +00:00
Laurent Cozic
3f540da31b Desktop: Improved local search by highlighting even partial matches 2019-01-15 18:37:44 +00:00
Laurent Cozic
3a20f1c245 Merge pull request #1119 from abonte/update-italian-translation
update Italian
2019-01-15 18:18:48 +00:00
Laurent Cozic
e803f0c545 update new strings to nb_NO (#1121) 2019-01-15 18:18:34 +00:00
Philipp Zumstein
c9495c23a6 Update de_DE.po (#1124) 2019-01-15 18:18:17 +00:00
Laurent Cozic
26aae9eea5 Merge branch 'master' of github.com:laurent22/joplin 2019-01-15 18:17:56 +00:00
Laurent Cozic
7d92136467 Added version info to auto-update dialog 2019-01-15 18:17:45 +00:00
Laurent Cozic
a7896b43d7 More search engine improvements 2019-01-15 18:10:22 +00:00
Laurent Cozic
2e12b2655b More fixes to search engine and better handling of non-ASCII searches 2019-01-14 19:11:54 +00:00
Laurent Cozic
a1f0bd1e6c Search engine: normalize text 2019-01-13 16:05:07 +00:00
Laurent Cozic
4472590133 Merge branch 'master' into search_engine_fts_fix 2019-01-13 15:52:41 +00:00
Laurent Cozic
64f1214ad9 Merge branch 'master' of github.com:laurent22/joplin 2019-01-13 15:50:37 +00:00
Laurent Cozic
bd465a72cf iOS v10.0.28 2019-01-13 15:50:19 +00:00
Mats Estensen
1d1c2a6925 update new strings to nb_NO 2019-01-12 14:40:57 +01:00
abonte
d68ba32533 fix typo 2019-01-12 14:28:49 +01:00
Laurent Cozic
d1a316032d Update website 2019-01-12 00:02:23 +00:00
Laurent Cozic
b465042a56 Fixed stats page 2019-01-12 00:01:58 +00:00
Laurent Cozic
8ff2418b02 Desktop: Added support for pre-releases 2019-01-11 23:40:05 +00:00
Laurent Cozic
f6640bcc32 Electron release v1.0.123 2019-01-11 22:07:23 +00:00
Laurent Cozic
fa3c0fd18a Android release v1.0.234 2019-01-11 17:14:19 +00:00
Laurent Cozic
2ac03c18c4 Revert "replace markdown-it-katex with markdown-it-texmath, this makes using $ much better (#1116)"
This reverts commit 46b82f877b.
2019-01-11 17:02:04 +00:00
abonte
51ee6128f3 update italian 2019-01-11 17:47:17 +01:00
Laurent Cozic
53478056de Update website 2019-01-10 21:43:25 +00:00
Laurent Cozic
83c791564a Android release v1.0.233 2019-01-10 19:14:32 +00:00
Laurent Cozic
65d0032995 Electron release v1.0.120 2019-01-10 19:04:35 +00:00
Laurent Cozic
37c4f99341 CLI v1.0.120 2019-01-10 19:00:42 +00:00
Laurent Cozic
adbc873b2a Update translations 2019-01-10 18:59:56 +00:00
Laurent Cozic
3567a57d6a Update for mac 2019-01-10 18:53:18 +00:00
Caleb John
b4e9fb157f Apply zoom and editorfont updates without needing to restart (#1109)
* Apply zoom and editorfont updates without needing to restart
fixes #1106

* Combine zoomRatio and editorFontSize into the theme cache
2019-01-10 18:34:58 +00:00
Helmut K. C. Tessarek
1be3646a04 fix PR template (#1114)
If someone does not delete the 'Attention' line, it will show up in the pull request.
Comments and information should be enclosed in comment markers.
2019-01-10 18:34:24 +00:00
Caleb John
46b82f877b replace markdown-it-katex with markdown-it-texmath, this makes using $ much better (#1116) 2019-01-10 18:33:49 +00:00
Helmut K. C. Tessarek
ef56eb4a52 fix markdown code for checked checkbox (#1113)
fixes #1067
2019-01-10 18:32:45 +00:00
Laurent Cozic
6989f9fd16 CLI: Fixes #1096: Fixed search function in terminal app 2019-01-10 19:25:21 +00:00
Laurent Cozic
7c3e8547de CLI: Fixes #1100: New folders were no longer being shown in list 2019-01-10 19:17:38 +00:00
Laurent Cozic
8268c3edba Desktop: Resolves #1059: Fixed behaviour of export to PDF and print 2019-01-10 18:58:58 +00:00
Laurent Cozic
a8cc8763b0 Android: Fixes #321: Removed dependency to Firebase 2019-01-10 18:49:26 +00:00
Laurent Cozic
09b4acf087 Merge branch 'master' of github.com:laurent22/joplin 2019-01-10 18:04:20 +00:00
Laurent Cozic
3b719ce53b Fixed keyword highlighting bug and other minor issues 2019-01-09 17:33:52 +00:00
Abijeet Patro
83281197f1 Adds functionality to toggle the notebooks and tags on the sidebar. (#1002)
* Adds functionality to toggle the notebooks and tags on the sidebar.

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

* Modified to not use an anonymous function.

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

* Updated the code to be cleaner.

Signed-off-by: abijeet <abijeetpatro@gmail.com>
2019-01-09 17:25:44 +00:00
tfinnberg
ffda04f9b4 fixed file url issue (#1054) 2019-01-09 17:21:32 +00:00
Ikuya AWASHIRO
606893286a Update Japanese Translation. (#1102) 2019-01-09 17:16:49 +00:00
Laurent Cozic
075b71746a Update CONTRIBUTING.md 2019-01-09 17:07:43 +00:00
Laurent Cozic
01f1f3e957 Update PULL_REQUEST_TEMPLATE 2019-01-09 17:06:59 +00:00
Caleb John
88a9d5e802 Fix window manager icon on linux (#1110) 2019-01-09 17:05:28 +00:00
Laurent Cozic
7eebfae1c3 Updated pt_BR translation 2019-01-09 16:49:27 +00:00
Jacob Herrington
340fe76b8f Remove S (#1101)
Noticed this while reading!
2019-01-06 01:54:30 +01:00
Helmut K. C. Tessarek
e83678df3a Merge pull request #1098 from rasperepodvipodvert/patch-1
Update ru_RU translation
2019-01-04 18:07:09 -05:00
Helmut K. C. Tessarek
0bbbb49a31 Merge pull request #1079 from y-usuzumi/master
Update zh_CN translations
2019-01-04 18:06:23 -05:00
Ettore Atalan
0e61115857 Update de_DE.po (#1076)
* Update de_DE.po

Translated last untranslated strings and removed anglicisms.
2019-01-04 18:05:50 -05:00
Mats Estensen
8d3ac6f6fe Update Norwegian translation (#1061)
* Update norwegian translation

* correct plural words and some menu items

* update nb_NO
2019-01-04 18:05:13 -05:00
filatovzru
86e644be9a Добавил перевода 2019-01-04 20:32:59 +03:00
Laurent Cozic
30201249b5 Mobile: Fixes #1068: Handle case where notebook has a parent that no longer exists 2018-12-31 17:33:20 +01:00
Laurent Cozic
41155f5ef4 Started rewriting search engine to better support unicode 2018-12-29 20:19:18 +01:00
Laurent Cozic
f308fe71f9 Mobile: Fixes #1082: Highlight correct keywords when doing a search 2018-12-29 18:24:02 +01:00
Laurent Cozic
5a00214fd2 Android release v1.0.232 2018-12-29 03:14:34 +01:00
Laurent Cozic
1b3e0f65e1 Mobile: Fixes #1057: Handle more cases where the title text field disappear 2018-12-29 03:12:23 +01:00
Laurent Cozic
7cfc537870 Android release v1.0.225 2018-12-28 21:42:58 +01:00
Laurent Cozic
53513db5b5 Mobile: Fixes #1066: Disable use of FTS when not present on device 2018-12-28 21:40:29 +01:00
Laurent Cozic
59402cf198 Android: Fixes #1062: Don t display Play Service alert when Play Service unavailable 2018-12-28 20:38:40 +01:00
Laurent Cozic
12efc02d91 Android release v1.0.224 2018-12-27 22:51:38 +01:00
Laurent Cozic
f38b907680 Mobile: Fixes #1057: Fix missing title field issue in Android 2018-12-27 22:49:19 +01:00
Laurent Cozic
8fcb46ca4a Revert "Revert "Upgrade React Native" - Fixes #1057"
This reverts commit 50ad4d05f2.
2018-12-27 20:14:20 +01:00
Kenneth Zhao
71ec9a193f Update zh_CN translations 2018-12-27 14:27:15 +08:00
Laurent Cozic
393a545548 Android release v1.0.201 2018-12-23 20:28:03 +01:00
Laurent Cozic
f88449fbb0 Android release v1.0.200 2018-12-23 20:18:24 +01:00
Laurent Cozic
50ad4d05f2 Revert "Upgrade React Native" - Fixes #1057
This reverts commit 32c02275a2.
2018-12-23 20:11:12 +01:00
Laurent Cozic
8d0e562c8a Android release v1.0.181 2018-12-20 14:58:35 +01:00
Laurent Cozic
c98e67c003 /bin/bash: qa: command not found 2018-12-20 14:53:10 +01:00
Laurent Cozic
5565538b80 Android: Trying to get notifications to work in Android 8.x 2018-12-20 14:52:56 +01:00
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
602 changed files with 99488 additions and 34234 deletions

40
.eslintignore Normal file
View File

@@ -0,0 +1,40 @@
*.min.js
.git/
.github/
_mydocs/
_releases/
Assets/
CliClient/build
CliClient/locales
CliClient/node_modules
CliClient/tests-build
CliClient/tests/enex_to_md
CliClient/tests/html_to_md
CliClient/tests/logs
CliClient/tests/support
CliClient/tests/sync
CliClient/tests/tmp
Clipper/joplin-webclipper/content_scripts/JSDOMParser.js
Clipper/joplin-webclipper/content_scripts/Readability-readerable.js
Clipper/joplin-webclipper/content_scripts/Readability.js
Clipper/joplin-webclipper/dist
Clipper/joplin-webclipper/icons
Clipper/joplin-webclipper/popup/build
Clipper/joplin-webclipper/popup/node_modules
docs/
ElectronClient/app/dist
ElectronClient/app/lib
ElectronClient/app/lib/vendor/sjcl-rn.js
ElectronClient/app/lib/vendor/sjcl.js
ElectronClient/app/locales
ElectronClient/app/node_modules
highlight.pack.js
node_modules/
ReactNativeClient/android
ReactNativeClient/ios
ReactNativeClient/lib/vendor/
ReactNativeClient/locales
ReactNativeClient/node_modules
readme/
Tools/node_modules
Tools/PortableAppsLauncher

53
.eslintrc.js Normal file
View File

@@ -0,0 +1,53 @@
module.exports = {
'env': {
'browser': true,
'es6': true,
'node': true,
},
'extends': ['eslint:recommended'],
'globals': {
'Atomics': 'readonly',
'SharedArrayBuffer': 'readonly',
// Jasmine variables
'expect': 'readonly',
'describe': 'readonly',
'it': 'readonly',
'beforeEach': 'readonly',
'jasmine': 'readonly',
// React Native variables
'__DEV__': 'readonly',
// Clipper variables
'browserSupportsPromises_': true,
'chrome': 'readonly',
'browser': 'readonly',
},
'parserOptions': {
'ecmaVersion': 2018,
"ecmaFeatures": {
"jsx": true,
},
"sourceType": "module",
},
'rules': {
"react/jsx-uses-react": "error",
"react/jsx-uses-vars": "error",
// Ignore all unused function arguments, because in some
// case they are kept to indicate the function signature.
"no-unused-vars": ["error", { "argsIgnorePattern": ".*" }],
"no-constant-condition": 0,
"no-prototype-builtins": 0,
"space-in-parens": ["error", "never"],
"semi": ["error", "always"],
"eol-last": ["error", "always"],
"quotes": ["error", "single"],
"indent": ["error", "tab"],
"comma-dangle": ["error", "always-multiline"],
"no-trailing-spaces": "error",
},
"plugins": [
"react",
],
};

4
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,4 @@
# These are supported funding model platforms
patreon: joplin
custom: https://joplinapp.org/donate/

4
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,4 @@
👉 Please follow one of these issue templates:
- https://github.com/laurent22/joplin/issues/new/choose
Note: to keep the backlog clean and actionable, issues may be immediately closed if they do not follow one of the above issue templates.

43
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,43 @@
---
name: "🐛 Bug Report"
about: Report a reproducible bug or regression in Joplin.
title: ''
labels: 'bug'
---
<!--
Please provide a clear and concise description of what the bug is. (In the section Steps To Reproduce.)
Include screenshots if needed.
Please test using the latest Joplin release to make sure your issue has not already been fixed.
-->
## Environment
Joplin version:
Platform:
OS specifcs:
<!--
Platform can be one of: macOS, Linux, Windows, Android, iOS, terminal (or a combination)
OS specifcs: e.g. OS version, Linux distribution, Android/iOS version, ...
-->
## Steps To Reproduce
1.
2.
<!--
Issues without reproduction steps are likely to stall.
-->
Describe what you expected to happen:
## Logfile
<!--
Please attach a debug log. Issues without a debug log are likely to stall.
For information on how to collect a log file: https://joplinapp.org/debugging/
-->

View File

@@ -0,0 +1,33 @@
---
name: Feature request
about: Suggest a feature for Joplin.
title: '[Feature request] '
labels: 'feature request'
---
<!--
Please search open issues first - many features have already been requested!
-->
## Has it been discussed in the forum? Link to topic.
<!--
Feature requests should be discussed in the forum first. https://discourse.joplinapp.org
Please provide a link to the topic.
-->
## Is your feature request related to a problem? Please describe.
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
## Describe the solution you'd like
<!-- A clear and concise description of what you want to happen. -->
## Describe alternatives you've considered
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
## Additional context
<!-- Add any other context or screenshots about the feature request here. -->

29
.github/ISSUE_TEMPLATE/question.md vendored Normal file
View File

@@ -0,0 +1,29 @@
---
name: "🤔 Questions and Help"
about: The issue tracker is not for questions. Please ask questions on https://discourse.joplinapp.org/.
title: 'Question: '
labels: 'question'
---
🚨 The issue tracker is not for questions. 🚨
As it happens, support requests that are created as issues are likely to be closed. We want to make sure you are able to find the help you seek.
## Questions and Help
Please read the [documentation](https://joplinapp.org/) and [FAQ](https://joplinapp.org/faq/) first.
### https://discourse.joplinapp.org/
If you have still questions related to Joplin, please open a topic in the [forum](https://discourse.joplinapp.org/).
You can use your GitHub credentials to login to the forum.
## Links
- Documentation: https://joplinapp.org
- FAQ: https://joplinapp.org/faq/
- Forum: https://discourse.joplinapp.org
- How to enable end-to-end encryption: https://joplinapp.org/e2ee/
- API documentation: https://joplinapp.org/api/
- How to enable debug mode: https://joplinapp.org/debugging/

13
.github/PULL_REQUEST_TEMPLATE vendored Normal file
View File

@@ -0,0 +1,13 @@
<!--
Please prefix the title with the platform you are targetting:
- "Desktop" for the Windows/macOS/Linux app (Electron app)
- "Mobile" for the mobile app (or "Android" / "iOS" if the pull request only applies to one of the mobile platforms)
- "CLI" for the CLI app
For example: "Desktop: Added new setting to change font", or "Mobile: Fixed config screen error"
PLEASE READ THE GUIDE FIRST: https://github.com/laurent22/joplin/blob/master/CONTRIBUTING.md
-->

25
.github/stale.yml vendored Normal file
View File

@@ -0,0 +1,25 @@
# Configuration for probot-stale - https://github.com/probot/stale
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 90
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- "good first issue"
- "essential"
- "essential-reviewed"
- "help wanted"
- "nice to have"
- "upstream"
- "backlog"
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
Hey there, it looks like there has been no activity on this issue recently. Has the issue been fixed, or does it still require the community's attention? This issue may be closed if no further activity occurs.
You may also label this issue as "backlog" and I will leave it open.
Thank you for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: >
Closing this issue after a prolonged period of inactivity. If this issue is still present in the latest release, please feel free to create a new issue with up-to-date information.
only: issues

2
.gitignore vendored Executable file → Normal file
View File

@@ -39,5 +39,7 @@ node_modules
Tools/github_oauth_token.txt
_releases
ReactNativeClient/lib/csstojs/
ReactNativeClient/lib/rnInjectedJs/
ElectronClient/app/gui/note-viewer/fonts/
ElectronClient/app/gui/note-viewer/lib.js
Tools/commit_hook.txt

Binary file not shown.

Before

Width:  |  Height:  |  Size: 986 B

BIN
Assets/AdresseSupport.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 335 KiB

After

Width:  |  Height:  |  Size: 336 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

View File

@@ -1,7 +1,8 @@
[![Travis Build Status](https://travis-ci.org/laurent22/joplin.svg?branch=master)](https://travis-ci.org/laurent22/joplin) [![Appveyor Build Status](https://ci.appveyor.com/api/projects/status/github/laurent22/joplin?branch=master&passingText=master%20-%20OK&svg=true)](https://ci.appveyor.com/project/laurent22/joplin)
# 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
@@ -9,8 +10,6 @@
echo 'export PATH="/usr/local/opt/gettext/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
If you get a node-gyp related error you might need to manually install it: `npm install -g node-gyp`
## Linux and Windows (WSL) dependencies
- Install yarn - https://yarnpkg.com/lang/en/docs/install/
@@ -37,6 +36,10 @@ 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.
@@ -56,6 +59,10 @@ If node-gyp does not works (MSBUILD: error MSB3428: Could not load the Visual C+
If `yarn dist` fails, it may need administrative rights.
If you get an `error MSB8020: The build tools for v140 cannot be found.` try to run with a different toolset version, eg `npm install --toolset=v141` (See [here](https://github.com/mapbox/node-sqlite3/issues/1124) for more info).
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.

View File

@@ -1,19 +1,73 @@
# 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.
The [Joplin Forum](https://discourse.joplinapp.org/) is the community driven place for user support, general discussion about Joplin, problems with installation, new features and software development questions. It is possible to login with your GitHub account. Don't use the issue tracker for support questions.
# 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.
File bugs in the [Github Issue Tracker](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue). Please follow these guidelines:
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.
- Search existing issues first, make sure yours hasn't already been reported.
- Consider [enabling debug mode](https://joplinapp.org/debugging/) so that you can provide as much details as possible when reporting the issue.
- Stay on topic, but describe the issue in detail so that others can reproduce it.
- **Provide a screenshot** if possible. A screenshot showing the problem is often more useful than a paragraph describing it.
- For web clipper bugs, **please provide the URL causing the issue**. Sometimes the clipper works in one page but not in another so it is important to know what URL has a problem.
# 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.
Please check that your request has not already been posted in the [Github Issue Tracker](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue). If it has, **up-voting the issue** increases the chances it'll be noticed and implemented in the future. "+1" comments are not tracked.
# Adding new features
As a general rule, suggestions to *improve Joplin* should be posted first in the [Joplin Forum](https://discourse.joplinapp.org/) for discussion.
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.
Avoid listing multiple requests in one report in the [Github Issue Tracker](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue). One issue per request makes it easier to track and discuss it.
Finally, when submitting a pull request, don't forget to [test your code](#unit-tests).
# Contribute to the project
## Contributing to Joplin's translation
Joplin is available in multiple languages thanks to the help of its users. You can help translate Joplin to your language or keep it up to date. Please read the documentation about [Localisation](https://joplinapp.org/#localisation).
## Contributing to Joplin's code
If you want to start contributing to the project's code, please follow these guidelines before creating a pull request:
- Bug fixes are always welcome. Start by reviewing the list of [essential issues](https://github.com/laurent22/joplin/issues?q=is%3Aissue+is%3Aopen+label%3Aessential)
- Before adding a new feature, ask about it in the [Github Issue Tracker](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue) or the [Joplin Forum](https://discourse.joplinapp.org/), or check if existing discussions exist to make sure the new functionality is desired.
- **Changes that will consist in more than 50 lines of code should be discussed the [Joplin Forum](https://discourse.joplinapp.org/)**, so that you don't spend too much time implementing something that might not 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.
## Coding style
Coding style is enforced by a pre-commit hook that runs eslint. This hook is installed whenever running `npm install` on any of the application directory. If for some reason the pre-commit hook didn't get installed, you can manually install it by running `npm install` at the root of the repository.
## Unit tests
When submitting a pull request for a new feature or bug fix, please add unit tests for your code. Unit testing GUI changes is not always possible so it is not required, but any change in a file under /lib for example should be unit tested.
The tests are under CliClient/tests. To get them running, you first need to build the CLI app:
cd CliClient
npm i
To run the test units, you must have an instance of the cli app running. In a first window navigate into `CliClient` and run:
```sh
./run.sh
```
> If you get an error like `Error: Cannot find module '../locales/index.js'`, this means you must (a) rebuild translations or (b) take > them from one of the other apps. To do option b, you can run the following command to copy them from the `ReactNativeClient` directory:>
>
> ```sh
> cd .. # Return to the root of the project
> rsync -aP ./ReactNativeClient/locales/ ./CliClient/build/locales/
> ```
Then run the tests in a second window. To run all the test units:
./run_test.sh
To run just one particular file:
./run_test.sh markdownUtils # Don't add the .js extension

View File

@@ -13,6 +13,7 @@ tests/fuzzing.*
tests/fuzzing -*
tests/logs/*
tests/cli-integration/
tests/tmp/
*.mo
*.*~
tests/sync

View File

@@ -1,14 +1,11 @@
const { _ } = require('lib/locale.js');
const { Logger } = require('lib/logger.js');
const Resource = require('lib/models/Resource.js');
const { netUtils } = require('lib/net-utils.js');
const http = require("http");
const urlParser = require("url");
const http = require('http');
const urlParser = require('url');
const enableServerDestroy = require('server-destroy');
class ResourceServer {
constructor() {
this.server_ = null;
this.logger_ = new Logger();
@@ -40,7 +37,7 @@ class ResourceServer {
async start() {
this.port_ = await netUtils.findAvailablePort([9167, 9267, 8167, 8267]);
if (!this.port_) {
if (!this.port_) {
this.logger().error('Could not find available port to start resource server. Please report the error at https://github.com/laurent22/joplin');
return;
}
@@ -48,11 +45,10 @@ class ResourceServer {
this.server_ = http.createServer();
this.server_.on('request', async (request, response) => {
const writeResponse = (message) => {
const writeResponse = message => {
response.write(message);
response.end();
}
};
const url = urlParser.parse(request.url, true);
let resourceId = url.pathname.split('/');
@@ -69,6 +65,7 @@ class ResourceServer {
if (!done) throw new Error('Unhandled resource: ' + resourceId);
} catch (error) {
response.setHeader('Content-Type', 'text/plain');
// eslint-disable-next-line require-atomic-updates
response.statusCode = 400;
response.write(error.message);
}
@@ -76,7 +73,7 @@ class ResourceServer {
response.end();
});
this.server_.on('error', (error) => {
this.server_.on('error', error => {
this.logger().error('Resource server:', error);
});
@@ -91,7 +88,6 @@ class ResourceServer {
if (this.server_) this.server_.destroy();
this.server_ = null;
}
}
module.exports = ResourceServer;
module.exports = ResourceServer;

View File

@@ -5,13 +5,12 @@ 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 htmlentities = new Entities().encode;
const chalk = require('chalk');
const tk = require('terminal-kit');
@@ -20,12 +19,10 @@ 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');
const TextWidget = require('tkwidgets/TextWidget.js');
const HLayoutWidget = require('tkwidgets/HLayoutWidget.js');
const VLayoutWidget = require('tkwidgets/VLayoutWidget.js');
const ReduxRootWidget = require('tkwidgets/ReduxRootWidget.js');
const RootWidget = require('tkwidgets/RootWidget.js');
const WindowWidget = require('tkwidgets/WindowWidget.js');
const NoteWidget = require('./gui/NoteWidget.js');
@@ -37,7 +34,6 @@ const StatusBarWidget = require('./gui/StatusBarWidget.js');
const ConsoleWidget = require('./gui/ConsoleWidget.js');
class AppGui {
constructor(app, store, keymap) {
try {
this.app_ = app;
@@ -50,12 +46,12 @@ class AppGui {
// 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',
focus_next: 'TAB',
focus_previous: 'SHIFT_TAB',
move_up: 'UP',
move_down: 'DOWN',
page_down: 'PAGE_DOWN',
page_up: 'PAGE_UP',
};
this.renderer_ = null;
@@ -64,7 +60,7 @@ class AppGui {
this.renderer_ = new Renderer(this.term(), this.rootWidget_);
this.app_.on('modelAction', async (event) => {
this.app_.on('modelAction', async event => {
await this.handleModelAction(event.action);
});
@@ -134,7 +130,7 @@ class AppGui {
};
folderList.name = 'folderList';
folderList.vStretch = true;
folderList.on('currentItemChange', async (event) => {
folderList.on('currentItemChange', async event => {
const item = folderList.currentItem;
if (item === '-') {
@@ -169,7 +165,7 @@ class AppGui {
});
}
});
this.rootWidget_.connect(folderList, (state) => {
this.rootWidget_.connect(folderList, state => {
return {
selectedFolderId: state.selectedFolderId,
selectedTagId: state.selectedTagId,
@@ -196,7 +192,7 @@ class AppGui {
id: note ? note.id : null,
});
});
this.rootWidget_.connect(noteList, (state) => {
this.rootWidget_.connect(noteList, state => {
return {
selectedNoteId: state.selectedNoteIds.length ? state.selectedNoteIds[0] : null,
items: state.notes,
@@ -210,7 +206,7 @@ class AppGui {
borderBottomWidth: 1,
borderLeftWidth: 1,
};
this.rootWidget_.connect(noteText, (state) => {
this.rootWidget_.connect(noteText, state => {
return {
noteId: state.selectedNoteIds.length ? state.selectedNoteIds[0] : null,
notes: state.notes,
@@ -225,7 +221,7 @@ class AppGui {
borderLeftWidth: 1,
borderRightWidth: 1,
};
this.rootWidget_.connect(noteMetadata, (state) => {
this.rootWidget_.connect(noteMetadata, state => {
return { noteId: state.selectedNoteIds.length ? state.selectedNoteIds[0] : null };
});
noteMetadata.hide();
@@ -292,7 +288,7 @@ class AppGui {
if (!cmd) return;
const isConfigPassword = cmd.indexOf('config ') >= 0 && cmd.indexOf('password') >= 0;
if (isConfigPassword) return;
this.stdout(chalk.cyan.bold('> ' + cmd));
this.stdout(chalk.cyan.bold('> ' + cmd));
}
setupKeymap(keymap) {
@@ -408,7 +404,7 @@ class AppGui {
activeListItem() {
const widget = this.widget('mainWindow').focusedWidget;
if (!widget) return null;
if (widget.name == 'noteList' || widget.name == 'folderList') {
return widget.currentItem;
}
@@ -430,18 +426,14 @@ class AppGui {
}
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;
@@ -462,9 +454,7 @@ class AppGui {
} 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();
@@ -475,22 +465,15 @@ class AppGui {
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);
await this.processPromptCommand(cmd);
} else {
throw new Error('Unknown command: ' + cmd);
}
}
@@ -501,7 +484,7 @@ class AppGui {
// this.logger().debug('Got command: ' + cmd);
try {
try {
let note = this.widget('noteList').currentItem;
let folder = this.widget('folderList').currentItem;
let args = splitCommandString(cmd);
@@ -511,7 +494,7 @@ class AppGui {
args[i] = note ? note.id : '';
} else if (args[i] == '$b') {
args[i] = folder ? folder.id : '';
} else if (args[i] == '$c') {
} else if (args[i] == '$c') {
const item = this.activeListItem();
args[i] = item ? item.id : '';
}
@@ -523,7 +506,7 @@ class AppGui {
}
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();
@@ -603,7 +586,7 @@ class AppGui {
async setupResourceServer() {
const linkStyle = chalk.blue.underline;
const noteTextWidget = this.widget('noteText');
const resourceIdRegex = /^:\/[a-f0-9]+$/i
const resourceIdRegex = /^:\/[a-f0-9]+$/i;
const noteLinks = {};
const hasProtocol = function(s, protocols) {
@@ -613,7 +596,7 @@ class AppGui {
if (s.indexOf(protocols[i] + '://') === 0) return true;
}
return false;
}
};
// By default, before the server is started, only the regular
// URLs appear in blue.
@@ -637,7 +620,7 @@ class AppGui {
const link = noteLinks[path];
if (link.type === 'url') {
response.writeHead(302, { 'Location': link.url });
response.writeHead(302, { Location: link.url });
return true;
}
@@ -650,11 +633,13 @@ class AppGui {
if (item.mime) response.setHeader('Content-Type', item.mime);
response.write(await Resource.content(item));
} else if (item.type_ === BaseModel.TYPE_NOTE) {
const html = [`
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(''));
@@ -679,7 +664,7 @@ class AppGui {
noteLinks[index] = {
type: 'item',
id: url.substr(2),
};
};
} else if (hasProtocol(url, ['http', 'https', 'file', 'ftp'])) {
noteLinks[index] = {
type: 'url',
@@ -711,7 +696,6 @@ class AppGui {
term.grabInput();
term.on('key', async (name, matches, data) => {
// -------------------------------------------------------------------------
// Handle special shortcuts
// -------------------------------------------------------------------------
@@ -729,13 +713,13 @@ class AppGui {
return;
}
if (name === 'CTRL_C' ) {
if (name === 'CTRL_C') {
const cmd = this.app().currentCommand();
if (!cmd || !cmd.cancellable() || this.commandCancelCalled_) {
this.stdout(_('Press Ctrl+D or type "exit" to exit the application'));
} else {
this.commandCancelCalled_ = true;
await cmd.cancel()
await cmd.cancel();
this.commandCancelCalled_ = false;
}
return;
@@ -744,8 +728,8 @@ class AppGui {
// -------------------------------------------------------------------------
// Build up current shortcut
// -------------------------------------------------------------------------
const now = (new Date()).getTime();
const now = new Date().getTime();
if (now - this.lastShortcutKeyTime_ > 800 || this.isSpecialKey(name)) {
this.currentShortcutKeys_ = [name];
@@ -813,7 +797,6 @@ class AppGui {
process.exit(1);
});
}
}
AppGui.INPUT_MODE_NORMAL = 1;

View File

@@ -1,10 +1,5 @@
const { BaseApplication } = require('lib/BaseApplication');
const { createStore, applyMiddleware } = require('redux');
const { reducer, defaultState } = require('lib/reducer.js');
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 ResourceService = require('lib/services/ResourceService');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
@@ -12,20 +7,15 @@ 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');
const { fileExtension } = require('lib/path-utils.js');
const { shim } = require('lib/shim.js');
const { _, setLocale, defaultLocale, closestSupportedLocale } = require('lib/locale.js');
const os = require('os');
const { _ } = require('lib/locale.js');
const fs = require('fs-extra');
const { cliUtils } = require('./cli-utils.js');
const EventEmitter = require('events');
const Cache = require('lib/Cache');
const RevisionService = require('lib/services/RevisionService');
class Application extends BaseApplication {
constructor() {
super();
@@ -74,7 +64,7 @@ class Application extends BaseApplication {
// const response = await cliUtils.promptMcq(msg, answers);
// if (!response) return null;
return output[response - 1];
// return output[response - 1];
} else {
return output.length ? output[0] : null;
}
@@ -96,10 +86,12 @@ class Application extends BaseApplication {
const parent = options.parent ? options.parent : app().currentFolder();
const ItemClass = BaseItem.itemClass(type);
if (type == BaseModel.TYPE_NOTE && pattern.indexOf('*') >= 0) { // Handle it as pattern
if (type == BaseModel.TYPE_NOTE && pattern.indexOf('*') >= 0) {
// Handle it as pattern
if (!parent) throw new Error(_('No notebook selected.'));
return await Note.previews(parent.id, { titlePattern: pattern });
} else { // Single item
} else {
// Single item
let item = null;
if (type == BaseModel.TYPE_NOTE) {
if (!parent) throw new Error(_('No notebook has been specified.'));
@@ -125,15 +117,15 @@ class Application extends BaseApplication {
}
setupCommand(cmd) {
cmd.setStdout((text) => {
cmd.setStdout(text => {
return this.stdout(text);
});
cmd.setDispatcher((action) => {
cmd.setDispatcher(action => {
if (this.store()) {
return this.store().dispatch(action);
} else {
return (action) => {};
return action => {};
}
});
@@ -184,9 +176,9 @@ class Application extends BaseApplication {
commands(uiType = null) {
if (!this.allCommandsLoaded_) {
fs.readdirSync(__dirname).forEach((path) => {
fs.readdirSync(__dirname).forEach(path => {
if (path.indexOf('command-') !== 0) return;
const ext = fileExtension(path)
const ext = fileExtension(path);
if (ext != 'js') return;
let CommandClass = require('./' + path);
@@ -275,19 +267,27 @@ class Application extends BaseApplication {
dummyGui() {
return {
isDummy: () => { return true; },
prompt: (initialText = '', promptString = '', options = null) => { return cliUtils.prompt(initialText, promptString, options); },
isDummy: () => {
return true;
},
prompt: (initialText = '', promptString = '', options = null) => {
return cliUtils.prompt(initialText, promptString, options);
},
showConsole: () => {},
maximizeConsole: () => {},
stdout: (text) => { console.info(text); },
fullScreen: (b=true) => {},
stdout: text => {
console.info(text);
},
fullScreen: (b = true) => {},
exit: () => {},
showModalOverlay: (text) => {},
showModalOverlay: text => {},
hideModalOverlay: () => {},
stdoutMaxWidth: () => { return 100; },
stdoutMaxWidth: () => {
return 100;
},
forceRender: () => {},
termSaveState: () => {},
termRestoreState: (state) => {},
termRestoreState: state => {},
};
}
@@ -299,7 +299,7 @@ class Application extends BaseApplication {
let outException = null;
try {
if (this.gui().isDummy() && !this.activeCommand_.supportsUi('cli')) throw new Error(_('The command "%s" is only available in GUI mode', this.activeCommand_.name()));
if (this.gui().isDummy() && !this.activeCommand_.supportsUi('cli')) throw new Error(_('The command "%s" is only available in GUI mode', this.activeCommand_.name()));
const cmdArgs = cliUtils.makeCommandArgs(this.activeCommand_, argv);
await this.activeCommand_.action(cmdArgs);
} catch (error) {
@@ -315,24 +315,24 @@ class Application extends BaseApplication {
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 }
{ 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
@@ -340,7 +340,7 @@ class Application extends BaseApplication {
const itemsByCommand = {};
for (let i = 0; i < defaultKeyMap.length; i++) {
itemsByCommand[defaultKeyMap[i].command] = defaultKeyMap[i]
itemsByCommand[defaultKeyMap[i].command] = defaultKeyMap[i];
}
const filePath = Setting.value('profileDir') + '/keymap.json';
@@ -373,7 +373,7 @@ class Application extends BaseApplication {
async start(argv) {
argv = await super.start(argv);
cliUtils.setStdout((object) => {
cliUtils.setStdout(object => {
return this.stdout(object);
});
@@ -394,7 +394,14 @@ class Application extends BaseApplication {
}
process.exit(1);
}
} else { // Otherwise open the GUI
await Setting.saveAll();
// Need to call exit() explicitely, otherwise Node wait for any timeout to complete
// https://stackoverflow.com/questions/18050095
process.exit(0);
} else {
// Otherwise open the GUI
this.initRedux();
const keymap = await this.loadKeymaps();
@@ -415,6 +422,8 @@ class Application extends BaseApplication {
ResourceService.runInBackground();
RevisionService.instance().runInBackground();
this.dispatch({
type: 'TAG_UPDATE_ALL',
items: tags,
@@ -426,7 +435,6 @@ class Application extends BaseApplication {
});
}
}
}
let application_ = null;
@@ -437,4 +445,4 @@ function app() {
return application_;
}
module.exports = { app };
module.exports = { app };

View File

@@ -14,11 +14,11 @@ async function handleAutocompletionPromise(line) {
//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);
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;
return x.length > 0 ? x.map(a => a + ' ') : line;
} else {
return line;
}
@@ -34,9 +34,9 @@ async function handleAutocompletionPromise(line) {
let next = words.length > 1 ? words[words.length - 1] : '';
let l = [];
if (next[0] === '-') {
for (let i = 0; i<metadata.options.length; i++) {
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
//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);
@@ -55,20 +55,19 @@ async function handleAutocompletionPromise(line) {
if (l.length === 0) {
return line;
}
let ret = l.map(a=>toCommandLine(a));
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;
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;
@@ -76,23 +75,23 @@ async function handleAutocompletionPromise(line) {
if (argName == 'note' || argName == 'note-pattern') {
const notes = currentFolder ? await Note.previews(currentFolder.id, { titlePattern: next + '*' }) : [];
l.push(...notes.map((n) => n.title));
l.push(...notes.map(n => n.title));
}
if (argName == 'notebook') {
const folders = await Folder.search({ titlePattern: next + '*' });
l.push(...folders.map((n) => n.title));
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));
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));
l.push(...tags.map(n => n.title));
}
if (argName == 'file') {
@@ -113,12 +112,11 @@ async function handleAutocompletionPromise(line) {
if (l.length === 1) {
return toCommandLine([...words.slice(0, -1), l[0]]);
} else if (l.length > 1) {
let ret = l.map(a=>toCommandLine(a));
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) {
@@ -127,19 +125,21 @@ function handleAutocompletion(str, callback) {
}
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(' ');
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) {
if (args.indexOf('"') !== -1 || args.indexOf(' ') !== -1) {
return '\'' + args + '\' ';
} else if (args.indexOf('\'') !== -1) {
return '"' + args + '" ';
} else {
return args + ' ';
@@ -151,9 +151,9 @@ function getArguments(line) {
let inDoubleQuotes = false;
let currentWord = '';
let parsed = [];
for(let i = 0; i<line.length; i++) {
if(line[i] === '"') {
if(inDoubleQuotes) {
for (let i = 0; i < line.length; i++) {
if (line[i] === '"') {
if (inDoubleQuotes) {
inDoubleQuotes = false;
//maybe push word to parsed?
//currentWord += '"';
@@ -161,8 +161,8 @@ function getArguments(line) {
inDoubleQuotes = true;
//currentWord += '"';
}
} else if(line[i] === "'") {
if(inSingleQuotes) {
} else if (line[i] === '\'') {
if (inSingleQuotes) {
inSingleQuotes = false;
//maybe push word to parsed?
//currentWord += "'";
@@ -170,8 +170,7 @@ function getArguments(line) {
inSingleQuotes = true;
//currentWord += "'";
}
} else if (/\s/.test(line[i]) &&
!(inDoubleQuotes || inSingleQuotes)) {
} else if (/\s/.test(line[i]) && !(inDoubleQuotes || inSingleQuotes)) {
if (currentWord !== '') {
parsed.push(currentWord);
currentWord = '';

View File

@@ -2,7 +2,6 @@ const { _ } = require('lib/locale.js');
const { reg } = require('lib/registry.js');
class BaseCommand {
constructor() {
this.stdout_ = null;
this.prompt_ = null;
@@ -93,7 +92,6 @@ class BaseCommand {
logger() {
return reg.logger();
}
}
module.exports = { BaseCommand };
module.exports = { BaseCommand };

View File

@@ -1,7 +1,7 @@
const fs = require('fs-extra');
const { fileExtension, basename, dirname } = require('lib/path-utils.js');
const { fileExtension, dirname } = require('lib/path-utils.js');
const wrap_ = require('word-wrap');
const { _, setLocale, languageCode } = require('lib/locale.js');
const { languageCode } = require('lib/locale.js');
const rootDir = dirname(dirname(__dirname));
const MAX_WIDTH = 78;
@@ -22,14 +22,14 @@ function renderOptions(options) {
let option = options[i];
const flag = option[0];
const indent = INDENT + INDENT + ' '.repeat(optionColWidth + 2);
let r = wrap(option[1], indent);
r = r.substr(flag.length + (INDENT + INDENT).length);
r = INDENT + INDENT + flag + r;
output.push(r);
}
return output.join("\n");
return output.join('\n');
}
function renderCommand(cmd) {
@@ -44,14 +44,14 @@ function renderCommand(cmd) {
output.push('');
output.push(optionString);
}
return output.join("\n");
return output.join('\n');
}
function getCommands() {
let output = [];
fs.readdirSync(__dirname).forEach((path) => {
fs.readdirSync(__dirname).forEach(path => {
if (path.indexOf('command-') !== 0) return;
const ext = fileExtension(path)
const ext = fileExtension(path);
if (ext != 'js') return;
let CommandClass = require('./' + path);
@@ -87,14 +87,14 @@ function getHeader() {
let description = [];
description.push('Joplin is a note taking and to-do application, which can handle a large number of notes organised into notebooks.');
description.push('The notes are searchable, can be copied, tagged and modified with your own text editor.');
description.push("\n\n");
description.push('\n\n');
description.push('The notes can be synchronised with various target including the file system (for example with a network directory) or with Microsoft OneDrive.');
description.push("\n\n");
description.push('\n\n');
description.push('Notes exported from Evenotes via .enex files can be imported into Joplin, including the formatted content, resources (images, attachments, etc.) and complete metadata (geolocation, updated time, created time, etc.).');
output.push(wrap(description.join(''), INDENT));
return output.join("\n");
return output.join('\n');
}
function getFooter() {
@@ -102,7 +102,7 @@ function getFooter() {
output.push('WEBSITE');
output.push('');
output.push(INDENT + 'https://joplin.cozic.net');
output.push(INDENT + 'https://joplinapp.org');
output.push('');
@@ -113,7 +113,7 @@ function getFooter() {
const licenseText = fs.readFileSync(filePath, 'utf8');
output.push(wrap(licenseText, INDENT));
return output.join("\n");
return output.join('\n');
}
async function main() {
@@ -128,12 +128,12 @@ async function main() {
}
const headerText = getHeader();
const commandsText = commandBlocks.join("\n\n");
const commandsText = commandBlocks.join('\n\n');
const footerText = getFooter();
console.info(headerText + "\n\n" + 'USAGE' + "\n\n" + commandsText + "\n\n" + footerText);
console.info(headerText + '\n\n' + 'USAGE' + '\n\n' + commandsText + '\n\n' + footerText);
}
main().catch((error) => {
main().catch(error => {
console.error(error);
});
});

View File

@@ -1,4 +1,4 @@
"use strict"
'use strict';
const fs = require('fs-extra');
const { Logger } = require('lib/logger.js');
@@ -10,7 +10,7 @@ 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
const exec = require('child_process').exec;
process.on('unhandledRejection', (reason, p) => {
console.error('Unhandled promise rejection', p, 'reason:', reason);
@@ -32,8 +32,8 @@ db.setLogger(dbLogger);
function createClient(id) {
return {
'id': id,
'profileDir': baseDir + '/client' + id,
id: id,
profileDir: baseDir + '/client' + id,
};
}
@@ -72,14 +72,7 @@ function assertEquals(expected, real) {
}
async function clearDatabase() {
await db.transactionExecBatch([
'DELETE FROM folders',
'DELETE FROM notes',
'DELETE FROM tags',
'DELETE FROM note_tags',
'DELETE FROM resources',
'DELETE FROM deleted_items',
]);
await db.transactionExecBatch(['DELETE FROM folders', 'DELETE FROM notes', 'DELETE FROM tags', 'DELETE FROM note_tags', 'DELETE FROM resources', 'DELETE FROM deleted_items']);
}
const testUnits = {};
@@ -101,7 +94,7 @@ testUnits.testFolders = async () => {
folders = await Folder.all();
assertEquals(0, folders.length);
}
};
testUnits.testNotes = async () => {
await execCommand(client, 'mkbook nb1');
@@ -121,16 +114,16 @@ testUnits.testNotes = async () => {
notes = await Note.all();
assertEquals(2, notes.length);
await execCommand(client, "rm -f 'blabla*'");
await execCommand(client, 'rm -f \'blabla*\'');
notes = await Note.all();
assertEquals(2, notes.length);
await execCommand(client, "rm -f 'n*'");
await execCommand(client, 'rm -f \'n*\'');
notes = await Note.all();
assertEquals(0, notes.length);
}
};
testUnits.testCat = async () => {
await execCommand(client, 'mkbook nb1');
@@ -145,7 +138,7 @@ testUnits.testCat = async () => {
r = await execCommand(client, 'cat -v mynote');
assertTrue(r.indexOf(note.id) >= 0);
}
};
testUnits.testConfig = async () => {
await execCommand(client, 'config editor vim');
@@ -159,7 +152,7 @@ testUnits.testConfig = async () => {
let r = await execCommand(client, 'config');
assertTrue(r.indexOf('editor') >= 0);
assertTrue(r.indexOf('subl') >= 0);
}
};
testUnits.testCp = async () => {
await execCommand(client, 'mkbook nb2');
@@ -180,7 +173,7 @@ testUnits.testCp = async () => {
notes = await Note.previews(f2.id);
assertEquals(1, notes.length);
assertEquals(notesF1[0].title, notes[0].title);
}
};
testUnits.testLs = async () => {
await execCommand(client, 'mkbook nb1');
@@ -190,7 +183,7 @@ testUnits.testLs = async () => {
assertTrue(r.indexOf('note1') >= 0);
assertTrue(r.indexOf('note2') >= 0);
}
};
testUnits.testMv = async () => {
await execCommand(client, 'mkbook nb2');
@@ -210,14 +203,14 @@ testUnits.testMv = async () => {
await execCommand(client, 'mknote note2');
await execCommand(client, 'mknote note3');
await execCommand(client, 'mknote blabla');
await execCommand(client, "mv 'note*' nb2");
await execCommand(client, 'mv \'note*\' nb2');
notes1 = await Note.previews(f1.id);
notes2 = await Note.previews(f2.id);
assertEquals(1, notes1.length);
assertEquals(4, notes2.length);
}
};
async function main(argv) {
await fs.remove(baseDir);
@@ -243,7 +236,7 @@ async function main(argv) {
}
}
main(process.argv).catch((error) => {
main(process.argv).catch(error => {
console.info('');
logger.error(error);
});
});

View File

@@ -16,7 +16,7 @@ cliUtils.printArray = function(logFunction, rows, headers = null) {
for (let i = 0; i < rows.length; i++) {
let row = rows[i];
for (let j = 0; j < row.length; j++) {
let item = row[j];
let width = item ? item.toString().length : 0;
@@ -26,7 +26,6 @@ cliUtils.printArray = function(logFunction, rows, headers = null) {
}
}
let lines = [];
for (let row = 0; row < rows.length; row++) {
let line = [];
for (let col = 0; col < colWidths.length; col++) {
@@ -37,7 +36,7 @@ cliUtils.printArray = function(logFunction, rows, headers = null) {
}
logFunction(line.join(' '));
}
}
};
cliUtils.parseFlags = function(flags) {
let output = {};
@@ -56,7 +55,7 @@ cliUtils.parseFlags = function(flags) {
}
}
return output;
}
};
cliUtils.parseCommandArg = function(arg) {
if (arg.length <= 2) throw new Error('Invalid command arg: ' + arg);
@@ -72,7 +71,7 @@ cliUtils.parseCommandArg = function(arg) {
} else {
throw new Error('Invalid command arg: ' + arg);
}
}
};
cliUtils.makeCommandArgs = function(cmd, argv) {
let cmdUsage = cmd.usage();
@@ -85,7 +84,6 @@ cliUtils.makeCommandArgs = function(cmd, argv) {
for (let i = 0; i < options.length; i++) {
if (options[i].length != 2) throw new Error('Invalid options: ' + options[i]);
let flags = options[i][0];
let text = options[i][1];
flags = cliUtils.parseFlags(flags);
@@ -125,27 +123,27 @@ cliUtils.makeCommandArgs = function(cmd, argv) {
output.options = argOptions;
return output;
}
};
cliUtils.promptMcq = function(message, answers) {
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
output: process.stdout,
});
message += "\n\n";
message += '\n\n';
for (let n in answers) {
if (!answers.hasOwnProperty(n)) continue;
message += _('%s: %s', n, answers[n]) + "\n";
message += _('%s: %s', n, answers[n]) + '\n';
}
message += "\n";
message += '\n';
message += _('Your choice: ');
return new Promise((resolve, reject) => {
rl.question(message, (answer) => {
rl.question(message, answer => {
rl.close();
if (!(answer in answers)) {
@@ -156,7 +154,7 @@ cliUtils.promptMcq = function(message, answers) {
resolve(answer);
});
});
}
};
cliUtils.promptConfirm = function(message, answers = null) {
if (!answers) answers = [_('Y'), _('n')];
@@ -164,19 +162,19 @@ cliUtils.promptConfirm = function(message, answers = null) {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
output: process.stdout,
});
message += ' (' + answers.join('/') + ')';
return new Promise((resolve, reject) => {
rl.question(message + ' ', (answer) => {
rl.question(message + ' ', answer => {
const ok = !answer || answer.toLowerCase() == answers[0].toLowerCase();
rl.close();
resolve(ok);
});
});
}
};
// 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
@@ -189,10 +187,9 @@ cliUtils.prompt = function(initialText = '', promptString = ':', options = null)
const mutableStdout = new Writable({
write: function(chunk, encoding, callback) {
if (!this.muted)
process.stdout.write(chunk, encoding);
if (!this.muted) process.stdout.write(chunk, encoding);
callback();
}
},
});
const rl = readline.createInterface({
@@ -204,15 +201,15 @@ cliUtils.prompt = function(initialText = '', promptString = ':', options = null)
return new Promise((resolve, reject) => {
mutableStdout.muted = false;
rl.question(promptString, (answer) => {
rl.question(promptString, answer => {
rl.close();
if (!!options.secure) this.stdout_('');
if (options.secure) this.stdout_('');
resolve(answer);
});
mutableStdout.muted = !!options.secure;
});
}
};
let redrawStarted_ = false;
let redrawLastLog_ = null;
@@ -220,7 +217,7 @@ let redrawLastUpdateTime_ = 0;
cliUtils.setStdout = function(v) {
this.stdout_ = v;
}
};
cliUtils.redraw = function(s) {
const now = time.unixMs();
@@ -233,8 +230,8 @@ cliUtils.redraw = function(s) {
redrawLastLog_ = s;
}
redrawStarted_ = true;
}
redrawStarted_ = true;
};
cliUtils.redrawDone = function() {
if (!redrawStarted_) return;
@@ -245,6 +242,6 @@ cliUtils.redrawDone = function() {
redrawLastLog_ = null;
redrawStarted_ = false;
}
};
module.exports = { cliUtils };
module.exports = { cliUtils };

View File

@@ -0,0 +1,295 @@
const { BaseCommand } = require('./base-command.js');
const BaseItem = require('lib/models/BaseItem');
const BaseModel = require('lib/BaseModel');
const { toTitleCase } = require('lib/string-utils.js');
const { reg } = require('lib/registry.js');
const markdownUtils = require('lib/markdownUtils');
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('# Error handling');
lines.push('');
lines.push('In case of an error, an HTTP status code >= 400 will be returned along with a JSON object that provides more info about the error. The JSON object is in the format `{ "error": "description of error" }`.');
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('');
lines.push('# Searching');
lines.push('');
lines.push('Call **GET /search?query=YOUR_QUERY** to search for notes. This end-point supports the `field` parameter which is recommended to use so that you only get the data that you need. The query syntax is as described in the main documentation: https://joplinapp.org/#searching');
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;

View File

@@ -3,10 +3,8 @@ const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const BaseModel = require('lib/BaseModel.js');
const { shim } = require('lib/shim.js');
const fs = require('fs-extra');
class Command extends BaseCommand {
usage() {
return 'attach <note> <file>';
}
@@ -26,7 +24,6 @@ class Command extends BaseCommand {
await shim.attachFileToNote(note, localFilePath);
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -2,11 +2,9 @@ const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.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 {
usage() {
return 'cat <note>';
}
@@ -16,9 +14,7 @@ class Command extends BaseCommand {
}
options() {
return [
['-v, --verbose', _('Displays the complete information about note.')],
];
return [['-v, --verbose', _('Displays the complete information about note.')]];
}
async action(args) {
@@ -30,10 +26,13 @@ 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();
app()
.gui()
.showConsole();
app()
.gui()
.maximizeConsole();
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -4,36 +4,33 @@ const { app } = require('./app.js');
const Setting = require('lib/models/Setting.js');
class Command extends BaseCommand {
usage() {
return 'config [name] [value]';
}
description() {
return _("Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.");
return _('Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.');
}
options() {
return [
['-v, --verbose', _('Also displays unset and hidden config variables.')],
];
return [['-v, --verbose', _('Also displays unset and hidden config variables.')]];
}
async action(args) {
const verbose = args.options.verbose;
const renderKeyValue = (name) => {
const renderKeyValue = 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 = '********';
if (md.secure && value) value = '********';
if (Setting.isEnum(name)) {
return _('%s = %s (%s)', name, value, Setting.enumOptionsDoc(name));
} else {
return _('%s = %s', name, value);
}
}
};
if (!args.name && !args.value) {
let keys = Setting.keys(!verbose, 'cli');
@@ -43,15 +40,23 @@ class Command extends BaseCommand {
if (!verbose && !value) continue;
this.stdout(renderKeyValue(keys[i]));
}
app().gui().showConsole();
app().gui().maximizeConsole();
app()
.gui()
.showConsole();
app()
.gui()
.maximizeConsole();
return;
}
if (args.name && !args.value) {
this.stdout(renderKeyValue(args.name));
app().gui().showConsole();
app().gui().maximizeConsole();
app()
.gui()
.showConsole();
app()
.gui()
.maximizeConsole();
return;
}
@@ -64,7 +69,6 @@ class Command extends BaseCommand {
await Setting.saveAll();
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -2,11 +2,9 @@ const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.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 {
usage() {
return 'cp <note> [notebook]';
}
@@ -33,7 +31,6 @@ class Command extends BaseCommand {
Note.updateGeolocation(newNote.id);
}
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -2,12 +2,10 @@ const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.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 {
usage() {
return 'done <note>';
}
@@ -35,7 +33,6 @@ class Command extends BaseCommand {
async action(args) {
await Command.handleAction(this, args, true);
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,12 +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');
class Command extends BaseCommand {
usage() {
return 'dump';
}
@@ -35,10 +32,9 @@ class Command extends BaseCommand {
}
items = items.concat(tags);
this.stdout(JSON.stringify(items));
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,20 +1,21 @@
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');
const { shim } = require('lib/shim');
const pathUtils = require('lib/path-utils.js');
const imageType = require('image-type');
const readChunk = require('read-chunk');
class Command extends BaseCommand {
usage() {
return 'e2ee <command> [path]';
}
description() {
return _('Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status` and `target-status`.');
return _('Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file` and `target-status`.');
}
options() {
@@ -22,6 +23,7 @@ class Command extends BaseCommand {
// 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'],
['-o, --output <directory>', 'Output directory'],
];
}
@@ -30,6 +32,18 @@ class Command extends BaseCommand {
const options = args.options;
const askForMasterKey = async error => {
const masterKeyId = error.masterKeyId;
const password = await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
if (!password) {
this.stdout(_('Operation cancelled'));
return false;
}
Setting.setObjectKey('encryption.passwordCache', masterKeyId, password);
await EncryptionService.instance().loadMasterKeysFromSettings();
return true;
};
if (args.command === 'enable') {
const password = options.password ? options.password.toString() : await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
if (!password) {
@@ -59,14 +73,8 @@ class Command extends BaseCommand {
break;
} 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();
const ok = await askForMasterKey(error);
if (!ok) return;
continue;
}
@@ -85,21 +93,49 @@ class Command extends BaseCommand {
return;
}
if (args.command === 'decrypt-file') {
while (true) {
try {
const outputDir = options.output ? options.output : require('os').tmpdir();
let outFile = outputDir + '/' + pathUtils.filename(args.path) + '.' + Date.now() + '.bin';
await EncryptionService.instance().decryptFile(args.path, outFile);
const buffer = await readChunk(outFile, 0, 64);
const detectedType = imageType(buffer);
if (detectedType) {
const newOutFile = outFile + '.' + detectedType.ext;
await shim.fsDriver().move(outFile, newOutFile);
outFile = newOutFile;
}
this.stdout(outFile);
break;
} catch (error) {
if (error.code === 'masterKeyNotLoaded') {
const ok = await askForMasterKey(error);
if (!ok) return;
continue;
}
throw error;
}
}
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) => {
fs.readdirSync(targetPath).forEach(path => {
paths.push(path);
});
return paths;
}
};
let itemCount = 0;
let resourceCount = 0;
@@ -183,7 +219,6 @@ class Command extends BaseCommand {
return;
}
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -3,15 +3,11 @@ 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/BaseModel.js');
const { cliUtils } = require('./cli-utils.js');
const { time } = require('lib/time-utils.js');
class Command extends BaseCommand {
usage() {
return 'edit <note>';
}
@@ -21,20 +17,19 @@ class Command extends BaseCommand {
}
async action(args) {
let watcher = null;
let tempFilePath = null;
const onFinishedEditing = async () => {
if (tempFilePath) fs.removeSync(tempFilePath);
}
};
const textEditorPath = () => {
if (Setting.value('editor')) return Setting.value('editor');
if (process.env.EDITOR) return process.env.EDITOR;
throw new Error(_('No text editor is defined. Please set it using `config editor <editor-path>`'));
}
};
try {
try {
// -------------------------------------------------------------------------
// Load note or create it if it doesn't exist
// -------------------------------------------------------------------------
@@ -76,18 +71,30 @@ class Command extends BaseCommand {
this.logger().info('Disabling fullscreen...');
app().gui().showModalOverlay(_('Starting to edit note. Close the editor to get back to the prompt.'));
await app().gui().forceRender();
const termState = app().gui().termSaveState();
app()
.gui()
.showModalOverlay(_('Starting to edit note. Close the editor to get back to the prompt.'));
await app()
.gui()
.forceRender();
const termState = app()
.gui()
.termSaveState();
const spawnSync = require('child_process').spawnSync;
const spawnSync = require('child_process').spawnSync;
const result = spawnSync(editorPath, editorArgs, { stdio: 'inherit' });
if (result.error) this.stdout(_('Error opening note in editor: %s', result.error.message));
app().gui().termRestoreState(termState);
app().gui().hideModalOverlay();
app().gui().forceRender();
app()
.gui()
.termRestoreState(termState);
app()
.gui()
.hideModalOverlay();
app()
.gui()
.forceRender();
// -------------------------------------------------------------------------
// Save the note and clean up
@@ -107,13 +114,11 @@ class Command extends BaseCommand {
});
await onFinishedEditing();
} catch(error) {
} catch (error) {
await onFinishedEditing();
throw error;
}
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -3,7 +3,6 @@ const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
class Command extends BaseCommand {
usage() {
return 'exit';
}
@@ -19,7 +18,6 @@ class Command extends BaseCommand {
async action(args) {
await app().exit();
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,13 +1,10 @@
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 { _ } = require('lib/locale.js');
const { ReportService } = require('lib/services/report.js');
const fs = require('fs-extra');
class Command extends BaseCommand {
usage() {
return 'export-sync-status';
}
@@ -23,14 +20,17 @@ class Command extends BaseCommand {
async action(args) {
const service = new ReportService();
const csv = await service.basicItemList({ format: 'csv' });
const filePath = Setting.value('profileDir') + '/syncReport-' + (new Date()).getTime() + '.csv';
const filePath = Setting.value('profileDir') + '/syncReport-' + new Date().getTime() + '.csv';
await fs.writeFileSync(filePath, csv);
this.stdout('Sync status exported to ' + filePath);
app().gui().showConsole();
app().gui().maximizeConsole();
app()
.gui()
.showConsole();
app()
.gui()
.maximizeConsole();
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,14 +1,10 @@
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 { 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 'export <path>';
}
@@ -19,17 +15,14 @@ class Command extends BaseCommand {
options() {
const service = new InteropService();
const formats = service.modules()
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.')],
];
return [['--format <format>', _('Destination format: %s', formats.join(', '))], ['--note <note>', _('Exports only the given note.')], ['--notebook <notebook>', _('Exports only the given notebook.')]];
}
async action(args) {
let exportOptions = {};
exportOptions.path = args.path;
@@ -37,25 +30,20 @@ class Command extends BaseCommand {
exportOptions.format = args.options.format ? args.options.format : 'jex';
if (args.options.note) {
const notes = await app().loadItems(BaseModel.TYPE_NOTE, args.options.note, { parent: app().currentFolder() });
if (!notes.length) throw new Error(_('Cannot find "%s".', args.options.note));
exportOptions.sourceNoteIds = notes.map((n) => n.id);
exportOptions.sourceNoteIds = notes.map(n => n.id);
} else if (args.options.notebook) {
const folders = await app().loadItems(BaseModel.TYPE_FOLDER, args.options.notebook);
if (!folders.length) throw new Error(_('Cannot find "%s".', args.options.notebook));
exportOptions.sourceFolderIds = folders.map((n) => n.id);
exportOptions.sourceFolderIds = folders.map(n => n.id);
}
const service = new InteropService();
const result = await service.export(exportOptions);
result.warnings.map((w) => this.stdout(w));
result.warnings.map(w => this.stdout(w));
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -2,11 +2,9 @@ const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.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 {
usage() {
return 'geoloc <note>';
}
@@ -23,9 +21,10 @@ class Command extends BaseCommand {
const url = Note.geolocationUrl(item);
this.stdout(url);
app().gui().showConsole();
app()
.gui()
.showConsole();
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,14 +1,10 @@
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 { wrap } = require('lib/string-utils.js');
const { _ } = require('lib/locale.js');
const { cliUtils } = require('./cli-utils.js');
class Command extends BaseCommand {
usage() {
return 'help [command]';
}
@@ -28,7 +24,7 @@ class Command extends BaseCommand {
output.push(command);
}
output.sort((a, b) => a.name() < b.name() ? -1 : +1);
output.sort((a, b) => (a.name() < b.name() ? -1 : +1));
return output;
}
@@ -37,34 +33,40 @@ class Command extends BaseCommand {
const stdoutWidth = app().commandStdoutMaxWidth();
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(_('For information on how to customise the shortcuts please visit %s', 'https://joplinapp.org/terminal/#shortcuts'));
this.stdout('');
if (app().gui().isDummy()) {
if (
app()
.gui()
.isDummy()
) {
throw new Error(_('Shortcuts are not available in CLI mode.'));
}
const keymap = app().gui().keymap();
const keymap = app()
.gui()
.keymap();
let rows = [];
for (let i = 0; i < keymap.length; i++) {
const item = keymap[i];
const keys = item.keys.map((k) => k === ' ' ? '(SPACE)' : k);
const keys = item.keys.map(k => (k === ' ' ? '(SPACE)' : k));
rows.push([keys.join(', '), item.command]);
}
cliUtils.printArray(this.stdout.bind(this), rows);
} else if (args.command === 'all') {
const commands = this.allCommands();
const output = commands.map((c) => renderCommandHelp(c));
const output = commands.map(c => renderCommandHelp(c));
this.stdout(output.join('\n\n'));
} else if (args.command) {
const command = app().findCommandByName(args['command']);
if (!command) throw new Error(_('Cannot find "%s".', args.command));
this.stdout(renderCommandHelp(command, stdoutWidth));
} else {
const commandNames = this.allCommands().map((a) => a.name());
const commandNames = this.allCommands().map(a => a.name());
this.stdout(_('Type `help [command]` for more information about a command; or type `help all` for the complete usage information.'));
this.stdout('');
@@ -82,10 +84,13 @@ class Command extends BaseCommand {
this.stdout(_('For the list of keyboard shortcuts and config options, type `help keymap`'));
}
app().gui().showConsole();
app().gui().maximizeConsole();
app()
.gui()
.showConsole();
app()
.gui()
.maximizeConsole();
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,17 +1,11 @@
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]';
}
@@ -22,14 +16,14 @@ class Command extends BaseCommand {
options() {
const service = new InteropService();
const formats = service.modules().filter(m => m.type === 'importer').map(m => m.format);
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.')],
];
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);
@@ -44,7 +38,7 @@ class Command extends BaseCommand {
// onProgress/onError supported by Enex import only
importOptions.onProgress = (progressState) => {
importOptions.onProgress = progressState => {
let line = [];
line.push(_('Found: %d.', progressState.loaded));
line.push(_('Created: %d.', progressState.created));
@@ -56,20 +50,21 @@ class Command extends BaseCommand {
cliUtils.redraw(lastProgress);
};
importOptions.onError = (error) => {
importOptions.onError = error => {
let s = error.trace ? error.trace : error.toString();
this.stdout(s);
};
app().gui().showConsole();
app()
.gui()
.showConsole();
this.stdout(_('Importing notes...'));
const service = new InteropService();
const result = await service.import(importOptions);
result.warnings.map((w) => this.stdout(w));
result.warnings.map(w => this.stdout(w));
cliUtils.redrawDone();
if (lastProgress) this.stdout(_('The notes have been imported: %s', lastProgress));
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -10,7 +10,6 @@ const { time } = require('lib/time-utils.js');
const { cliUtils } = require('./cli-utils.js');
class Command extends BaseCommand {
usage() {
return 'ls [note-pattern]';
}
@@ -22,16 +21,9 @@ class Command extends BaseCommand {
enabled() {
return false;
}
options() {
return [
['-n, --limit <num>', _('Displays only the first top <num> notes.')],
['-s, --sort <field>', _('Sorts the item by <field> (eg. title, updated_time, created_time).')],
['-r, --reverse', _('Reverses the sorting order.')],
['-t, --type <type>', _('Displays only the items of the specific type(s). Can be `n` for notes, `t` for to-dos, or `nt` for notes and to-dos (eg. `-tt` would display only the to-dos, while `-ttd` would display notes and to-dos.')],
['-f, --format <format>', _('Either "text" or "json"')],
['-l, --long', _('Use long list format. Format is ID, NOTE_COUNT (for notebook), DATE, TODO_CHECKED (for to-dos), TITLE')],
];
return [['-n, --limit <num>', _('Displays only the first top <num> notes.')], ['-s, --sort <field>', _('Sorts the item by <field> (eg. title, updated_time, created_time).')], ['-r, --reverse', _('Reverses the sorting order.')], ['-t, --type <type>', _('Displays only the items of the specific type(s). Can be `n` for notes, `t` for to-dos, or `nt` for notes and to-dos (eg. `-tt` would display only the to-dos, while `-ttd` would display notes and to-dos.')], ['-f, --format <format>', _('Either "text" or "json"')], ['-l, --long', _('Use long list format. Format is ID, NOTE_COUNT (for notebook), DATE, TODO_CHECKED (for to-dos), TITLE')]];
}
async action(args) {
@@ -93,7 +85,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;
@@ -105,7 +97,7 @@ class Command extends BaseCommand {
if (hasTodos) {
if (item.is_todo) {
row.push(sprintf('[%s]', !!item.todo_completed ? 'X' : ' '));
row.push(sprintf('[%s]', item.todo_completed ? 'X' : ' '));
} else {
row.push(' ');
}
@@ -118,9 +110,7 @@ class Command extends BaseCommand {
cliUtils.printArray(this.stdout.bind(this), rows);
}
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -2,10 +2,8 @@ const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const Folder = require('lib/models/Folder.js');
const { reg } = require('lib/registry.js');
class Command extends BaseCommand {
usage() {
return 'mkbook <new-notebook>';
}
@@ -15,10 +13,9 @@ class Command extends BaseCommand {
}
async action(args) {
let folder = await Folder.save({ title: args['new-notebook'] }, { userSideValidation: true });
let folder = await Folder.save({ title: args['new-notebook'] }, { userSideValidation: true });
app().switchCurrentFolder(folder);
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -4,7 +4,6 @@ const { _ } = require('lib/locale.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
usage() {
return 'mknote <new-note>';
}
@@ -26,7 +25,6 @@ class Command extends BaseCommand {
app().switchCurrentFolder(app().currentFolder());
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -4,7 +4,6 @@ const { _ } = require('lib/locale.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
usage() {
return 'mktodo <new-todo>';
}
@@ -27,7 +26,6 @@ class Command extends BaseCommand {
app().switchCurrentFolder(app().currentFolder());
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -6,7 +6,6 @@ const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
usage() {
return 'mv <note> [notebook]';
}
@@ -18,7 +17,7 @@ class Command extends BaseCommand {
async action(args) {
const pattern = args['note'];
const destination = args['notebook'];
const folder = await Folder.loadByField('title', destination);
if (!folder) throw new Error(_('Cannot find "%s".', destination));
@@ -29,7 +28,6 @@ class Command extends BaseCommand {
await Note.moveToFolder(notes[i].id, folder.id);
}
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -6,7 +6,6 @@ const Folder = require('lib/models/Folder.js');
const Note = require('lib/models/Note.js');
class Command extends BaseCommand {
usage() {
return 'ren <item> <name>';
}
@@ -35,7 +34,6 @@ class Command extends BaseCommand {
await Note.save(newItem);
}
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,14 +1,10 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.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 {
usage() {
return 'rmbook <notebook>';
}
@@ -18,9 +14,7 @@ class Command extends BaseCommand {
}
options() {
return [
['-f, --force', _('Deletes the notebook without asking for confirmation.')],
];
return [['-f, --force', _('Deletes the notebook without asking for confirmation.')]];
}
async action(args) {
@@ -34,7 +28,6 @@ class Command extends BaseCommand {
await Folder.delete(folder.id);
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,14 +1,10 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.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 {
usage() {
return 'rmnote <note-pattern>';
}
@@ -18,9 +14,7 @@ class Command extends BaseCommand {
}
options() {
return [
['-f, --force', _('Deletes the notes without asking for confirmation.')],
];
return [['-f, --force', _('Deletes the notes without asking for confirmation.')]];
}
async action(args) {
@@ -32,10 +26,9 @@ class Command extends BaseCommand {
const ok = force ? true : await this.prompt(notes.length > 1 ? _('%d notes match this pattern. Delete them?', notes.length) : _('Delete note?'), { booleanAnswerDefault: 'n' });
if (!ok) return;
let ids = notes.map((n) => n.id);
let ids = notes.map(n => n.id);
await Note.batchDelete(ids);
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,15 +1,10 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.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');
class Command extends BaseCommand {
usage() {
return 'search <pattern> [notebook]';
}
@@ -49,37 +44,7 @@ class Command extends BaseCommand {
type: 'SEARCH_SELECT',
id: searchId,
});
// let fields = Note.previewFields();
// fields.push('body');
// const notes = await Note.previews(folder ? folder.id : null, {
// fields: fields,
// anywherePattern: '*' + pattern + '*',
// });
// const fragmentLength = 50;
// let parents = {};
// for (let i = 0; i < notes.length; i++) {
// const note = notes[i];
// const parent = parents[note.parent_id] ? parents[note.parent_id] : await Folder.load(note.parent_id);
// parents[note.parent_id] = parent;
// const idx = note.body.indexOf(pattern);
// let line = '';
// if (idx >= 0) {
// let fragment = note.body.substr(Math.max(0, idx - fragmentLength / 2), fragmentLength);
// fragment = fragment.replace(/\n/g, ' ');
// line = sprintf('%s: %s / %s: %s', BaseModel.shortId(note.id), parent.title, note.title, fragment);
// } else {
// line = sprintf('%s: %s / %s', BaseModel.shortId(note.id), parent.title, note.title);
// }
// this.stdout(line);
// }
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -3,12 +3,9 @@ const { app } = require('./app.js');
const { _ } = require('lib/locale.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 {
usage() {
return 'set <note> <name> [value]';
}
@@ -45,7 +42,6 @@ class Command extends BaseCommand {
await Note.save(newNote);
}
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,12 +1,10 @@
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 { _ } = require('lib/locale.js');
const { ReportService } = require('lib/services/report.js');
class Command extends BaseCommand {
usage() {
return 'status';
}
@@ -34,10 +32,13 @@ class Command extends BaseCommand {
}
}
app().gui().showConsole();
app().gui().maximizeConsole();
app()
.gui()
.showConsole();
app()
.gui()
.maximizeConsole();
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -3,7 +3,7 @@ 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/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');
@@ -13,7 +13,6 @@ const fs = require('fs-extra');
const SyncTargetRegistry = require('lib/SyncTargetRegistry');
class Command extends BaseCommand {
constructor() {
super();
this.syncTargetId_ = null;
@@ -30,9 +29,7 @@ class Command extends BaseCommand {
}
options() {
return [
['--target <target>', _('Sync to provided target (defaults to sync.target config value)')],
];
return [['--target <target>', _('Sync to provided target (defaults to sync.target config value)')]];
}
static lockFile(filePath) {
@@ -65,13 +62,16 @@ class Command extends BaseCommand {
const syncTarget = reg.syncTarget(this.syncTargetId_);
const syncTargetMd = SyncTargetRegistry.idToMetadata(this.syncTargetId_);
if (this.syncTargetId_ === 3 || this.syncTargetId_ === 4) { // OneDrive
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); }
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).'));
@@ -79,7 +79,8 @@ class Command extends BaseCommand {
}
return true;
} else if (syncTargetMd.name === 'dropbox') { // Dropbox
} 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:'));
@@ -116,9 +117,8 @@ class Command extends BaseCommand {
this.releaseLockFn_ = null;
// Lock is unique per profile/database
// 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');
if (!(await fs.pathExists(lockFilePath))) await fs.writeFile(lockFilePath, 'synclock');
try {
if (await Command.isLocked(lockFilePath)) throw new Error(_('Synchronisation is already in progress.'));
@@ -147,22 +147,26 @@ class Command extends BaseCommand {
const syncTarget = reg.syncTarget(this.syncTargetId_);
if (!await syncTarget.isAuthenticated()) {
app().gui().showConsole();
app().gui().maximizeConsole();
if (!(await syncTarget.isAuthenticated())) {
app()
.gui()
.showConsole();
app()
.gui()
.maximizeConsole();
const authDone = await this.doAuth();
if (!authDone) return cleanUp();
}
const sync = await syncTarget.synchronizer();
let options = {
onProgress: (report) => {
onProgress: report => {
let lines = Synchronizer.reportToLines(report);
if (lines.length) cliUtils.redraw(lines.join(' '));
},
onMessage: (msg) => {
onMessage: msg => {
cliUtils.redrawDone();
this.stdout(msg);
},
@@ -191,6 +195,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();
@@ -228,7 +241,6 @@ class Command extends BaseCommand {
cancellable() {
return true;
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -3,19 +3,25 @@ const { app } = require('./app.js');
const { _ } = require('lib/locale.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 {
usage() {
return 'tag <tag-command> [tag] [note]';
}
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,16 +47,38 @@ 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); });
tags.map(tag => {
this.stdout(tag.title);
});
}
} else {
throw new Error(_('Invalid command: "%s"', command));
}
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -2,12 +2,10 @@ const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.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 {
usage() {
return 'todo <todo-command> <note-pattern>';
}
@@ -39,12 +37,11 @@ class Command extends BaseCommand {
}
} else if (action == 'clear') {
toSave.is_todo = 0;
}
}
await Note.save(toSave);
}
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -1,15 +1,9 @@
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.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');
class Command extends BaseCommand {
usage() {
return 'undone <note>';
}
@@ -21,7 +15,6 @@ class Command extends BaseCommand {
async action(args) {
await CommandDone.handleAction(this, args, false);
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -2,10 +2,8 @@ const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { _ } = require('lib/locale.js');
const BaseModel = require('lib/BaseModel.js');
const Folder = require('lib/models/Folder.js');
class Command extends BaseCommand {
usage() {
return 'use <notebook>';
}
@@ -14,10 +12,6 @@ class Command extends BaseCommand {
return _('Switches to [notebook] - all further operations will happen within this notebook.');
}
autocomplete() {
return { data: autocompleteFolders };
}
compatibleUis() {
return ['cli'];
}
@@ -27,7 +21,6 @@ class Command extends BaseCommand {
if (!folder) throw new Error(_('Cannot find "%s".', args['notebook']));
app().switchCurrentFolder(folder);
}
}
module.exports = Command;
module.exports = Command;

View File

@@ -3,7 +3,6 @@ const Setting = require('lib/models/Setting.js');
const { _ } = require('lib/locale.js');
class Command extends BaseCommand {
usage() {
return 'version';
}
@@ -16,7 +15,6 @@ class Command extends BaseCommand {
const p = require('./package.json');
this.stdout(_('%s %s (%s)', p.name, p.version, Setting.value('env')));
}
}
module.exports = Command;
module.exports = Command;

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,6 @@
const TextWidget = require('tkwidgets/TextWidget.js');
class ConsoleWidget extends TextWidget {
constructor() {
super();
this.lines_ = [];
@@ -16,7 +15,7 @@ class ConsoleWidget extends TextWidget {
}
get lastLine() {
return this.lines_.length ? this.lines_[this.lines_.length-1] : '';
return this.lines_.length ? this.lines_[this.lines_.length - 1] : '';
}
addLine(line) {
@@ -40,13 +39,12 @@ class ConsoleWidget extends TextWidget {
if (this.lines_.length > this.maxLines_) {
this.lines_.splice(0, this.lines_.length - this.maxLines_);
}
this.text = this.lines_.join("\n");
this.text = this.lines_.join('\n');
this.updateText_ = false;
}
super.render();
}
}
module.exports = ConsoleWidget;
module.exports = ConsoleWidget;

View File

@@ -5,7 +5,6 @@ const ListWidget = require('tkwidgets/ListWidget.js');
const _ = require('lib/locale.js')._;
class FolderListWidget extends ListWidget {
constructor() {
super();
@@ -20,7 +19,7 @@ class FolderListWidget extends ListWidget {
this.updateItems_ = false;
this.trimItemTitle = false;
this.itemRenderer = (item) => {
this.itemRenderer = item => {
let output = [];
if (item === '-') {
output.push('-'.repeat(this.innerWidth));
@@ -33,8 +32,6 @@ class FolderListWidget extends ListWidget {
output.push(item.title);
}
// if (item && item.id) output.push(item.id.substr(0, 5));
return output.join(' ');
};
}
@@ -47,7 +44,6 @@ class FolderListWidget extends ListWidget {
output++;
folderId = folder.parent_id;
}
throw new Error('unreachable');
}
get selectedFolderId() {
@@ -56,7 +52,7 @@ class FolderListWidget extends ListWidget {
set selectedFolderId(v) {
this.selectedFolderId_ = v;
this.updateIndexFromSelectedItemId()
this.updateIndexFromSelectedItemId();
this.invalidate();
}
@@ -66,7 +62,7 @@ class FolderListWidget extends ListWidget {
set selectedSearchId(v) {
this.selectedSearchId_ = v;
this.updateIndexFromSelectedItemId()
this.updateIndexFromSelectedItemId();
this.invalidate();
}
@@ -76,7 +72,7 @@ class FolderListWidget extends ListWidget {
set selectedTagId(v) {
this.selectedTagId_ = v;
this.updateIndexFromSelectedItemId()
this.updateIndexFromSelectedItemId();
this.invalidate();
}
@@ -85,9 +81,8 @@ class FolderListWidget extends ListWidget {
}
set notesParentType(v) {
//if (this.notesParentType_ === v) return;
this.notesParentType_ = v;
this.updateIndexFromSelectedItemId()
this.updateIndexFromSelectedItemId();
this.invalidate();
}
@@ -98,7 +93,7 @@ class FolderListWidget extends ListWidget {
set searches(v) {
this.searches_ = v;
this.updateItems_ = true;
this.updateIndexFromSelectedItemId()
this.updateIndexFromSelectedItemId();
this.invalidate();
}
@@ -109,7 +104,7 @@ class FolderListWidget extends ListWidget {
set tags(v) {
this.tags_ = v;
this.updateItems_ = true;
this.updateIndexFromSelectedItemId()
this.updateIndexFromSelectedItemId();
this.invalidate();
}
@@ -120,17 +115,37 @@ class FolderListWidget extends ListWidget {
set folders(v) {
this.folders_ = v;
this.updateItems_ = true;
this.updateIndexFromSelectedItemId()
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_) {
this.logger().debug('Rebuilding items...', this.notesParentType, this.selectedJoplinItemId, this.selectedSearchId);
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];
const folderParentId = f.parent_id ? f.parent_id : '';
if (folderParentId === parentId) {
newItems.push(f);
if (this.folderHasChildren_(this.folders, f.id)) orderFolders(f.id);
}
}
};
orderFolders('');
if (this.tags.length) {
if (newItems.length) newItems.push('-');
@@ -145,7 +160,7 @@ class FolderListWidget extends ListWidget {
this.items = newItems;
this.notesParentType = previousParentType;
this.updateIndexFromSelectedItemId(wasSelectedItemId)
this.updateIndexFromSelectedItemId(wasSelectedItemId);
this.updateItems_ = false;
}
@@ -171,7 +186,6 @@ class FolderListWidget extends ListWidget {
const index = this.itemIndexByKey('id', itemId);
this.currentIndex = index >= 0 ? index : 0;
}
}
module.exports = FolderListWidget;
module.exports = FolderListWidget;

View File

@@ -2,14 +2,13 @@ const Note = require('lib/models/Note.js');
const ListWidget = require('tkwidgets/ListWidget.js');
class NoteListWidget extends ListWidget {
constructor() {
super();
this.selectedNoteId_ = 0;
this.updateIndexFromSelectedNoteId_ = false;
this.itemRenderer = (note) => {
this.itemRenderer = note => {
let label = Note.displayTitle(note); // + ' ' + note.id;
if (note.is_todo) {
label = '[' + (note.todo_completed ? 'X' : ' ') + '] ' + label;
@@ -32,7 +31,6 @@ class NoteListWidget extends ListWidget {
super.render();
}
}
module.exports = NoteListWidget;
module.exports = NoteListWidget;

View File

@@ -2,7 +2,6 @@ const Note = require('lib/models/Note.js');
const TextWidget = require('tkwidgets/TextWidget.js');
class NoteMetadataWidget extends TextWidget {
constructor() {
super();
this.noteId_ = 0;
@@ -30,7 +29,6 @@ class NoteMetadataWidget extends TextWidget {
this.text = this.note_ ? await Note.minimalSerializeForDisplay(this.note_) : '';
}
}
}
module.exports = NoteMetadataWidget;
module.exports = NoteMetadataWidget;

View File

@@ -3,7 +3,6 @@ const TextWidget = require('tkwidgets/TextWidget.js');
const { _ } = require('lib/locale.js');
class NoteWidget extends TextWidget {
constructor() {
super();
this.noteId_ = 0;
@@ -44,11 +43,11 @@ class NoteWidget extends TextWidget {
} else if (this.noteId_) {
this.doAsync('loadNote', async () => {
this.note_ = await Note.load(this.noteId_);
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 : '';
this.text = this.note_ ? this.note_.title + '\n\n' + this.note_.body : '';
}
if (this.lastLoadedNoteId_ !== this.noteId_) this.scrollTop = 0;
@@ -59,7 +58,6 @@ class NoteWidget extends TextWidget {
this.scrollTop = 0;
}
}
}
module.exports = NoteWidget;
module.exports = NoteWidget;

View File

@@ -5,7 +5,6 @@ const stripAnsi = require('strip-ansi');
const { handleAutocompletion } = require('../autocompletion.js');
class StatusBarWidget extends BaseWidget {
constructor() {
super();
@@ -75,7 +74,7 @@ class StatusBarWidget extends BaseWidget {
super.render();
const doSaveCursor = !this.promptActive;
if (doSaveCursor) this.term.saveCursor();
this.innerClear();
@@ -87,14 +86,13 @@ class StatusBarWidget extends BaseWidget {
//const textStyle = this.promptActive ? (s) => s : chalk.bgBlueBright.white;
//const textStyle = (s) => s;
const textStyle = this.promptActive ? (s) => s : chalk.gray;
const textStyle = this.promptActive ? s => s : chalk.gray;
this.term.drawHLine(this.absoluteInnerX, this.absoluteInnerY, this.innerWidth, textStyle(' '));
this.term.moveTo(this.absoluteInnerX, this.absoluteInnerY);
if (this.promptActive) {
this.term.write(textStyle(this.promptState_.promptString));
if (this.inputEventEmitter_) {
@@ -113,8 +111,8 @@ class StatusBarWidget extends BaseWidget {
history: this.history,
default: this.promptState_.initialText,
autoComplete: handleAutocompletion,
autoCompleteHint : true,
autoCompleteMenu : true,
autoCompleteHint: true,
autoCompleteMenu: true,
};
if ('cursorPosition' in this.promptState_) options.cursorPosition = this.promptState_.cursorPosition;
@@ -153,19 +151,15 @@ class StatusBarWidget extends BaseWidget {
// Only callback once everything has been cleaned up and reset
resolveFn(resolveResult);
});
} else {
for (let i = 0; i < this.items_.length; i++) {
const s = this.items_[i].substr(0, this.innerWidth - 1);
this.term.write(textStyle(s));
}
}
if (doSaveCursor) this.term.restoreCursor();
}
}
module.exports = StatusBarWidget;

View File

@@ -1,10 +1,7 @@
const fs = require('fs-extra');
const { wrap } = require('lib/string-utils.js');
const Setting = require('lib/models/Setting.js');
const { fileExtension, basename, dirname } = require('lib/path-utils.js');
const { _, setLocale, languageCode } = require('lib/locale.js');
const { _ } = require('lib/locale.js');
const rootDir = dirname(dirname(__dirname));
const MAX_WIDTH = 78;
const INDENT = ' ';
@@ -16,14 +13,14 @@ function renderTwoColumnData(options, baseIndent, width) {
let option = options[i];
const flag = option[0];
const indent = baseIndent + INDENT + ' '.repeat(optionColWidth + 2);
let r = wrap(option[1], indent, width);
r = r.substr(flag.length + (baseIndent + INDENT).length);
r = baseIndent + INDENT + flag + r;
output.push(r);
}
return output.join("\n");
return output.join('\n');
}
function renderCommandHelp(cmd, width = null) {
@@ -44,7 +41,7 @@ function renderCommandHelp(cmd, width = null) {
}
if (cmd.name() === 'config') {
const renderMetadata = (md) => {
const renderMetadata = md => {
let desc = [];
if (md.label) {
@@ -67,13 +64,13 @@ function renderCommandHelp(cmd, width = null) {
} else if (md.type === Setting.TYPE_INT) {
defaultString = (md.value ? md.value : 0).toString();
} else if (md.type === Setting.TYPE_BOOL) {
defaultString = (md.value === true ? 'true' : 'false');
defaultString = md.value === true ? 'true' : 'false';
}
}
if (defaultString !== null) desc.push(_('Default: %s', defaultString));
return [md.key, desc.join("\n")];
return [md.key, desc.join('\n')];
};
output.push('');
@@ -83,7 +80,7 @@ function renderCommandHelp(cmd, width = null) {
let keysValues = [];
const keys = Setting.keys(true, 'cli');
for (let i = 0; i < keys.length; i++) {
if (keysValues.length) keysValues.push(['','']);
if (keysValues.length) keysValues.push(['', '']);
const md = Setting.settingMetadata(keys[i]);
if (!md.label) continue;
keysValues.push(renderMetadata(md));
@@ -91,8 +88,8 @@ function renderCommandHelp(cmd, width = null) {
output.push(renderTwoColumnData(keysValues, baseIndent, width));
}
return output.join("\n");
return output.join('\n');
}
function getOptionColWidth(options) {
@@ -104,4 +101,4 @@ function getOptionColWidth(options) {
return output;
}
module.exports = { renderCommandHelp };
module.exports = { renderCommandHelp };

View File

@@ -1,5 +1,8 @@
#!/usr/bin/env node
// Use njstrace to find out what Node.js might be spending time on
// var njstrace = require('njstrace').inject();
// Make it possible to require("/lib/...") without specifying full path
require('app-module-path').addPath(__dirname);
@@ -19,6 +22,7 @@ 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 Revision = require('lib/models/Revision.js');
const { Logger } = require('lib/logger.js');
const { FsDriverNode } = require('lib/fs-driver-node.js');
const { shimInit } = require('lib/shim-init-node.js');
@@ -40,6 +44,7 @@ BaseItem.loadClass('Resource', Resource);
BaseItem.loadClass('Tag', Tag);
BaseItem.loadClass('NoteTag', NoteTag);
BaseItem.loadClass('MasterKey', MasterKey);
BaseItem.loadClass('Revision', Revision);
Setting.setConstant('appId', 'net.cozic.joplin-cli');
Setting.setConstant('appType', 'cli');
@@ -48,25 +53,25 @@ shimInit();
const application = app();
if (process.platform === "win32") {
var rl = require("readline").createInterface({
if (process.platform === 'win32') {
var rl = require('readline').createInterface({
input: process.stdin,
output: process.stdout
output: process.stdout,
});
rl.on("SIGINT", function () {
process.emit("SIGINT");
rl.on('SIGINT', function() {
process.emit('SIGINT');
});
}
process.stdout.on('error', function( err ) {
process.stdout.on('error', function(err) {
// https://stackoverflow.com/questions/12329816/error-write-epipe-when-piping-node-output-to-head#15884508
if (err.code == "EPIPE") {
if (err.code == 'EPIPE') {
process.exit(0);
}
});
application.start(process.argv).catch((error) => {
application.start(process.argv).catch(error => {
if (error.code == 'flagError') {
console.error(error.message);
console.error(_('Type `joplin help` for usage information.'));
@@ -76,4 +81,4 @@ application.start(process.argv).catch((error) => {
}
process.exit(1);
});
});

View File

@@ -1,13 +1,11 @@
const { _ } = require('lib/locale.js');
const { netUtils } = require('lib/net-utils.js');
const http = require("http");
const urlParser = require("url");
const FormData = require('form-data');
const http = require('http');
const urlParser = require('url');
const enableServerDestroy = require('server-destroy');
class OneDriveApiNodeUtils {
constructor(api) {
this.api_ = api;
this.oauthServer_ = null;
@@ -48,7 +46,7 @@ class OneDriveApiNodeUtils {
let authCodeUrl = this.api().authCodeUrl('http://localhost:' + port);
return new Promise((resolve, reject) => {
return new Promise((resolve, reject) => {
this.oauthServer_ = http.createServer();
let errorMessage = null;
@@ -56,7 +54,7 @@ class OneDriveApiNodeUtils {
const url = urlParser.parse(request.url, true);
if (url.pathname === '/auth') {
response.writeHead(302, { 'Location': authCodeUrl });
response.writeHead(302, { Location: authCodeUrl });
response.end();
return;
}
@@ -64,10 +62,10 @@ class OneDriveApiNodeUtils {
const query = url.query;
const writeResponse = (code, message) => {
response.writeHead(code, {"Content-Type": "text/html"});
response.writeHead(code, { 'Content-Type': 'text/html' });
response.write(this.makePage(message));
response.end();
}
};
// After the response has been received, don't destroy the server right
// away or the browser might display a connection reset error (even
@@ -77,21 +75,24 @@ class OneDriveApiNodeUtils {
this.oauthServer_.destroy();
this.oauthServer_ = null;
}, 1000);
}
};
if (!query.code) return writeResponse(400, '"code" query parameter is missing');
this.api().execTokenRequest(query.code, 'http://localhost:' + port.toString()).then(() => {
writeResponse(200, _('The application has been authorised - you may now close this browser tab.'));
targetConsole.log('');
targetConsole.log(_('The application has been successfully authorised.'));
waitAndDestroy();
}).catch((error) => {
writeResponse(400, error.message);
targetConsole.log('');
targetConsole.log(error.message);
waitAndDestroy();
});
this.api()
.execTokenRequest(query.code, 'http://localhost:' + port.toString())
.then(() => {
writeResponse(200, _('The application has been authorised - you may now close this browser tab.'));
targetConsole.log('');
targetConsole.log(_('The application has been successfully authorised.'));
waitAndDestroy();
})
.catch(error => {
writeResponse(400, error.message);
targetConsole.log('');
targetConsole.log(error.message);
waitAndDestroy();
});
});
this.oauthServer_.on('close', () => {
@@ -116,7 +117,6 @@ class OneDriveApiNodeUtils {
targetConsole.log('http://127.0.0.1:' + port + '/auth');
});
}
}
module.exports = { OneDriveApiNodeUtils };
module.exports = { OneDriveApiNodeUtils };

2115
CliClient/locales/ar.po Normal file

File diff suppressed because it is too large Load Diff

2145
CliClient/locales/bg_BG.po Normal 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

1960
CliClient/locales/en_US.po Normal 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

1991
CliClient/locales/fa.po Normal 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

2128
CliClient/locales/ko.po Normal file

File diff suppressed because it is too large Load Diff

2141
CliClient/locales/nb_NO.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2173
CliClient/locales/nl_NL.po Normal file

File diff suppressed because it is too large Load Diff

2160
CliClient/locales/pl_PL.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2019
CliClient/locales/ro.po Normal 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

2141
CliClient/locales/sr_RS.po Normal file

File diff suppressed because it is too large Load Diff

2177
CliClient/locales/sv.po Normal file

File diff suppressed because it is too large Load Diff

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