mirror of https://github.com/laurent22/joplin.git
Merge branch 'dev' of github.com:laurent22/joplin into dev
commit
de7579a14e
|
@ -338,6 +338,9 @@ packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js
|
|||
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useExternalPlugins.d.ts
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useExternalPlugins.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useExternalPlugins.js.map
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinCommands.d.ts
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinCommands.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinCommands.js.map
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.d.ts
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.js.map
|
||||
|
|
|
@ -324,6 +324,9 @@ packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js
|
|||
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useExternalPlugins.d.ts
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useExternalPlugins.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useExternalPlugins.js.map
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinCommands.d.ts
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinCommands.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinCommands.js.map
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.d.ts
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.js
|
||||
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.js.map
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
10
README.md
10
README.md
|
@ -64,7 +64,7 @@ The Web Clipper is a browser extension that allows you to save web pages and scr
|
|||
|
||||
# Sponsors
|
||||
|
||||
<a href="https://seirei.ne.jp"><img title="Serei Network" width="256" src="https://joplinapp.org/images/sponsors/SeireiNetwork.png"/></a> <a href="https://usrigging.com/"><img title="U.S. Ringing Supply" width="256" src="https://joplinapp.org/images/sponsors/RingingSupply.svg"/></a>
|
||||
<a href="https://seirei.ne.jp"><img title="Serei Network" width="256" src="https://joplinapp.org/images/sponsors/SeireiNetwork.png"/></a> <a href="https://usrigging.com/"><img title="U.S. Ringing Supply" width="256" src="https://joplinapp.org/images/sponsors/RingingSupply.svg"/></a> <a href=" https://tranio.com/italy/"><img title="Tranio" width="256" src="https://joplinapp.org/images/sponsors/Tranio.png"/></a>
|
||||
|
||||
* * *
|
||||
|
||||
|
@ -409,6 +409,12 @@ For more information see [Plugins](https://github.com/laurent22/joplin/blob/dev/
|
|||
|
||||
Joplin implements the SQLite Full Text Search (FTS4) extension. It means the content of all the notes is indexed in real time and search queries return results very fast. Both [Simple FTS Queries](https://www.sqlite.org/fts3.html#simple_fts_queries) and [Full-Text Index Queries](https://www.sqlite.org/fts3.html#full_text_index_queries) are supported. See below for the list of supported queries:
|
||||
|
||||
One caveat of SQLite FTS is that it does not support languages which do not use Latin word boundaries (spaces, tabs, punctuation). To solve this issue, Joplin has a custom search mode, that does not use FTS, but still has all of its features (multi term search, filters, etc.). One of its drawbacks is that it can get slow on larger note collections. Also, the sorting of the results will be less accurate, as the ranking algorithm (BM25) is, for now, only implemented for FTS. Finally, in this mode there are no restrictions on using the `*` wildcard (`swim*`, `*swim` and `ast*rix` all work). This search mode is currently enabled if one of the following languages are detected:
|
||||
- Chinese
|
||||
- Japanese
|
||||
- Korean
|
||||
- Thai
|
||||
|
||||
## Supported queries
|
||||
|
||||
Search type | Description | Example
|
||||
|
@ -648,7 +654,7 @@ Thank you to everyone who've contributed to Joplin's source code!
|
|||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2016-2020 Laurent Cozic
|
||||
Copyright (c) 2016-2021 Laurent Cozic
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
|
|
|
@ -86,6 +86,28 @@
|
|||
</ul>
|
||||
<p>To view what arguments are supported, you can open any of these files
|
||||
and look at the <code>execute()</code> command.</p>
|
||||
<a href="#executing-editor-commands" id="executing-editor-commands" style="color: inherit; text-decoration: none;">
|
||||
<h2>Executing editor commands</h2>
|
||||
</a>
|
||||
<p>There might be a situation where you want to invoke editor commands
|
||||
without using a <a href="joplincontentscripts.html">contentScript</a>. For this
|
||||
reason Joplin provides the built in <code>editor.execCommand</code> command.</p>
|
||||
<p><code>editor.execCommand</code> should work with any core command in both the
|
||||
<a href="https://codemirror.net/doc/manual.html#execCommand">CodeMirror</a> and
|
||||
<a href="https://www.tiny.cloud/docs/api/tinymce/tinymce.editorcommands/#execcommand">TinyMCE</a> editors,
|
||||
as well as most functions calls directly on a CodeMirror editor object (extensions).</p>
|
||||
<ul>
|
||||
<li><a href="https://codemirror.net/doc/manual.html#commands">CodeMirror commands</a></li>
|
||||
<li><a href="https://www.tiny.cloud/docs/advanced/editor-command-identifiers/#coreeditorcommands">TinyMCE core editor commands</a></li>
|
||||
</ul>
|
||||
<p><code>editor.execCommand</code> supports adding arguments for the commands.</p>
|
||||
<pre><code class="language-typescript"><span class="hljs-keyword">await</span> joplin.commands.execute(<span class="hljs-string">'editor.execCommand'</span>, {
|
||||
<span class="hljs-attr">name</span>: <span class="hljs-string">'madeUpCommand'</span>, <span class="hljs-comment">// CodeMirror and TinyMCE</span>
|
||||
<span class="hljs-attr">args</span>: [], <span class="hljs-comment">// CodeMirror and TinyMCE</span>
|
||||
<span class="hljs-attr">ui</span>: <span class="hljs-literal">false</span>, <span class="hljs-comment">// TinyMCE only</span>
|
||||
<span class="hljs-attr">value</span>: <span class="hljs-string">''</span>, <span class="hljs-comment">// TinyMCE only</span>
|
||||
});</code></pre>
|
||||
<p><a href="https://github.com/laurent22/joplin/blob/dev/packages/app-cli/tests/support/plugins/codemirror_content_script/src/index.ts">View the example using the CodeMirror editor</a></p>
|
||||
</div>
|
||||
</section>
|
||||
<!--
|
||||
|
|
|
@ -149,10 +149,8 @@
|
|||
<p>Currently the supported context variables aren't documented, but you can
|
||||
find the list below:</p>
|
||||
<ul>
|
||||
<li>[Global When
|
||||
Clauses](<a href="https://github.com/laurent22/joplin/blob/dev/packages/lib/services/commands/stateToWhenClauseContext.ts">https://github.com/laurent22/joplin/blob/dev/packages/lib/services/commands/stateToWhenClauseContext.ts</a>).</li>
|
||||
<li>[Desktop app When
|
||||
Clauses](<a href="https://github.com/laurent22/joplin/blob/dev/packages/app-desktop/services/commands/stateToWhenClauseContext.ts">https://github.com/laurent22/joplin/blob/dev/packages/app-desktop/services/commands/stateToWhenClauseContext.ts</a>).</li>
|
||||
<li><a href="https://github.com/laurent22/joplin/blob/dev/packages/lib/services/commands/stateToWhenClauseContext.ts">Global When Clauses</a></li>
|
||||
<li><a href="https://github.com/laurent22/joplin/blob/dev/packages/app-desktop/services/commands/stateToWhenClauseContext.ts">Desktop app When Clauses</a></li>
|
||||
</ul>
|
||||
<p>Note: Commands are enabled by default unless you use this property.</p>
|
||||
</div>
|
||||
|
|
|
@ -405,6 +405,12 @@ https://github.com/laurent22/joplin/blob/dev/readme/changelog.md
|
|||
<p><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=E8JMYD2LQ8MMA&lc=GB&item_name=Joplin+Development&currency_code=EUR&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted"><img src="https://joplinapp.org/images/badges/Donate-PayPal-green.svg" alt="Donate using PayPal"></a> <a href="https://github.com/sponsors/laurent22/"><img src="https://joplinapp.org/images/badges/GitHub-Badge.svg" alt="Sponsor on GitHub"></a> <a href="https://www.patreon.com/joplin"><img src="https://joplinapp.org/images/badges/Patreon-Badge.svg" alt="Become a patron"></a> <a href="https://joplinapp.org/donate/#donations"><img src="https://joplinapp.org/images/badges/Donate-IBAN.svg" alt="Donate using IBAN"></a></p>
|
||||
<hr>
|
||||
<h1>Joplin changelog<a name="joplin-changelog" href="#joplin-changelog" class="heading-anchor">🔗</a></h1>
|
||||
<h2><a href="https://github.com/laurent22/joplin/releases/tag/v2.0.4">v2.0.4</a> (Pre-release) - 2021-06-02T12:54:17Z<a name="v2-0-4-https-github-com-laurent22-joplin-releases-tag-v2-0-4-pre-release-2021-06-02t12-54-17z" href="#v2-0-4-https-github-com-laurent22-joplin-releases-tag-v2-0-4-pre-release-2021-06-02t12-54-17z" class="heading-anchor">🔗</a></h2>
|
||||
<ul>
|
||||
<li>Improved: Download plugins from GitHub release (8f6a475)</li>
|
||||
<li>Fixed: Count tags based on showCompletedTodos setting (<a href="https://github.com/laurent22/joplin/issues/4957">#4957</a>) (<a href="https://github.com/laurent22/joplin/issues/4411">#4411</a> by <a href="https://github.com/JackGruber">@JackGruber</a>)</li>
|
||||
<li>Fixed: Fixes panels overflowing window (<a href="https://github.com/laurent22/joplin/issues/4991">#4991</a>) (<a href="https://github.com/laurent22/joplin/issues/4864">#4864</a> by <a href="https://github.com/mablin7">@mablin7</a>)</li>
|
||||
</ul>
|
||||
<h2><a href="https://github.com/laurent22/joplin/releases/tag/v2.0.2">v2.0.2</a> (Pre-release) - 2021-05-21T18:07:48Z<a name="v2-0-2-https-github-com-laurent22-joplin-releases-tag-v2-0-2-pre-release-2021-05-21t18-07-48z" href="#v2-0-2-https-github-com-laurent22-joplin-releases-tag-v2-0-2-pre-release-2021-05-21t18-07-48z" class="heading-anchor">🔗</a></h2>
|
||||
<ul>
|
||||
<li>New: Add Share Notebook menu item (6f2f241)</li>
|
||||
|
|
|
@ -405,6 +405,40 @@ https://github.com/laurent22/joplin/blob/dev/readme/changelog_server.md
|
|||
<p><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=E8JMYD2LQ8MMA&lc=GB&item_name=Joplin+Development&currency_code=EUR&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted"><img src="https://joplinapp.org/images/badges/Donate-PayPal-green.svg" alt="Donate using PayPal"></a> <a href="https://github.com/sponsors/laurent22/"><img src="https://joplinapp.org/images/badges/GitHub-Badge.svg" alt="Sponsor on GitHub"></a> <a href="https://www.patreon.com/joplin"><img src="https://joplinapp.org/images/badges/Patreon-Badge.svg" alt="Become a patron"></a> <a href="https://joplinapp.org/donate/#donations"><img src="https://joplinapp.org/images/badges/Donate-IBAN.svg" alt="Donate using IBAN"></a></p>
|
||||
<hr>
|
||||
<h1>Joplin Server Changelog<a name="joplin-server-changelog" href="#joplin-server-changelog" class="heading-anchor">🔗</a></h1>
|
||||
<h2><a href="https://github.com/laurent22/joplin/releases/tag/server-v2.0.5">server-v2.0.5</a> (Pre-release) - 2021-06-02T08:14:47Z<a name="server-v2-0-5-https-github-com-laurent22-joplin-releases-tag-server-v2-0-5-pre-release-2021-06-02t08-14-47z" href="#server-v2-0-5-https-github-com-laurent22-joplin-releases-tag-server-v2-0-5-pre-release-2021-06-02t08-14-47z" class="heading-anchor">🔗</a></h2>
|
||||
<ul>
|
||||
<li>New: Add version number on website (0ef7e98)</li>
|
||||
<li>New: Added signup pages (41ed66d)</li>
|
||||
<li>Improved: Allow disabling item upload for a user (f8a26cf)</li>
|
||||
</ul>
|
||||
<h2><a href="https://github.com/laurent22/joplin/releases/tag/server-v2.0.4">server-v2.0.4</a> (Pre-release) - 2021-05-25T18:33:11Z<a name="server-v2-0-4-https-github-com-laurent22-joplin-releases-tag-server-v2-0-4-pre-release-2021-05-25t18-33-11z" href="#server-v2-0-4-https-github-com-laurent22-joplin-releases-tag-server-v2-0-4-pre-release-2021-05-25t18-33-11z" class="heading-anchor">🔗</a></h2>
|
||||
<ul>
|
||||
<li>Fixed: Fixed Item and Log page when using Postgres (ee0f237)</li>
|
||||
</ul>
|
||||
<h2><a href="https://github.com/laurent22/joplin/releases/tag/server-v2.0.3">server-v2.0.3</a> (Pre-release) - 2021-05-25T18:08:46Z<a name="server-v2-0-3-https-github-com-laurent22-joplin-releases-tag-server-v2-0-3-pre-release-2021-05-25t18-08-46z" href="#server-v2-0-3-https-github-com-laurent22-joplin-releases-tag-server-v2-0-3-pre-release-2021-05-25t18-08-46z" class="heading-anchor">🔗</a></h2>
|
||||
<ul>
|
||||
<li>Fixed: Fixed handling of request origin (12a6634)</li>
|
||||
</ul>
|
||||
<h2><a href="https://github.com/laurent22/joplin/releases/tag/server-v2.0.2">server-v2.0.2</a> (Pre-release) - 2021-05-25T19:15:50Z<a name="server-v2-0-2-https-github-com-laurent22-joplin-releases-tag-server-v2-0-2-pre-release-2021-05-25t19-15-50z" href="#server-v2-0-2-https-github-com-laurent22-joplin-releases-tag-server-v2-0-2-pre-release-2021-05-25t19-15-50z" class="heading-anchor">🔗</a></h2>
|
||||
<ul>
|
||||
<li>New: Add mailer service (ed8ee67)</li>
|
||||
<li>New: Add support for item size limit (6afde54)</li>
|
||||
<li>New: Added API end points to manage users (77b284f)</li>
|
||||
<li>Improved: Allow enabling or disabling the sharing feature per user (daaaa13)</li>
|
||||
<li>Improved: Allow setting the path to the SQLite database using SQLITE_DATABASE env variable (68e79f1)</li>
|
||||
<li>Improved: Allow using a different domain for API, main website and user content (83cef7a)</li>
|
||||
<li>Improved: Generate only one share link per note (e156ee1)</li>
|
||||
<li>Improved: Go back to home page when there is an error and user is logged in (a24b009)</li>
|
||||
<li>Improved: Improved Items table and added item size to it (7f05420)</li>
|
||||
<li>Improved: Improved log table too and made it sortable (ec7f0f4)</li>
|
||||
<li>Improved: Make it more difficult to delete all data (b01aa7e)</li>
|
||||
<li>Improved: Redirect to correct page when trying to access the root (51051e0)</li>
|
||||
<li>Improved: Use external directory to store Postgres data in Docker-compose config (71a7fc0)</li>
|
||||
<li>Fixed: Fixed /items page when using Postgres (2d0580f)</li>
|
||||
<li>Fixed: Fixed bug when unsharing a notebook that has no recipients (6ddb69e)</li>
|
||||
<li>Fixed: Fixed deleting a note that has been shared (489995d)</li>
|
||||
<li>Fixed: Make sure temp files are deleted after upload is done (#4540)</li>
|
||||
</ul>
|
||||
<h2><a href="https://github.com/laurent22/joplin/releases/tag/server-v2.0.1">server-v2.0.1</a> (Pre-release) - 2021-05-14T13:55:45Z<a name="server-v2-0-1-https-github-com-laurent22-joplin-releases-tag-server-v2-0-1-pre-release-2021-05-14t13-55-45z" href="#server-v2-0-1-https-github-com-laurent22-joplin-releases-tag-server-v2-0-1-pre-release-2021-05-14t13-55-45z" class="heading-anchor">🔗</a></h2>
|
||||
<ul>
|
||||
<li>New: Add support for sharing notes via a link (ccbc329)</li>
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
830
docs/index.html
830
docs/index.html
File diff suppressed because it is too large
Load Diff
|
@ -99,17 +99,17 @@
|
|||
"sync.9.path": {
|
||||
"type": "string",
|
||||
"default": "",
|
||||
"description": "Joplin Server URL. Attention: If you change this location, make sure you copy all your content to it before syncing, otherwise all files will be removed! See the FAQ for more details: https://joplinapp.org/faq/"
|
||||
"description": "Joplin Cloud URL. Attention: If you change this location, make sure you copy all your content to it before syncing, otherwise all files will be removed! See the FAQ for more details: https://joplinapp.org/faq/"
|
||||
},
|
||||
"sync.9.username": {
|
||||
"type": "string",
|
||||
"default": "",
|
||||
"description": "Joplin Server email"
|
||||
"description": "Joplin Cloud email"
|
||||
},
|
||||
"sync.9.password": {
|
||||
"type": "string",
|
||||
"default": "",
|
||||
"description": "Joplin Server password",
|
||||
"description": "Joplin Cloud password",
|
||||
"$comment": "private"
|
||||
},
|
||||
"sync.5.syncTargets": {
|
||||
|
|
|
@ -415,15 +415,15 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tbody>
|
||||
<tr>
|
||||
<td>Total Windows downloads</td>
|
||||
<td>1,425,567</td>
|
||||
<td>1,444,540</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Total macOs downloads</td>
|
||||
<td>554,909</td>
|
||||
<td>561,465</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Total Linux downloads</td>
|
||||
<td>463,554</td>
|
||||
<td>473,228</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Windows %</td>
|
||||
|
@ -453,92 +453,100 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v2.0.4">v2.0.4</a> (p)</td>
|
||||
<td>2021-06-02T12:54:17Z</td>
|
||||
<td>898</td>
|
||||
<td>267</td>
|
||||
<td>242</td>
|
||||
<td>1,407</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v2.0.2">v2.0.2</a> (p)</td>
|
||||
<td>2021-05-21T18:07:48Z</td>
|
||||
<td>594</td>
|
||||
<td>179</td>
|
||||
<td>448</td>
|
||||
<td>1,221</td>
|
||||
<td>1,953</td>
|
||||
<td>470</td>
|
||||
<td>1,554</td>
|
||||
<td>3,977</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v2.0.1">v2.0.1</a> (p)</td>
|
||||
<td>2021-05-15T13:22:58Z</td>
|
||||
<td>770</td>
|
||||
<td>243</td>
|
||||
<td>984</td>
|
||||
<td>1,997</td>
|
||||
<td>784</td>
|
||||
<td>245</td>
|
||||
<td>994</td>
|
||||
<td>2,023</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.8.5">v1.8.5</a></td>
|
||||
<td>2021-05-10T11:58:14Z</td>
|
||||
<td>11,870</td>
|
||||
<td>6,670</td>
|
||||
<td>5,753</td>
|
||||
<td>24,293</td>
|
||||
<td>27,272</td>
|
||||
<td>12,591</td>
|
||||
<td>13,983</td>
|
||||
<td>53,846</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.8.4">v1.8.4</a> (p)</td>
|
||||
<td>2021-05-09T18:05:05Z</td>
|
||||
<td>623</td>
|
||||
<td>656</td>
|
||||
<td>120</td>
|
||||
<td>433</td>
|
||||
<td>1,176</td>
|
||||
<td>1,209</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.8.3">v1.8.3</a> (p)</td>
|
||||
<td>2021-05-04T10:38:16Z</td>
|
||||
<td>1,049</td>
|
||||
<td>290</td>
|
||||
<td>1,280</td>
|
||||
<td>293</td>
|
||||
<td>912</td>
|
||||
<td>2,251</td>
|
||||
<td>2,485</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.8.2">v1.8.2</a> (p)</td>
|
||||
<td>2021-04-25T10:50:51Z</td>
|
||||
<td>1,445</td>
|
||||
<td>1,473</td>
|
||||
<td>421</td>
|
||||
<td>1,261</td>
|
||||
<td>3,127</td>
|
||||
<td>3,155</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.8.1">v1.8.1</a> (p)</td>
|
||||
<td>2021-03-29T10:46:41Z</td>
|
||||
<td>3,003</td>
|
||||
<td>3,025</td>
|
||||
<td>805</td>
|
||||
<td>2,418</td>
|
||||
<td>6,226</td>
|
||||
<td>2,419</td>
|
||||
<td>6,249</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.7.11">v1.7.11</a></td>
|
||||
<td>2021-02-03T12:50:01Z</td>
|
||||
<td>113,794</td>
|
||||
<td>42,526</td>
|
||||
<td>64,040</td>
|
||||
<td>220,360</td>
|
||||
<td>113,946</td>
|
||||
<td>42,556</td>
|
||||
<td>64,079</td>
|
||||
<td>220,581</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.7.10">v1.7.10</a></td>
|
||||
<td>2021-01-30T13:25:29Z</td>
|
||||
<td>13,825</td>
|
||||
<td>13,830</td>
|
||||
<td>4,831</td>
|
||||
<td>4,425</td>
|
||||
<td>23,081</td>
|
||||
<td>4,429</td>
|
||||
<td>23,090</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.7.9">v1.7.9</a> (p)</td>
|
||||
<td>2021-01-28T09:50:21Z</td>
|
||||
<td>480</td>
|
||||
<td>481</td>
|
||||
<td>123</td>
|
||||
<td>483</td>
|
||||
<td>1,086</td>
|
||||
<td>1,087</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.7.6">v1.7.6</a> (p)</td>
|
||||
<td>2021-01-27T10:36:05Z</td>
|
||||
<td>283</td>
|
||||
<td>284</td>
|
||||
<td>82</td>
|
||||
<td>277</td>
|
||||
<td>642</td>
|
||||
<td>643</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.7.5">v1.7.5</a> (p)</td>
|
||||
|
@ -559,10 +567,10 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.6.8">v1.6.8</a></td>
|
||||
<td>2021-01-20T18:11:34Z</td>
|
||||
<td>18,064</td>
|
||||
<td>7,662</td>
|
||||
<td>7,578</td>
|
||||
<td>33,304</td>
|
||||
<td>18,148</td>
|
||||
<td>7,665</td>
|
||||
<td>7,581</td>
|
||||
<td>33,394</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.7.3">v1.7.3</a> (p)</td>
|
||||
|
@ -575,50 +583,50 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.6.7">v1.6.7</a></td>
|
||||
<td>2021-01-11T23:20:33Z</td>
|
||||
<td>10,375</td>
|
||||
<td>4,617</td>
|
||||
<td>10,418</td>
|
||||
<td>4,619</td>
|
||||
<td>4,531</td>
|
||||
<td>19,523</td>
|
||||
<td>19,568</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.6.6">v1.6.6</a></td>
|
||||
<td>2021-01-09T16:15:31Z</td>
|
||||
<td>12,359</td>
|
||||
<td>12,362</td>
|
||||
<td>3,405</td>
|
||||
<td>4,776</td>
|
||||
<td>20,540</td>
|
||||
<td>20,543</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.6.5">v1.6.5</a> (p)</td>
|
||||
<td>2021-01-09T01:24:32Z</td>
|
||||
<td>553</td>
|
||||
<td>580</td>
|
||||
<td>57</td>
|
||||
<td>300</td>
|
||||
<td>910</td>
|
||||
<td>937</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.6.4">v1.6.4</a> (p)</td>
|
||||
<td>2021-01-07T19:11:32Z</td>
|
||||
<td>381</td>
|
||||
<td>72</td>
|
||||
<td>73</td>
|
||||
<td>197</td>
|
||||
<td>650</td>
|
||||
<td>651</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.6.2">v1.6.2</a> (p)</td>
|
||||
<td>2021-01-04T22:34:55Z</td>
|
||||
<td>664</td>
|
||||
<td>665</td>
|
||||
<td>221</td>
|
||||
<td>577</td>
|
||||
<td>1,462</td>
|
||||
<td>1,463</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.5.14">v1.5.14</a></td>
|
||||
<td>2020-12-30T01:48:46Z</td>
|
||||
<td>10,847</td>
|
||||
<td>5,191</td>
|
||||
<td>10,889</td>
|
||||
<td>5,192</td>
|
||||
<td>5,512</td>
|
||||
<td>21,550</td>
|
||||
<td>21,593</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.6.1">v1.6.1</a> (p)</td>
|
||||
|
@ -639,18 +647,18 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.5.12">v1.5.12</a></td>
|
||||
<td>2020-12-28T15:14:08Z</td>
|
||||
<td>2,374</td>
|
||||
<td>2,378</td>
|
||||
<td>1,762</td>
|
||||
<td>911</td>
|
||||
<td>5,047</td>
|
||||
<td>5,051</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.5.11">v1.5.11</a></td>
|
||||
<td>2020-12-27T19:54:07Z</td>
|
||||
<td>13,999</td>
|
||||
<td>14,009</td>
|
||||
<td>4,605</td>
|
||||
<td>4,253</td>
|
||||
<td>22,857</td>
|
||||
<td>4,254</td>
|
||||
<td>22,868</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.5.10">v1.5.10</a> (p)</td>
|
||||
|
@ -664,9 +672,9 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.5.9">v1.5.9</a> (p)</td>
|
||||
<td>2020-12-23T18:01:08Z</td>
|
||||
<td>321</td>
|
||||
<td>367</td>
|
||||
<td>399</td>
|
||||
<td>1,087</td>
|
||||
<td>368</td>
|
||||
<td>400</td>
|
||||
<td>1,089</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.5.8">v1.5.8</a> (p)</td>
|
||||
|
@ -695,26 +703,26 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.4.19">v1.4.19</a></td>
|
||||
<td>2020-12-01T11:11:16Z</td>
|
||||
<td>25,492</td>
|
||||
<td>13,350</td>
|
||||
<td>11,610</td>
|
||||
<td>50,452</td>
|
||||
<td>25,530</td>
|
||||
<td>13,358</td>
|
||||
<td>11,615</td>
|
||||
<td>50,503</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.4.18">v1.4.18</a></td>
|
||||
<td>2020-11-28T12:21:41Z</td>
|
||||
<td>11,082</td>
|
||||
<td>3,870</td>
|
||||
<td>3,076</td>
|
||||
<td>18,028</td>
|
||||
<td>11,087</td>
|
||||
<td>3,871</td>
|
||||
<td>3,081</td>
|
||||
<td>18,039</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.4.16">v1.4.16</a></td>
|
||||
<td>2020-11-27T19:40:16Z</td>
|
||||
<td>1,452</td>
|
||||
<td>1,457</td>
|
||||
<td>822</td>
|
||||
<td>584</td>
|
||||
<td>2,858</td>
|
||||
<td>2,863</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.4.15">v1.4.15</a></td>
|
||||
|
@ -727,18 +735,18 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.4.12">v1.4.12</a></td>
|
||||
<td>2020-11-23T18:58:07Z</td>
|
||||
<td>2,983</td>
|
||||
<td>2,994</td>
|
||||
<td>1,316</td>
|
||||
<td>1,287</td>
|
||||
<td>5,586</td>
|
||||
<td>5,597</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.4.11">v1.4.11</a> (p)</td>
|
||||
<td>2020-11-19T23:06:51Z</td>
|
||||
<td>946</td>
|
||||
<td>147</td>
|
||||
<td>974</td>
|
||||
<td>148</td>
|
||||
<td>574</td>
|
||||
<td>1,667</td>
|
||||
<td>1,696</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.4.10">v1.4.10</a> (p)</td>
|
||||
|
@ -751,10 +759,10 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.4.9">v1.4.9</a> (p)</td>
|
||||
<td>2020-11-11T14:23:17Z</td>
|
||||
<td>497</td>
|
||||
<td>499</td>
|
||||
<td>133</td>
|
||||
<td>393</td>
|
||||
<td>1,023</td>
|
||||
<td>1,025</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.4.7">v1.4.7</a> (p)</td>
|
||||
|
@ -767,10 +775,10 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.3.18">v1.3.18</a></td>
|
||||
<td>2020-11-06T12:07:02Z</td>
|
||||
<td>30,609</td>
|
||||
<td>30,668</td>
|
||||
<td>11,316</td>
|
||||
<td>10,495</td>
|
||||
<td>52,420</td>
|
||||
<td>52,479</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.3.17">v1.3.17</a> (p)</td>
|
||||
|
@ -783,18 +791,18 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.4.6">v1.4.6</a> (p)</td>
|
||||
<td>2020-11-05T22:44:12Z</td>
|
||||
<td>339</td>
|
||||
<td>341</td>
|
||||
<td>86</td>
|
||||
<td>45</td>
|
||||
<td>470</td>
|
||||
<td>472</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.3.15">v1.3.15</a></td>
|
||||
<td>2020-11-04T12:22:50Z</td>
|
||||
<td>2,221</td>
|
||||
<td>2,223</td>
|
||||
<td>1,290</td>
|
||||
<td>836</td>
|
||||
<td>4,347</td>
|
||||
<td>4,349</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.3.11">v1.3.11</a> (p)</td>
|
||||
|
@ -807,10 +815,10 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.3.10">v1.3.10</a> (p)</td>
|
||||
<td>2020-10-29T13:27:14Z</td>
|
||||
<td>368</td>
|
||||
<td>369</td>
|
||||
<td>107</td>
|
||||
<td>307</td>
|
||||
<td>782</td>
|
||||
<td>783</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.3.9">v1.3.9</a> (p)</td>
|
||||
|
@ -848,9 +856,9 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.3.3">v1.3.3</a> (p)</td>
|
||||
<td>2020-10-17T10:56:57Z</td>
|
||||
<td>113</td>
|
||||
<td>36</td>
|
||||
<td>38</td>
|
||||
<td>25</td>
|
||||
<td>174</td>
|
||||
<td>176</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.3.2">v1.3.2</a> (p)</td>
|
||||
|
@ -864,17 +872,17 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.3.1">v1.3.1</a> (p)</td>
|
||||
<td>2020-10-11T15:10:18Z</td>
|
||||
<td>77</td>
|
||||
<td>45</td>
|
||||
<td>35</td>
|
||||
<td>157</td>
|
||||
<td>46</td>
|
||||
<td>36</td>
|
||||
<td>159</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.2.6">v1.2.6</a></td>
|
||||
<td>2020-10-09T13:56:59Z</td>
|
||||
<td>44,164</td>
|
||||
<td>44,215</td>
|
||||
<td>17,713</td>
|
||||
<td>14,024</td>
|
||||
<td>75,901</td>
|
||||
<td>14,026</td>
|
||||
<td>75,954</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.2.4">v1.2.4</a> (p)</td>
|
||||
|
@ -895,18 +903,18 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.2.2">v1.2.2</a> (p)</td>
|
||||
<td>2020-09-22T20:31:55Z</td>
|
||||
<td>777</td>
|
||||
<td>779</td>
|
||||
<td>199</td>
|
||||
<td>631</td>
|
||||
<td>1,607</td>
|
||||
<td>1,609</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.1.4">v1.1.4</a></td>
|
||||
<td>2020-09-21T11:20:09Z</td>
|
||||
<td>27,572</td>
|
||||
<td>13,489</td>
|
||||
<td>27,592</td>
|
||||
<td>13,490</td>
|
||||
<td>7,740</td>
|
||||
<td>48,801</td>
|
||||
<td>48,822</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.1.3">v1.1.3</a> (p)</td>
|
||||
|
@ -927,42 +935,42 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.1.1">v1.1.1</a> (p)</td>
|
||||
<td>2020-09-11T23:32:47Z</td>
|
||||
<td>519</td>
|
||||
<td>521</td>
|
||||
<td>195</td>
|
||||
<td>342</td>
|
||||
<td>1,056</td>
|
||||
<td>1,058</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.245">v1.0.245</a></td>
|
||||
<td>2020-09-09T12:56:10Z</td>
|
||||
<td>21,148</td>
|
||||
<td>21,177</td>
|
||||
<td>9,999</td>
|
||||
<td>5,634</td>
|
||||
<td>36,781</td>
|
||||
<td>36,810</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.242">v1.0.242</a></td>
|
||||
<td>2020-09-04T22:00:34Z</td>
|
||||
<td>12,439</td>
|
||||
<td>12,446</td>
|
||||
<td>6,418</td>
|
||||
<td>3,015</td>
|
||||
<td>21,872</td>
|
||||
<td>21,879</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.241">v1.0.241</a></td>
|
||||
<td>2020-09-04T18:06:00Z</td>
|
||||
<td>23,628</td>
|
||||
<td>5,748</td>
|
||||
<td>4,994</td>
|
||||
<td>34,370</td>
|
||||
<td>23,665</td>
|
||||
<td>5,749</td>
|
||||
<td>4,995</td>
|
||||
<td>34,409</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.239">v1.0.239</a> (p)</td>
|
||||
<td>2020-09-01T21:56:36Z</td>
|
||||
<td>599</td>
|
||||
<td>601</td>
|
||||
<td>226</td>
|
||||
<td>400</td>
|
||||
<td>1,225</td>
|
||||
<td>1,227</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.237">v1.0.237</a> (p)</td>
|
||||
|
@ -983,26 +991,26 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.235">v1.0.235</a> (p)</td>
|
||||
<td>2020-08-18T22:08:01Z</td>
|
||||
<td>1,671</td>
|
||||
<td>1,673</td>
|
||||
<td>489</td>
|
||||
<td>920</td>
|
||||
<td>3,080</td>
|
||||
<td>3,082</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.234">v1.0.234</a> (p)</td>
|
||||
<td>2020-08-17T23:13:02Z</td>
|
||||
<td>536</td>
|
||||
<td>538</td>
|
||||
<td>125</td>
|
||||
<td>100</td>
|
||||
<td>761</td>
|
||||
<td>763</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.233">v1.0.233</a></td>
|
||||
<td>2020-08-01T14:51:15Z</td>
|
||||
<td>43,098</td>
|
||||
<td>43,153</td>
|
||||
<td>18,188</td>
|
||||
<td>12,358</td>
|
||||
<td>73,644</td>
|
||||
<td>73,699</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.232">v1.0.232</a> (p)</td>
|
||||
|
@ -1015,10 +1023,10 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.227">v1.0.227</a></td>
|
||||
<td>2020-07-07T20:44:54Z</td>
|
||||
<td>40,384</td>
|
||||
<td>15,273</td>
|
||||
<td>9,627</td>
|
||||
<td>65,284</td>
|
||||
<td>40,414</td>
|
||||
<td>15,274</td>
|
||||
<td>9,629</td>
|
||||
<td>65,317</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.226">v1.0.226</a> (p)</td>
|
||||
|
@ -1031,10 +1039,10 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.224">v1.0.224</a></td>
|
||||
<td>2020-06-20T22:26:08Z</td>
|
||||
<td>24,774</td>
|
||||
<td>24,788</td>
|
||||
<td>11,005</td>
|
||||
<td>6,006</td>
|
||||
<td>41,785</td>
|
||||
<td>41,799</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.223">v1.0.223</a> (p)</td>
|
||||
|
@ -1055,18 +1063,18 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.220">v1.0.220</a></td>
|
||||
<td>2020-06-13T18:26:22Z</td>
|
||||
<td>31,712</td>
|
||||
<td>31,734</td>
|
||||
<td>9,916</td>
|
||||
<td>6,411</td>
|
||||
<td>48,039</td>
|
||||
<td>48,061</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.218">v1.0.218</a></td>
|
||||
<td>2020-06-07T10:43:34Z</td>
|
||||
<td>14,535</td>
|
||||
<td>14,536</td>
|
||||
<td>6,968</td>
|
||||
<td>2,954</td>
|
||||
<td>24,457</td>
|
||||
<td>24,458</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.217">v1.0.217</a> (p)</td>
|
||||
|
@ -1079,18 +1087,18 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.216">v1.0.216</a></td>
|
||||
<td>2020-05-24T14:21:01Z</td>
|
||||
<td>37,277</td>
|
||||
<td>14,268</td>
|
||||
<td>37,327</td>
|
||||
<td>14,269</td>
|
||||
<td>10,177</td>
|
||||
<td>61,722</td>
|
||||
<td>61,773</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.214">v1.0.214</a> (p)</td>
|
||||
<td>2020-05-21T17:15:15Z</td>
|
||||
<td>6,529</td>
|
||||
<td>6,545</td>
|
||||
<td>3,466</td>
|
||||
<td>760</td>
|
||||
<td>10,755</td>
|
||||
<td>10,771</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.212">v1.0.212</a> (p)</td>
|
||||
|
@ -1119,18 +1127,18 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.207">v1.0.207</a> (p)</td>
|
||||
<td>2020-05-10T16:37:35Z</td>
|
||||
<td>1,187</td>
|
||||
<td>1,188</td>
|
||||
<td>263</td>
|
||||
<td>1,016</td>
|
||||
<td>2,466</td>
|
||||
<td>2,467</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.201">v1.0.201</a></td>
|
||||
<td>2020-04-15T22:55:13Z</td>
|
||||
<td>53,311</td>
|
||||
<td>53,324</td>
|
||||
<td>20,043</td>
|
||||
<td>18,180</td>
|
||||
<td>91,534</td>
|
||||
<td>91,547</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.200">v1.0.200</a></td>
|
||||
|
@ -1143,98 +1151,98 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.199">v1.0.199</a></td>
|
||||
<td>2020-04-10T18:41:58Z</td>
|
||||
<td>19,339</td>
|
||||
<td>19,347</td>
|
||||
<td>5,884</td>
|
||||
<td>3,788</td>
|
||||
<td>29,011</td>
|
||||
<td>29,019</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.197">v1.0.197</a></td>
|
||||
<td>2020-03-30T17:21:22Z</td>
|
||||
<td>22,280</td>
|
||||
<td>22,290</td>
|
||||
<td>9,540</td>
|
||||
<td>5,726</td>
|
||||
<td>37,546</td>
|
||||
<td>5,734</td>
|
||||
<td>37,564</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.195">v1.0.195</a></td>
|
||||
<td>2020-03-22T19:56:12Z</td>
|
||||
<td>18,890</td>
|
||||
<td>7,948</td>
|
||||
<td>18,892</td>
|
||||
<td>7,949</td>
|
||||
<td>4,506</td>
|
||||
<td>31,344</td>
|
||||
<td>31,347</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.194">v1.0.194</a> (p)</td>
|
||||
<td>2020-03-14T00:00:32Z</td>
|
||||
<td>1,285</td>
|
||||
<td>1,375</td>
|
||||
<td>511</td>
|
||||
<td>3,171</td>
|
||||
<td>1,377</td>
|
||||
<td>513</td>
|
||||
<td>3,175</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.193">v1.0.193</a></td>
|
||||
<td>2020-03-08T08:58:53Z</td>
|
||||
<td>28,641</td>
|
||||
<td>28,642</td>
|
||||
<td>10,907</td>
|
||||
<td>7,392</td>
|
||||
<td>46,940</td>
|
||||
<td>7,393</td>
|
||||
<td>46,942</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.192">v1.0.192</a> (p)</td>
|
||||
<td>2020-03-06T23:27:52Z</td>
|
||||
<td>472</td>
|
||||
<td>473</td>
|
||||
<td>122</td>
|
||||
<td>89</td>
|
||||
<td>683</td>
|
||||
<td>684</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.190">v1.0.190</a> (p)</td>
|
||||
<td>2020-03-06T01:22:22Z</td>
|
||||
<td>373</td>
|
||||
<td>374</td>
|
||||
<td>90</td>
|
||||
<td>85</td>
|
||||
<td>548</td>
|
||||
<td>549</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.189">v1.0.189</a> (p)</td>
|
||||
<td>2020-03-04T17:27:15Z</td>
|
||||
<td>342</td>
|
||||
<td>343</td>
|
||||
<td>96</td>
|
||||
<td>90</td>
|
||||
<td>528</td>
|
||||
<td>529</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.187">v1.0.187</a> (p)</td>
|
||||
<td>2020-03-01T12:31:06Z</td>
|
||||
<td>919</td>
|
||||
<td>920</td>
|
||||
<td>230</td>
|
||||
<td>263</td>
|
||||
<td>1,412</td>
|
||||
<td>1,413</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.179">v1.0.179</a></td>
|
||||
<td>2020-01-24T22:42:41Z</td>
|
||||
<td>71,023</td>
|
||||
<td>28,545</td>
|
||||
<td>22,534</td>
|
||||
<td>122,102</td>
|
||||
<td>71,040</td>
|
||||
<td>28,550</td>
|
||||
<td>22,535</td>
|
||||
<td>122,125</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.178">v1.0.178</a></td>
|
||||
<td>2020-01-20T19:06:45Z</td>
|
||||
<td>17,539</td>
|
||||
<td>17,540</td>
|
||||
<td>5,962</td>
|
||||
<td>2,584</td>
|
||||
<td>26,085</td>
|
||||
<td>26,086</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.177">v1.0.177</a> (p)</td>
|
||||
<td>2019-12-30T14:40:40Z</td>
|
||||
<td>1,943</td>
|
||||
<td>1,944</td>
|
||||
<td>438</td>
|
||||
<td>678</td>
|
||||
<td>3,059</td>
|
||||
<td>679</td>
|
||||
<td>3,061</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.176">v1.0.176</a> (p)</td>
|
||||
|
@ -1247,42 +1255,42 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.175">v1.0.175</a></td>
|
||||
<td>2019-12-08T11:48:47Z</td>
|
||||
<td>72,519</td>
|
||||
<td>16,905</td>
|
||||
<td>72,538</td>
|
||||
<td>16,906</td>
|
||||
<td>16,509</td>
|
||||
<td>105,933</td>
|
||||
<td>105,953</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.174">v1.0.174</a></td>
|
||||
<td>2019-11-12T18:20:58Z</td>
|
||||
<td>30,401</td>
|
||||
<td>30,407</td>
|
||||
<td>11,722</td>
|
||||
<td>8,221</td>
|
||||
<td>50,344</td>
|
||||
<td>50,350</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.173">v1.0.173</a></td>
|
||||
<td>2019-11-11T08:33:35Z</td>
|
||||
<td>5,072</td>
|
||||
<td>5,074</td>
|
||||
<td>2,077</td>
|
||||
<td>743</td>
|
||||
<td>7,892</td>
|
||||
<td>7,894</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.170">v1.0.170</a></td>
|
||||
<td>2019-10-13T22:13:04Z</td>
|
||||
<td>27,413</td>
|
||||
<td>27,424</td>
|
||||
<td>8,752</td>
|
||||
<td>7,675</td>
|
||||
<td>43,840</td>
|
||||
<td>43,851</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.169">v1.0.169</a></td>
|
||||
<td>2019-09-27T18:35:13Z</td>
|
||||
<td>17,097</td>
|
||||
<td>17,098</td>
|
||||
<td>5,921</td>
|
||||
<td>3,754</td>
|
||||
<td>26,772</td>
|
||||
<td>26,773</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.168">v1.0.168</a></td>
|
||||
|
@ -1295,10 +1303,10 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.167">v1.0.167</a></td>
|
||||
<td>2019-09-10T08:48:37Z</td>
|
||||
<td>16,790</td>
|
||||
<td>16,791</td>
|
||||
<td>5,704</td>
|
||||
<td>3,703</td>
|
||||
<td>26,197</td>
|
||||
<td>26,198</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.166">v1.0.166</a></td>
|
||||
|
@ -1311,34 +1319,34 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.165">v1.0.165</a></td>
|
||||
<td>2019-08-14T21:46:29Z</td>
|
||||
<td>18,898</td>
|
||||
<td>18,903</td>
|
||||
<td>6,972</td>
|
||||
<td>5,462</td>
|
||||
<td>31,332</td>
|
||||
<td>31,337</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.161">v1.0.161</a></td>
|
||||
<td>2019-07-13T18:30:00Z</td>
|
||||
<td>19,285</td>
|
||||
<td>19,287</td>
|
||||
<td>6,352</td>
|
||||
<td>4,136</td>
|
||||
<td>29,773</td>
|
||||
<td>29,775</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.160">v1.0.160</a></td>
|
||||
<td>2019-06-15T00:21:40Z</td>
|
||||
<td>30,531</td>
|
||||
<td>7,745</td>
|
||||
<td>30,535</td>
|
||||
<td>7,746</td>
|
||||
<td>8,101</td>
|
||||
<td>46,377</td>
|
||||
<td>46,382</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.159">v1.0.159</a></td>
|
||||
<td>2019-06-08T00:00:19Z</td>
|
||||
<td>5,194</td>
|
||||
<td>2,178</td>
|
||||
<td>1,112</td>
|
||||
<td>8,484</td>
|
||||
<td>1,113</td>
|
||||
<td>8,485</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.158">v1.0.158</a></td>
|
||||
|
@ -1425,8 +1433,8 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<td>2019-03-10T20:59:58Z</td>
|
||||
<td>13,629</td>
|
||||
<td>4,171</td>
|
||||
<td>3,223</td>
|
||||
<td>21,023</td>
|
||||
<td>3,227</td>
|
||||
<td>21,027</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.139">v1.0.139</a> (p)</td>
|
||||
|
@ -1440,9 +1448,9 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.138">v1.0.138</a> (p)</td>
|
||||
<td>2019-03-03T17:23:00Z</td>
|
||||
<td>150</td>
|
||||
<td>86</td>
|
||||
<td>87</td>
|
||||
<td>84</td>
|
||||
<td>320</td>
|
||||
<td>321</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.137">v1.0.137</a> (p)</td>
|
||||
|
@ -1455,10 +1463,10 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.135">v1.0.135</a></td>
|
||||
<td>2019-02-27T23:36:57Z</td>
|
||||
<td>12,514</td>
|
||||
<td>12,515</td>
|
||||
<td>3,958</td>
|
||||
<td>4,077</td>
|
||||
<td>20,549</td>
|
||||
<td>20,550</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.134">v1.0.134</a></td>
|
||||
|
@ -1472,17 +1480,17 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.132">v1.0.132</a></td>
|
||||
<td>2019-02-26T23:02:05Z</td>
|
||||
<td>1,088</td>
|
||||
<td>451</td>
|
||||
<td>452</td>
|
||||
<td>95</td>
|
||||
<td>1,634</td>
|
||||
<td>1,635</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.127">v1.0.127</a></td>
|
||||
<td>2019-02-14T23:12:48Z</td>
|
||||
<td>9,785</td>
|
||||
<td>3,171</td>
|
||||
<td>9,786</td>
|
||||
<td>3,172</td>
|
||||
<td>2,929</td>
|
||||
<td>15,885</td>
|
||||
<td>15,887</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.126">v1.0.126</a> (p)</td>
|
||||
|
@ -1504,9 +1512,9 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.120">v1.0.120</a></td>
|
||||
<td>2019-01-10T21:42:53Z</td>
|
||||
<td>15,605</td>
|
||||
<td>5,201</td>
|
||||
<td>5,202</td>
|
||||
<td>6,517</td>
|
||||
<td>27,323</td>
|
||||
<td>27,324</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.119">v1.0.119</a></td>
|
||||
|
@ -1536,9 +1544,9 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.116">v1.0.116</a></td>
|
||||
<td>2018-11-20T19:09:24Z</td>
|
||||
<td>3,474</td>
|
||||
<td>1,121</td>
|
||||
<td>1,122</td>
|
||||
<td>714</td>
|
||||
<td>5,309</td>
|
||||
<td>5,310</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.115">v1.0.115</a></td>
|
||||
|
@ -1559,10 +1567,10 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.111">v1.0.111</a></td>
|
||||
<td>2018-09-30T20:15:09Z</td>
|
||||
<td>12,041</td>
|
||||
<td>3,307</td>
|
||||
<td>3,668</td>
|
||||
<td>19,016</td>
|
||||
<td>12,042</td>
|
||||
<td>3,308</td>
|
||||
<td>3,669</td>
|
||||
<td>19,019</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.110">v1.0.110</a></td>
|
||||
|
@ -1688,9 +1696,9 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.93">v1.0.93</a></td>
|
||||
<td>2018-05-14T11:36:01Z</td>
|
||||
<td>1,791</td>
|
||||
<td>1,157</td>
|
||||
<td>1,158</td>
|
||||
<td>759</td>
|
||||
<td>3,707</td>
|
||||
<td>3,708</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.91">v1.0.91</a></td>
|
||||
|
@ -1719,10 +1727,10 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.83">v1.0.83</a></td>
|
||||
<td>2018-04-04T19:43:58Z</td>
|
||||
<td>4,886</td>
|
||||
<td>4,892</td>
|
||||
<td>2,532</td>
|
||||
<td>2,658</td>
|
||||
<td>10,076</td>
|
||||
<td>10,082</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v1.0.82">v1.0.82</a></td>
|
||||
|
@ -2001,8 +2009,8 @@ https://github.com/laurent22/joplin/blob/dev/readme/stats.md
|
|||
<td>2017-11-24T14:27:49Z</td>
|
||||
<td>150</td>
|
||||
<td>696</td>
|
||||
<td>6,461</td>
|
||||
<td>7,307</td>
|
||||
<td>6,463</td>
|
||||
<td>7,309</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/laurent22/joplin/releases/tag/v0.10.23">v0.10.23</a></td>
|
||||
|
|
|
@ -526,6 +526,14 @@ function useMenu(props: Props) {
|
|||
click: () => { bridge().electronApp().hide(); },
|
||||
} : noItem,
|
||||
|
||||
shim.isMac() ? {
|
||||
role: 'hideothers',
|
||||
} : noItem,
|
||||
|
||||
shim.isMac() ? {
|
||||
role: 'unhide',
|
||||
} : noItem,
|
||||
|
||||
{
|
||||
type: 'separator',
|
||||
},
|
||||
|
|
|
@ -224,10 +224,12 @@ function CodeMirror(props: NoteBodyEditorProps, ref: any) {
|
|||
textHeading: () => addListItem('## ', ''),
|
||||
textHorizontalRule: () => addListItem('* * *'),
|
||||
'editor.execCommand': (value: CommandValue) => {
|
||||
if (editorRef.current[value.name]) {
|
||||
if (!('args' in value)) value.args = [];
|
||||
if (!('args' in value)) value.args = [];
|
||||
|
||||
if (editorRef.current[value.name]) {
|
||||
editorRef.current[value.name](...value.args);
|
||||
} else if (editorRef.current.commandExists(value.name)) {
|
||||
editorRef.current.execCommand(value.name);
|
||||
} else {
|
||||
reg.logger().warn('CodeMirror execCommand: unsupported command: ', value.name);
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ import useEditorSearch from './utils/useEditorSearch';
|
|||
import useJoplinMode from './utils/useJoplinMode';
|
||||
import useKeymap from './utils/useKeymap';
|
||||
import useExternalPlugins from './utils/useExternalPlugins';
|
||||
import useJoplinCommands from './utils/useJoplinCommands';
|
||||
|
||||
import 'codemirror/keymap/emacs';
|
||||
import 'codemirror/keymap/vim';
|
||||
|
@ -107,6 +108,7 @@ function Editor(props: EditorProps, ref: any) {
|
|||
useJoplinMode(CodeMirror);
|
||||
const pluginOptions: any = useExternalPlugins(CodeMirror, props.plugins);
|
||||
useKeymap(CodeMirror);
|
||||
useJoplinCommands(CodeMirror);
|
||||
|
||||
useImperativeHandle(ref, () => {
|
||||
return editor;
|
||||
|
|
|
@ -2,19 +2,76 @@ import { modifyListLines } from './useCursorUtils';
|
|||
|
||||
describe('useCursorUtils', () => {
|
||||
|
||||
const listWithDashes = `- item1
|
||||
- item2
|
||||
- item3`;
|
||||
const listWithDashes = [
|
||||
'- item1',
|
||||
'- item2',
|
||||
'- item3',
|
||||
];
|
||||
|
||||
const listNoDashes = `item1
|
||||
item2
|
||||
item3`;
|
||||
const listWithNoPrefixes = [
|
||||
'item1',
|
||||
'item2',
|
||||
'item3',
|
||||
];
|
||||
|
||||
test('should remove "- " from beggining of each line of input string', () => {
|
||||
expect(JSON.stringify(modifyListLines(listWithDashes.split('\n'), 0, '- '))).toBe(JSON.stringify(listNoDashes.split('\n')));
|
||||
const listWithNumbers = [
|
||||
'1. item1',
|
||||
'2. item2',
|
||||
'3. item3',
|
||||
];
|
||||
|
||||
const listWithOnes = [
|
||||
'1. item1',
|
||||
'1. item2',
|
||||
'1. item3',
|
||||
];
|
||||
|
||||
const listWithSomeNumbers = [
|
||||
'1. item1',
|
||||
'item2',
|
||||
'2. item3',
|
||||
];
|
||||
|
||||
const numberedListWithEmptyLines = [
|
||||
'1. item1',
|
||||
'2. item2',
|
||||
'3. ' ,
|
||||
'4. item3',
|
||||
];
|
||||
|
||||
const noPrefixListWithEmptyLines = [
|
||||
'item1',
|
||||
'item2',
|
||||
'' ,
|
||||
'item3',
|
||||
];
|
||||
|
||||
test('should remove "- " from beginning of each line of input string', () => {
|
||||
expect(modifyListLines([...listWithDashes], NaN, '- ')).toStrictEqual(listWithNoPrefixes);
|
||||
});
|
||||
|
||||
test('should add "- " at the beggining of each line of the input string', () => {
|
||||
expect(JSON.stringify(modifyListLines(listNoDashes.split('\n'), 0, '- '))).toBe(JSON.stringify(listWithDashes.split('\n')));
|
||||
test('should add "- " at the beginning of each line of the input string', () => {
|
||||
expect(modifyListLines([...listWithNoPrefixes], NaN, '- ')).toStrictEqual(listWithDashes);
|
||||
});
|
||||
|
||||
test('should remove "n. " at the beginning of each line of the input string', () => {
|
||||
expect(modifyListLines([...listWithNumbers], 4, '1. ')).toStrictEqual(listWithNoPrefixes);
|
||||
});
|
||||
|
||||
test('should add "n. " at the beginning of each line of the input string', () => {
|
||||
expect(modifyListLines([...listWithNoPrefixes], 1, '1. ')).toStrictEqual(listWithNumbers);
|
||||
});
|
||||
|
||||
test('should remove "1. " at the beginning of each line of the input string', () => {
|
||||
expect(modifyListLines([...listWithOnes], 2, '1. ')).toStrictEqual(listWithNoPrefixes);
|
||||
});
|
||||
|
||||
test('should remove "n. " from each line that has it, and ignore' +
|
||||
' lines which do not', () => {
|
||||
expect(modifyListLines([...listWithSomeNumbers], 2, '2. ')).toStrictEqual(listWithNoPrefixes);
|
||||
});
|
||||
|
||||
test('should add numbers to each line including empty one', () => {
|
||||
expect(modifyListLines(noPrefixListWithEmptyLines, 1, '1. ')).toStrictEqual(numberedListWithEmptyLines);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,20 +1,27 @@
|
|||
import markdownUtils from '@joplin/lib/markdownUtils';
|
||||
import Setting from '@joplin/lib/models/Setting';
|
||||
export function modifyListLines(lines: string[],num: number,listSymbol: string) {
|
||||
export function modifyListLines(lines: string[], num: number, listSymbol: string) {
|
||||
const isNotNumbered = num === 1;
|
||||
for (let j = 0; j < lines.length; j++) {
|
||||
const line = lines[j];
|
||||
if (!line && j === lines.length - 1) continue;
|
||||
// Only add the list token if it's not already there
|
||||
// if it is, remove it
|
||||
if (!line.startsWith(listSymbol)) {
|
||||
if (num) {
|
||||
if (num) {
|
||||
const lineNum = markdownUtils.olLineNumber(line);
|
||||
if (!lineNum && isNotNumbered) {
|
||||
lines[j] = `${num.toString()}. ${line}`;
|
||||
num++;
|
||||
} else {
|
||||
lines[j] = listSymbol + line;
|
||||
const listToken = markdownUtils.extractListToken(line);
|
||||
lines[j] = line.substr(listToken.length, line.length - listToken.length);
|
||||
}
|
||||
} else {
|
||||
lines[j] = line.substr(listSymbol.length, line.length - listSymbol.length);
|
||||
if (!line.startsWith(listSymbol)) {
|
||||
lines[j] = listSymbol + line;
|
||||
} else {
|
||||
lines[j] = line.substr(listSymbol.length, line.length - listSymbol.length);
|
||||
}
|
||||
}
|
||||
}
|
||||
return lines;
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
// Helper commands added to the the CodeMirror instance
|
||||
export default function useJoplinCommands(CodeMirror: any) {
|
||||
|
||||
CodeMirror.defineExtension('commandExists', function(name: string) {
|
||||
return !!CodeMirror.commands[name];
|
||||
});
|
||||
}
|
|
@ -105,7 +105,7 @@ class SearchScreenComponent extends BaseScreenComponent {
|
|||
|
||||
if (query) {
|
||||
if (this.props.settings['db.ftsEnabled']) {
|
||||
notes = await SearchEngineUtils.notesForQuery(query);
|
||||
notes = await SearchEngineUtils.notesForQuery(query, true);
|
||||
} else {
|
||||
const p = query.split(' ');
|
||||
const temp = [];
|
||||
|
|
|
@ -313,7 +313,7 @@ export default class BaseApplication {
|
|||
notes = await Tag.notes(parentId, options);
|
||||
} else if (parentType === BaseModel.TYPE_SEARCH) {
|
||||
const search = BaseModel.byId(state.searches, parentId);
|
||||
notes = await SearchEngineUtils.notesForQuery(search.query_pattern);
|
||||
notes = await SearchEngineUtils.notesForQuery(search.query_pattern, true);
|
||||
const parsedQuery = await SearchEngine.instance().parseQuery(search.query_pattern);
|
||||
highlightedWords = SearchEngine.instance().allParsedQueryTerms(parsedQuery);
|
||||
} else if (parentType === BaseModel.TYPE_SMART_FILTER) {
|
||||
|
|
|
@ -21,6 +21,34 @@ import { Command } from './types';
|
|||
*
|
||||
* To view what arguments are supported, you can open any of these files
|
||||
* and look at the `execute()` command.
|
||||
*
|
||||
* ## Executing editor commands
|
||||
*
|
||||
* There might be a situation where you want to invoke editor commands
|
||||
* without using a {@link JoplinContentScripts | contentScript}. For this
|
||||
* reason Joplin provides the built in `editor.execCommand` command.
|
||||
*
|
||||
* `editor.execCommand` should work with any core command in both the
|
||||
* [CodeMirror](https://codemirror.net/doc/manual.html#execCommand) and
|
||||
* [TinyMCE](https://www.tiny.cloud/docs/api/tinymce/tinymce.editorcommands/#execcommand) editors,
|
||||
* as well as most functions calls directly on a CodeMirror editor object (extensions).
|
||||
*
|
||||
* * [CodeMirror commands](https://codemirror.net/doc/manual.html#commands)
|
||||
* * [TinyMCE core editor commands](https://www.tiny.cloud/docs/advanced/editor-command-identifiers/#coreeditorcommands)
|
||||
*
|
||||
* `editor.execCommand` supports adding arguments for the commands.
|
||||
*
|
||||
* ```typescript
|
||||
* await joplin.commands.execute('editor.execCommand', {
|
||||
* name: 'madeUpCommand', // CodeMirror and TinyMCE
|
||||
* args: [], // CodeMirror and TinyMCE
|
||||
* ui: false, // TinyMCE only
|
||||
* value: '', // TinyMCE only
|
||||
* });
|
||||
* ```
|
||||
*
|
||||
* [View the example using the CodeMirror editor](https://github.com/laurent22/joplin/blob/dev/packages/app-cli/tests/support/plugins/codemirror_content_script/src/index.ts)
|
||||
*
|
||||
*/
|
||||
export default class JoplinCommands {
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ export default async function(request: Request) {
|
|||
options.caseInsensitive = true;
|
||||
results = await ModelClass.all(options);
|
||||
} else {
|
||||
results = await SearchEngineUtils.notesForQuery(query, defaultLoadOptions(request, ModelType.Note));
|
||||
results = await SearchEngineUtils.notesForQuery(query, false, defaultLoadOptions(request, ModelType.Note));
|
||||
}
|
||||
|
||||
return collectionToPaginatedResults(modelType, results, request);
|
||||
|
|
|
@ -386,6 +386,7 @@ describe('services_SearchEngine', function() {
|
|||
expect((await engine.search('测试')).length).toBe(1);
|
||||
expect((await engine.search('测试'))[0].fields).toEqual(['body']);
|
||||
expect((await engine.search('测试*'))[0].fields).toEqual(['body']);
|
||||
expect((await engine.search('any:1 type:todo 测试')).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should support queries with Japanese characters', (async () => {
|
||||
|
@ -398,7 +399,7 @@ describe('services_SearchEngine', function() {
|
|||
expect((await engine.search('できません')).length).toBe(1);
|
||||
expect((await engine.search('できません*'))[0].fields.sort()).toEqual(['body', 'title']); // usually assume that keyword was matched in body
|
||||
expect((await engine.search('テスト'))[0].fields.sort()).toEqual(['body']);
|
||||
|
||||
expect((await engine.search('any:1 type:todo テスト')).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should support queries with Korean characters', (async () => {
|
||||
|
@ -409,6 +410,7 @@ describe('services_SearchEngine', function() {
|
|||
|
||||
expect((await engine.search('이것은')).length).toBe(1);
|
||||
expect((await engine.search('말')).length).toBe(1);
|
||||
expect((await engine.search('any:1 type:todo 말')).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should support queries with Thai characters', (async () => {
|
||||
|
@ -419,28 +421,7 @@ describe('services_SearchEngine', function() {
|
|||
|
||||
expect((await engine.search('นี่คือค')).length).toBe(1);
|
||||
expect((await engine.search('ไทย')).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should support field restricted queries with Chinese characters', (async () => {
|
||||
let rows;
|
||||
const n1 = await Note.save({ title: '你好', body: '我是法国人' });
|
||||
|
||||
await engine.syncTables();
|
||||
|
||||
expect((await engine.search('title:你好*')).length).toBe(1);
|
||||
expect((await engine.search('title:你好*'))[0].fields).toEqual(['title']);
|
||||
expect((await engine.search('body:法国人')).length).toBe(1);
|
||||
expect((await engine.search('body:法国人'))[0].fields).toEqual(['body']);
|
||||
expect((await engine.search('body:你好')).length).toBe(0);
|
||||
expect((await engine.search('title:你好 body:法国人')).length).toBe(1);
|
||||
expect((await engine.search('title:你好 body:法国人'))[0].fields.sort()).toEqual(['body', 'title']);
|
||||
expect((await engine.search('title:你好 body:bla')).length).toBe(0);
|
||||
expect((await engine.search('title:你好 我是')).length).toBe(1);
|
||||
expect((await engine.search('title:你好 我是'))[0].fields.sort()).toEqual(['body', 'title']);
|
||||
expect((await engine.search('title:bla 我是')).length).toBe(0);
|
||||
|
||||
// For non-alpha char, only the first field is looked at, the following ones are ignored
|
||||
// expect((await engine.search('title:你好 title:hello')).length).toBe(1);
|
||||
expect((await engine.search('any:1 type:todo ไทย')).length).toBe(1);
|
||||
}));
|
||||
|
||||
it('should parse normal query strings', (async () => {
|
||||
|
|
|
@ -17,6 +17,7 @@ export default class SearchEngine {
|
|||
public static relevantFields = 'id, title, body, user_created_time, user_updated_time, is_todo, todo_completed, todo_due, parent_id, latitude, longitude, altitude, source_url';
|
||||
public static SEARCH_TYPE_AUTO = 'auto';
|
||||
public static SEARCH_TYPE_BASIC = 'basic';
|
||||
public static SEARCH_TYPE_NONLATIN_SCRIPT = 'nonlatin';
|
||||
public static SEARCH_TYPE_FTS = 'fts';
|
||||
|
||||
public dispatch: Function = (_o: any) => {};
|
||||
|
@ -533,6 +534,7 @@ export default class SearchEngine {
|
|||
|
||||
determineSearchType_(query: string, preferredSearchType: any) {
|
||||
if (preferredSearchType === SearchEngine.SEARCH_TYPE_BASIC) return SearchEngine.SEARCH_TYPE_BASIC;
|
||||
if (preferredSearchType === SearchEngine.SEARCH_TYPE_NONLATIN_SCRIPT) return SearchEngine.SEARCH_TYPE_NONLATIN_SCRIPT;
|
||||
|
||||
// If preferredSearchType is "fts" we auto-detect anyway
|
||||
// because it's not always supported.
|
||||
|
@ -547,10 +549,15 @@ export default class SearchEngine {
|
|||
const textQuery = allTerms.filter(x => x.name === 'text' || x.name == 'title' || x.name == 'body').map(x => x.value).join(' ');
|
||||
const st = scriptType(textQuery);
|
||||
|
||||
if (!Setting.value('db.ftsEnabled') || ['ja', 'zh', 'ko', 'th'].indexOf(st) >= 0) {
|
||||
if (!Setting.value('db.ftsEnabled')) {
|
||||
return SearchEngine.SEARCH_TYPE_BASIC;
|
||||
}
|
||||
|
||||
// Non-alphabetical languages aren't support by SQLite FTS (except with extensions which are not available in all platforms)
|
||||
if (['ja', 'zh', 'ko', 'th'].indexOf(st) >= 0) {
|
||||
return SearchEngine.SEARCH_TYPE_NONLATIN_SCRIPT;
|
||||
}
|
||||
|
||||
return SearchEngine.SEARCH_TYPE_FTS;
|
||||
}
|
||||
|
||||
|
@ -565,7 +572,6 @@ export default class SearchEngine {
|
|||
const parsedQuery = await this.parseQuery(searchString);
|
||||
|
||||
if (searchType === SearchEngine.SEARCH_TYPE_BASIC) {
|
||||
// Non-alphabetical languages aren't support by SQLite FTS (except with extensions which are not available in all platforms)
|
||||
searchString = this.normalizeText_(searchString);
|
||||
const rows = await this.basicSearch(searchString);
|
||||
|
||||
|
@ -579,10 +585,11 @@ export default class SearchEngine {
|
|||
// when searching.
|
||||
// https://github.com/laurent22/joplin/issues/1075#issuecomment-459258856
|
||||
|
||||
const useFts = searchType === SearchEngine.SEARCH_TYPE_FTS;
|
||||
try {
|
||||
const { query, params } = queryBuilder(parsedQuery.allTerms);
|
||||
const { query, params } = queryBuilder(parsedQuery.allTerms, useFts);
|
||||
const rows = await this.db().selectAll(query, params);
|
||||
this.processResults_(rows, parsedQuery);
|
||||
this.processResults_(rows, parsedQuery, !useFts);
|
||||
return rows;
|
||||
} catch (error) {
|
||||
this.logger().warn(`Cannot execute MATCH query: ${searchString}: ${error.message}`);
|
||||
|
|
|
@ -26,12 +26,21 @@ describe('services_SearchEngineUtils', function() {
|
|||
|
||||
Setting.setValue('showCompletedTodos', true);
|
||||
|
||||
const rows = await SearchEngineUtils.notesForQuery('abcd', null, searchEngine);
|
||||
const rows = await SearchEngineUtils.notesForQuery('abcd', true, null, searchEngine);
|
||||
|
||||
expect(rows.length).toBe(3);
|
||||
expect(rows.map(r=>r.id)).toContain(note1.id);
|
||||
expect(rows.map(r=>r.id)).toContain(todo1.id);
|
||||
expect(rows.map(r=>r.id)).toContain(todo2.id);
|
||||
|
||||
const options: any = {};
|
||||
options.fields = ['id', 'title'];
|
||||
|
||||
const rows2 = await SearchEngineUtils.notesForQuery('abcd', true, options, searchEngine);
|
||||
expect(rows2.length).toBe(3);
|
||||
expect(rows2.map(r=>r.id)).toContain(note1.id);
|
||||
expect(rows2.map(r=>r.id)).toContain(todo1.id);
|
||||
expect(rows2.map(r=>r.id)).toContain(todo2.id);
|
||||
}));
|
||||
|
||||
it('hide completed', (async () => {
|
||||
|
@ -43,11 +52,35 @@ describe('services_SearchEngineUtils', function() {
|
|||
|
||||
Setting.setValue('showCompletedTodos', false);
|
||||
|
||||
const rows = await SearchEngineUtils.notesForQuery('abcd', null, searchEngine);
|
||||
const rows = await SearchEngineUtils.notesForQuery('abcd', true, null, searchEngine);
|
||||
|
||||
expect(rows.length).toBe(2);
|
||||
expect(rows.map(r=>r.id)).toContain(note1.id);
|
||||
expect(rows.map(r=>r.id)).toContain(todo1.id);
|
||||
|
||||
const options: any = {};
|
||||
options.fields = ['id', 'title'];
|
||||
const rows2 = await SearchEngineUtils.notesForQuery('abcd', true, options, searchEngine);
|
||||
expect(rows2.length).toBe(2);
|
||||
expect(rows2.map(r=>r.id)).toContain(note1.id);
|
||||
expect(rows2.map(r=>r.id)).toContain(todo1.id);
|
||||
}));
|
||||
|
||||
it('show completed (!applyUserSettings)', (async () => {
|
||||
const note1 = await Note.save({ title: 'abcd', body: 'body 1' });
|
||||
const todo1 = await Note.save({ title: 'abcd', body: 'todo 1', is_todo: 1 });
|
||||
await Note.save({ title: 'qwer', body: 'body 2' });
|
||||
const todo2 = await Note.save({ title: 'abcd', body: 'todo 2', is_todo: 1, todo_completed: 1590085027710 });
|
||||
await searchEngine.syncTables();
|
||||
|
||||
Setting.setValue('showCompletedTodos', false);
|
||||
|
||||
const rows = await SearchEngineUtils.notesForQuery('abcd', false, null, searchEngine);
|
||||
|
||||
expect(rows.length).toBe(3);
|
||||
expect(rows.map(r=>r.id)).toContain(note1.id);
|
||||
expect(rows.map(r=>r.id)).toContain(todo1.id);
|
||||
expect(rows.map(r=>r.id)).toContain(todo2.id);
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
|
|
@ -3,7 +3,7 @@ import Note from '../../models/Note';
|
|||
import Setting from '../../models/Setting';
|
||||
|
||||
export default class SearchEngineUtils {
|
||||
static async notesForQuery(query: string, options: any = null, searchEngine: SearchEngine = null) {
|
||||
static async notesForQuery(query: string, applyUserSettings: boolean, options: any = null, searchEngine: SearchEngine = null) {
|
||||
if (!options) options = {};
|
||||
|
||||
if (!searchEngine) {
|
||||
|
@ -30,6 +30,20 @@ export default class SearchEngineUtils {
|
|||
idWasAutoAdded = true;
|
||||
}
|
||||
|
||||
// Add fields is_todo and todo_completed for showCompletedTodos filtering.
|
||||
// Also remember that the field was auto-added so that it can be removed afterwards.
|
||||
let isTodoAutoAdded = false;
|
||||
if (fields.indexOf('is_todo') < 0) {
|
||||
fields.push('is_todo');
|
||||
isTodoAutoAdded = true;
|
||||
}
|
||||
|
||||
let isTodoCompletedAutoAdded = false;
|
||||
if (fields.indexOf('todo_completed') < 0) {
|
||||
fields.push('todo_completed');
|
||||
isTodoCompletedAutoAdded = true;
|
||||
}
|
||||
|
||||
const previewOptions = Object.assign({}, {
|
||||
order: [],
|
||||
fields: fields,
|
||||
|
@ -38,20 +52,22 @@ export default class SearchEngineUtils {
|
|||
|
||||
const notes = await Note.previews(null, previewOptions);
|
||||
|
||||
// Filter completed todos
|
||||
let filteredNotes = [...notes];
|
||||
if (applyUserSettings && !Setting.value('showCompletedTodos')) {
|
||||
filteredNotes = notes.filter(note => note.is_todo === 0 || (note.is_todo === 1 && note.todo_completed === 0));
|
||||
}
|
||||
|
||||
// By default, the notes will be returned in reverse order
|
||||
// or maybe random order so sort them here in the correct order
|
||||
// (search engine returns the results in order of relevance).
|
||||
const sortedNotes = [];
|
||||
for (let i = 0; i < notes.length; i++) {
|
||||
const idx = noteIds.indexOf(notes[i].id);
|
||||
sortedNotes[idx] = notes[i];
|
||||
for (let i = 0; i < filteredNotes.length; i++) {
|
||||
const idx = noteIds.indexOf(filteredNotes[i].id);
|
||||
sortedNotes[idx] = filteredNotes[i];
|
||||
if (idWasAutoAdded) delete sortedNotes[idx].id;
|
||||
}
|
||||
|
||||
// Filter completed todos
|
||||
let filteredNotes = [...sortedNotes];
|
||||
if (!Setting.value('showCompletedTodos')) {
|
||||
filteredNotes = sortedNotes.filter(note => note.is_todo === 0 || (note.is_todo === 1 && note.todo_completed === 0));
|
||||
if (isTodoCompletedAutoAdded) delete sortedNotes[idx].is_todo;
|
||||
if (isTodoAutoAdded) delete sortedNotes[idx].todo_completed;
|
||||
}
|
||||
|
||||
// Note that when the search engine index is somehow corrupted, it might contain
|
||||
|
@ -60,9 +76,9 @@ export default class SearchEngineUtils {
|
|||
// issue: https://discourse.joplinapp.org/t/how-to-recover-corrupted-database/9367
|
||||
if (noteIds.length !== notes.length) {
|
||||
// remove null objects
|
||||
return filteredNotes.filter(n => n);
|
||||
return sortedNotes.filter(n => n);
|
||||
} else {
|
||||
return filteredNotes;
|
||||
return sortedNotes;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -21,7 +21,7 @@ enum Requirement {
|
|||
INCLUSION = 'INCLUSION',
|
||||
}
|
||||
|
||||
const _notebookFilter = (notebooks: string[], requirement: Requirement, conditions: string[], params: string[], withs: string[]) => {
|
||||
const _notebookFilter = (notebooks: string[], requirement: Requirement, conditions: string[], params: string[], withs: string[], useFts: boolean) => {
|
||||
if (notebooks.length === 0) return;
|
||||
|
||||
const likes = [];
|
||||
|
@ -50,12 +50,13 @@ const _notebookFilter = (notebooks: string[], requirement: Requirement, conditio
|
|||
ON folders.parent_id=${viewName}.id
|
||||
)`;
|
||||
|
||||
const tableName = useFts ? 'notes_normalized' : 'notes';
|
||||
const where = `
|
||||
AND ROWID ${requirement === Requirement.EXCLUSION ? 'NOT' : ''} IN (
|
||||
SELECT notes_normalized.ROWID
|
||||
SELECT ${tableName}.ROWID
|
||||
FROM ${viewName}
|
||||
JOIN notes_normalized
|
||||
ON ${viewName}.id=notes_normalized.parent_id
|
||||
JOIN ${tableName}
|
||||
ON ${viewName}.id=${tableName}.parent_id
|
||||
)`;
|
||||
|
||||
|
||||
|
@ -65,12 +66,12 @@ const _notebookFilter = (notebooks: string[], requirement: Requirement, conditio
|
|||
|
||||
};
|
||||
|
||||
const notebookFilter = (terms: Term[], conditions: string[], params: string[], withs: string[]) => {
|
||||
const notebookFilter = (terms: Term[], conditions: string[], params: string[], withs: string[], useFts: boolean) => {
|
||||
const notebooksToInclude = terms.filter(x => x.name === 'notebook' && !x.negated).map(x => x.value);
|
||||
_notebookFilter(notebooksToInclude, Requirement.INCLUSION, conditions, params, withs);
|
||||
_notebookFilter(notebooksToInclude, Requirement.INCLUSION, conditions, params, withs, useFts);
|
||||
|
||||
const notebooksToExclude = terms.filter(x => x.name === 'notebook' && x.negated).map(x => x.value);
|
||||
_notebookFilter(notebooksToExclude, Requirement.EXCLUSION, conditions, params, withs);
|
||||
_notebookFilter(notebooksToExclude, Requirement.EXCLUSION, conditions, params, withs, useFts);
|
||||
};
|
||||
|
||||
|
||||
|
@ -87,7 +88,8 @@ const filterByTableName = (
|
|||
noteIDs: string,
|
||||
requirement: Requirement,
|
||||
withs: string[],
|
||||
tableName: string
|
||||
tableName: string,
|
||||
useFts: boolean
|
||||
) => {
|
||||
const operator: Operation = getOperator(requirement, relation);
|
||||
|
||||
|
@ -144,13 +146,14 @@ const filterByTableName = (
|
|||
}
|
||||
|
||||
// Get the ROWIDs that satisfy the condition so we can filter the result
|
||||
const targetTableName = useFts ? 'notes_normalized' : 'notes';
|
||||
const whereCondition = `
|
||||
${relation} ROWID ${(relation === 'AND' && requirement === 'EXCLUSION') ? 'NOT' : ''}
|
||||
IN (
|
||||
SELECT notes_normalized.ROWID
|
||||
SELECT ${targetTableName}.ROWID
|
||||
FROM notes_with_${requirement}_${tableName}
|
||||
JOIN notes_normalized
|
||||
ON notes_with_${requirement}_${tableName}.id=notes_normalized.id
|
||||
JOIN ${targetTableName}
|
||||
ON notes_with_${requirement}_${tableName}.id=${targetTableName}.id
|
||||
)`;
|
||||
|
||||
withs.push(withCondition);
|
||||
|
@ -159,7 +162,7 @@ const filterByTableName = (
|
|||
};
|
||||
|
||||
|
||||
const resourceFilter = (terms: Term[], conditions: string[], params: string[], relation: Relation, withs: string[]) => {
|
||||
const resourceFilter = (terms: Term[], conditions: string[], params: string[], relation: Relation, withs: string[], useFts: boolean) => {
|
||||
const tableName = 'resources';
|
||||
|
||||
const resourceIDs = `
|
||||
|
@ -177,15 +180,15 @@ const resourceFilter = (terms: Term[], conditions: string[], params: string[], r
|
|||
const excludedResources = terms.filter(x => x.name === 'resource' && x.negated);
|
||||
|
||||
if (requiredResources.length > 0) {
|
||||
filterByTableName(requiredResources, conditions, params, relation, noteIDsWithResource, Requirement.INCLUSION, withs, tableName);
|
||||
filterByTableName(requiredResources, conditions, params, relation, noteIDsWithResource, Requirement.INCLUSION, withs, tableName, useFts);
|
||||
}
|
||||
|
||||
if (excludedResources.length > 0) {
|
||||
filterByTableName(excludedResources, conditions, params, relation, noteIDsWithResource, Requirement.EXCLUSION, withs, tableName);
|
||||
filterByTableName(excludedResources, conditions, params, relation, noteIDsWithResource, Requirement.EXCLUSION, withs, tableName, useFts);
|
||||
}
|
||||
};
|
||||
|
||||
const tagFilter = (terms: Term[], conditions: string[], params: string[], relation: Relation, withs: string[]) => {
|
||||
const tagFilter = (terms: Term[], conditions: string[], params: string[], relation: Relation, withs: string[], useFts: boolean) => {
|
||||
const tableName = 'tags';
|
||||
|
||||
const tagIDs = `
|
||||
|
@ -203,30 +206,32 @@ const tagFilter = (terms: Term[], conditions: string[], params: string[], relati
|
|||
const excludedTags = terms.filter(x => x.name === 'tag' && x.negated);
|
||||
|
||||
if (requiredTags.length > 0) {
|
||||
filterByTableName(requiredTags, conditions, params, relation, noteIDsWithTag, Requirement.INCLUSION, withs, tableName);
|
||||
filterByTableName(requiredTags, conditions, params, relation, noteIDsWithTag, Requirement.INCLUSION, withs, tableName, useFts);
|
||||
}
|
||||
|
||||
if (excludedTags.length > 0) {
|
||||
filterByTableName(excludedTags, conditions, params, relation, noteIDsWithTag, Requirement.EXCLUSION, withs, tableName);
|
||||
filterByTableName(excludedTags, conditions, params, relation, noteIDsWithTag, Requirement.EXCLUSION, withs, tableName, useFts);
|
||||
}
|
||||
};
|
||||
|
||||
const genericFilter = (terms: Term[], conditions: string[], params: string[], relation: Relation, fieldName: string) => {
|
||||
const genericFilter = (terms: Term[], conditions: string[], params: string[], relation: Relation, fieldName: string, useFts: boolean) => {
|
||||
if (fieldName === 'iscompleted' || fieldName === 'type') {
|
||||
// Faster query when values can only take two distinct values
|
||||
biConditionalFilter(terms, conditions, relation, fieldName);
|
||||
biConditionalFilter(terms, conditions, relation, fieldName, useFts);
|
||||
return;
|
||||
}
|
||||
|
||||
const tableName = useFts ? 'notes_normalized' : 'notes';
|
||||
|
||||
const getCondition = (term: Term) => {
|
||||
if (fieldName === 'sourceurl') {
|
||||
return `notes_normalized.source_url ${term.negated ? 'NOT' : ''} LIKE ?`;
|
||||
return `${tableName}.source_url ${term.negated ? 'NOT' : ''} LIKE ?`;
|
||||
} else if (fieldName === 'date' && term.name === 'due') {
|
||||
return `todo_due ${term.negated ? '<' : '>='} ?`;
|
||||
} else if (fieldName === 'id') {
|
||||
return `id ${term.negated ? 'NOT' : ''} LIKE ?`;
|
||||
} else {
|
||||
return `notes_normalized.${fieldName === 'date' ? `user_${term.name}_time` : `${term.name}`} ${term.negated ? '<' : '>='} ?`;
|
||||
return `${tableName}.${fieldName === 'date' ? `user_${term.name}_time` : `${term.name}`} ${term.negated ? '<' : '>='} ?`;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -234,16 +239,16 @@ const genericFilter = (terms: Term[], conditions: string[], params: string[], re
|
|||
conditions.push(`
|
||||
${relation} ( ${term.name === 'due' ? 'is_todo IS 1 AND ' : ''} ROWID IN (
|
||||
SELECT ROWID
|
||||
FROM notes_normalized
|
||||
FROM ${tableName}
|
||||
WHERE ${getCondition(term)}
|
||||
))`);
|
||||
params.push(term.value);
|
||||
});
|
||||
};
|
||||
|
||||
const biConditionalFilter = (terms: Term[], conditions: string[], relation: Relation, filterName: string) => {
|
||||
const biConditionalFilter = (terms: Term[], conditions: string[], relation: Relation, filterName: string, useFts: boolean) => {
|
||||
const getCondition = (filterName: string , value: string, relation: Relation) => {
|
||||
const tableName = (relation === 'AND') ? 'notes_fts' : 'notes_normalized';
|
||||
const tableName = useFts ? (relation === 'AND' ? 'notes_fts' : 'notes_normalized') : 'notes';
|
||||
if (filterName === 'type') {
|
||||
return `${tableName}.is_todo IS ${value === 'todo' ? 1 : 0}`;
|
||||
} else if (filterName === 'iscompleted') {
|
||||
|
@ -262,39 +267,44 @@ const biConditionalFilter = (terms: Term[], conditions: string[], relation: Rela
|
|||
AND ${getCondition(filterName, value, relation)}`);
|
||||
}
|
||||
if (relation === 'OR') {
|
||||
conditions.push(`
|
||||
OR ROWID IN (
|
||||
SELECT ROWID
|
||||
FROM notes_normalized
|
||||
WHERE ${getCondition(filterName, value, relation)}
|
||||
)`);
|
||||
if (useFts) {
|
||||
conditions.push(`
|
||||
OR ROWID IN (
|
||||
SELECT ROWID
|
||||
FROM notes_normalized
|
||||
WHERE ${getCondition(filterName, value, relation)}
|
||||
)`);
|
||||
} else {
|
||||
conditions.push(`
|
||||
OR ${getCondition(filterName, value, relation)}`);
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const noteIdFilter = (terms: Term[], conditions: string[], params: string[], relation: Relation) => {
|
||||
const noteIdFilter = (terms: Term[], conditions: string[], params: string[], relation: Relation, useFts: boolean) => {
|
||||
const noteIdTerms = terms.filter(x => x.name === 'id');
|
||||
genericFilter(noteIdTerms, conditions, params, relation, 'id');
|
||||
genericFilter(noteIdTerms, conditions, params, relation, 'id', useFts);
|
||||
};
|
||||
|
||||
|
||||
const typeFilter = (terms: Term[], conditions: string[], params: string[], relation: Relation) => {
|
||||
const typeFilter = (terms: Term[], conditions: string[], params: string[], relation: Relation, useFts: boolean) => {
|
||||
const typeTerms = terms.filter(x => x.name === 'type');
|
||||
genericFilter(typeTerms, conditions, params, relation, 'type');
|
||||
genericFilter(typeTerms, conditions, params, relation, 'type', useFts);
|
||||
};
|
||||
|
||||
const completedFilter = (terms: Term[], conditions: string[], params: string[], relation: Relation) => {
|
||||
const completedFilter = (terms: Term[], conditions: string[], params: string[], relation: Relation, useFts: boolean) => {
|
||||
const completedTerms = terms.filter(x => x.name === 'iscompleted');
|
||||
genericFilter(completedTerms, conditions, params, relation, 'iscompleted');
|
||||
genericFilter(completedTerms, conditions, params, relation, 'iscompleted', useFts);
|
||||
};
|
||||
|
||||
|
||||
const locationFilter = (terms: Term[], conditons: string[], params: string[], relation: Relation) => {
|
||||
const locationFilter = (terms: Term[], conditons: string[], params: string[], relation: Relation, useFts: boolean) => {
|
||||
const locationTerms = terms.filter(x => x.name === 'latitude' || x.name === 'longitude' || x.name === 'altitude');
|
||||
genericFilter(locationTerms, conditons, params, relation, 'location');
|
||||
genericFilter(locationTerms, conditons, params, relation, 'location', useFts);
|
||||
};
|
||||
|
||||
const dateFilter = (terms: Term[], conditons: string[], params: string[], relation: Relation) => {
|
||||
const dateFilter = (terms: Term[], conditons: string[], params: string[], relation: Relation, useFts: boolean) => {
|
||||
const getUnixMs = (date: string): string => {
|
||||
const yyyymmdd = /^[0-9]{8}$/;
|
||||
const yyyymm = /^[0-9]{6}$/;
|
||||
|
@ -321,44 +331,61 @@ const dateFilter = (terms: Term[], conditons: string[], params: string[], relati
|
|||
|
||||
const dateTerms = terms.filter(x => x.name === 'created' || x.name === 'updated' || x.name === 'due');
|
||||
const unixDateTerms = dateTerms.map(term => { return { ...term, value: getUnixMs(term.value) }; });
|
||||
genericFilter(unixDateTerms, conditons, params, relation, 'date');
|
||||
genericFilter(unixDateTerms, conditons, params, relation, 'date', useFts);
|
||||
};
|
||||
|
||||
const sourceUrlFilter = (terms: Term[], conditons: string[], params: string[], relation: Relation) => {
|
||||
const sourceUrlFilter = (terms: Term[], conditons: string[], params: string[], relation: Relation, useFts: boolean) => {
|
||||
const urlTerms = terms.filter(x => x.name === 'sourceurl');
|
||||
genericFilter(urlTerms, conditons, params, relation, 'sourceurl');
|
||||
genericFilter(urlTerms, conditons, params, relation, 'sourceurl', useFts);
|
||||
};
|
||||
|
||||
const trimQuotes = (str: string) => str.startsWith('"') && str.endsWith('"') ? str.substr(1, str.length - 2) : str;
|
||||
|
||||
const textFilter = (terms: Term[], conditions: string[], params: string[], relation: Relation, useFts: boolean) => {
|
||||
const createLikeMatch = (term: Term, negate: boolean) => {
|
||||
const query = `${relation} ${negate ? 'NOT' : ''} (
|
||||
${(term.name === 'text' || term.name === 'body') ? 'notes.body LIKE ? ' : ''}
|
||||
${term.name === 'text' ? 'OR' : ''}
|
||||
${(term.name === 'text' || term.name === 'title') ? 'notes.title LIKE ? ' : ''})`;
|
||||
|
||||
conditions.push(query);
|
||||
const param = `%${trimQuotes(term.value).replace(/\*/, '%')}%`;
|
||||
params.push(param);
|
||||
if (term.name === 'text') params.push(param);
|
||||
};
|
||||
|
||||
const textFilter = (terms: Term[], conditions: string[], params: string[], relation: Relation) => {
|
||||
const addExcludeTextConditions = (excludedTerms: Term[], conditions: string[], params: string[], relation: Relation) => {
|
||||
const type = excludedTerms[0].name === 'text' ? '' : `.${excludedTerms[0].name}`;
|
||||
|
||||
if (relation === 'AND') {
|
||||
conditions.push(`
|
||||
AND ROWID NOT IN (
|
||||
SELECT ROWID
|
||||
FROM notes_fts
|
||||
WHERE notes_fts${type} MATCH ?
|
||||
)`);
|
||||
params.push(excludedTerms.map(x => x.value).join(' OR '));
|
||||
}
|
||||
|
||||
if (relation === 'OR') {
|
||||
excludedTerms.forEach(term => {
|
||||
if (useFts) {
|
||||
const type = excludedTerms[0].name === 'text' ? '' : `.${excludedTerms[0].name}`;
|
||||
if (relation === 'AND') {
|
||||
conditions.push(`
|
||||
OR ROWID IN (
|
||||
SELECT *
|
||||
FROM (
|
||||
SELECT ROWID
|
||||
FROM notes_fts
|
||||
EXCEPT
|
||||
SELECT ROWID
|
||||
FROM notes_fts
|
||||
WHERE notes_fts${type} MATCH ?
|
||||
)
|
||||
AND ROWID NOT IN (
|
||||
SELECT ROWID
|
||||
FROM notes_fts
|
||||
WHERE notes_fts${type} MATCH ?
|
||||
)`);
|
||||
params.push(term.value);
|
||||
params.push(excludedTerms.map(x => x.value).join(' OR '));
|
||||
}
|
||||
if (relation === 'OR') {
|
||||
excludedTerms.forEach(term => {
|
||||
conditions.push(`
|
||||
OR ROWID IN (
|
||||
SELECT *
|
||||
FROM (
|
||||
SELECT ROWID
|
||||
FROM notes_fts
|
||||
EXCEPT
|
||||
SELECT ROWID
|
||||
FROM notes_fts
|
||||
WHERE notes_fts${type} MATCH ?
|
||||
)
|
||||
)`);
|
||||
params.push(term.value);
|
||||
});
|
||||
}
|
||||
} else {
|
||||
excludedTerms.forEach(term => {
|
||||
createLikeMatch(term, true);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
@ -367,13 +394,19 @@ const textFilter = (terms: Term[], conditions: string[], params: string[], relat
|
|||
|
||||
const includedTerms = allTerms.filter(x => !x.negated);
|
||||
if (includedTerms.length > 0) {
|
||||
conditions.push(`${relation} notes_fts MATCH ?`);
|
||||
const termsToMatch = includedTerms.map(term => {
|
||||
if (term.name === 'text') return term.value;
|
||||
else return `${term.name}:${term.value}`;
|
||||
});
|
||||
const matchQuery = (relation === 'OR') ? termsToMatch.join(' OR ') : termsToMatch.join(' ');
|
||||
params.push(matchQuery);
|
||||
if (useFts) {
|
||||
conditions.push(`${relation} notes_fts MATCH ?`);
|
||||
const termsToMatch = includedTerms.map(term => {
|
||||
if (term.name === 'text') return term.value;
|
||||
else return `${term.name}:${term.value}`;
|
||||
});
|
||||
const matchQuery = (relation === 'OR') ? termsToMatch.join(' OR ') : termsToMatch.join(' ');
|
||||
params.push(matchQuery);
|
||||
} else {
|
||||
includedTerms.forEach(term => {
|
||||
createLikeMatch(term, false);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const excludedTextTerms = allTerms.filter(x => x.name === 'text' && x.negated);
|
||||
|
@ -404,47 +437,48 @@ const getConnective = (terms: Term[], relation: Relation): string => {
|
|||
return (!notebookTerm && (relation === 'OR')) ? 'ROWID=-1' : '1'; // ROWID=-1 acts as 0 (something always false)
|
||||
};
|
||||
|
||||
export default function queryBuilder(terms: Term[]) {
|
||||
export default function queryBuilder(terms: Term[], useFts: boolean) {
|
||||
const queryParts: string[] = [];
|
||||
const params: string[] = [];
|
||||
const withs: string[] = [];
|
||||
|
||||
const relation: Relation = getDefaultRelation(terms);
|
||||
|
||||
const tableName = useFts ? 'notes_fts' : 'notes';
|
||||
|
||||
queryParts.push(`
|
||||
SELECT
|
||||
notes_fts.id,
|
||||
notes_fts.title,
|
||||
offsets(notes_fts) AS offsets,
|
||||
matchinfo(notes_fts, 'pcnalx') AS matchinfo,
|
||||
notes_fts.user_created_time,
|
||||
notes_fts.user_updated_time,
|
||||
notes_fts.is_todo,
|
||||
notes_fts.todo_completed,
|
||||
notes_fts.parent_id
|
||||
FROM notes_fts
|
||||
${tableName}.id,
|
||||
${tableName}.title,
|
||||
${useFts ? 'offsets(notes_fts) AS offsets, matchinfo(notes_fts, \'pcnalx\') AS matchinfo,' : ''}
|
||||
${tableName}.user_created_time,
|
||||
${tableName}.user_updated_time,
|
||||
${tableName}.is_todo,
|
||||
${tableName}.todo_completed,
|
||||
${tableName}.parent_id
|
||||
FROM ${tableName}
|
||||
WHERE ${getConnective(terms, relation)}`);
|
||||
|
||||
noteIdFilter(terms, queryParts, params, relation);
|
||||
noteIdFilter(terms, queryParts, params, relation, useFts);
|
||||
|
||||
notebookFilter(terms, queryParts, params, withs);
|
||||
notebookFilter(terms, queryParts, params, withs, useFts);
|
||||
|
||||
tagFilter(terms, queryParts, params, relation, withs);
|
||||
tagFilter(terms, queryParts, params, relation, withs, useFts);
|
||||
|
||||
resourceFilter(terms, queryParts, params, relation, withs);
|
||||
resourceFilter(terms, queryParts, params, relation, withs, useFts);
|
||||
|
||||
textFilter(terms, queryParts, params, relation);
|
||||
textFilter(terms, queryParts, params, relation, useFts);
|
||||
|
||||
|
||||
typeFilter(terms, queryParts, params, relation);
|
||||
typeFilter(terms, queryParts, params, relation, useFts);
|
||||
|
||||
completedFilter(terms, queryParts, params, relation);
|
||||
completedFilter(terms, queryParts, params, relation, useFts);
|
||||
|
||||
dateFilter(terms, queryParts, params, relation);
|
||||
dateFilter(terms, queryParts, params, relation, useFts);
|
||||
|
||||
locationFilter(terms, queryParts, params, relation);
|
||||
locationFilter(terms, queryParts, params, relation, useFts);
|
||||
|
||||
sourceUrlFilter(terms, queryParts, params, relation);
|
||||
sourceUrlFilter(terms, queryParts, params, relation, useFts);
|
||||
|
||||
let query;
|
||||
if (withs.length > 0) {
|
||||
|
|
|
@ -487,13 +487,12 @@ function shimInit(sharp = null, keytar = null, React = null, appVersion = null)
|
|||
maxSockets: 1,
|
||||
keepAliveMsecs: 5000,
|
||||
};
|
||||
if (url.startsWith('https')) {
|
||||
shim.httpAgent_ = new https.Agent(AgentSettings);
|
||||
} else {
|
||||
shim.httpAgent_ = new http.Agent(AgentSettings);
|
||||
}
|
||||
shim.httpAgent_ = {
|
||||
http: new http.Agent(AgentSettings),
|
||||
https: new https.Agent(AgentSettings),
|
||||
};
|
||||
}
|
||||
return shim.httpAgent_;
|
||||
return url.startsWith('https') ? shim.httpAgent_.https : shim.httpAgent_.http;
|
||||
};
|
||||
|
||||
shim.openOrCreateFile = (filepath, defaultContents) => {
|
||||
|
|
|
@ -148,38 +148,38 @@ command | 16
|
|||
|
||||
## Properties
|
||||
|
||||
Name | Type | Description
|
||||
--- | --- | ---
|
||||
id | text |
|
||||
parent_id | text | ID of the notebook that contains this note. Change this ID to move the note to a different notebook.
|
||||
title | text | The note title.
|
||||
body | text | The note body, in Markdown. May also contain HTML.
|
||||
created_time | int | When the note was created.
|
||||
updated_time | int | When the note was last updated.
|
||||
is_conflict | int | Tells whether the note is a conflict or not.
|
||||
latitude | numeric |
|
||||
longitude | numeric |
|
||||
altitude | numeric |
|
||||
author | text |
|
||||
source_url | text | The full URL where the note comes from.
|
||||
is_todo | int | Tells whether this note is a todo or not.
|
||||
todo_due | int | When the todo is due. An alarm will be triggered on that date.
|
||||
todo_completed | int | Tells whether todo is completed or not. This is a timestamp in milliseconds.
|
||||
source | text |
|
||||
source_application | text |
|
||||
application_data | text |
|
||||
order | numeric |
|
||||
user_created_time | int | When the note was created. It may differ from created_time as it can be manually set by the user.
|
||||
user_updated_time | int | When the note was last updated. It may differ from updated_time as it can be manually set by the user.
|
||||
encryption_cipher_text | text |
|
||||
encryption_applied | int |
|
||||
markup_language | int |
|
||||
is_shared | int |
|
||||
share_id | text |
|
||||
body_html | text | Note body, in HTML format
|
||||
base_url | text | 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`.
|
||||
image_data_url | text | 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.
|
||||
crop_rect | text | 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 }`
|
||||
| Name | Type | Description |
|
||||
| ----- | ----- | ----- |
|
||||
| id | text | |
|
||||
| parent_id | text | ID of the notebook that contains this note. Change this ID to move the note to a different notebook. |
|
||||
| title | text | The note title. |
|
||||
| body | text | The note body, in Markdown. May also contain HTML. |
|
||||
| created_time | int | When the note was created. |
|
||||
| updated_time | int | When the note was last updated. |
|
||||
| is_conflict | int | Tells whether the note is a conflict or not. |
|
||||
| latitude | numeric | |
|
||||
| longitude | numeric | |
|
||||
| altitude | numeric | |
|
||||
| author | text | |
|
||||
| source_url | text | The full URL where the note comes from. |
|
||||
| is_todo | int | Tells whether this note is a todo or not. |
|
||||
| todo_due | int | When the todo is due. An alarm will be triggered on that date. |
|
||||
| todo_completed | int | Tells whether todo is completed or not. This is a timestamp in milliseconds. |
|
||||
| source | text | |
|
||||
| source_application | text | |
|
||||
| application_data | text | |
|
||||
| order | numeric | |
|
||||
| user_created_time | int | When the note was created. It may differ from created_time as it can be manually set by the user. |
|
||||
| user_updated_time | int | When the note was last updated. It may differ from updated_time as it can be manually set by the user. |
|
||||
| encryption_cipher_text | text | |
|
||||
| encryption_applied | int | |
|
||||
| markup_language | int | |
|
||||
| is_shared | int | |
|
||||
| share_id | text | |
|
||||
| body_html | text | Note body, in HTML format |
|
||||
| base_url | text | 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`. |
|
||||
| image_data_url | text | 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. |
|
||||
| crop_rect | text | 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 }` |
|
||||
|
||||
## GET /notes
|
||||
|
||||
|
@ -237,19 +237,19 @@ This is actually a notebook. Internally notebooks are called "folders".
|
|||
|
||||
## Properties
|
||||
|
||||
Name | Type | Description
|
||||
--- | --- | ---
|
||||
id | text |
|
||||
title | text | The folder title.
|
||||
created_time | int | When the folder was created.
|
||||
updated_time | int | When the folder was last updated.
|
||||
user_created_time | int | When the folder was created. It may differ from created_time as it can be manually set by the user.
|
||||
user_updated_time | int | When the folder was last updated. It may differ from updated_time as it can be manually set by the user.
|
||||
encryption_cipher_text | text |
|
||||
encryption_applied | int |
|
||||
parent_id | text |
|
||||
is_shared | int |
|
||||
share_id | text |
|
||||
| Name | Type | Description |
|
||||
| ----- | ----- | ----- |
|
||||
| id | text | |
|
||||
| title | text | The folder title. |
|
||||
| created_time | int | When the folder was created. |
|
||||
| updated_time | int | When the folder was last updated. |
|
||||
| user_created_time | int | When the folder was created. It may differ from created_time as it can be manually set by the user. |
|
||||
| user_updated_time | int | When the folder was last updated. It may differ from updated_time as it can be manually set by the user. |
|
||||
| encryption_cipher_text | text | |
|
||||
| encryption_applied | int | |
|
||||
| parent_id | text | |
|
||||
| is_shared | int | |
|
||||
| share_id | text | |
|
||||
|
||||
## GET /folders
|
||||
|
||||
|
@ -281,23 +281,23 @@ Deletes the folder with ID :id
|
|||
|
||||
## Properties
|
||||
|
||||
Name | Type | Description
|
||||
--- | --- | ---
|
||||
id | text |
|
||||
title | text | The resource title.
|
||||
mime | text |
|
||||
filename | text |
|
||||
created_time | int | When the resource was created.
|
||||
updated_time | int | When the resource was last updated.
|
||||
user_created_time | int | When the resource was created. It may differ from created_time as it can be manually set by the user.
|
||||
user_updated_time | int | When the resource was last updated. It may differ from updated_time as it can be manually set by the user.
|
||||
file_extension | text |
|
||||
encryption_cipher_text | text |
|
||||
encryption_applied | int |
|
||||
encryption_blob_encrypted | int |
|
||||
size | int |
|
||||
is_shared | int |
|
||||
share_id | text |
|
||||
| Name | Type | Description |
|
||||
| ----- | ----- | ----- |
|
||||
| id | text | |
|
||||
| title | text | The resource title. |
|
||||
| mime | text | |
|
||||
| filename | text | |
|
||||
| created_time | int | When the resource was created. |
|
||||
| updated_time | int | When the resource was last updated. |
|
||||
| user_created_time | int | When the resource was created. It may differ from created_time as it can be manually set by the user. |
|
||||
| user_updated_time | int | When the resource was last updated. It may differ from updated_time as it can be manually set by the user. |
|
||||
| file_extension | text | |
|
||||
| encryption_cipher_text | text | |
|
||||
| encryption_applied | int | |
|
||||
| encryption_blob_encrypted | int | |
|
||||
| size | int | |
|
||||
| is_shared | int | |
|
||||
| share_id | text | |
|
||||
|
||||
## GET /resources
|
||||
|
||||
|
@ -351,18 +351,18 @@ Deletes the resource with ID :id
|
|||
|
||||
## Properties
|
||||
|
||||
Name | Type | Description
|
||||
--- | --- | ---
|
||||
id | text |
|
||||
title | text | The tag title.
|
||||
created_time | int | When the tag was created.
|
||||
updated_time | int | When the tag was last updated.
|
||||
user_created_time | int | When the tag was created. It may differ from created_time as it can be manually set by the user.
|
||||
user_updated_time | int | When the tag was last updated. It may differ from updated_time as it can be manually set by the user.
|
||||
encryption_cipher_text | text |
|
||||
encryption_applied | int |
|
||||
is_shared | int |
|
||||
parent_id | text |
|
||||
| Name | Type | Description |
|
||||
| ----- | ----- | ----- |
|
||||
| id | text | |
|
||||
| title | text | The tag title. |
|
||||
| created_time | int | When the tag was created. |
|
||||
| updated_time | int | When the tag was last updated. |
|
||||
| user_created_time | int | When the tag was created. It may differ from created_time as it can be manually set by the user. |
|
||||
| user_updated_time | int | When the tag was last updated. It may differ from updated_time as it can be manually set by the user. |
|
||||
| encryption_cipher_text | text | |
|
||||
| encryption_applied | int | |
|
||||
| is_shared | int | |
|
||||
| parent_id | text | |
|
||||
|
||||
## GET /tags
|
||||
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
# Joplin changelog
|
||||
|
||||
## [v2.0.4](https://github.com/laurent22/joplin/releases/tag/v2.0.4) (Pre-release) - 2021-06-02T12:54:17Z
|
||||
|
||||
- Improved: Download plugins from GitHub release (8f6a475)
|
||||
- Fixed: Count tags based on showCompletedTodos setting ([#4957](https://github.com/laurent22/joplin/issues/4957)) ([#4411](https://github.com/laurent22/joplin/issues/4411) by [@JackGruber](https://github.com/JackGruber))
|
||||
- Fixed: Fixes panels overflowing window ([#4991](https://github.com/laurent22/joplin/issues/4991)) ([#4864](https://github.com/laurent22/joplin/issues/4864) by [@mablin7](https://github.com/mablin7))
|
||||
|
||||
## [v2.0.2](https://github.com/laurent22/joplin/releases/tag/v2.0.2) (Pre-release) - 2021-05-21T18:07:48Z
|
||||
|
||||
- New: Add Share Notebook menu item (6f2f241)
|
||||
|
|
419
readme/stats.md
419
readme/stats.md
|
@ -1,13 +1,13 @@
|
|||
# Joplin statistics
|
||||
|
||||
Name | Value
|
||||
--- | ---
|
||||
Total Windows downloads | 1,425,567
|
||||
Total macOs downloads | 554,909
|
||||
Total Linux downloads | 463,554
|
||||
Windows % | 58%
|
||||
macOS % | 23%
|
||||
Linux % | 19%
|
||||
| Name | Value |
|
||||
| ----- | ----- |
|
||||
| Total Windows downloads | 1,444,540 |
|
||||
| Total macOs downloads | 561,465 |
|
||||
| Total Linux downloads | 473,228 |
|
||||
| Windows % | 58% |
|
||||
| macOS % | 23% |
|
||||
| Linux % | 19% |
|
||||
|
||||
|
||||
|
||||
|
@ -15,204 +15,205 @@ Linux % | 19%
|
|||
|
||||
|
||||
|
||||
Version | Date | Windows | macOS | Linux | Total
|
||||
--- | --- | --- | --- | --- | ---
|
||||
[v2.0.2](https://github.com/laurent22/joplin/releases/tag/v2.0.2) (p) | 2021-05-21T18:07:48Z | 594 | 179 | 448 | 1,221
|
||||
[v2.0.1](https://github.com/laurent22/joplin/releases/tag/v2.0.1) (p) | 2021-05-15T13:22:58Z | 770 | 243 | 984 | 1,997
|
||||
[v1.8.5](https://github.com/laurent22/joplin/releases/tag/v1.8.5) | 2021-05-10T11:58:14Z | 11,870 | 6,670 | 5,753 | 24,293
|
||||
[v1.8.4](https://github.com/laurent22/joplin/releases/tag/v1.8.4) (p) | 2021-05-09T18:05:05Z | 623 | 120 | 433 | 1,176
|
||||
[v1.8.3](https://github.com/laurent22/joplin/releases/tag/v1.8.3) (p) | 2021-05-04T10:38:16Z | 1,049 | 290 | 912 | 2,251
|
||||
[v1.8.2](https://github.com/laurent22/joplin/releases/tag/v1.8.2) (p) | 2021-04-25T10:50:51Z | 1,445 | 421 | 1,261 | 3,127
|
||||
[v1.8.1](https://github.com/laurent22/joplin/releases/tag/v1.8.1) (p) | 2021-03-29T10:46:41Z | 3,003 | 805 | 2,418 | 6,226
|
||||
[v1.7.11](https://github.com/laurent22/joplin/releases/tag/v1.7.11) | 2021-02-03T12:50:01Z | 113,794 | 42,526 | 64,040 | 220,360
|
||||
[v1.7.10](https://github.com/laurent22/joplin/releases/tag/v1.7.10) | 2021-01-30T13:25:29Z | 13,825 | 4,831 | 4,425 | 23,081
|
||||
[v1.7.9](https://github.com/laurent22/joplin/releases/tag/v1.7.9) (p) | 2021-01-28T09:50:21Z | 480 | 123 | 483 | 1,086
|
||||
[v1.7.6](https://github.com/laurent22/joplin/releases/tag/v1.7.6) (p) | 2021-01-27T10:36:05Z | 283 | 82 | 277 | 642
|
||||
[v1.7.5](https://github.com/laurent22/joplin/releases/tag/v1.7.5) (p) | 2021-01-26T09:53:05Z | 364 | 195 | 444 | 1,003
|
||||
[v1.7.4](https://github.com/laurent22/joplin/releases/tag/v1.7.4) (p) | 2021-01-22T17:58:38Z | 673 | 195 | 613 | 1,481
|
||||
[v1.6.8](https://github.com/laurent22/joplin/releases/tag/v1.6.8) | 2021-01-20T18:11:34Z | 18,064 | 7,662 | 7,578 | 33,304
|
||||
[v1.7.3](https://github.com/laurent22/joplin/releases/tag/v1.7.3) (p) | 2021-01-20T11:23:50Z | 334 | 68 | 436 | 838
|
||||
[v1.6.7](https://github.com/laurent22/joplin/releases/tag/v1.6.7) | 2021-01-11T23:20:33Z | 10,375 | 4,617 | 4,531 | 19,523
|
||||
[v1.6.6](https://github.com/laurent22/joplin/releases/tag/v1.6.6) | 2021-01-09T16:15:31Z | 12,359 | 3,405 | 4,776 | 20,540
|
||||
[v1.6.5](https://github.com/laurent22/joplin/releases/tag/v1.6.5) (p) | 2021-01-09T01:24:32Z | 553 | 57 | 300 | 910
|
||||
[v1.6.4](https://github.com/laurent22/joplin/releases/tag/v1.6.4) (p) | 2021-01-07T19:11:32Z | 381 | 72 | 197 | 650
|
||||
[v1.6.2](https://github.com/laurent22/joplin/releases/tag/v1.6.2) (p) | 2021-01-04T22:34:55Z | 664 | 221 | 577 | 1,462
|
||||
[v1.5.14](https://github.com/laurent22/joplin/releases/tag/v1.5.14) | 2020-12-30T01:48:46Z | 10,847 | 5,191 | 5,512 | 21,550
|
||||
[v1.6.1](https://github.com/laurent22/joplin/releases/tag/v1.6.1) (p) | 2020-12-29T19:37:45Z | 162 | 32 | 156 | 350
|
||||
[v1.5.13](https://github.com/laurent22/joplin/releases/tag/v1.5.13) | 2020-12-29T18:29:15Z | 609 | 212 | 190 | 1,011
|
||||
[v1.5.12](https://github.com/laurent22/joplin/releases/tag/v1.5.12) | 2020-12-28T15:14:08Z | 2,374 | 1,762 | 911 | 5,047
|
||||
[v1.5.11](https://github.com/laurent22/joplin/releases/tag/v1.5.11) | 2020-12-27T19:54:07Z | 13,999 | 4,605 | 4,253 | 22,857
|
||||
[v1.5.10](https://github.com/laurent22/joplin/releases/tag/v1.5.10) (p) | 2020-12-26T12:35:36Z | 288 | 102 | 255 | 645
|
||||
[v1.5.9](https://github.com/laurent22/joplin/releases/tag/v1.5.9) (p) | 2020-12-23T18:01:08Z | 321 | 367 | 399 | 1,087
|
||||
[v1.5.8](https://github.com/laurent22/joplin/releases/tag/v1.5.8) (p) | 2020-12-20T09:45:19Z | 559 | 158 | 631 | 1,348
|
||||
[v1.5.7](https://github.com/laurent22/joplin/releases/tag/v1.5.7) (p) | 2020-12-10T12:58:33Z | 880 | 248 | 982 | 2,110
|
||||
[v1.5.4](https://github.com/laurent22/joplin/releases/tag/v1.5.4) (p) | 2020-12-05T12:07:49Z | 686 | 161 | 623 | 1,470
|
||||
[v1.4.19](https://github.com/laurent22/joplin/releases/tag/v1.4.19) | 2020-12-01T11:11:16Z | 25,492 | 13,350 | 11,610 | 50,452
|
||||
[v1.4.18](https://github.com/laurent22/joplin/releases/tag/v1.4.18) | 2020-11-28T12:21:41Z | 11,082 | 3,870 | 3,076 | 18,028
|
||||
[v1.4.16](https://github.com/laurent22/joplin/releases/tag/v1.4.16) | 2020-11-27T19:40:16Z | 1,452 | 822 | 584 | 2,858
|
||||
[v1.4.15](https://github.com/laurent22/joplin/releases/tag/v1.4.15) | 2020-11-27T13:25:43Z | 878 | 482 | 262 | 1,622
|
||||
[v1.4.12](https://github.com/laurent22/joplin/releases/tag/v1.4.12) | 2020-11-23T18:58:07Z | 2,983 | 1,316 | 1,287 | 5,586
|
||||
[v1.4.11](https://github.com/laurent22/joplin/releases/tag/v1.4.11) (p) | 2020-11-19T23:06:51Z | 946 | 147 | 574 | 1,667
|
||||
[v1.4.10](https://github.com/laurent22/joplin/releases/tag/v1.4.10) (p) | 2020-11-14T09:53:15Z | 614 | 186 | 676 | 1,476
|
||||
[v1.4.9](https://github.com/laurent22/joplin/releases/tag/v1.4.9) (p) | 2020-11-11T14:23:17Z | 497 | 133 | 393 | 1,023
|
||||
[v1.4.7](https://github.com/laurent22/joplin/releases/tag/v1.4.7) (p) | 2020-11-07T18:23:29Z | 511 | 166 | 506 | 1,183
|
||||
[v1.3.18](https://github.com/laurent22/joplin/releases/tag/v1.3.18) | 2020-11-06T12:07:02Z | 30,609 | 11,316 | 10,495 | 52,420
|
||||
[v1.3.17](https://github.com/laurent22/joplin/releases/tag/v1.3.17) (p) | 2020-11-06T11:35:15Z | 44 | 16 | 15 | 75
|
||||
[v1.4.6](https://github.com/laurent22/joplin/releases/tag/v1.4.6) (p) | 2020-11-05T22:44:12Z | 339 | 86 | 45 | 470
|
||||
[v1.3.15](https://github.com/laurent22/joplin/releases/tag/v1.3.15) | 2020-11-04T12:22:50Z | 2,221 | 1,290 | 836 | 4,347
|
||||
[v1.3.11](https://github.com/laurent22/joplin/releases/tag/v1.3.11) (p) | 2020-10-31T13:22:20Z | 693 | 177 | 471 | 1,341
|
||||
[v1.3.10](https://github.com/laurent22/joplin/releases/tag/v1.3.10) (p) | 2020-10-29T13:27:14Z | 368 | 107 | 307 | 782
|
||||
[v1.3.9](https://github.com/laurent22/joplin/releases/tag/v1.3.9) (p) | 2020-10-23T16:04:26Z | 830 | 233 | 624 | 1,687
|
||||
[v1.3.8](https://github.com/laurent22/joplin/releases/tag/v1.3.8) (p) | 2020-10-21T18:46:29Z | 510 | 104 | 321 | 935
|
||||
[v1.3.7](https://github.com/laurent22/joplin/releases/tag/v1.3.7) (p) | 2020-10-20T11:35:55Z | 291 | 76 | 334 | 701
|
||||
[v1.3.5](https://github.com/laurent22/joplin/releases/tag/v1.3.5) (p) | 2020-10-17T14:26:35Z | 464 | 126 | 397 | 987
|
||||
[v1.3.3](https://github.com/laurent22/joplin/releases/tag/v1.3.3) (p) | 2020-10-17T10:56:57Z | 113 | 36 | 25 | 174
|
||||
[v1.3.2](https://github.com/laurent22/joplin/releases/tag/v1.3.2) (p) | 2020-10-11T20:39:49Z | 659 | 173 | 556 | 1,388
|
||||
[v1.3.1](https://github.com/laurent22/joplin/releases/tag/v1.3.1) (p) | 2020-10-11T15:10:18Z | 77 | 45 | 35 | 157
|
||||
[v1.2.6](https://github.com/laurent22/joplin/releases/tag/v1.2.6) | 2020-10-09T13:56:59Z | 44,164 | 17,713 | 14,024 | 75,901
|
||||
[v1.2.4](https://github.com/laurent22/joplin/releases/tag/v1.2.4) (p) | 2020-09-30T07:34:29Z | 808 | 240 | 791 | 1,839
|
||||
[v1.2.3](https://github.com/laurent22/joplin/releases/tag/v1.2.3) (p) | 2020-09-29T15:13:02Z | 212 | 61 | 72 | 345
|
||||
[v1.2.2](https://github.com/laurent22/joplin/releases/tag/v1.2.2) (p) | 2020-09-22T20:31:55Z | 777 | 199 | 631 | 1,607
|
||||
[v1.1.4](https://github.com/laurent22/joplin/releases/tag/v1.1.4) | 2020-09-21T11:20:09Z | 27,572 | 13,489 | 7,740 | 48,801
|
||||
[v1.1.3](https://github.com/laurent22/joplin/releases/tag/v1.1.3) (p) | 2020-09-17T10:30:37Z | 557 | 147 | 457 | 1,161
|
||||
[v1.1.2](https://github.com/laurent22/joplin/releases/tag/v1.1.2) (p) | 2020-09-15T12:58:38Z | 372 | 112 | 244 | 728
|
||||
[v1.1.1](https://github.com/laurent22/joplin/releases/tag/v1.1.1) (p) | 2020-09-11T23:32:47Z | 519 | 195 | 342 | 1,056
|
||||
[v1.0.245](https://github.com/laurent22/joplin/releases/tag/v1.0.245) | 2020-09-09T12:56:10Z | 21,148 | 9,999 | 5,634 | 36,781
|
||||
[v1.0.242](https://github.com/laurent22/joplin/releases/tag/v1.0.242) | 2020-09-04T22:00:34Z | 12,439 | 6,418 | 3,015 | 21,872
|
||||
[v1.0.241](https://github.com/laurent22/joplin/releases/tag/v1.0.241) | 2020-09-04T18:06:00Z | 23,628 | 5,748 | 4,994 | 34,370
|
||||
[v1.0.239](https://github.com/laurent22/joplin/releases/tag/v1.0.239) (p) | 2020-09-01T21:56:36Z | 599 | 226 | 400 | 1,225
|
||||
[v1.0.237](https://github.com/laurent22/joplin/releases/tag/v1.0.237) (p) | 2020-08-29T15:38:04Z | 588 | 923 | 338 | 1,849
|
||||
[v1.0.236](https://github.com/laurent22/joplin/releases/tag/v1.0.236) (p) | 2020-08-28T09:16:54Z | 315 | 110 | 104 | 529
|
||||
[v1.0.235](https://github.com/laurent22/joplin/releases/tag/v1.0.235) (p) | 2020-08-18T22:08:01Z | 1,671 | 489 | 920 | 3,080
|
||||
[v1.0.234](https://github.com/laurent22/joplin/releases/tag/v1.0.234) (p) | 2020-08-17T23:13:02Z | 536 | 125 | 100 | 761
|
||||
[v1.0.233](https://github.com/laurent22/joplin/releases/tag/v1.0.233) | 2020-08-01T14:51:15Z | 43,098 | 18,188 | 12,358 | 73,644
|
||||
[v1.0.232](https://github.com/laurent22/joplin/releases/tag/v1.0.232) (p) | 2020-07-28T22:34:40Z | 652 | 222 | 178 | 1,052
|
||||
[v1.0.227](https://github.com/laurent22/joplin/releases/tag/v1.0.227) | 2020-07-07T20:44:54Z | 40,384 | 15,273 | 9,627 | 65,284
|
||||
[v1.0.226](https://github.com/laurent22/joplin/releases/tag/v1.0.226) (p) | 2020-07-04T10:21:26Z | 4,905 | 2,252 | 688 | 7,845
|
||||
[v1.0.224](https://github.com/laurent22/joplin/releases/tag/v1.0.224) | 2020-06-20T22:26:08Z | 24,774 | 11,005 | 6,006 | 41,785
|
||||
[v1.0.223](https://github.com/laurent22/joplin/releases/tag/v1.0.223) (p) | 2020-06-20T11:51:27Z | 186 | 112 | 78 | 376
|
||||
[v1.0.221](https://github.com/laurent22/joplin/releases/tag/v1.0.221) (p) | 2020-06-20T01:44:20Z | 856 | 205 | 210 | 1,271
|
||||
[v1.0.220](https://github.com/laurent22/joplin/releases/tag/v1.0.220) | 2020-06-13T18:26:22Z | 31,712 | 9,916 | 6,411 | 48,039
|
||||
[v1.0.218](https://github.com/laurent22/joplin/releases/tag/v1.0.218) | 2020-06-07T10:43:34Z | 14,535 | 6,968 | 2,954 | 24,457
|
||||
[v1.0.217](https://github.com/laurent22/joplin/releases/tag/v1.0.217) (p) | 2020-06-06T15:17:27Z | 226 | 93 | 54 | 373
|
||||
[v1.0.216](https://github.com/laurent22/joplin/releases/tag/v1.0.216) | 2020-05-24T14:21:01Z | 37,277 | 14,268 | 10,177 | 61,722
|
||||
[v1.0.214](https://github.com/laurent22/joplin/releases/tag/v1.0.214) (p) | 2020-05-21T17:15:15Z | 6,529 | 3,466 | 760 | 10,755
|
||||
[v1.0.212](https://github.com/laurent22/joplin/releases/tag/v1.0.212) (p) | 2020-05-21T07:48:39Z | 210 | 66 | 46 | 322
|
||||
[v1.0.211](https://github.com/laurent22/joplin/releases/tag/v1.0.211) (p) | 2020-05-20T08:59:16Z | 300 | 131 | 86 | 517
|
||||
[v1.0.209](https://github.com/laurent22/joplin/releases/tag/v1.0.209) (p) | 2020-05-17T18:32:51Z | 1,393 | 851 | 147 | 2,391
|
||||
[v1.0.207](https://github.com/laurent22/joplin/releases/tag/v1.0.207) (p) | 2020-05-10T16:37:35Z | 1,187 | 263 | 1,016 | 2,466
|
||||
[v1.0.201](https://github.com/laurent22/joplin/releases/tag/v1.0.201) | 2020-04-15T22:55:13Z | 53,311 | 20,043 | 18,180 | 91,534
|
||||
[v1.0.200](https://github.com/laurent22/joplin/releases/tag/v1.0.200) | 2020-04-12T12:17:46Z | 9,552 | 4,892 | 1,903 | 16,347
|
||||
[v1.0.199](https://github.com/laurent22/joplin/releases/tag/v1.0.199) | 2020-04-10T18:41:58Z | 19,339 | 5,884 | 3,788 | 29,011
|
||||
[v1.0.197](https://github.com/laurent22/joplin/releases/tag/v1.0.197) | 2020-03-30T17:21:22Z | 22,280 | 9,540 | 5,726 | 37,546
|
||||
[v1.0.195](https://github.com/laurent22/joplin/releases/tag/v1.0.195) | 2020-03-22T19:56:12Z | 18,890 | 7,948 | 4,506 | 31,344
|
||||
[v1.0.194](https://github.com/laurent22/joplin/releases/tag/v1.0.194) (p) | 2020-03-14T00:00:32Z | 1,285 | 1,375 | 511 | 3,171
|
||||
[v1.0.193](https://github.com/laurent22/joplin/releases/tag/v1.0.193) | 2020-03-08T08:58:53Z | 28,641 | 10,907 | 7,392 | 46,940
|
||||
[v1.0.192](https://github.com/laurent22/joplin/releases/tag/v1.0.192) (p) | 2020-03-06T23:27:52Z | 472 | 122 | 89 | 683
|
||||
[v1.0.190](https://github.com/laurent22/joplin/releases/tag/v1.0.190) (p) | 2020-03-06T01:22:22Z | 373 | 90 | 85 | 548
|
||||
[v1.0.189](https://github.com/laurent22/joplin/releases/tag/v1.0.189) (p) | 2020-03-04T17:27:15Z | 342 | 96 | 90 | 528
|
||||
[v1.0.187](https://github.com/laurent22/joplin/releases/tag/v1.0.187) (p) | 2020-03-01T12:31:06Z | 919 | 230 | 263 | 1,412
|
||||
[v1.0.179](https://github.com/laurent22/joplin/releases/tag/v1.0.179) | 2020-01-24T22:42:41Z | 71,023 | 28,545 | 22,534 | 122,102
|
||||
[v1.0.178](https://github.com/laurent22/joplin/releases/tag/v1.0.178) | 2020-01-20T19:06:45Z | 17,539 | 5,962 | 2,584 | 26,085
|
||||
[v1.0.177](https://github.com/laurent22/joplin/releases/tag/v1.0.177) (p) | 2019-12-30T14:40:40Z | 1,943 | 438 | 678 | 3,059
|
||||
[v1.0.176](https://github.com/laurent22/joplin/releases/tag/v1.0.176) (p) | 2019-12-14T10:36:44Z | 3,124 | 2,534 | 467 | 6,125
|
||||
[v1.0.175](https://github.com/laurent22/joplin/releases/tag/v1.0.175) | 2019-12-08T11:48:47Z | 72,519 | 16,905 | 16,509 | 105,933
|
||||
[v1.0.174](https://github.com/laurent22/joplin/releases/tag/v1.0.174) | 2019-11-12T18:20:58Z | 30,401 | 11,722 | 8,221 | 50,344
|
||||
[v1.0.173](https://github.com/laurent22/joplin/releases/tag/v1.0.173) | 2019-11-11T08:33:35Z | 5,072 | 2,077 | 743 | 7,892
|
||||
[v1.0.170](https://github.com/laurent22/joplin/releases/tag/v1.0.170) | 2019-10-13T22:13:04Z | 27,413 | 8,752 | 7,675 | 43,840
|
||||
[v1.0.169](https://github.com/laurent22/joplin/releases/tag/v1.0.169) | 2019-09-27T18:35:13Z | 17,097 | 5,921 | 3,754 | 26,772
|
||||
[v1.0.168](https://github.com/laurent22/joplin/releases/tag/v1.0.168) | 2019-09-25T21:21:38Z | 5,332 | 2,273 | 717 | 8,322
|
||||
[v1.0.167](https://github.com/laurent22/joplin/releases/tag/v1.0.167) | 2019-09-10T08:48:37Z | 16,790 | 5,704 | 3,703 | 26,197
|
||||
[v1.0.166](https://github.com/laurent22/joplin/releases/tag/v1.0.166) | 2019-09-09T17:35:54Z | 1,956 | 560 | 236 | 2,752
|
||||
[v1.0.165](https://github.com/laurent22/joplin/releases/tag/v1.0.165) | 2019-08-14T21:46:29Z | 18,898 | 6,972 | 5,462 | 31,332
|
||||
[v1.0.161](https://github.com/laurent22/joplin/releases/tag/v1.0.161) | 2019-07-13T18:30:00Z | 19,285 | 6,352 | 4,136 | 29,773
|
||||
[v1.0.160](https://github.com/laurent22/joplin/releases/tag/v1.0.160) | 2019-06-15T00:21:40Z | 30,531 | 7,745 | 8,101 | 46,377
|
||||
[v1.0.159](https://github.com/laurent22/joplin/releases/tag/v1.0.159) | 2019-06-08T00:00:19Z | 5,194 | 2,178 | 1,112 | 8,484
|
||||
[v1.0.158](https://github.com/laurent22/joplin/releases/tag/v1.0.158) | 2019-05-27T19:01:18Z | 9,815 | 3,538 | 1,936 | 15,289
|
||||
[v1.0.157](https://github.com/laurent22/joplin/releases/tag/v1.0.157) | 2019-05-26T17:55:53Z | 2,179 | 844 | 291 | 3,314
|
||||
[v1.0.153](https://github.com/laurent22/joplin/releases/tag/v1.0.153) (p) | 2019-05-15T06:27:29Z | 850 | 102 | 106 | 1,058
|
||||
[v1.0.152](https://github.com/laurent22/joplin/releases/tag/v1.0.152) | 2019-05-13T09:08:07Z | 13,873 | 4,427 | 4,061 | 22,361
|
||||
[v1.0.151](https://github.com/laurent22/joplin/releases/tag/v1.0.151) | 2019-05-12T15:14:32Z | 1,954 | 533 | 957 | 3,444
|
||||
[v1.0.150](https://github.com/laurent22/joplin/releases/tag/v1.0.150) | 2019-05-12T11:27:48Z | 423 | 136 | 68 | 627
|
||||
[v1.0.148](https://github.com/laurent22/joplin/releases/tag/v1.0.148) (p) | 2019-05-08T19:12:24Z | 133 | 58 | 96 | 287
|
||||
[v1.0.145](https://github.com/laurent22/joplin/releases/tag/v1.0.145) | 2019-05-03T09:16:53Z | 7,008 | 2,861 | 1,437 | 11,306
|
||||
[v1.0.143](https://github.com/laurent22/joplin/releases/tag/v1.0.143) | 2019-04-22T10:51:38Z | 11,918 | 3,550 | 2,779 | 18,247
|
||||
[v1.0.142](https://github.com/laurent22/joplin/releases/tag/v1.0.142) | 2019-04-02T16:44:51Z | 14,663 | 4,565 | 4,727 | 23,955
|
||||
[v1.0.140](https://github.com/laurent22/joplin/releases/tag/v1.0.140) | 2019-03-10T20:59:58Z | 13,629 | 4,171 | 3,223 | 21,023
|
||||
[v1.0.139](https://github.com/laurent22/joplin/releases/tag/v1.0.139) (p) | 2019-03-09T10:06:48Z | 123 | 63 | 46 | 232
|
||||
[v1.0.138](https://github.com/laurent22/joplin/releases/tag/v1.0.138) (p) | 2019-03-03T17:23:00Z | 150 | 86 | 84 | 320
|
||||
[v1.0.137](https://github.com/laurent22/joplin/releases/tag/v1.0.137) (p) | 2019-03-03T01:12:51Z | 591 | 58 | 83 | 732
|
||||
[v1.0.135](https://github.com/laurent22/joplin/releases/tag/v1.0.135) | 2019-02-27T23:36:57Z | 12,514 | 3,958 | 4,077 | 20,549
|
||||
[v1.0.134](https://github.com/laurent22/joplin/releases/tag/v1.0.134) | 2019-02-27T10:21:44Z | 1,468 | 568 | 219 | 2,255
|
||||
[v1.0.132](https://github.com/laurent22/joplin/releases/tag/v1.0.132) | 2019-02-26T23:02:05Z | 1,088 | 451 | 95 | 1,634
|
||||
[v1.0.127](https://github.com/laurent22/joplin/releases/tag/v1.0.127) | 2019-02-14T23:12:48Z | 9,785 | 3,171 | 2,929 | 15,885
|
||||
[v1.0.126](https://github.com/laurent22/joplin/releases/tag/v1.0.126) (p) | 2019-02-09T19:46:16Z | 932 | 73 | 117 | 1,122
|
||||
[v1.0.125](https://github.com/laurent22/joplin/releases/tag/v1.0.125) | 2019-01-26T18:14:33Z | 10,251 | 3,559 | 1,703 | 15,513
|
||||
[v1.0.120](https://github.com/laurent22/joplin/releases/tag/v1.0.120) | 2019-01-10T21:42:53Z | 15,605 | 5,201 | 6,517 | 27,323
|
||||
[v1.0.119](https://github.com/laurent22/joplin/releases/tag/v1.0.119) | 2018-12-18T12:40:22Z | 8,906 | 3,262 | 2,014 | 14,182
|
||||
[v1.0.118](https://github.com/laurent22/joplin/releases/tag/v1.0.118) | 2019-01-11T08:34:13Z | 718 | 248 | 89 | 1,055
|
||||
[v1.0.117](https://github.com/laurent22/joplin/releases/tag/v1.0.117) | 2018-11-24T12:05:24Z | 16,259 | 4,896 | 6,381 | 27,536
|
||||
[v1.0.116](https://github.com/laurent22/joplin/releases/tag/v1.0.116) | 2018-11-20T19:09:24Z | 3,474 | 1,121 | 714 | 5,309
|
||||
[v1.0.115](https://github.com/laurent22/joplin/releases/tag/v1.0.115) | 2018-11-16T16:52:02Z | 3,658 | 1,303 | 799 | 5,760
|
||||
[v1.0.114](https://github.com/laurent22/joplin/releases/tag/v1.0.114) | 2018-10-24T20:14:10Z | 11,397 | 3,500 | 3,830 | 18,727
|
||||
[v1.0.111](https://github.com/laurent22/joplin/releases/tag/v1.0.111) | 2018-09-30T20:15:09Z | 12,041 | 3,307 | 3,668 | 19,016
|
||||
[v1.0.110](https://github.com/laurent22/joplin/releases/tag/v1.0.110) | 2018-09-29T12:29:21Z | 962 | 409 | 118 | 1,489
|
||||
[v1.0.109](https://github.com/laurent22/joplin/releases/tag/v1.0.109) | 2018-09-27T18:01:41Z | 2,102 | 706 | 328 | 3,136
|
||||
[v1.0.108](https://github.com/laurent22/joplin/releases/tag/v1.0.108) (p) | 2018-09-29T18:49:29Z | 31 | 22 | 14 | 67
|
||||
[v1.0.107](https://github.com/laurent22/joplin/releases/tag/v1.0.107) | 2018-09-16T19:51:07Z | 7,151 | 2,137 | 1,708 | 10,996
|
||||
[v1.0.106](https://github.com/laurent22/joplin/releases/tag/v1.0.106) | 2018-09-08T15:23:40Z | 4,559 | 1,458 | 318 | 6,335
|
||||
[v1.0.105](https://github.com/laurent22/joplin/releases/tag/v1.0.105) | 2018-09-05T11:29:36Z | 4,657 | 1,590 | 1,455 | 7,702
|
||||
[v1.0.104](https://github.com/laurent22/joplin/releases/tag/v1.0.104) | 2018-06-28T20:25:36Z | 15,055 | 4,702 | 7,345 | 27,102
|
||||
[v1.0.103](https://github.com/laurent22/joplin/releases/tag/v1.0.103) | 2018-06-21T19:38:13Z | 2,054 | 888 | 680 | 3,622
|
||||
[v1.0.101](https://github.com/laurent22/joplin/releases/tag/v1.0.101) | 2018-06-17T18:35:11Z | 1,311 | 608 | 409 | 2,328
|
||||
[v1.0.100](https://github.com/laurent22/joplin/releases/tag/v1.0.100) | 2018-06-14T17:41:43Z | 882 | 435 | 246 | 1,563
|
||||
[v1.0.99](https://github.com/laurent22/joplin/releases/tag/v1.0.99) | 2018-06-10T13:18:23Z | 1,256 | 598 | 380 | 2,234
|
||||
[v1.0.97](https://github.com/laurent22/joplin/releases/tag/v1.0.97) | 2018-06-09T19:23:34Z | 315 | 159 | 61 | 535
|
||||
[v1.0.96](https://github.com/laurent22/joplin/releases/tag/v1.0.96) | 2018-05-26T16:36:39Z | 2,721 | 1,225 | 1,700 | 5,646
|
||||
[v1.0.95](https://github.com/laurent22/joplin/releases/tag/v1.0.95) | 2018-05-25T13:04:30Z | 420 | 220 | 120 | 760
|
||||
[v1.0.94](https://github.com/laurent22/joplin/releases/tag/v1.0.94) | 2018-05-21T20:52:59Z | 1,134 | 586 | 397 | 2,117
|
||||
[v1.0.93](https://github.com/laurent22/joplin/releases/tag/v1.0.93) | 2018-05-14T11:36:01Z | 1,791 | 1,157 | 759 | 3,707
|
||||
[v1.0.91](https://github.com/laurent22/joplin/releases/tag/v1.0.91) | 2018-05-10T14:48:04Z | 828 | 552 | 307 | 1,687
|
||||
[v1.0.89](https://github.com/laurent22/joplin/releases/tag/v1.0.89) | 2018-05-09T13:05:05Z | 495 | 232 | 111 | 838
|
||||
[v1.0.85](https://github.com/laurent22/joplin/releases/tag/v1.0.85) | 2018-05-01T21:08:24Z | 1,654 | 951 | 633 | 3,238
|
||||
[v1.0.83](https://github.com/laurent22/joplin/releases/tag/v1.0.83) | 2018-04-04T19:43:58Z | 4,886 | 2,532 | 2,658 | 10,076
|
||||
[v1.0.82](https://github.com/laurent22/joplin/releases/tag/v1.0.82) | 2018-03-31T19:16:31Z | 694 | 406 | 122 | 1,222
|
||||
[v1.0.81](https://github.com/laurent22/joplin/releases/tag/v1.0.81) | 2018-03-28T08:13:58Z | 1,001 | 597 | 783 | 2,381
|
||||
[v1.0.79](https://github.com/laurent22/joplin/releases/tag/v1.0.79) | 2018-03-23T18:00:11Z | 932 | 539 | 381 | 1,852
|
||||
[v1.0.78](https://github.com/laurent22/joplin/releases/tag/v1.0.78) | 2018-03-17T15:27:18Z | 1,313 | 870 | 872 | 3,055
|
||||
[v1.0.77](https://github.com/laurent22/joplin/releases/tag/v1.0.77) | 2018-03-16T15:12:35Z | 179 | 105 | 46 | 330
|
||||
[v1.0.72](https://github.com/laurent22/joplin/releases/tag/v1.0.72) | 2018-03-14T09:44:35Z | 407 | 258 | 57 | 722
|
||||
[v1.0.70](https://github.com/laurent22/joplin/releases/tag/v1.0.70) | 2018-02-28T20:04:30Z | 1,855 | 1,052 | 1,255 | 4,162
|
||||
[v1.0.67](https://github.com/laurent22/joplin/releases/tag/v1.0.67) | 2018-02-19T22:51:08Z | 1,816 | 605 | 0 | 2,421
|
||||
[v1.0.66](https://github.com/laurent22/joplin/releases/tag/v1.0.66) | 2018-02-18T23:09:09Z | 329 | 136 | 86 | 551
|
||||
[v1.0.65](https://github.com/laurent22/joplin/releases/tag/v1.0.65) | 2018-02-17T20:02:25Z | 195 | 129 | 134 | 458
|
||||
[v1.0.64](https://github.com/laurent22/joplin/releases/tag/v1.0.64) | 2018-02-16T00:58:20Z | 1,086 | 545 | 1,124 | 2,755
|
||||
[v1.0.63](https://github.com/laurent22/joplin/releases/tag/v1.0.63) | 2018-02-14T19:40:36Z | 302 | 161 | 94 | 557
|
||||
[v1.0.62](https://github.com/laurent22/joplin/releases/tag/v1.0.62) | 2018-02-12T20:19:58Z | 561 | 300 | 369 | 1,230
|
||||
[v0.10.61](https://github.com/laurent22/joplin/releases/tag/v0.10.61) | 2018-02-08T18:27:39Z | 973 | 633 | 964 | 2,570
|
||||
[v0.10.60](https://github.com/laurent22/joplin/releases/tag/v0.10.60) | 2018-02-06T13:09:56Z | 723 | 522 | 553 | 1,798
|
||||
[v0.10.54](https://github.com/laurent22/joplin/releases/tag/v0.10.54) | 2018-01-31T20:21:30Z | 1,821 | 1,460 | 324 | 3,605
|
||||
[v0.10.52](https://github.com/laurent22/joplin/releases/tag/v0.10.52) | 2018-01-31T19:25:18Z | 48 | 634 | 16 | 698
|
||||
[v0.10.51](https://github.com/laurent22/joplin/releases/tag/v0.10.51) | 2018-01-28T18:47:02Z | 1,329 | 1,600 | 328 | 3,257
|
||||
[v0.10.48](https://github.com/laurent22/joplin/releases/tag/v0.10.48) | 2018-01-23T11:19:51Z | 1,966 | 1,752 | 32 | 3,750
|
||||
[v0.10.47](https://github.com/laurent22/joplin/releases/tag/v0.10.47) | 2018-01-16T17:27:17Z | 1,231 | 1,270 | 68 | 2,569
|
||||
[v0.10.43](https://github.com/laurent22/joplin/releases/tag/v0.10.43) | 2018-01-08T10:12:10Z | 3,442 | 2,357 | 1,209 | 7,008
|
||||
[v0.10.41](https://github.com/laurent22/joplin/releases/tag/v0.10.41) | 2018-01-05T20:38:12Z | 1,038 | 1,549 | 243 | 2,830
|
||||
[v0.10.40](https://github.com/laurent22/joplin/releases/tag/v0.10.40) | 2018-01-02T23:16:57Z | 1,596 | 1,790 | 339 | 3,725
|
||||
[v0.10.39](https://github.com/laurent22/joplin/releases/tag/v0.10.39) | 2017-12-11T21:19:44Z | 5,824 | 4,294 | 3,195 | 13,313
|
||||
[v0.10.38](https://github.com/laurent22/joplin/releases/tag/v0.10.38) | 2017-12-08T10:12:06Z | 1,050 | 1,231 | 307 | 2,588
|
||||
[v0.10.37](https://github.com/laurent22/joplin/releases/tag/v0.10.37) | 2017-12-07T19:38:05Z | 266 | 845 | 82 | 1,193
|
||||
[v0.10.36](https://github.com/laurent22/joplin/releases/tag/v0.10.36) | 2017-12-05T09:34:40Z | 1,016 | 1,356 | 439 | 2,811
|
||||
[v0.10.35](https://github.com/laurent22/joplin/releases/tag/v0.10.35) | 2017-12-02T15:56:08Z | 1,578 | 1,548 | 745 | 3,871
|
||||
[v0.10.34](https://github.com/laurent22/joplin/releases/tag/v0.10.34) | 2017-12-02T14:50:28Z | 91 | 670 | 60 | 821
|
||||
[v0.10.33](https://github.com/laurent22/joplin/releases/tag/v0.10.33) | 2017-12-02T13:20:39Z | 62 | 659 | 22 | 743
|
||||
[v0.10.31](https://github.com/laurent22/joplin/releases/tag/v0.10.31) | 2017-12-01T09:56:44Z | 893 | 1,451 | 407 | 2,751
|
||||
[v0.10.30](https://github.com/laurent22/joplin/releases/tag/v0.10.30) | 2017-11-30T20:28:16Z | 724 | 1,369 | 420 | 2,513
|
||||
[v0.10.28](https://github.com/laurent22/joplin/releases/tag/v0.10.28) | 2017-11-30T01:07:46Z | 1,342 | 1,701 | 874 | 3,917
|
||||
[v0.10.26](https://github.com/laurent22/joplin/releases/tag/v0.10.26) | 2017-11-29T16:02:17Z | 188 | 701 | 261 | 1,150
|
||||
[v0.10.25](https://github.com/laurent22/joplin/releases/tag/v0.10.25) | 2017-11-24T14:27:49Z | 150 | 696 | 6,461 | 7,307
|
||||
[v0.10.23](https://github.com/laurent22/joplin/releases/tag/v0.10.23) | 2017-11-21T19:38:41Z | 134 | 647 | 28 | 809
|
||||
[v0.10.22](https://github.com/laurent22/joplin/releases/tag/v0.10.22) | 2017-11-20T21:45:57Z | 86 | 645 | 19 | 750
|
||||
[v0.10.21](https://github.com/laurent22/joplin/releases/tag/v0.10.21) | 2017-11-18T00:53:15Z | 53 | 638 | 13 | 704
|
||||
[v0.10.20](https://github.com/laurent22/joplin/releases/tag/v0.10.20) | 2017-11-17T17:18:25Z | 34 | 649 | 22 | 705
|
||||
[v0.10.19](https://github.com/laurent22/joplin/releases/tag/v0.10.19) | 2017-11-20T18:59:48Z | 19 | 645 | 13 | 677
|
||||
| Version | Date | Windows | macOS | Linux | Total |
|
||||
| ----- | ----- | ----- | ----- | ----- | ----- |
|
||||
| [v2.0.4](https://github.com/laurent22/joplin/releases/tag/v2.0.4) (p) | 2021-06-02T12:54:17Z | 898 | 267 | 242 | 1,407 |
|
||||
| [v2.0.2](https://github.com/laurent22/joplin/releases/tag/v2.0.2) (p) | 2021-05-21T18:07:48Z | 1,953 | 470 | 1,554 | 3,977 |
|
||||
| [v2.0.1](https://github.com/laurent22/joplin/releases/tag/v2.0.1) (p) | 2021-05-15T13:22:58Z | 784 | 245 | 994 | 2,023 |
|
||||
| [v1.8.5](https://github.com/laurent22/joplin/releases/tag/v1.8.5) | 2021-05-10T11:58:14Z | 27,272 | 12,591 | 13,983 | 53,846 |
|
||||
| [v1.8.4](https://github.com/laurent22/joplin/releases/tag/v1.8.4) (p) | 2021-05-09T18:05:05Z | 656 | 120 | 433 | 1,209 |
|
||||
| [v1.8.3](https://github.com/laurent22/joplin/releases/tag/v1.8.3) (p) | 2021-05-04T10:38:16Z | 1,280 | 293 | 912 | 2,485 |
|
||||
| [v1.8.2](https://github.com/laurent22/joplin/releases/tag/v1.8.2) (p) | 2021-04-25T10:50:51Z | 1,473 | 421 | 1,261 | 3,155 |
|
||||
| [v1.8.1](https://github.com/laurent22/joplin/releases/tag/v1.8.1) (p) | 2021-03-29T10:46:41Z | 3,025 | 805 | 2,419 | 6,249 |
|
||||
| [v1.7.11](https://github.com/laurent22/joplin/releases/tag/v1.7.11) | 2021-02-03T12:50:01Z | 113,946 | 42,556 | 64,079 | 220,581 |
|
||||
| [v1.7.10](https://github.com/laurent22/joplin/releases/tag/v1.7.10) | 2021-01-30T13:25:29Z | 13,830 | 4,831 | 4,429 | 23,090 |
|
||||
| [v1.7.9](https://github.com/laurent22/joplin/releases/tag/v1.7.9) (p) | 2021-01-28T09:50:21Z | 481 | 123 | 483 | 1,087 |
|
||||
| [v1.7.6](https://github.com/laurent22/joplin/releases/tag/v1.7.6) (p) | 2021-01-27T10:36:05Z | 284 | 82 | 277 | 643 |
|
||||
| [v1.7.5](https://github.com/laurent22/joplin/releases/tag/v1.7.5) (p) | 2021-01-26T09:53:05Z | 364 | 195 | 444 | 1,003 |
|
||||
| [v1.7.4](https://github.com/laurent22/joplin/releases/tag/v1.7.4) (p) | 2021-01-22T17:58:38Z | 673 | 195 | 613 | 1,481 |
|
||||
| [v1.6.8](https://github.com/laurent22/joplin/releases/tag/v1.6.8) | 2021-01-20T18:11:34Z | 18,148 | 7,665 | 7,581 | 33,394 |
|
||||
| [v1.7.3](https://github.com/laurent22/joplin/releases/tag/v1.7.3) (p) | 2021-01-20T11:23:50Z | 334 | 68 | 436 | 838 |
|
||||
| [v1.6.7](https://github.com/laurent22/joplin/releases/tag/v1.6.7) | 2021-01-11T23:20:33Z | 10,418 | 4,619 | 4,531 | 19,568 |
|
||||
| [v1.6.6](https://github.com/laurent22/joplin/releases/tag/v1.6.6) | 2021-01-09T16:15:31Z | 12,362 | 3,405 | 4,776 | 20,543 |
|
||||
| [v1.6.5](https://github.com/laurent22/joplin/releases/tag/v1.6.5) (p) | 2021-01-09T01:24:32Z | 580 | 57 | 300 | 937 |
|
||||
| [v1.6.4](https://github.com/laurent22/joplin/releases/tag/v1.6.4) (p) | 2021-01-07T19:11:32Z | 381 | 73 | 197 | 651 |
|
||||
| [v1.6.2](https://github.com/laurent22/joplin/releases/tag/v1.6.2) (p) | 2021-01-04T22:34:55Z | 665 | 221 | 577 | 1,463 |
|
||||
| [v1.5.14](https://github.com/laurent22/joplin/releases/tag/v1.5.14) | 2020-12-30T01:48:46Z | 10,889 | 5,192 | 5,512 | 21,593 |
|
||||
| [v1.6.1](https://github.com/laurent22/joplin/releases/tag/v1.6.1) (p) | 2020-12-29T19:37:45Z | 162 | 32 | 156 | 350 |
|
||||
| [v1.5.13](https://github.com/laurent22/joplin/releases/tag/v1.5.13) | 2020-12-29T18:29:15Z | 609 | 212 | 190 | 1,011 |
|
||||
| [v1.5.12](https://github.com/laurent22/joplin/releases/tag/v1.5.12) | 2020-12-28T15:14:08Z | 2,378 | 1,762 | 911 | 5,051 |
|
||||
| [v1.5.11](https://github.com/laurent22/joplin/releases/tag/v1.5.11) | 2020-12-27T19:54:07Z | 14,009 | 4,605 | 4,254 | 22,868 |
|
||||
| [v1.5.10](https://github.com/laurent22/joplin/releases/tag/v1.5.10) (p) | 2020-12-26T12:35:36Z | 288 | 102 | 255 | 645 |
|
||||
| [v1.5.9](https://github.com/laurent22/joplin/releases/tag/v1.5.9) (p) | 2020-12-23T18:01:08Z | 321 | 368 | 400 | 1,089 |
|
||||
| [v1.5.8](https://github.com/laurent22/joplin/releases/tag/v1.5.8) (p) | 2020-12-20T09:45:19Z | 559 | 158 | 631 | 1,348 |
|
||||
| [v1.5.7](https://github.com/laurent22/joplin/releases/tag/v1.5.7) (p) | 2020-12-10T12:58:33Z | 880 | 248 | 982 | 2,110 |
|
||||
| [v1.5.4](https://github.com/laurent22/joplin/releases/tag/v1.5.4) (p) | 2020-12-05T12:07:49Z | 686 | 161 | 623 | 1,470 |
|
||||
| [v1.4.19](https://github.com/laurent22/joplin/releases/tag/v1.4.19) | 2020-12-01T11:11:16Z | 25,530 | 13,358 | 11,615 | 50,503 |
|
||||
| [v1.4.18](https://github.com/laurent22/joplin/releases/tag/v1.4.18) | 2020-11-28T12:21:41Z | 11,087 | 3,871 | 3,081 | 18,039 |
|
||||
| [v1.4.16](https://github.com/laurent22/joplin/releases/tag/v1.4.16) | 2020-11-27T19:40:16Z | 1,457 | 822 | 584 | 2,863 |
|
||||
| [v1.4.15](https://github.com/laurent22/joplin/releases/tag/v1.4.15) | 2020-11-27T13:25:43Z | 878 | 482 | 262 | 1,622 |
|
||||
| [v1.4.12](https://github.com/laurent22/joplin/releases/tag/v1.4.12) | 2020-11-23T18:58:07Z | 2,994 | 1,316 | 1,287 | 5,597 |
|
||||
| [v1.4.11](https://github.com/laurent22/joplin/releases/tag/v1.4.11) (p) | 2020-11-19T23:06:51Z | 974 | 148 | 574 | 1,696 |
|
||||
| [v1.4.10](https://github.com/laurent22/joplin/releases/tag/v1.4.10) (p) | 2020-11-14T09:53:15Z | 614 | 186 | 676 | 1,476 |
|
||||
| [v1.4.9](https://github.com/laurent22/joplin/releases/tag/v1.4.9) (p) | 2020-11-11T14:23:17Z | 499 | 133 | 393 | 1,025 |
|
||||
| [v1.4.7](https://github.com/laurent22/joplin/releases/tag/v1.4.7) (p) | 2020-11-07T18:23:29Z | 511 | 166 | 506 | 1,183 |
|
||||
| [v1.3.18](https://github.com/laurent22/joplin/releases/tag/v1.3.18) | 2020-11-06T12:07:02Z | 30,668 | 11,316 | 10,495 | 52,479 |
|
||||
| [v1.3.17](https://github.com/laurent22/joplin/releases/tag/v1.3.17) (p) | 2020-11-06T11:35:15Z | 44 | 16 | 15 | 75 |
|
||||
| [v1.4.6](https://github.com/laurent22/joplin/releases/tag/v1.4.6) (p) | 2020-11-05T22:44:12Z | 341 | 86 | 45 | 472 |
|
||||
| [v1.3.15](https://github.com/laurent22/joplin/releases/tag/v1.3.15) | 2020-11-04T12:22:50Z | 2,223 | 1,290 | 836 | 4,349 |
|
||||
| [v1.3.11](https://github.com/laurent22/joplin/releases/tag/v1.3.11) (p) | 2020-10-31T13:22:20Z | 693 | 177 | 471 | 1,341 |
|
||||
| [v1.3.10](https://github.com/laurent22/joplin/releases/tag/v1.3.10) (p) | 2020-10-29T13:27:14Z | 369 | 107 | 307 | 783 |
|
||||
| [v1.3.9](https://github.com/laurent22/joplin/releases/tag/v1.3.9) (p) | 2020-10-23T16:04:26Z | 830 | 233 | 624 | 1,687 |
|
||||
| [v1.3.8](https://github.com/laurent22/joplin/releases/tag/v1.3.8) (p) | 2020-10-21T18:46:29Z | 510 | 104 | 321 | 935 |
|
||||
| [v1.3.7](https://github.com/laurent22/joplin/releases/tag/v1.3.7) (p) | 2020-10-20T11:35:55Z | 291 | 76 | 334 | 701 |
|
||||
| [v1.3.5](https://github.com/laurent22/joplin/releases/tag/v1.3.5) (p) | 2020-10-17T14:26:35Z | 464 | 126 | 397 | 987 |
|
||||
| [v1.3.3](https://github.com/laurent22/joplin/releases/tag/v1.3.3) (p) | 2020-10-17T10:56:57Z | 113 | 38 | 25 | 176 |
|
||||
| [v1.3.2](https://github.com/laurent22/joplin/releases/tag/v1.3.2) (p) | 2020-10-11T20:39:49Z | 659 | 173 | 556 | 1,388 |
|
||||
| [v1.3.1](https://github.com/laurent22/joplin/releases/tag/v1.3.1) (p) | 2020-10-11T15:10:18Z | 77 | 46 | 36 | 159 |
|
||||
| [v1.2.6](https://github.com/laurent22/joplin/releases/tag/v1.2.6) | 2020-10-09T13:56:59Z | 44,215 | 17,713 | 14,026 | 75,954 |
|
||||
| [v1.2.4](https://github.com/laurent22/joplin/releases/tag/v1.2.4) (p) | 2020-09-30T07:34:29Z | 808 | 240 | 791 | 1,839 |
|
||||
| [v1.2.3](https://github.com/laurent22/joplin/releases/tag/v1.2.3) (p) | 2020-09-29T15:13:02Z | 212 | 61 | 72 | 345 |
|
||||
| [v1.2.2](https://github.com/laurent22/joplin/releases/tag/v1.2.2) (p) | 2020-09-22T20:31:55Z | 779 | 199 | 631 | 1,609 |
|
||||
| [v1.1.4](https://github.com/laurent22/joplin/releases/tag/v1.1.4) | 2020-09-21T11:20:09Z | 27,592 | 13,490 | 7,740 | 48,822 |
|
||||
| [v1.1.3](https://github.com/laurent22/joplin/releases/tag/v1.1.3) (p) | 2020-09-17T10:30:37Z | 557 | 147 | 457 | 1,161 |
|
||||
| [v1.1.2](https://github.com/laurent22/joplin/releases/tag/v1.1.2) (p) | 2020-09-15T12:58:38Z | 372 | 112 | 244 | 728 |
|
||||
| [v1.1.1](https://github.com/laurent22/joplin/releases/tag/v1.1.1) (p) | 2020-09-11T23:32:47Z | 521 | 195 | 342 | 1,058 |
|
||||
| [v1.0.245](https://github.com/laurent22/joplin/releases/tag/v1.0.245) | 2020-09-09T12:56:10Z | 21,177 | 9,999 | 5,634 | 36,810 |
|
||||
| [v1.0.242](https://github.com/laurent22/joplin/releases/tag/v1.0.242) | 2020-09-04T22:00:34Z | 12,446 | 6,418 | 3,015 | 21,879 |
|
||||
| [v1.0.241](https://github.com/laurent22/joplin/releases/tag/v1.0.241) | 2020-09-04T18:06:00Z | 23,665 | 5,749 | 4,995 | 34,409 |
|
||||
| [v1.0.239](https://github.com/laurent22/joplin/releases/tag/v1.0.239) (p) | 2020-09-01T21:56:36Z | 601 | 226 | 400 | 1,227 |
|
||||
| [v1.0.237](https://github.com/laurent22/joplin/releases/tag/v1.0.237) (p) | 2020-08-29T15:38:04Z | 588 | 923 | 338 | 1,849 |
|
||||
| [v1.0.236](https://github.com/laurent22/joplin/releases/tag/v1.0.236) (p) | 2020-08-28T09:16:54Z | 315 | 110 | 104 | 529 |
|
||||
| [v1.0.235](https://github.com/laurent22/joplin/releases/tag/v1.0.235) (p) | 2020-08-18T22:08:01Z | 1,673 | 489 | 920 | 3,082 |
|
||||
| [v1.0.234](https://github.com/laurent22/joplin/releases/tag/v1.0.234) (p) | 2020-08-17T23:13:02Z | 538 | 125 | 100 | 763 |
|
||||
| [v1.0.233](https://github.com/laurent22/joplin/releases/tag/v1.0.233) | 2020-08-01T14:51:15Z | 43,153 | 18,188 | 12,358 | 73,699 |
|
||||
| [v1.0.232](https://github.com/laurent22/joplin/releases/tag/v1.0.232) (p) | 2020-07-28T22:34:40Z | 652 | 222 | 178 | 1,052 |
|
||||
| [v1.0.227](https://github.com/laurent22/joplin/releases/tag/v1.0.227) | 2020-07-07T20:44:54Z | 40,414 | 15,274 | 9,629 | 65,317 |
|
||||
| [v1.0.226](https://github.com/laurent22/joplin/releases/tag/v1.0.226) (p) | 2020-07-04T10:21:26Z | 4,905 | 2,252 | 688 | 7,845 |
|
||||
| [v1.0.224](https://github.com/laurent22/joplin/releases/tag/v1.0.224) | 2020-06-20T22:26:08Z | 24,788 | 11,005 | 6,006 | 41,799 |
|
||||
| [v1.0.223](https://github.com/laurent22/joplin/releases/tag/v1.0.223) (p) | 2020-06-20T11:51:27Z | 186 | 112 | 78 | 376 |
|
||||
| [v1.0.221](https://github.com/laurent22/joplin/releases/tag/v1.0.221) (p) | 2020-06-20T01:44:20Z | 856 | 205 | 210 | 1,271 |
|
||||
| [v1.0.220](https://github.com/laurent22/joplin/releases/tag/v1.0.220) | 2020-06-13T18:26:22Z | 31,734 | 9,916 | 6,411 | 48,061 |
|
||||
| [v1.0.218](https://github.com/laurent22/joplin/releases/tag/v1.0.218) | 2020-06-07T10:43:34Z | 14,536 | 6,968 | 2,954 | 24,458 |
|
||||
| [v1.0.217](https://github.com/laurent22/joplin/releases/tag/v1.0.217) (p) | 2020-06-06T15:17:27Z | 226 | 93 | 54 | 373 |
|
||||
| [v1.0.216](https://github.com/laurent22/joplin/releases/tag/v1.0.216) | 2020-05-24T14:21:01Z | 37,327 | 14,269 | 10,177 | 61,773 |
|
||||
| [v1.0.214](https://github.com/laurent22/joplin/releases/tag/v1.0.214) (p) | 2020-05-21T17:15:15Z | 6,545 | 3,466 | 760 | 10,771 |
|
||||
| [v1.0.212](https://github.com/laurent22/joplin/releases/tag/v1.0.212) (p) | 2020-05-21T07:48:39Z | 210 | 66 | 46 | 322 |
|
||||
| [v1.0.211](https://github.com/laurent22/joplin/releases/tag/v1.0.211) (p) | 2020-05-20T08:59:16Z | 300 | 131 | 86 | 517 |
|
||||
| [v1.0.209](https://github.com/laurent22/joplin/releases/tag/v1.0.209) (p) | 2020-05-17T18:32:51Z | 1,393 | 851 | 147 | 2,391 |
|
||||
| [v1.0.207](https://github.com/laurent22/joplin/releases/tag/v1.0.207) (p) | 2020-05-10T16:37:35Z | 1,188 | 263 | 1,016 | 2,467 |
|
||||
| [v1.0.201](https://github.com/laurent22/joplin/releases/tag/v1.0.201) | 2020-04-15T22:55:13Z | 53,324 | 20,043 | 18,180 | 91,547 |
|
||||
| [v1.0.200](https://github.com/laurent22/joplin/releases/tag/v1.0.200) | 2020-04-12T12:17:46Z | 9,552 | 4,892 | 1,903 | 16,347 |
|
||||
| [v1.0.199](https://github.com/laurent22/joplin/releases/tag/v1.0.199) | 2020-04-10T18:41:58Z | 19,347 | 5,884 | 3,788 | 29,019 |
|
||||
| [v1.0.197](https://github.com/laurent22/joplin/releases/tag/v1.0.197) | 2020-03-30T17:21:22Z | 22,290 | 9,540 | 5,734 | 37,564 |
|
||||
| [v1.0.195](https://github.com/laurent22/joplin/releases/tag/v1.0.195) | 2020-03-22T19:56:12Z | 18,892 | 7,949 | 4,506 | 31,347 |
|
||||
| [v1.0.194](https://github.com/laurent22/joplin/releases/tag/v1.0.194) (p) | 2020-03-14T00:00:32Z | 1,285 | 1,377 | 513 | 3,175 |
|
||||
| [v1.0.193](https://github.com/laurent22/joplin/releases/tag/v1.0.193) | 2020-03-08T08:58:53Z | 28,642 | 10,907 | 7,393 | 46,942 |
|
||||
| [v1.0.192](https://github.com/laurent22/joplin/releases/tag/v1.0.192) (p) | 2020-03-06T23:27:52Z | 473 | 122 | 89 | 684 |
|
||||
| [v1.0.190](https://github.com/laurent22/joplin/releases/tag/v1.0.190) (p) | 2020-03-06T01:22:22Z | 374 | 90 | 85 | 549 |
|
||||
| [v1.0.189](https://github.com/laurent22/joplin/releases/tag/v1.0.189) (p) | 2020-03-04T17:27:15Z | 343 | 96 | 90 | 529 |
|
||||
| [v1.0.187](https://github.com/laurent22/joplin/releases/tag/v1.0.187) (p) | 2020-03-01T12:31:06Z | 920 | 230 | 263 | 1,413 |
|
||||
| [v1.0.179](https://github.com/laurent22/joplin/releases/tag/v1.0.179) | 2020-01-24T22:42:41Z | 71,040 | 28,550 | 22,535 | 122,125 |
|
||||
| [v1.0.178](https://github.com/laurent22/joplin/releases/tag/v1.0.178) | 2020-01-20T19:06:45Z | 17,540 | 5,962 | 2,584 | 26,086 |
|
||||
| [v1.0.177](https://github.com/laurent22/joplin/releases/tag/v1.0.177) (p) | 2019-12-30T14:40:40Z | 1,944 | 438 | 679 | 3,061 |
|
||||
| [v1.0.176](https://github.com/laurent22/joplin/releases/tag/v1.0.176) (p) | 2019-12-14T10:36:44Z | 3,124 | 2,534 | 467 | 6,125 |
|
||||
| [v1.0.175](https://github.com/laurent22/joplin/releases/tag/v1.0.175) | 2019-12-08T11:48:47Z | 72,538 | 16,906 | 16,509 | 105,953 |
|
||||
| [v1.0.174](https://github.com/laurent22/joplin/releases/tag/v1.0.174) | 2019-11-12T18:20:58Z | 30,407 | 11,722 | 8,221 | 50,350 |
|
||||
| [v1.0.173](https://github.com/laurent22/joplin/releases/tag/v1.0.173) | 2019-11-11T08:33:35Z | 5,074 | 2,077 | 743 | 7,894 |
|
||||
| [v1.0.170](https://github.com/laurent22/joplin/releases/tag/v1.0.170) | 2019-10-13T22:13:04Z | 27,424 | 8,752 | 7,675 | 43,851 |
|
||||
| [v1.0.169](https://github.com/laurent22/joplin/releases/tag/v1.0.169) | 2019-09-27T18:35:13Z | 17,098 | 5,921 | 3,754 | 26,773 |
|
||||
| [v1.0.168](https://github.com/laurent22/joplin/releases/tag/v1.0.168) | 2019-09-25T21:21:38Z | 5,332 | 2,273 | 717 | 8,322 |
|
||||
| [v1.0.167](https://github.com/laurent22/joplin/releases/tag/v1.0.167) | 2019-09-10T08:48:37Z | 16,791 | 5,704 | 3,703 | 26,198 |
|
||||
| [v1.0.166](https://github.com/laurent22/joplin/releases/tag/v1.0.166) | 2019-09-09T17:35:54Z | 1,956 | 560 | 236 | 2,752 |
|
||||
| [v1.0.165](https://github.com/laurent22/joplin/releases/tag/v1.0.165) | 2019-08-14T21:46:29Z | 18,903 | 6,972 | 5,462 | 31,337 |
|
||||
| [v1.0.161](https://github.com/laurent22/joplin/releases/tag/v1.0.161) | 2019-07-13T18:30:00Z | 19,287 | 6,352 | 4,136 | 29,775 |
|
||||
| [v1.0.160](https://github.com/laurent22/joplin/releases/tag/v1.0.160) | 2019-06-15T00:21:40Z | 30,535 | 7,746 | 8,101 | 46,382 |
|
||||
| [v1.0.159](https://github.com/laurent22/joplin/releases/tag/v1.0.159) | 2019-06-08T00:00:19Z | 5,194 | 2,178 | 1,113 | 8,485 |
|
||||
| [v1.0.158](https://github.com/laurent22/joplin/releases/tag/v1.0.158) | 2019-05-27T19:01:18Z | 9,815 | 3,538 | 1,936 | 15,289 |
|
||||
| [v1.0.157](https://github.com/laurent22/joplin/releases/tag/v1.0.157) | 2019-05-26T17:55:53Z | 2,179 | 844 | 291 | 3,314 |
|
||||
| [v1.0.153](https://github.com/laurent22/joplin/releases/tag/v1.0.153) (p) | 2019-05-15T06:27:29Z | 850 | 102 | 106 | 1,058 |
|
||||
| [v1.0.152](https://github.com/laurent22/joplin/releases/tag/v1.0.152) | 2019-05-13T09:08:07Z | 13,873 | 4,427 | 4,061 | 22,361 |
|
||||
| [v1.0.151](https://github.com/laurent22/joplin/releases/tag/v1.0.151) | 2019-05-12T15:14:32Z | 1,954 | 533 | 957 | 3,444 |
|
||||
| [v1.0.150](https://github.com/laurent22/joplin/releases/tag/v1.0.150) | 2019-05-12T11:27:48Z | 423 | 136 | 68 | 627 |
|
||||
| [v1.0.148](https://github.com/laurent22/joplin/releases/tag/v1.0.148) (p) | 2019-05-08T19:12:24Z | 133 | 58 | 96 | 287 |
|
||||
| [v1.0.145](https://github.com/laurent22/joplin/releases/tag/v1.0.145) | 2019-05-03T09:16:53Z | 7,008 | 2,861 | 1,437 | 11,306 |
|
||||
| [v1.0.143](https://github.com/laurent22/joplin/releases/tag/v1.0.143) | 2019-04-22T10:51:38Z | 11,918 | 3,550 | 2,779 | 18,247 |
|
||||
| [v1.0.142](https://github.com/laurent22/joplin/releases/tag/v1.0.142) | 2019-04-02T16:44:51Z | 14,663 | 4,565 | 4,727 | 23,955 |
|
||||
| [v1.0.140](https://github.com/laurent22/joplin/releases/tag/v1.0.140) | 2019-03-10T20:59:58Z | 13,629 | 4,171 | 3,227 | 21,027 |
|
||||
| [v1.0.139](https://github.com/laurent22/joplin/releases/tag/v1.0.139) (p) | 2019-03-09T10:06:48Z | 123 | 63 | 46 | 232 |
|
||||
| [v1.0.138](https://github.com/laurent22/joplin/releases/tag/v1.0.138) (p) | 2019-03-03T17:23:00Z | 150 | 87 | 84 | 321 |
|
||||
| [v1.0.137](https://github.com/laurent22/joplin/releases/tag/v1.0.137) (p) | 2019-03-03T01:12:51Z | 591 | 58 | 83 | 732 |
|
||||
| [v1.0.135](https://github.com/laurent22/joplin/releases/tag/v1.0.135) | 2019-02-27T23:36:57Z | 12,515 | 3,958 | 4,077 | 20,550 |
|
||||
| [v1.0.134](https://github.com/laurent22/joplin/releases/tag/v1.0.134) | 2019-02-27T10:21:44Z | 1,468 | 568 | 219 | 2,255 |
|
||||
| [v1.0.132](https://github.com/laurent22/joplin/releases/tag/v1.0.132) | 2019-02-26T23:02:05Z | 1,088 | 452 | 95 | 1,635 |
|
||||
| [v1.0.127](https://github.com/laurent22/joplin/releases/tag/v1.0.127) | 2019-02-14T23:12:48Z | 9,786 | 3,172 | 2,929 | 15,887 |
|
||||
| [v1.0.126](https://github.com/laurent22/joplin/releases/tag/v1.0.126) (p) | 2019-02-09T19:46:16Z | 932 | 73 | 117 | 1,122 |
|
||||
| [v1.0.125](https://github.com/laurent22/joplin/releases/tag/v1.0.125) | 2019-01-26T18:14:33Z | 10,251 | 3,559 | 1,703 | 15,513 |
|
||||
| [v1.0.120](https://github.com/laurent22/joplin/releases/tag/v1.0.120) | 2019-01-10T21:42:53Z | 15,605 | 5,202 | 6,517 | 27,324 |
|
||||
| [v1.0.119](https://github.com/laurent22/joplin/releases/tag/v1.0.119) | 2018-12-18T12:40:22Z | 8,906 | 3,262 | 2,014 | 14,182 |
|
||||
| [v1.0.118](https://github.com/laurent22/joplin/releases/tag/v1.0.118) | 2019-01-11T08:34:13Z | 718 | 248 | 89 | 1,055 |
|
||||
| [v1.0.117](https://github.com/laurent22/joplin/releases/tag/v1.0.117) | 2018-11-24T12:05:24Z | 16,259 | 4,896 | 6,381 | 27,536 |
|
||||
| [v1.0.116](https://github.com/laurent22/joplin/releases/tag/v1.0.116) | 2018-11-20T19:09:24Z | 3,474 | 1,122 | 714 | 5,310 |
|
||||
| [v1.0.115](https://github.com/laurent22/joplin/releases/tag/v1.0.115) | 2018-11-16T16:52:02Z | 3,658 | 1,303 | 799 | 5,760 |
|
||||
| [v1.0.114](https://github.com/laurent22/joplin/releases/tag/v1.0.114) | 2018-10-24T20:14:10Z | 11,397 | 3,500 | 3,830 | 18,727 |
|
||||
| [v1.0.111](https://github.com/laurent22/joplin/releases/tag/v1.0.111) | 2018-09-30T20:15:09Z | 12,042 | 3,308 | 3,669 | 19,019 |
|
||||
| [v1.0.110](https://github.com/laurent22/joplin/releases/tag/v1.0.110) | 2018-09-29T12:29:21Z | 962 | 409 | 118 | 1,489 |
|
||||
| [v1.0.109](https://github.com/laurent22/joplin/releases/tag/v1.0.109) | 2018-09-27T18:01:41Z | 2,102 | 706 | 328 | 3,136 |
|
||||
| [v1.0.108](https://github.com/laurent22/joplin/releases/tag/v1.0.108) (p) | 2018-09-29T18:49:29Z | 31 | 22 | 14 | 67 |
|
||||
| [v1.0.107](https://github.com/laurent22/joplin/releases/tag/v1.0.107) | 2018-09-16T19:51:07Z | 7,151 | 2,137 | 1,708 | 10,996 |
|
||||
| [v1.0.106](https://github.com/laurent22/joplin/releases/tag/v1.0.106) | 2018-09-08T15:23:40Z | 4,559 | 1,458 | 318 | 6,335 |
|
||||
| [v1.0.105](https://github.com/laurent22/joplin/releases/tag/v1.0.105) | 2018-09-05T11:29:36Z | 4,657 | 1,590 | 1,455 | 7,702 |
|
||||
| [v1.0.104](https://github.com/laurent22/joplin/releases/tag/v1.0.104) | 2018-06-28T20:25:36Z | 15,055 | 4,702 | 7,345 | 27,102 |
|
||||
| [v1.0.103](https://github.com/laurent22/joplin/releases/tag/v1.0.103) | 2018-06-21T19:38:13Z | 2,054 | 888 | 680 | 3,622 |
|
||||
| [v1.0.101](https://github.com/laurent22/joplin/releases/tag/v1.0.101) | 2018-06-17T18:35:11Z | 1,311 | 608 | 409 | 2,328 |
|
||||
| [v1.0.100](https://github.com/laurent22/joplin/releases/tag/v1.0.100) | 2018-06-14T17:41:43Z | 882 | 435 | 246 | 1,563 |
|
||||
| [v1.0.99](https://github.com/laurent22/joplin/releases/tag/v1.0.99) | 2018-06-10T13:18:23Z | 1,256 | 598 | 380 | 2,234 |
|
||||
| [v1.0.97](https://github.com/laurent22/joplin/releases/tag/v1.0.97) | 2018-06-09T19:23:34Z | 315 | 159 | 61 | 535 |
|
||||
| [v1.0.96](https://github.com/laurent22/joplin/releases/tag/v1.0.96) | 2018-05-26T16:36:39Z | 2,721 | 1,225 | 1,700 | 5,646 |
|
||||
| [v1.0.95](https://github.com/laurent22/joplin/releases/tag/v1.0.95) | 2018-05-25T13:04:30Z | 420 | 220 | 120 | 760 |
|
||||
| [v1.0.94](https://github.com/laurent22/joplin/releases/tag/v1.0.94) | 2018-05-21T20:52:59Z | 1,134 | 586 | 397 | 2,117 |
|
||||
| [v1.0.93](https://github.com/laurent22/joplin/releases/tag/v1.0.93) | 2018-05-14T11:36:01Z | 1,791 | 1,158 | 759 | 3,708 |
|
||||
| [v1.0.91](https://github.com/laurent22/joplin/releases/tag/v1.0.91) | 2018-05-10T14:48:04Z | 828 | 552 | 307 | 1,687 |
|
||||
| [v1.0.89](https://github.com/laurent22/joplin/releases/tag/v1.0.89) | 2018-05-09T13:05:05Z | 495 | 232 | 111 | 838 |
|
||||
| [v1.0.85](https://github.com/laurent22/joplin/releases/tag/v1.0.85) | 2018-05-01T21:08:24Z | 1,654 | 951 | 633 | 3,238 |
|
||||
| [v1.0.83](https://github.com/laurent22/joplin/releases/tag/v1.0.83) | 2018-04-04T19:43:58Z | 4,892 | 2,532 | 2,658 | 10,082 |
|
||||
| [v1.0.82](https://github.com/laurent22/joplin/releases/tag/v1.0.82) | 2018-03-31T19:16:31Z | 694 | 406 | 122 | 1,222 |
|
||||
| [v1.0.81](https://github.com/laurent22/joplin/releases/tag/v1.0.81) | 2018-03-28T08:13:58Z | 1,001 | 597 | 783 | 2,381 |
|
||||
| [v1.0.79](https://github.com/laurent22/joplin/releases/tag/v1.0.79) | 2018-03-23T18:00:11Z | 932 | 539 | 381 | 1,852 |
|
||||
| [v1.0.78](https://github.com/laurent22/joplin/releases/tag/v1.0.78) | 2018-03-17T15:27:18Z | 1,313 | 870 | 872 | 3,055 |
|
||||
| [v1.0.77](https://github.com/laurent22/joplin/releases/tag/v1.0.77) | 2018-03-16T15:12:35Z | 179 | 105 | 46 | 330 |
|
||||
| [v1.0.72](https://github.com/laurent22/joplin/releases/tag/v1.0.72) | 2018-03-14T09:44:35Z | 407 | 258 | 57 | 722 |
|
||||
| [v1.0.70](https://github.com/laurent22/joplin/releases/tag/v1.0.70) | 2018-02-28T20:04:30Z | 1,855 | 1,052 | 1,255 | 4,162 |
|
||||
| [v1.0.67](https://github.com/laurent22/joplin/releases/tag/v1.0.67) | 2018-02-19T22:51:08Z | 1,816 | 605 | 0 | 2,421 |
|
||||
| [v1.0.66](https://github.com/laurent22/joplin/releases/tag/v1.0.66) | 2018-02-18T23:09:09Z | 329 | 136 | 86 | 551 |
|
||||
| [v1.0.65](https://github.com/laurent22/joplin/releases/tag/v1.0.65) | 2018-02-17T20:02:25Z | 195 | 129 | 134 | 458 |
|
||||
| [v1.0.64](https://github.com/laurent22/joplin/releases/tag/v1.0.64) | 2018-02-16T00:58:20Z | 1,086 | 545 | 1,124 | 2,755 |
|
||||
| [v1.0.63](https://github.com/laurent22/joplin/releases/tag/v1.0.63) | 2018-02-14T19:40:36Z | 302 | 161 | 94 | 557 |
|
||||
| [v1.0.62](https://github.com/laurent22/joplin/releases/tag/v1.0.62) | 2018-02-12T20:19:58Z | 561 | 300 | 369 | 1,230 |
|
||||
| [v0.10.61](https://github.com/laurent22/joplin/releases/tag/v0.10.61) | 2018-02-08T18:27:39Z | 973 | 633 | 964 | 2,570 |
|
||||
| [v0.10.60](https://github.com/laurent22/joplin/releases/tag/v0.10.60) | 2018-02-06T13:09:56Z | 723 | 522 | 553 | 1,798 |
|
||||
| [v0.10.54](https://github.com/laurent22/joplin/releases/tag/v0.10.54) | 2018-01-31T20:21:30Z | 1,821 | 1,460 | 324 | 3,605 |
|
||||
| [v0.10.52](https://github.com/laurent22/joplin/releases/tag/v0.10.52) | 2018-01-31T19:25:18Z | 48 | 634 | 16 | 698 |
|
||||
| [v0.10.51](https://github.com/laurent22/joplin/releases/tag/v0.10.51) | 2018-01-28T18:47:02Z | 1,329 | 1,600 | 328 | 3,257 |
|
||||
| [v0.10.48](https://github.com/laurent22/joplin/releases/tag/v0.10.48) | 2018-01-23T11:19:51Z | 1,966 | 1,752 | 32 | 3,750 |
|
||||
| [v0.10.47](https://github.com/laurent22/joplin/releases/tag/v0.10.47) | 2018-01-16T17:27:17Z | 1,231 | 1,270 | 68 | 2,569 |
|
||||
| [v0.10.43](https://github.com/laurent22/joplin/releases/tag/v0.10.43) | 2018-01-08T10:12:10Z | 3,442 | 2,357 | 1,209 | 7,008 |
|
||||
| [v0.10.41](https://github.com/laurent22/joplin/releases/tag/v0.10.41) | 2018-01-05T20:38:12Z | 1,038 | 1,549 | 243 | 2,830 |
|
||||
| [v0.10.40](https://github.com/laurent22/joplin/releases/tag/v0.10.40) | 2018-01-02T23:16:57Z | 1,596 | 1,790 | 339 | 3,725 |
|
||||
| [v0.10.39](https://github.com/laurent22/joplin/releases/tag/v0.10.39) | 2017-12-11T21:19:44Z | 5,824 | 4,294 | 3,195 | 13,313 |
|
||||
| [v0.10.38](https://github.com/laurent22/joplin/releases/tag/v0.10.38) | 2017-12-08T10:12:06Z | 1,050 | 1,231 | 307 | 2,588 |
|
||||
| [v0.10.37](https://github.com/laurent22/joplin/releases/tag/v0.10.37) | 2017-12-07T19:38:05Z | 266 | 845 | 82 | 1,193 |
|
||||
| [v0.10.36](https://github.com/laurent22/joplin/releases/tag/v0.10.36) | 2017-12-05T09:34:40Z | 1,016 | 1,356 | 439 | 2,811 |
|
||||
| [v0.10.35](https://github.com/laurent22/joplin/releases/tag/v0.10.35) | 2017-12-02T15:56:08Z | 1,578 | 1,548 | 745 | 3,871 |
|
||||
| [v0.10.34](https://github.com/laurent22/joplin/releases/tag/v0.10.34) | 2017-12-02T14:50:28Z | 91 | 670 | 60 | 821 |
|
||||
| [v0.10.33](https://github.com/laurent22/joplin/releases/tag/v0.10.33) | 2017-12-02T13:20:39Z | 62 | 659 | 22 | 743 |
|
||||
| [v0.10.31](https://github.com/laurent22/joplin/releases/tag/v0.10.31) | 2017-12-01T09:56:44Z | 893 | 1,451 | 407 | 2,751 |
|
||||
| [v0.10.30](https://github.com/laurent22/joplin/releases/tag/v0.10.30) | 2017-11-30T20:28:16Z | 724 | 1,369 | 420 | 2,513 |
|
||||
| [v0.10.28](https://github.com/laurent22/joplin/releases/tag/v0.10.28) | 2017-11-30T01:07:46Z | 1,342 | 1,701 | 874 | 3,917 |
|
||||
| [v0.10.26](https://github.com/laurent22/joplin/releases/tag/v0.10.26) | 2017-11-29T16:02:17Z | 188 | 701 | 261 | 1,150 |
|
||||
| [v0.10.25](https://github.com/laurent22/joplin/releases/tag/v0.10.25) | 2017-11-24T14:27:49Z | 150 | 696 | 6,463 | 7,309 |
|
||||
| [v0.10.23](https://github.com/laurent22/joplin/releases/tag/v0.10.23) | 2017-11-21T19:38:41Z | 134 | 647 | 28 | 809 |
|
||||
| [v0.10.22](https://github.com/laurent22/joplin/releases/tag/v0.10.22) | 2017-11-20T21:45:57Z | 86 | 645 | 19 | 750 |
|
||||
| [v0.10.21](https://github.com/laurent22/joplin/releases/tag/v0.10.21) | 2017-11-18T00:53:15Z | 53 | 638 | 13 | 704 |
|
||||
| [v0.10.20](https://github.com/laurent22/joplin/releases/tag/v0.10.20) | 2017-11-17T17:18:25Z | 34 | 649 | 22 | 705 |
|
||||
| [v0.10.19](https://github.com/laurent22/joplin/releases/tag/v0.10.19) | 2017-11-20T18:59:48Z | 19 | 645 | 13 | 677 |
|
Loading…
Reference in New Issue