1
0
mirror of https://github.com/laurent22/joplin.git synced 2026-01-08 00:14:28 +02:00

Compare commits

...

260 Commits

Author SHA1 Message Date
Hubert
c88e147343 Merge remote-tracking branch 'origin/dev' into issue-8408 2023-07-25 11:38:36 -03:00
Hubert
078425c047 Undo changes in .ignore files 2023-07-25 11:35:57 -03:00
Laurent Cozic
c50181f0a6 Tools: Fixed updateIgnored so that it works consistently across platforms 2023-07-25 14:51:37 +01:00
renovate[bot]
778f317f9f Update dependency gettext-parser to v7.0.1 (#8547)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-24 13:46:00 +00:00
Hubert
0b928a3883 Fixes from review. 2023-07-24 10:08:01 -03:00
renovate[bot]
0394694a91 Update dependency gettext-parser to v7 (#8546)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-24 12:25:13 +01:00
renovate[bot]
fec853735b Update dependency react-redux to v8.1.1 (#8539)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-24 01:54:42 +00:00
renovate[bot]
087b206982 Update dependency react-native-localize to v3.0.2 (#8538)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-23 21:19:16 +00:00
renovate[bot]
3bd04aeaf4 Update dependency react-native-gesture-handler to v2.12.0 (#8540)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-23 17:59:46 +01:00
Laurent Cozic
74e81eb6f3 lock file 2023-07-23 17:14:20 +01:00
Laurent Cozic
3cb8fd035f Desktop release v2.12.9 2023-07-23 17:07:22 +01:00
Henry Heino
0a96c3d56b Mobile: Fixes #8425: Fix frequent crashing on Android 12 ARM (#8516) 2023-07-23 16:01:32 +01:00
Henry Heino
2d16151fa8 Desktop: Fixes #8520: Fix Rich Text theme not matching the system theme after several global theme changes (#8521) 2023-07-23 16:00:30 +01:00
Henry Heino
93c5f6c9d3 Desktop: Rich text editor: Disable spellcheck in inline code blocks (#8532) 2023-07-23 15:59:51 +01:00
Henry Heino
e47985c101 Desktop: Fixes #8530: Rich text editor: Use fewer &nbsp;s in markdown while still preserving initial paragraph indentation (#8529) 2023-07-23 15:59:24 +01:00
Laurent Cozic
1c1d20f82c Chore: Desktop: Update for share permissions (#8528) 2023-07-23 15:57:55 +01:00
renovate[bot]
880304c2fb Update dependency react-redux to v8.1.0 (#8537)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-23 11:28:33 +01:00
renovate[bot]
bd3d5f213e Update dependency node-gyp to v9.4.0 (#8536)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-23 11:28:02 +01:00
Hubert
90b95cd888 Update the icon's documentation to only allow PNG icons. 2023-07-22 19:45:43 -03:00
Hubert
849b124040 Merge remote-tracking branch 'origin/dev' into issue-8408 2023-07-22 19:37:19 -03:00
Hubert
bbfc7295f6 Updates from review. 2023-07-22 17:52:20 -03:00
github-actions[bot]
0d6f4c9361 @xbdmHQ has signed the CLA in laurent22/joplin#8531 2023-07-22 14:55:50 +00:00
Laurent Cozic
c49b53cb4b Tools: Trying to fix flaky test 2023-07-22 15:32:09 +01:00
Laurent Cozic
da177d3025 Tools: Do not bail when failing server tests 2023-07-22 11:56:41 +01:00
Laurent Cozic
6d184fb47c CI: Trying to fix random test failures 2023-07-22 11:19:57 +01:00
Laurent Cozic
3691662da2 Chore: Better messages in runForTesting 2023-07-22 11:19:55 +01:00
Henry Heino
776b6d8f12 Desktop: Fixes #8504: Support plugin toolbar icons in the Rich Text editor toolbar (#8519) 2023-07-21 20:49:49 +01:00
renovate[bot]
82c33c4f0c Update dependency jsdom to v22.1.0 (#8526)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-21 20:46:38 +01:00
renovate[bot]
ab77f0e0f4 Update dependency jsdom to v22 (#8524)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-21 18:23:31 +01:00
renovate[bot]
df3c60e43f Update dependency dayjs to v1.11.9 (#8522)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-21 08:11:54 +00:00
renovate[bot]
9aafdd2d10 Update dependency react-native-device-info to v10.6.1 (#8514)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-20 15:17:58 +00:00
Laurent Cozic
1fe01dc0ce lock file 2023-07-19 13:21:09 +01:00
Marph
f0b5ec3e3a Desktop: Fixes #8382: add "insert*before" buttons for tables in the rich text editor (#8393) 2023-07-19 13:11:27 +01:00
Henry Heino
955f724d36 Desktop: Sanitize rendered output in safe mode (#8507) 2023-07-19 13:09:03 +01:00
renovate[bot]
6cf0ed6166 Update dependency @react-native-community/netinfo to v9.3.11 (#8508)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-19 10:05:53 +00:00
renovate[bot]
1bcaf9d167 Update dependency sass to v1.63.6 (#8505)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-18 22:12:59 +00:00
pedr
06b2ba9d75 Desktop, mobile: Add support for Joplin Cloud email to note functionality (#8460) 2023-07-18 20:15:45 +01:00
Laurent Cozic
85079ad213 CI: Prevent random failures when running encodeAssets 2023-07-18 19:31:08 +01:00
Laurent Cozic
b9225d1daa CI: Fix random failure of Joplin Server test 2023-07-18 18:43:50 +01:00
Laurent Cozic
c88b6b608a Desktop: Enable share permission handling for Joplin Cloud 2023-07-18 18:31:57 +01:00
Laurent Cozic
56cd782175 Tools: Set yarn checksumBehavior option 2023-07-18 17:27:45 +01:00
Henry Heino
6ce8865719 Mobile: Add JEX export (#8428) 2023-07-18 14:58:06 +01:00
Henry Heino
ac66332a4e Desktop: Fixes #8430: Make HTML <br/> tags convert to markdown compatible with the softbreaks setting (#8469) 2023-07-18 14:48:26 +01:00
Henry Heino
c70afe3478 All: Resolves #8466: WebDAV: Show a more descriptive error message when the password is empty (#8477) 2023-07-18 14:47:25 +01:00
Henry Heino
3c2f193714 Mobile: Fixes #8211: Do not log data shared with the app (#8495) 2023-07-18 14:46:43 +01:00
renovate[bot]
bb9e970f8f Update dependency sass to v1.63.2 (#8497)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-18 14:46:25 +01:00
Henry Heino
9c8fbe831f Mobile: Resolves #8490: Add option to autodetect theme (#8498) 2023-07-18 14:46:11 +01:00
renovate[bot]
4e1ee87269 Update dependency ts-loader to v9.4.4 (#8503)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-18 13:26:04 +00:00
Hubert
03d487e0c1 Fixes from review. 2023-07-18 08:30:32 -03:00
renovate[bot]
9a32472522 Update dependency lint-staged to v13.2.3 (#8502)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-18 11:15:06 +00:00
Hubert
5d40937200 Merge remote-tracking branch 'origin/dev' into issue-8408 2023-07-17 21:08:08 -03:00
Hubert
ad2945df15 Adding support for icons in the manifest.json. 2023-07-17 21:06:21 -03:00
renovate[bot]
1ecd6883d5 Update dependency react-native-gesture-handler to v2.11.0 (#8496)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-17 17:59:20 +01:00
Henry Heino
f89c6523e4 Chore: Fix failing CodeMirror test (#8494) 2023-07-17 17:12:35 +01:00
Joplin Bot
5c7b48fce1 Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-07-17 12:21:46 +00:00
Henry Heino
1e2e8ed099 Desktop: Fixes #8448: Merge changes from upstream turndown project (#8468) 2023-07-17 12:19:34 +01:00
Henry Heino
4d7399973e Desktop: Security: Close root electron window before unload: Prevent top-level redirection (#8478) 2023-07-17 12:13:01 +01:00
Henry Heino
2f8275be8c Mobile: Fixes #8381: Show warning if some items could not be decrypted (#8481) 2023-07-17 12:12:42 +01:00
Laurent Cozic
58e5b83648 Doc: Add sponsor 2023-07-17 11:36:21 +01:00
renovate[bot]
49e3f01a0a Update dependency pg to v8.11.1 (#8492)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-16 18:29:15 +00:00
Laurent Cozic
f64305e858 Desktop release v2.12.8 2023-07-16 17:56:40 +01:00
Laurent Cozic
0470a3168c Chore: cleanup 2023-07-16 17:48:13 +01:00
Laurent Cozic
77482a0c95 All: Add support for share permissions (#8491) 2023-07-16 17:42:42 +01:00
Joplin Bot
b5193e1174 Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-07-16 12:19:18 +00:00
Laurent Cozic
1d709a3b5c Tools: Check for files that should have been ignored on pre-commit 2023-07-16 11:52:42 +01:00
Laurent Cozic
cc4e69bf92 gitignore 2023-07-16 11:31:52 +01:00
renovate[bot]
4cf6d12704 Update dependency react-native-localize to v3.0.1 (#8484)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-15 12:34:58 +00:00
Henry Heino
7c52c3e9a8 Desktop: Security: Disallow map and area tags (#8479) 2023-07-15 11:56:12 +01:00
Laurent Cozic
68ffdc5c0f Server: By default, sort user deletion in descending order 2023-07-15 11:52:35 +01:00
cajhin
8d32cc794e Doc: Update conflict.md - how to resolve conflicts (#8470) 2023-07-15 11:46:30 +01:00
Joplin Bot
8d3f60ed1f Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-07-14 18:17:39 +00:00
Henry Heino
05395781cc Chore: Mobile: Fixes #8456: Upgrade react-native-reanimated (#8457)
Co-authored-by: Laurent Cozic <laurent22@users.noreply.github.com>
2023-07-14 14:42:36 +01:00
Hubert
33ba934937 All: Resolves #5521: Rotating log files (#8376)
Co-authored-by: Laurent Cozic <laurent22@users.noreply.github.com>
2023-07-14 14:24:25 +01:00
renovate[bot]
f4019dbcd3 Update dependency madge to v6.1.0 (#8475)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-14 10:06:55 +01:00
Joplin Bot
ffc40b2797 Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-07-13 18:18:29 +00:00
Laurent Cozic
7a780e3087 CI: Disable signing macOS app on non-release commits 2023-07-13 19:10:04 +01:00
github-actions[bot]
712efe357e @cajhin has signed the CLA in laurent22/joplin#8470 2023-07-13 17:55:37 +00:00
Laurent Cozic
49638774f0 CI: Only generate DMG for ARM64 version 2023-07-13 13:47:18 +01:00
Laurent Cozic
04f8e96297 Desktop release v2.12.7 2023-07-13 13:09:13 +01:00
Laurent Cozic
4116f3d55b Chore: Desktop: Fixed building of M1 release 2023-07-13 13:08:55 +01:00
Laurent Cozic
99d99b9d85 Desktop release v2.12.6 2023-07-13 11:37:14 +01:00
Noah Nash
16b7969f78 Desktop: Fixes #6052: Create ARM64 function for cross-compile support (#8452)
Co-authored-by: Laurent Cozic <laurent22@users.noreply.github.com>
2023-07-13 11:29:15 +01:00
Laurent Cozic
15ae42be1d Server v2.12.1 2023-07-13 11:24:23 +01:00
renovate[bot]
0f1412fb46 Update dependency tap to v16.3.7 (#8463)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-13 01:52:57 +00:00
Joplin Bot
450f18dfbf Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-07-12 18:17:10 +00:00
renovate[bot]
e703c70b70 Update dependency css-loader to v6.8.1 (#8426)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-12 19:02:23 +01:00
renovate[bot]
ee4b79129f Update dependency react-native-drawer-layout to v3.2.1 (#8458)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-12 17:11:37 +00:00
Laurent Cozic
42e4c9ff89 typo 2023-07-12 16:57:36 +01:00
Henry Heino
a354feb626 Desktop: Resolves #8258: Upgrade to Electron 25 (#8451) 2023-07-12 16:00:30 +01:00
Laurent Cozic
c0fe29ec82 CI: Fixed M1 config 2023-07-12 15:44:14 +01:00
Laurent Cozic
7c4b12200b Desktop release v2.12.5 2023-07-12 15:18:53 +01:00
Laurent Cozic
1abfb1cb0e Desktop: Fixed macOS version check so that it does not return the ARM64 version 2023-07-12 15:18:05 +01:00
Laurent Cozic
9ae4401564 Doc: Fix brand guideline colours 2023-07-12 14:45:44 +01:00
Henry Heino
d95d6733a1 Chore: Refactor InteropService to not use dynamic imports (#8454) 2023-07-12 10:30:38 +01:00
github-actions[bot]
93e4004033 @noah-nash has signed the CLA in laurent22/joplin#8452 2023-07-11 23:36:51 +00:00
Joplin Bot
baabd1cbbd Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-07-11 18:19:11 +00:00
Laurent Cozic
dbb7df138e Doc: Remove 32-bit Android release, and fixed readme auto-update 2023-07-11 18:37:43 +01:00
Laurent Cozic
0690f7354f lock files 2023-07-11 17:09:40 +01:00
Laurent Cozic
004d2a1d9e Desktop: Quickly synchronise immediately after changing a note 2023-07-11 14:00:29 +01:00
Laurent Cozic
733c2dc878 Doc: Add release notes 2.11 2023-07-11 13:51:48 +01:00
Rob Moffat
0071a05a6c Desktop, CLI: Allow importing Evernote task lists (#8440) 2023-07-11 13:39:49 +01:00
renovate[bot]
7e53a41a30 Update dependency react-native-safe-area-context to v4.5.5 (#8450)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-11 10:57:10 +00:00
Laurent Cozic
32db9c814b Chore: Fix M1 CI 2023-07-11 09:58:05 +01:00
Laurent Cozic
0d44234452 Update build-macos-m1.yml 2023-07-11 09:55:46 +01:00
qx100
d55caad8d6 Updated Simplified Chinese translation (#8437) 2023-07-10 12:04:41 +01:00
Henry Heino
1691180790 Desktop: Fixes #6822: Fix extra lines added to KaTeX source when toggling the rich text editor (#8442) 2023-07-10 12:03:52 +01:00
Henry Heino
7ef591f3a8 Desktop: Fixes #8256: Don't start window minimized in GNOME (#8441) 2023-07-10 11:59:09 +01:00
github-actions[bot]
383e9d4e46 @robmoffat has signed the CLA in laurent22/joplin#8440 2023-07-10 08:52:35 +00:00
renovate[bot]
d2b64f9af0 Update dependency standard to v17.1.0 (#8439)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-09 17:54:54 +01:00
renovate[bot]
da192e718e Update dependency react-native-reanimated to v3.2.0 (#8438)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-09 15:49:34 +01:00
github-actions[bot]
cc4e65cee4 @laurent22 has signed the CLA in laurent22/joplin#8437 2023-07-09 13:17:03 +00:00
Laurent Cozic
4c5837b85b Desktop: Prevent app from crashing when changing screens
Ref: https://github.com/laurent22/joplin/issues/6052#issuecomment-1627528277
2023-07-09 14:12:41 +01:00
Laurent Cozic
ecd79ef7e4 CI: Do no publish M1 app on pull requests 2023-07-09 11:20:21 +01:00
Laurent Cozic
a6f22bb7a9 Doc: Fixed Android APK links 2023-07-09 10:44:23 +01:00
Joplin Bot
cde7b4d4f6 Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-07-08 00:46:25 +00:00
Laurent Cozic
dabcd3d946 Desktop release v2.12.4 2023-07-07 16:16:01 +01:00
Laurent Cozic
a547ff1ca5 Desktop: Resolves #6052: Build macOS app as Universal binary 2023-07-07 16:02:59 +01:00
Joplin Bot
f12984b38e Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-07-07 12:20:36 +00:00
Laurent Cozic
6962db7b2f Desktop release v2.12.3 2023-07-07 10:11:57 +01:00
Laurent Cozic
050d9fa794 Desktop: Resolves #6052: Build macOS app as Universal binary 2023-07-07 10:11:29 +01:00
Joplin Bot
9c71523546 Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-07-07 00:50:37 +00:00
renovate[bot]
10eebad566 Update dependency react-native-gesture-handler to v2.10.2 (#8424)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-07 00:33:13 +00:00
renovate[bot]
5405b05792 Update dependency react-native-gesture-handler to v2.10.1 (#8422)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-06 23:09:56 +01:00
Laurent Cozic
bb47b1ec8d Desktop release v2.12.2 2023-07-06 23:01:58 +01:00
Laurent Cozic
32043caabf CI: Trying to build macOS M1 version 2023-07-06 23:01:42 +01:00
Laurent Cozic
a58d1d040c Desktop release v2.12.1 2023-07-06 21:58:48 +01:00
Laurent Cozic
2e7996152e Desktop: Resolves #6052: Build macOS app as Universal binary (#8423) 2023-07-06 21:58:22 +01:00
Laurent Cozic
d5e583aba3 Doc: Fixed brand guidelines 2023-07-06 21:23:51 +01:00
Laurent Cozic
f27b21cc68 lock file 2023-07-06 20:47:59 +01:00
Laurent Cozic
244d204332 Chore: Fixed type 2023-07-06 20:41:03 +01:00
Henry Heino
b15c81fef8 Mobile: Fixes #7918: Unrevert #7953: Migrate to react-native-drawer-layout (#8379) 2023-07-06 19:18:43 +01:00
Henry Heino
28923a69b2 Chore: Resolves #8360: Use @typescript-eslint/indent for TypeScript files (#8367) 2023-07-06 19:17:41 +01:00
Letty
e21a5c1b80 Mobile: Fixes #8027: Fixed link modal position on devices with notch (#8029) 2023-07-06 19:03:57 +01:00
Laurent Cozic
e278a26dc8 Renovate ignore immer 2023-07-06 18:24:19 +01:00
renovate[bot]
2eac0078cd Update dependency react-native-image-picker to v5.4.2 (#8417)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-05 17:51:42 +00:00
Laurent Cozic
3fa6ce4583 Doc: Add brand guidelines 2023-07-05 15:19:47 +01:00
Laurent Cozic
7d218ca5b2 Doc: Add brand guidelines 2023-07-05 15:18:29 +01:00
renovate[bot]
721a37a377 Update dependency react-native-image-picker to v5.4.0 (#8416)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-05 13:20:29 +01:00
renovate[bot]
5600c498d8 Update dependency @rmp135/sql-ts to v1.17.0 (#8414)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-05 12:27:07 +01:00
Henry Heino
8eba798cdd Chore: Fix search filter tests in non UTC+0 timezones (#8411) 2023-07-04 18:56:06 +01:00
Laurent Cozic
0c76b731e7 Tools: Apply prefer-regex-literals eslint rule 2023-07-03 17:15:19 +01:00
Joplin Bot
2289e3297a Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-07-03 13:29:46 +00:00
github-actions[bot]
51fbb38f66 @hubertfilho has signed the CLA in laurent22/joplin#8376 2023-07-03 13:24:41 +00:00
Laurent Cozic
86aaa7f478 lock file 2023-07-03 13:28:40 +01:00
Laurent Cozic
c5c9d3a2ef Merge branch 'release-2.11' into dev 2023-07-03 13:14:33 +01:00
Laurent Cozic
1118fef164 Android 2.11.32 2023-07-03 13:08:52 +01:00
Laurent Cozic
e0ea76c9f1 Update translations 2023-07-03 12:26:33 +01:00
Laurent Cozic
2aab85f073 Android: Allow configuring voice typing model URL 2023-07-03 12:25:50 +01:00
Laurent Cozic
dfbe628944 Chore: Fixed asset order 2023-07-02 17:48:29 +01:00
Laurent Cozic
bc35649dda Chore: Disable warning in tests 2023-07-02 17:45:52 +01:00
Joplin Bot
09c6c81992 Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-07-02 06:16:25 +00:00
Joplin Bot
cf98f6a450 Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-07-02 00:49:06 +00:00
renovate[bot]
9e56bc72a3 Update dependency url to v0.11.1 (#8404)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-01 13:42:08 +00:00
Laurent Cozic
85b9fe06e4 Chore: Fixed buildCommandIndex 2023-07-01 12:56:34 +01:00
Laurent Cozic
e91e38c4e6 Server: Add yarn patches to Docker image 2023-07-01 12:52:30 +01:00
Joplin Bot
fbf2fef17c Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-07-01 00:51:33 +00:00
Laurent Cozic
3080575a17 Fixed tests 2023-06-30 16:23:05 +01:00
Laurent Cozic
10b9df7b9f Revert update of clean-html package 2023-06-30 13:13:45 +01:00
Laurent Cozic
dd6eec6a03 Tools: Apply rule @typescript-eslint/ban-types 2023-06-30 10:30:29 +01:00
Laurent Cozic
48ef6db4a5 Tools: Apply @typescript-eslint/ban-ts-comment rule 2023-06-30 10:22:47 +01:00
Laurent Cozic
7591a1182e Tools: Apply eslint rule multiline-comment-style with checkJSDoc option 2023-06-30 09:55:56 +01:00
Laurent Cozic
0c4ba592f6 Tools: Apply rule github/array-foreach 2023-06-30 09:39:21 +01:00
Laurent Cozic
c6a15b3186 Tools: Add eslint rule @typescript-eslint/array-type 2023-06-30 09:16:08 +01:00
Laurent Cozic
e89b59be8e Tools: Apply eslint rule @typescript-eslint/no-inferrable-types with ignoreArguments=false 2023-06-30 09:11:26 +01:00
Laurent Cozic
315f071337 Tools: Apply eslint rule @typescript-eslint/no-inferrable-types with ignoreProperties=false 2023-06-30 09:07:03 +01:00
renovate[bot]
667bb19765 Update dependency clean-html to v2 (#8398)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-30 08:21:12 +01:00
github-actions[bot]
21d09e44c4 @wljince007 has signed the CLA in laurent22/joplin#8391 2023-06-30 06:18:16 +00:00
renovate[bot]
d36c3069c3 Update dependency glob to v10.2.7 (#8395)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-29 22:50:11 +00:00
Joplin Bot
ab0747693d Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-06-29 18:20:22 +00:00
renovate[bot]
e322699829 Update dependency glob to v10.2.5 (#8392)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-29 18:55:03 +01:00
Laurent Cozic
220803d478 Doc: Added guiding principles 2023-06-29 13:55:26 +01:00
Laurent Cozic
78d558f72e Doc: Added sponsor 2023-06-29 13:55:25 +01:00
renovate[bot]
3c7dc9f11c Update dependency glob to v10 (#8386)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-29 13:34:43 +01:00
renovate[bot]
a8a8452d21 Update dependency yeoman-generator to v5.9.0 (#8385)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-29 12:56:41 +01:00
Laurent Cozic
9f5924984c Plugin Generator release v2.12.1 2023-06-28 15:13:26 +01:00
Laurent Cozic
6db5723a50 Setup new release 2.12 2023-06-28 15:12:32 +01:00
Laurent Cozic
1d0bcc435b Generator: Updated doc 2023-06-28 14:49:19 +01:00
Laurent Cozic
700158d83c Generator: Fixed incompatbility with latest Yeoman version 2023-06-28 14:48:52 +01:00
Laurent Cozic
df4e8c9f47 Generator: Add script updateVersion to update both manifest and package version numbers 2023-06-28 14:48:04 +01:00
renovate[bot]
ce6baccd82 Update dependency react-native-modal-datetime-picker to v15.0.1 (#8378)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-28 01:58:38 +00:00
renovate[bot]
0caf1fdd7b Update dependency react-native-modal-datetime-picker to v15 (#8377)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-27 22:03:22 +01:00
Laurent Cozic
adf1c5496e Lock file 2023-06-27 15:05:56 +01:00
Laurent Cozic
51b294e66b Releasing sub-packages 2023-06-27 15:05:03 +01:00
Laurent Cozic
893accf59c fix dep 2023-06-27 15:02:14 +01:00
renovate[bot]
2a10cd3333 Update dependency react-native-get-random-values to v1.9.0 (#8372)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-27 10:36:20 +01:00
Laurent Cozic
3ec257abc3 Plugin Generator release v2.11.1 2023-06-27 10:34:50 +01:00
Laurent Cozic
295756a528 Merge branch 'release-2.11' into dev 2023-06-27 10:33:22 +01:00
Laurent Cozic
5603900fc2 CLI v2.11.1 2023-06-27 10:29:24 +01:00
Laurent Cozic
e1195f7370 Lock file 2023-06-27 10:25:21 +01:00
Laurent Cozic
5625b15cb5 Releasing sub-packages 2023-06-27 10:24:24 +01:00
Arda Kılıçdağı
af4147ed58 All: Translation: Update tr_TR.po (#8368) 2023-06-27 02:53:18 -04:00
Harris Arvanitis
9e10261e0b All: Translation: Update el_GR.po (#8357) 2023-06-27 02:51:29 -04:00
Joplin Bot
487fecb16e Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-06-26 12:21:51 +00:00
Laurent Cozic
e0ce301c3f lock file 2023-06-26 13:00:45 +01:00
Laurent Cozic
bb474287e5 Merge branch 'release-2.11' into dev 2023-06-26 12:17:23 +01:00
pedr
583ae0385b Desktop: Fixes #8317: Removing Markdown when using 'Paste as Text' (#8351) 2023-06-26 12:00:47 +01:00
renovate[bot]
35a4eef87b Update dependency @electron/remote to v2.0.10 (#8365)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-26 02:20:40 +00:00
Laurent Cozic
e46ecdcb2b Android 2.11.31 2023-06-25 15:28:47 +01:00
Laurent Cozic
6036420bc6 iOS 12.11.5 2023-06-25 15:06:29 +01:00
Laurent Cozic
cd73661200 lock file 2023-06-25 14:52:55 +01:00
Laurent Cozic
5dbadbbff6 iOS 12.11.4 2023-06-25 14:07:09 +01:00
Laurent Cozic
2dc02fe0f2 All: Resolves #7686: Upgrade E2EE encryption method to AES-256 2023-06-25 14:04:42 +01:00
renovate[bot]
a474b403f9 Update dependency tap to v16.3.6 (#8359)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-25 00:50:38 +00:00
renovate[bot]
e9a8475ecf Update dependency pg to v8.11.0 (#8358)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-24 22:43:09 +01:00
github-actions[bot]
0f9bdf1ca0 @XarisA has signed the CLA in laurent22/joplin#8357 2023-06-23 20:43:15 +00:00
Joplin Bot
a7781f2a6b Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-06-23 18:17:44 +00:00
Laurent Cozic
71144bb675 Tools: Fixed buildPluginDoc command 2023-06-23 18:18:25 +01:00
Laurent Cozic
6886f6fd39 Desktop release v2.11.11 2023-06-23 15:10:56 +01:00
Laurent Cozic
83610c01c0 Tools: Switch to @electron/notarize 2023-06-23 15:10:05 +01:00
Laurent Cozic
5b18edc8be Desktop release v2.11.10 2023-06-23 14:24:54 +01:00
Laurent Cozic
671fa542b4 Tools: Switch to @electron/notarize 2023-06-23 14:20:47 +01:00
pedr
4e4685b039 Tools: Creating a vscode configuration for debugging the server project (#8322) 2023-06-23 12:49:54 +01:00
renovate[bot]
e4023a349f Update dependency dayjs to v1.11.8 (#8355)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-22 15:28:00 +00:00
renovate[bot]
e7c37d17c1 Update dependency jquery to v3.7.0 (#8348)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-21 12:59:31 +01:00
Joplin Bot
d6c2b64a43 Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-06-21 00:43:17 +00:00
Joplin Bot
10e49d8cd3 Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-06-20 18:12:08 +00:00
Laurent Cozic
95d83a8ced Android 2.11.30 2023-06-20 17:51:05 +01:00
renovate[bot]
6b00c4e6ce Update dependency @react-native-community/datetimepicker to v7.1.0 (#8347)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-20 17:35:14 +01:00
Laurent Cozic
dc2def403c Tools: Only build one Android version 2023-06-20 16:14:48 +01:00
Laurent Cozic
89e2603f02 Android 2.11.29 2023-06-20 16:13:02 +01:00
Joplin Bot
35e03e2ad9 Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-06-20 15:41:48 +01:00
Laurent Cozic
12e853b871 Doc: Update French translation 2023-06-20 15:41:39 +01:00
Laurent Cozic
5841596acb Android: Add support for Voice Typing for most languages (#8309) 2023-06-20 15:41:22 +01:00
Laurent Cozic
377e35b1af Mobile: Improved Vosk error handling 2023-06-20 15:33:53 +01:00
Laurent Cozic
a3181d4458 v28 2023-06-20 15:33:15 +01:00
Laurent Cozic
e057c7beea Tools: Only build one Android version 2023-06-20 15:31:58 +01:00
Laurent Cozic
60c25f88cf Chore: Server: Refactor error codes 2023-06-20 10:43:51 +01:00
Laurent Cozic
d532b9dffc Server v2.11.2 2023-06-20 09:41:19 +01:00
renovate[bot]
5a2310ff4d Update dependency react-redux to v8.0.7 (#8346)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-20 05:20:21 +00:00
Joplin Bot
472120d5ec Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-06-20 00:40:08 +00:00
Laurent Cozic
9de83bf922 Revert formidable update 2023-06-19 19:40:08 +01:00
Joplin Bot
96bd76e45e Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-06-19 18:15:15 +00:00
pedr
5564e2178a CI: Add a step to check if the Docker image is accepting HTTP requests (#8336) 2023-06-19 17:06:22 +01:00
renovate[bot]
9eb643f8f7 Update dependency formidable to v3 (#8334)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-19 17:02:25 +01:00
renovate[bot]
c2bdaddcec Update dependency nodemailer to v6.9.3 (#8338)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-18 12:53:27 +00:00
Laurent Cozic
17888a2da0 Server: Improve performance and reliability when adding an item 2023-06-18 10:38:54 +01:00
renovate[bot]
eda18c3860 Update dependency formidable to v2.1.2 (#8333)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-16 15:36:32 +01:00
Laurent Cozic
878bf13a0e Chore: Server: Convert migrations to arrow functions 2023-06-16 10:14:01 +01:00
Laurent Cozic
a8c21b2477 lock file 2023-06-16 10:03:47 +01:00
Laurent Cozic
b85bd8d296 Renovate ignore 2023-06-16 10:03:31 +01:00
Laurent Cozic
eb6d5690aa Renovate ignore 2023-06-16 09:26:16 +01:00
renovate[bot]
ebe00ea58b Update dependency react-redux to v8 (#8328)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-16 09:23:23 +01:00
renovate[bot]
e14a0b54f5 Update dependency styled-components to v5.3.11 (#8324)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-16 04:20:55 +00:00
renovate[bot]
2f0f63e2b1 Update dependency @react-native-community/geolocation to v3.0.6 (#8325)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-16 00:31:15 +00:00
Laurent Cozic
048100ebb3 renovate 2023-06-15 23:16:57 +01:00
Laurent Cozic
7880d07868 Renovate ignore 2023-06-15 23:16:56 +01:00
renovate[bot]
9ba42b7919 Update dependency domhandler to v5 (#8321)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-15 22:06:26 +01:00
renovate[bot]
fcc7ed3ed4 Update dependency @react-native-community/geolocation to v3 (#8320)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-15 21:38:29 +01:00
renovate[bot]
c000d4f4b3 Update dependency @koa/cors to v4 (#8319)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-15 21:37:11 +01:00
Laurent Cozic
6e0c484441 Doc: Fixed layout 2023-06-15 19:10:33 +01:00
Laurent Cozic
753a25a5e1 Fix tests 2023-06-14 17:45:13 +01:00
Laurent Cozic
57b4198d2c All: Security: Prevent XSS when passing specially encoded string to a link 2023-06-14 16:55:54 +01:00
Laurent Cozic
2078fa4e40 Fix tests 2023-06-14 15:59:20 +01:00
Laurent Cozic
69826610a2 Desktop: Security: Prevent calling arbitrary commands via x-callback-url 2023-06-14 15:51:35 +01:00
Laurent Cozic
0f9727144f Desktop: Fixes #8316: Include more Rich Text editor commands in the menu 2023-06-14 14:57:12 +01:00
Joplin Bot
11355bfdc5 Doc: Auto-update documentation
Auto-updated using release-website.sh
2023-06-13 18:14:50 +00:00
Laurent Cozic
4d08d7385f Tools: Do not lock pull requests after merging 2023-06-13 18:08:32 +01:00
Laurent Cozic
ce7da882ee Android: Add support for Voice Typing for most languages (#8309) 2023-06-13 18:06:54 +01:00
Laurent Cozic
92c68882e2 Desktop: Resolves #8080: Add support for plugin user data (#8312) 2023-06-13 18:06:16 +01:00
renovate[bot]
6424832984 Update dependency ts-loader to v9.4.3 (#8311)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-12 20:47:12 +00:00
710 changed files with 32001 additions and 9959 deletions

View File

@@ -82,8 +82,8 @@ packages/app-cli/app/LinkSelector.js
packages/app-cli/app/base-command.js
packages/app-cli/app/command-done.test.js
packages/app-cli/app/command-e2ee.js
packages/app-cli/app/command-mkbook.js
packages/app-cli/app/command-mkbook.test.js
packages/app-cli/app/command-mkbook.js
packages/app-cli/app/command-settingschema.js
packages/app-cli/app/command-sync.js
packages/app-cli/app/command-testing.js
@@ -92,6 +92,7 @@ packages/app-cli/app/services/plugins/PluginRunner.js
packages/app-cli/app/setupCommand.js
packages/app-cli/app/utils/testUtils.js
packages/app-cli/tests/HtmlToMd.js
packages/app-cli/tests/MarkupToHtml.js
packages/app-cli/tests/MdToHtml.js
packages/app-cli/tests/services/keychain/KeychainService.js
packages/app-cli/tests/services/plugins/PluginService.js
@@ -105,9 +106,9 @@ packages/app-cli/tests/testUtils.js
packages/app-cli/tools/populateDatabase.js
packages/app-desktop/ElectronAppWrapper.js
packages/app-desktop/InteropServiceHelper.js
packages/app-desktop/app.js
packages/app-desktop/app.reducer.js
packages/app-desktop/app.reducer.test.js
packages/app-desktop/app.reducer.js
packages/app-desktop/app.js
packages/app-desktop/bridge.js
packages/app-desktop/checkForUpdates.js
packages/app-desktop/commands/copyDevCommand.js
@@ -135,13 +136,14 @@ packages/app-desktop/gui/ConfigScreen/Sidebar.js
packages/app-desktop/gui/ConfigScreen/controls/plugins/PluginBox.js
packages/app-desktop/gui/ConfigScreen/controls/plugins/PluginsStates.js
packages/app-desktop/gui/ConfigScreen/controls/plugins/SearchPlugins.js
packages/app-desktop/gui/ConfigScreen/controls/plugins/useOnInstallHandler.js
packages/app-desktop/gui/ConfigScreen/controls/plugins/useOnInstallHandler.test.js
packages/app-desktop/gui/ConfigScreen/controls/plugins/useOnInstallHandler.js
packages/app-desktop/gui/Dialog.js
packages/app-desktop/gui/DialogButtonRow.js
packages/app-desktop/gui/DialogButtonRow/useKeyboardHandler.js
packages/app-desktop/gui/DialogTitle.js
packages/app-desktop/gui/DropboxLoginScreen.js
packages/app-desktop/gui/Dropdown/Dropdown.js
packages/app-desktop/gui/EditFolderDialog/Dialog.js
packages/app-desktop/gui/EditFolderDialog/IconSelector.js
packages/app-desktop/gui/EmojiBox.js
@@ -153,6 +155,7 @@ packages/app-desktop/gui/HelpButton.js
packages/app-desktop/gui/IconButton.js
packages/app-desktop/gui/ImportScreen.js
packages/app-desktop/gui/ItemList.js
packages/app-desktop/gui/JoplinCloudConfigScreen.js
packages/app-desktop/gui/KeymapConfig/KeymapConfigScreen.js
packages/app-desktop/gui/KeymapConfig/ShortcutRecorder.js
packages/app-desktop/gui/KeymapConfig/styles/index.js
@@ -162,6 +165,9 @@ packages/app-desktop/gui/KeymapConfig/utils/useKeymap.js
packages/app-desktop/gui/MainScreen/MainScreen.js
packages/app-desktop/gui/MainScreen/commands/addProfile.js
packages/app-desktop/gui/MainScreen/commands/commandPalette.js
packages/app-desktop/gui/MainScreen/commands/deleteFolder.js
packages/app-desktop/gui/MainScreen/commands/deleteNote.js
packages/app-desktop/gui/MainScreen/commands/duplicateNote.js
packages/app-desktop/gui/MainScreen/commands/editAlarm.js
packages/app-desktop/gui/MainScreen/commands/exportPdf.js
packages/app-desktop/gui/MainScreen/commands/gotoAnything.js
@@ -196,6 +202,7 @@ packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.js
packages/app-desktop/gui/MainScreen/commands/toggleEditors.js
packages/app-desktop/gui/MainScreen/commands/toggleLayoutMoveMode.js
packages/app-desktop/gui/MainScreen/commands/toggleNoteList.js
packages/app-desktop/gui/MainScreen/commands/toggleNoteType.js
packages/app-desktop/gui/MainScreen/commands/toggleNotesSortOrderField.js
packages/app-desktop/gui/MainScreen/commands/toggleNotesSortOrderReverse.js
packages/app-desktop/gui/MainScreen/commands/togglePerFolderSortOrder.js
@@ -212,8 +219,8 @@ packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.js
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/styles/index.js
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/index.js
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.test.js
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useExternalPlugins.js
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinCommands.js
@@ -225,6 +232,7 @@ packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollHandler.j
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.js
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/styles/index.js
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/joplinCommandToTinyMceCommands.js
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/openEditDialog.js
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/setupToolbarButtons.js
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/types.js
@@ -240,8 +248,8 @@ packages/app-desktop/gui/NoteEditor/commands/showLocalSearch.js
packages/app-desktop/gui/NoteEditor/commands/showRevisions.js
packages/app-desktop/gui/NoteEditor/editorCommandDeclarations.js
packages/app-desktop/gui/NoteEditor/styles/index.js
packages/app-desktop/gui/NoteEditor/utils/clipboardUtils.js
packages/app-desktop/gui/NoteEditor/utils/clipboardUtils.test.js
packages/app-desktop/gui/NoteEditor/utils/clipboardUtils.js
packages/app-desktop/gui/NoteEditor/utils/contextMenu.js
packages/app-desktop/gui/NoteEditor/utils/contextMenuUtils.js
packages/app-desktop/gui/NoteEditor/utils/index.js
@@ -282,17 +290,17 @@ packages/app-desktop/gui/ResizableLayout/utils/findItemByKey.js
packages/app-desktop/gui/ResizableLayout/utils/isTempContainer.js
packages/app-desktop/gui/ResizableLayout/utils/iterateItems.js
packages/app-desktop/gui/ResizableLayout/utils/layoutItemProp.js
packages/app-desktop/gui/ResizableLayout/utils/movements.js
packages/app-desktop/gui/ResizableLayout/utils/movements.test.js
packages/app-desktop/gui/ResizableLayout/utils/persist.js
packages/app-desktop/gui/ResizableLayout/utils/movements.js
packages/app-desktop/gui/ResizableLayout/utils/persist.test.js
packages/app-desktop/gui/ResizableLayout/utils/persist.js
packages/app-desktop/gui/ResizableLayout/utils/removeItem.js
packages/app-desktop/gui/ResizableLayout/utils/removeKeylessItems.js
packages/app-desktop/gui/ResizableLayout/utils/setLayoutItemProps.js
packages/app-desktop/gui/ResizableLayout/utils/style.js
packages/app-desktop/gui/ResizableLayout/utils/types.js
packages/app-desktop/gui/ResizableLayout/utils/useLayoutItemSizes.js
packages/app-desktop/gui/ResizableLayout/utils/useLayoutItemSizes.test.js
packages/app-desktop/gui/ResizableLayout/utils/useLayoutItemSizes.js
packages/app-desktop/gui/ResizableLayout/utils/useWindowResizeEvent.js
packages/app-desktop/gui/ResizableLayout/utils/validateLayout.js
packages/app-desktop/gui/ResourceScreen.js
@@ -351,11 +359,14 @@ packages/app-desktop/services/plugins/hooks/useViewIsReady.js
packages/app-desktop/services/plugins/hooks/useWebviewToPluginMessages.js
packages/app-desktop/services/restart.js
packages/app-desktop/services/share/invitationRespond.js
packages/app-desktop/services/sortOrder/PerFolderSortOrderService.js
packages/app-desktop/services/sortOrder/PerFolderSortOrderService.test.js
packages/app-desktop/services/sortOrder/notesSortOrderUtils.js
packages/app-desktop/services/sortOrder/PerFolderSortOrderService.js
packages/app-desktop/services/sortOrder/notesSortOrderUtils.test.js
packages/app-desktop/services/sortOrder/notesSortOrderUtils.js
packages/app-desktop/services/spellChecker/SpellCheckerServiceDriverNative.js
packages/app-desktop/tools/notarizeMacApp.js
packages/app-desktop/utils/checkForUpdatesUtils.test.js
packages/app-desktop/utils/checkForUpdatesUtils.js
packages/app-desktop/utils/markupLanguageUtils.js
packages/app-mobile/PluginAssetsLoader.js
packages/app-mobile/components/ActionButton.js
@@ -365,21 +376,22 @@ packages/app-mobile/components/CustomButton.js
packages/app-mobile/components/Dropdown.js
packages/app-mobile/components/ExtendedWebView.js
packages/app-mobile/components/FolderPicker.js
packages/app-mobile/components/Modal.js
packages/app-mobile/components/NoteBodyViewer/NoteBodyViewer.js
packages/app-mobile/components/NoteBodyViewer/hooks/useOnMessage.js
packages/app-mobile/components/NoteBodyViewer/hooks/useOnResourceLongPress.js
packages/app-mobile/components/NoteBodyViewer/hooks/useSource.js
packages/app-mobile/components/NoteEditor/CodeMirror/CodeMirror.js
packages/app-mobile/components/NoteEditor/CodeMirror/CodeMirror.test.js
packages/app-mobile/components/NoteEditor/CodeMirror/CodeMirror.js
packages/app-mobile/components/NoteEditor/CodeMirror/decoratorExtension.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownCommands.bulletedVsChecklist.test.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownCommands.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownCommands.test.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownCommands.toggleList.test.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownMathParser.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownCommands.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownMathParser.test.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownReformatter.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownMathParser.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownReformatter.test.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownReformatter.js
packages/app-mobile/components/NoteEditor/CodeMirror/syntaxHighlightingLanguages.js
packages/app-mobile/components/NoteEditor/CodeMirror/testUtil/createEditor.js
packages/app-mobile/components/NoteEditor/CodeMirror/testUtil/forceFullParse.js
@@ -405,15 +417,19 @@ packages/app-mobile/components/ProfileSwitcher/ProfileSwitcher.js
packages/app-mobile/components/ProfileSwitcher/useProfileConfig.js
packages/app-mobile/components/ScreenHeader.js
packages/app-mobile/components/SelectDateTimeDialog.js
packages/app-mobile/components/SideMenu.js
packages/app-mobile/components/TextInput.js
packages/app-mobile/components/app-nav.js
packages/app-mobile/components/biometrics/BiometricPopup.js
packages/app-mobile/components/biometrics/biometricAuthenticate.js
packages/app-mobile/components/biometrics/sensorInfo.js
packages/app-mobile/components/getResponsiveValue.js
packages/app-mobile/components/getResponsiveValue.test.js
packages/app-mobile/components/screens/ConfigScreen.js
packages/app-mobile/components/getResponsiveValue.js
packages/app-mobile/components/screens/ConfigScreen/ConfigScreen.js
packages/app-mobile/components/screens/ConfigScreen/ConfigScreenButton.js
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/NoteExportButton.test.js
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/NoteExportButton.js
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/exportAllFolders.js
packages/app-mobile/components/screens/ConfigScreen/configScreenStyles.js
packages/app-mobile/components/screens/Note.js
packages/app-mobile/components/screens/Notes.js
packages/app-mobile/components/screens/UpgradeSyncTargetScreen.js
@@ -434,6 +450,7 @@ packages/app-mobile/tools/buildInjectedJs.js
packages/app-mobile/utils/ShareExtension.js
packages/app-mobile/utils/ShareUtils.js
packages/app-mobile/utils/TlsUtils.js
packages/app-mobile/utils/autodetectTheme.js
packages/app-mobile/utils/checkPermissions.js
packages/app-mobile/utils/createRootStyle.js
packages/app-mobile/utils/debounce.js
@@ -442,19 +459,19 @@ packages/app-mobile/utils/setupNotifications.js
packages/app-mobile/utils/shareHandler.js
packages/app-mobile/utils/types.js
packages/fork-htmlparser2/src/CollectingHandler.js
packages/fork-htmlparser2/src/FeedHandler.js
packages/fork-htmlparser2/src/FeedHandler.spec.js
packages/fork-htmlparser2/src/FeedHandler.js
packages/fork-htmlparser2/src/MultiplexHandler.js
packages/fork-htmlparser2/src/Parser.js
packages/fork-htmlparser2/src/Parser.spec.js
packages/fork-htmlparser2/src/Parser.js
packages/fork-htmlparser2/src/Tokenizer.js
packages/fork-htmlparser2/src/WritableStream.js
packages/fork-htmlparser2/src/WritableStream.spec.js
packages/fork-htmlparser2/src/WritableStream.js
packages/fork-htmlparser2/src/__fixtures__/test-helper.js
packages/fork-htmlparser2/src/__tests__/events.js
packages/fork-htmlparser2/src/__tests__/stream.js
packages/fork-htmlparser2/src/index.js
packages/fork-htmlparser2/src/index.spec.js
packages/fork-htmlparser2/src/index.js
packages/generator-joplin/generators/app/templates/api/index.js
packages/generator-joplin/generators/app/templates/api/types.js
packages/generator-joplin/generators/app/templates/api_index.js
@@ -467,17 +484,19 @@ packages/lib/BaseModel.js
packages/lib/BaseSyncTarget.js
packages/lib/ClipperServer.js
packages/lib/CssUtils.js
packages/lib/EventDispatcher.js
packages/lib/EventDispatcher.test.js
packages/lib/EventDispatcher.js
packages/lib/HtmlToMd.js
packages/lib/InMemoryCache.js
packages/lib/InMemoryCache.test.js
packages/lib/InMemoryCache.js
packages/lib/JoplinDatabase.js
packages/lib/JoplinError.js
packages/lib/JoplinServerApi.js
packages/lib/Logger.js
packages/lib/ObjectUtils.js
packages/lib/PoorManIntervals.js
packages/lib/RotatingLogs.test.js
packages/lib/RotatingLogs.js
packages/lib/SyncTargetJoplinCloud.js
packages/lib/SyncTargetJoplinServer.js
packages/lib/SyncTargetNone.js
@@ -487,8 +506,8 @@ packages/lib/Synchronizer.js
packages/lib/TaskQueue.js
packages/lib/WelcomeUtils.js
packages/lib/array.js
packages/lib/callbackUrlUtils.js
packages/lib/callbackUrlUtils.test.js
packages/lib/callbackUrlUtils.js
packages/lib/commands/historyBackward.js
packages/lib/commands/historyForward.js
packages/lib/commands/index.js
@@ -496,12 +515,14 @@ packages/lib/commands/openMasterPasswordDialog.js
packages/lib/commands/synchronize.js
packages/lib/components/EncryptionConfigScreen/utils.js
packages/lib/components/shared/note-screen-shared.js
packages/lib/components/shared/reduxSharedMiddleware.js
packages/lib/database-driver-better-sqlite.js
packages/lib/database.js
packages/lib/debug/DebugService.js
packages/lib/dom.js
packages/lib/dummy.test.js
packages/lib/errorUtils.js
packages/lib/errors.js
packages/lib/eventManager.js
packages/lib/file-api-driver-joplinServer.js
packages/lib/file-api-driver-memory.js
@@ -514,41 +535,41 @@ packages/lib/geolocation-node.js
packages/lib/hooks/useAsyncEffect.js
packages/lib/hooks/useElementSize.js
packages/lib/hooks/useEventListener.js
packages/lib/htmlUtils.js
packages/lib/htmlUtils.test.js
packages/lib/htmlUtils.js
packages/lib/htmlUtils2.test.js
packages/lib/import-enex-md-gen.js
packages/lib/import-enex-md-gen.test.js
packages/lib/import-enex-md-gen.js
packages/lib/import-enex.js
packages/lib/locale.js
packages/lib/locale.test.js
packages/lib/markdownUtils.js
packages/lib/locale.js
packages/lib/markdownUtils.test.js
packages/lib/markdownUtils.js
packages/lib/markdownUtils2.test.js
packages/lib/markupLanguageUtils.js
packages/lib/migrations/42.js
packages/lib/models/Alarm.js
packages/lib/models/BaseItem.js
packages/lib/models/Folder.js
packages/lib/models/Folder.sharing.test.js
packages/lib/models/Folder.test.js
packages/lib/models/ItemChange.js
packages/lib/models/Folder.js
packages/lib/models/ItemChange.test.js
packages/lib/models/MasterKey.js
packages/lib/models/ItemChange.js
packages/lib/models/MasterKey.test.js
packages/lib/models/MasterKey.js
packages/lib/models/Migration.js
packages/lib/models/Note.js
packages/lib/models/Note.test.js
packages/lib/models/Note.js
packages/lib/models/NoteResource.js
packages/lib/models/NoteTag.js
packages/lib/models/Resource.js
packages/lib/models/Resource.test.js
packages/lib/models/Resource.js
packages/lib/models/ResourceLocalState.js
packages/lib/models/Revision.js
packages/lib/models/Revision.test.js
packages/lib/models/Revision.js
packages/lib/models/Search.js
packages/lib/models/Setting.js
packages/lib/models/Setting.test.js
packages/lib/models/Setting.js
packages/lib/models/SmartFilter.js
packages/lib/models/Tag.js
packages/lib/models/dateTimeFormats.test.js
@@ -556,19 +577,22 @@ packages/lib/models/settings/FileHandler.js
packages/lib/models/utils/itemCanBeEncrypted.js
packages/lib/models/utils/paginatedFeed.js
packages/lib/models/utils/paginationToSql.js
packages/lib/models/utils/readOnly.js
packages/lib/models/utils/types.js
packages/lib/models/utils/userData.test.js
packages/lib/models/utils/userData.js
packages/lib/net-utils.js
packages/lib/ntp.js
packages/lib/onedrive-api.js
packages/lib/path-utils.js
packages/lib/reducer.js
packages/lib/registry.js
packages/lib/registry.test.js
packages/lib/registry.js
packages/lib/services/AlarmService.js
packages/lib/services/AlarmServiceDriverNode.js
packages/lib/services/BaseService.js
packages/lib/services/CommandService.js
packages/lib/services/CommandService.test.js
packages/lib/services/CommandService.js
packages/lib/services/DecryptionWorker.js
packages/lib/services/ExternalEditWatcher.js
packages/lib/services/ExternalEditWatcher/utils.js
@@ -584,14 +608,14 @@ packages/lib/services/ReportService.js
packages/lib/services/ResourceEditWatcher/index.js
packages/lib/services/ResourceEditWatcher/reducer.js
packages/lib/services/ResourceFetcher.js
packages/lib/services/ResourceService.js
packages/lib/services/ResourceService.test.js
packages/lib/services/RevisionService.js
packages/lib/services/ResourceService.js
packages/lib/services/RevisionService.test.js
packages/lib/services/RevisionService.js
packages/lib/services/SettingUtils.js
packages/lib/services/UndoRedoService.js
packages/lib/services/WhenClause.js
packages/lib/services/WhenClause.test.js
packages/lib/services/WhenClause.js
packages/lib/services/commands/MenuUtils.js
packages/lib/services/commands/ToolbarButtonUtils.js
packages/lib/services/commands/commandsToMarkdownTable.js
@@ -602,38 +626,40 @@ packages/lib/services/commands/stateToWhenClauseContext.js
packages/lib/services/contextkey/contextkey.js
packages/lib/services/database/types.js
packages/lib/services/debug/populateDatabase.js
packages/lib/services/e2ee/EncryptionService.js
packages/lib/services/e2ee/EncryptionService.test.js
packages/lib/services/e2ee/EncryptionService.js
packages/lib/services/e2ee/RSA.node.js
packages/lib/services/e2ee/ppk.js
packages/lib/services/e2ee/ppk.test.js
packages/lib/services/e2ee/ppk.js
packages/lib/services/e2ee/ppkTestUtils.js
packages/lib/services/e2ee/types.js
packages/lib/services/e2ee/utils.js
packages/lib/services/e2ee/utils.test.js
packages/lib/services/interop/InteropService.js
packages/lib/services/e2ee/utils.js
packages/lib/services/interop/InteropService.test.js
packages/lib/services/interop/InteropService.js
packages/lib/services/interop/InteropService_Exporter_Base.js
packages/lib/services/interop/InteropService_Exporter_Custom.js
packages/lib/services/interop/InteropService_Exporter_Html.js
packages/lib/services/interop/InteropService_Exporter_Html.test.js
packages/lib/services/interop/InteropService_Exporter_Html.js
packages/lib/services/interop/InteropService_Exporter_Jex.js
packages/lib/services/interop/InteropService_Exporter_Md.js
packages/lib/services/interop/InteropService_Exporter_Md.test.js
packages/lib/services/interop/InteropService_Exporter_Md_frontmatter.js
packages/lib/services/interop/InteropService_Exporter_Md.js
packages/lib/services/interop/InteropService_Exporter_Md_frontmatter.test.js
packages/lib/services/interop/InteropService_Exporter_Md_frontmatter.js
packages/lib/services/interop/InteropService_Exporter_Raw.js
packages/lib/services/interop/InteropService_Importer_Base.js
packages/lib/services/interop/InteropService_Importer_Custom.js
packages/lib/services/interop/InteropService_Importer_EnexToHtml.js
packages/lib/services/interop/InteropService_Importer_EnexToMd.js
packages/lib/services/interop/InteropService_Importer_Jex.js
packages/lib/services/interop/InteropService_Importer_Md.js
packages/lib/services/interop/InteropService_Importer_Md.test.js
packages/lib/services/interop/InteropService_Importer_Md_frontmatter.js
packages/lib/services/interop/InteropService_Importer_Md.js
packages/lib/services/interop/InteropService_Importer_Md_frontmatter.test.js
packages/lib/services/interop/InteropService_Importer_Raw.js
packages/lib/services/interop/InteropService_Importer_Md_frontmatter.js
packages/lib/services/interop/InteropService_Importer_Raw.test.js
packages/lib/services/interop/InteropService_Importer_Raw.js
packages/lib/services/interop/Module.test.js
packages/lib/services/interop/Module.js
packages/lib/services/interop/types.js
packages/lib/services/joplinServer/personalizedUserContentBaseUrl.js
packages/lib/services/keychain/KeychainService.js
@@ -680,23 +706,23 @@ packages/lib/services/plugins/utils/makeListener.js
packages/lib/services/plugins/utils/manifestFromObject.js
packages/lib/services/plugins/utils/mapEventHandlersToIds.js
packages/lib/services/plugins/utils/types.js
packages/lib/services/plugins/utils/validatePluginId.js
packages/lib/services/plugins/utils/validatePluginId.test.js
packages/lib/services/plugins/utils/validatePluginVersion.js
packages/lib/services/plugins/utils/validatePluginId.js
packages/lib/services/plugins/utils/validatePluginVersion.test.js
packages/lib/services/profileConfig/index.js
packages/lib/services/plugins/utils/validatePluginVersion.js
packages/lib/services/profileConfig/index.test.js
packages/lib/services/profileConfig/index.js
packages/lib/services/profileConfig/initProfile.js
packages/lib/services/profileConfig/mergeGlobalAndLocalSettings.js
packages/lib/services/profileConfig/splitGlobalAndLocalSettings.js
packages/lib/services/profileConfig/types.js
packages/lib/services/rest/Api.js
packages/lib/services/rest/Api.test.js
packages/lib/services/rest/Api.js
packages/lib/services/rest/ApiResponse.js
packages/lib/services/rest/actionApi.desktop.js
packages/lib/services/rest/routes/auth.js
packages/lib/services/rest/routes/events.js
packages/lib/services/rest/routes/events.test.js
packages/lib/services/rest/routes/events.js
packages/lib/services/rest/routes/folders.js
packages/lib/services/rest/routes/master_keys.js
packages/lib/services/rest/routes/notes.js
@@ -714,26 +740,26 @@ packages/lib/services/rest/utils/readonlyProperties.js
packages/lib/services/rest/utils/requestFields.js
packages/lib/services/rest/utils/requestPaginationOptions.js
packages/lib/services/searchengine/SearchEngine.js
packages/lib/services/searchengine/SearchEngineUtils.js
packages/lib/services/searchengine/SearchEngineUtils.test.js
packages/lib/services/searchengine/SearchEngineUtils.js
packages/lib/services/searchengine/SearchFilter.test.js
packages/lib/services/searchengine/filterParser.js
packages/lib/services/searchengine/filterParser.test.js
packages/lib/services/searchengine/gotoAnythingStyleQuery.js
packages/lib/services/searchengine/filterParser.js
packages/lib/services/searchengine/gotoAnythingStyleQuery.test.js
packages/lib/services/searchengine/gotoAnythingStyleQuery.js
packages/lib/services/searchengine/queryBuilder.js
packages/lib/services/share/ShareService.js
packages/lib/services/share/ShareService.test.js
packages/lib/services/share/ShareService.js
packages/lib/services/share/reducer.js
packages/lib/services/spellChecker/SpellCheckerService.js
packages/lib/services/spellChecker/SpellCheckerServiceDriverBase.js
packages/lib/services/style/cssToTheme.js
packages/lib/services/style/cssToTheme.test.js
packages/lib/services/style/cssToTheme.js
packages/lib/services/style/loadCssToTheme.js
packages/lib/services/style/themeToCss.js
packages/lib/services/style/themeToCss.test.js
packages/lib/services/synchronizer/ItemUploader.js
packages/lib/services/style/themeToCss.js
packages/lib/services/synchronizer/ItemUploader.test.js
packages/lib/services/synchronizer/ItemUploader.js
packages/lib/services/synchronizer/LockHandler.js
packages/lib/services/synchronizer/MigrationHandler.js
packages/lib/services/synchronizer/Synchronizer.basics.test.js
@@ -750,12 +776,15 @@ packages/lib/services/synchronizer/migrations/1.js
packages/lib/services/synchronizer/migrations/2.js
packages/lib/services/synchronizer/migrations/3.js
packages/lib/services/synchronizer/syncDebugLog.js
packages/lib/services/synchronizer/syncInfoUtils.js
packages/lib/services/synchronizer/syncInfoUtils.test.js
packages/lib/services/synchronizer/syncInfoUtils.js
packages/lib/services/synchronizer/synchronizer_LockHandler.test.js
packages/lib/services/synchronizer/synchronizer_MigrationHandler.test.js
packages/lib/services/synchronizer/tools.js
packages/lib/services/synchronizer/utils/handleConflictAction.js
packages/lib/services/synchronizer/utils/handleSyncStartupOperation.js
packages/lib/services/synchronizer/utils/resourceRemotePath.js
packages/lib/services/synchronizer/utils/syncDeleteStep.js
packages/lib/services/synchronizer/utils/types.js
packages/lib/shim.js
packages/lib/testing/syncTargetUtils.js
@@ -774,11 +803,12 @@ packages/lib/themes/type.js
packages/lib/time.js
packages/lib/utils/credentialFiles.js
packages/lib/utils/joplinCloud.js
packages/lib/utils/webDAVUtils.js
packages/lib/utils/userFetcher.js
packages/lib/utils/webDAVUtils.test.js
packages/lib/utils/webDAVUtils.js
packages/lib/uuid.js
packages/lib/versionInfo.js
packages/lib/versionInfo.test.js
packages/lib/versionInfo.js
packages/pdf-viewer/FullViewer.js
packages/pdf-viewer/Page.js
packages/pdf-viewer/PdfDocument.js
@@ -799,17 +829,17 @@ packages/pdf-viewer/ui/IconButtons.js
packages/pdf-viewer/ui/ZoomControls.js
packages/plugin-repo-cli/commands/updateRelease.js
packages/plugin-repo-cli/index.js
packages/plugin-repo-cli/lib/checkIfPluginCanBeAdded.js
packages/plugin-repo-cli/lib/checkIfPluginCanBeAdded.test.js
packages/plugin-repo-cli/lib/errorsHaveChanged.js
packages/plugin-repo-cli/lib/checkIfPluginCanBeAdded.js
packages/plugin-repo-cli/lib/errorsHaveChanged.test.js
packages/plugin-repo-cli/lib/gitCompareUrl.js
packages/plugin-repo-cli/lib/errorsHaveChanged.js
packages/plugin-repo-cli/lib/gitCompareUrl.test.js
packages/plugin-repo-cli/lib/overrideUtils.js
packages/plugin-repo-cli/lib/gitCompareUrl.js
packages/plugin-repo-cli/lib/overrideUtils.test.js
packages/plugin-repo-cli/lib/overrideUtils.js
packages/plugin-repo-cli/lib/types.js
packages/plugin-repo-cli/lib/updateReadme.js
packages/plugin-repo-cli/lib/updateReadme.test.js
packages/plugin-repo-cli/lib/updateReadme.js
packages/plugin-repo-cli/lib/utils.js
packages/plugins/ToggleSidebars/api/index.js
packages/plugins/ToggleSidebars/api/types.js
@@ -819,10 +849,10 @@ packages/renderer/HtmlToHtml.js
packages/renderer/InMemoryCache.js
packages/renderer/MarkupToHtml.js
packages/renderer/MdToHtml.js
packages/renderer/MdToHtml/createEventHandlingAttrs.js
packages/renderer/MdToHtml/createEventHandlingAttrs.test.js
packages/renderer/MdToHtml/linkReplacement.js
packages/renderer/MdToHtml/createEventHandlingAttrs.js
packages/renderer/MdToHtml/linkReplacement.test.js
packages/renderer/MdToHtml/linkReplacement.js
packages/renderer/MdToHtml/renderMedia.js
packages/renderer/MdToHtml/rules/checkbox.js
packages/renderer/MdToHtml/rules/code_inline.js
@@ -841,25 +871,26 @@ packages/renderer/MdToHtml/setupLinkify.js
packages/renderer/MdToHtml/validateLinks.js
packages/renderer/headerAnchor.js
packages/renderer/highlight.js
packages/renderer/htmlUtils.js
packages/renderer/htmlUtils.test.js
packages/renderer/htmlUtils.js
packages/renderer/index.js
packages/renderer/noteStyle.js
packages/renderer/pathUtils.js
packages/renderer/utils.js
packages/tools/build-release-stats.js
packages/tools/build-welcome.js
packages/tools/buildServerDocker.js
packages/tools/buildServerDocker.test.js
packages/tools/bundleDefaultPlugins.js
packages/tools/buildServerDocker.js
packages/tools/bundleDefaultPlugins.test.js
packages/tools/checkLibPaths.js
packages/tools/bundleDefaultPlugins.js
packages/tools/checkIgnoredFiles.js
packages/tools/checkLibPaths.test.js
packages/tools/checkLibPaths.js
packages/tools/convertThemesToCss.js
packages/tools/generate-database-types.js
packages/tools/generate-images.js
packages/tools/git-changelog.js
packages/tools/git-changelog.test.js
packages/tools/git-changelog.js
packages/tools/licenseChecker.js
packages/tools/release-android.js
packages/tools/release-cli.js
@@ -871,6 +902,7 @@ packages/tools/setupNewRelease.js
packages/tools/spellcheck.js
packages/tools/tagServerLatest.js
packages/tools/tool-utils.js
packages/tools/update-readme-download.test.js
packages/tools/update-readme-download.js
packages/tools/update-readme-sponsors.js
packages/tools/updateMarkdownDoc.js
@@ -881,14 +913,14 @@ packages/tools/website/build.js
packages/tools/website/buildTranslations.js
packages/tools/website/updateDownloadPage.js
packages/tools/website/updateNews.js
packages/tools/website/utils/applyTranslations.js
packages/tools/website/utils/applyTranslations.test.js
packages/tools/website/utils/convertLinksToLocale.js
packages/tools/website/utils/applyTranslations.js
packages/tools/website/utils/convertLinksToLocale.test.js
packages/tools/website/utils/convertLinksToLocale.js
packages/tools/website/utils/frontMatter.js
packages/tools/website/utils/news.js
packages/tools/website/utils/openGraph.js
packages/tools/website/utils/openGraph.test.js
packages/tools/website/utils/openGraph.js
packages/tools/website/utils/parser.js
packages/tools/website/utils/pressCarousel.js
packages/tools/website/utils/processTranslations.js

View File

@@ -42,6 +42,8 @@ module.exports = {
'zxcvbn': 'readonly',
'tinymce': 'readonly',
'JSX': 'readonly',
},
'parserOptions': {
'ecmaVersion': 2018,
@@ -97,6 +99,7 @@ module.exports = {
'promise/prefer-await-to-then': 'error',
'no-unneeded-ternary': 'error',
'github/array-foreach': ['error'],
// -------------------------------
// Formatting
@@ -107,6 +110,9 @@ module.exports = {
'semi': ['error', 'always'],
'eol-last': ['error', 'always'],
'quotes': ['error', 'single'],
// Note that "indent" only applies to JavaScript files. See
// https://github.com/laurent22/joplin/issues/8360
'indent': ['error', 'tab'],
'comma-dangle': ['error', {
'arrays': 'always-multiline',
@@ -136,12 +142,13 @@ module.exports = {
'named': 'never',
'asyncArrow': 'always',
}],
'multiline-comment-style': ['error', 'separate-lines'],
'multiline-comment-style': ['error', 'separate-lines', { checkJSDoc: true }],
'space-before-blocks': 'error',
'spaced-comment': ['error', 'always'],
'keyword-spacing': ['error', { 'before': true, 'after': true }],
'no-multi-spaces': ['error'],
'prefer-object-spread': ['error'],
'prefer-regex-literals': ['error', { disallowRedundantWrapping: true }],
// Regarding the keyword blacklist:
// - err: We generally avoid using too many abbreviations, so it should
@@ -161,6 +168,7 @@ module.exports = {
'import',
'promise',
'jest',
'github',
],
'overrides': [
{
@@ -181,9 +189,18 @@ module.exports = {
'project': './tsconfig.eslint.json',
},
'rules': {
'@typescript-eslint/indent': ['error', 'tab', {
'ignoredNodes': [
// See https://github.com/typescript-eslint/typescript-eslint/issues/1824
'TSUnionType',
],
}],
'@typescript-eslint/ban-ts-comment': ['error'],
'@typescript-eslint/ban-types': 'error',
'@typescript-eslint/explicit-member-accessibility': ['error'],
'@typescript-eslint/type-annotation-spacing': ['error', { 'before': false, 'after': true }],
'@typescript-eslint/no-inferrable-types': ['error', { 'ignoreParameters': true, 'ignoreProperties': true }],
'@typescript-eslint/array-type': 'error',
'@typescript-eslint/no-inferrable-types': ['error'],
'@typescript-eslint/comma-dangle': ['error', {
'arrays': 'always-multiline',
'objects': 'always-multiline',

View File

@@ -153,6 +153,24 @@ if [ "$IS_PULL_REQUEST" == "1" ] || [ "$IS_DEV_BRANCH" = "1" ]; then
fi
fi
# =============================================================================
# Check .gitignore and .eslintignore files - they should be updated when
# new TypeScript files are added by running `yarn run updateIgnored`.
# See coding_style.md
# =============================================================================
if [ "$IS_PULL_REQUEST" == "1" ]; then
if [ "$IS_LINUX" == "1" ]; then
echo "Step: Checking for files that should have been ignored..."
node packages/tools/checkIgnoredFiles.js
testResult=$?
if [ $testResult -ne 0 ]; then
exit $testResult
fi
fi
fi
# =============================================================================
# Find out if we should run the build or not. Electron-builder gets stuck when
# building PRs so we disable it in this case. The Linux build should provide
@@ -194,7 +212,12 @@ if [[ $GIT_TAG_NAME = v* ]]; then
# It can be removed once we upgrade to electron-builder@23, however we
# cannot currently do this due to this error:
# https://github.com/laurent22/joplin/issues/8149
PYTHON_PATH=$(which python) USE_HARD_LINKS=false yarn run dist
#
# electron-builder@24, however, still expects the python binary to be named
# "python" and seems to no longer respect the PYTHON_PATH environment variable.
# We work around this by aliasing python.
alias python=$(which python3)
USE_HARD_LINKS=false yarn run dist
else
USE_HARD_LINKS=false yarn run dist
fi
@@ -207,7 +230,15 @@ else
if [ "$IS_MACOS" == "1" ]; then
# See above why we need to specify Python
PYTHON_PATH=$(which python) USE_HARD_LINKS=false yarn run dist --publish=never
alias python=$(which python3)
# We also want to disable signing the app in this case, because
# it randomly fails and we don't even need it
# https://www.electron.build/code-signing#how-to-disable-code-signing-during-the-build-process-on-macos
export CSC_IDENTITY_AUTO_DISCOVERY=false
npm pkg set 'build.mac.identity'=null --json
USE_HARD_LINKS=false yarn run dist --publish=never
else
USE_HARD_LINKS=false yarn run dist --publish=never
fi

69
.github/workflows/build-macos-m1.yml vendored Normal file
View File

@@ -0,0 +1,69 @@
name: Build macOS M1
on: [push, pull_request]
jobs:
pre_job:
if: github.repository == 'laurent22/joplin'
runs-on: ubuntu-latest
outputs:
should_skip: ${{ steps.skip_check.outputs.should_skip }}
steps:
- id: skip_check
uses: fkirc/skip-duplicate-actions@v5
with:
concurrent_skipping: 'same_content_newer'
Main:
needs: pre_job
# We always process desktop release tags, because they also publish the release
if: github.repository == 'laurent22/joplin' && (needs.pre_job.outputs.should_skip != 'true' || startsWith(github.ref, 'refs/tags/v'))
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- uses: olegtarasov/get-tag@v2.1
- uses: actions/setup-node@v2
with:
# We need to pin the version to 18.15, because 18.16+ fails with this error:
# https://github.com/facebook/react-native/issues/36440
node-version: '18.15.0'
- name: Install Yarn
run: |
# https://yarnpkg.com/getting-started/install
corepack enable
- name: Build macOS M1 app
env:
APPLE_ASC_PROVIDER: ${{ secrets.APPLE_ASC_PROVIDER }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
CSC_KEY_PASSWORD: ${{ secrets.APPLE_CSC_KEY_PASSWORD }}
CSC_LINK: ${{ secrets.APPLE_CSC_LINK }}
GH_TOKEN: ${{ secrets.GH_TOKEN }}
IS_CONTINUOUS_INTEGRATION: 1
BUILD_SEQUENCIAL: 1
run: |
export npm_config_arch=arm64
export npm_config_target_arch=arm64
yarn install
cd packages/app-desktop
npm pkg set 'build.mac.artifactName'='${productName}-${version}-${arch}.${ext}'
npm pkg set 'build.mac.target.target'='dmg'
npm pkg set 'build.mac.target.arch[0]'='arm64'
if [[ $GIT_TAG_NAME = v* ]]; then
echo "Building and publishing desktop application..."
PYTHON_PATH=$(which python) USE_HARD_LINKS=false yarn run dist --mac --arm64
else
echo "Building but *not* publishing desktop application..."
# We also want to disable signing the app in this case, because
# it doesn't work and we don't need it.
# https://www.electron.build/code-signing#how-to-disable-code-signing-during-the-build-process-on-macos
export CSC_IDENTITY_AUTO_DISCOVERY=false
npm pkg set 'build.mac.identity'=null --json
PYTHON_PATH=$(which python) USE_HARD_LINKS=false yarn run dist --publish=never
fi

View File

@@ -33,5 +33,5 @@ jobs:
#custom-notsigned-prcomment: 'pull request comment with Introductory message to ask new contributors to sign'
#custom-pr-sign-comment: 'The signature to be committed in order to sign the CLA'
#custom-allsigned-prcomment: 'pull request comment when all contributors has signed, defaults to **CLA Assistant Lite bot** All Contributors have signed the CLA.'
#lock-pullrequest-aftermerge: false - if you don't want this bot to automatically lock the pull request after merging (default - true)
lock-pullrequest-aftermerge: false
#use-dco-flag: true - If you are using DCO instead of CLA

View File

@@ -176,3 +176,35 @@ jobs:
# Basic test to ensure that the created build is valid. It should exit with
# code 0 if it works.
docker run joplin/server:0.0.0-beta node dist/app.js migrate list
- name: Check HTTP request
run: |
# Need to pass environment variables:
docker run -p 22300:22300 joplin/server:0.0.0-beta node dist/app.js --env dev &
# Wait for server to start
sleep 30
# Check if status code is correct
# if the actual_status DOES NOT include the expected_status
# it exits the process with code 1
expected_status="HTTP/1.1 200 OK"
actual_status=$(curl -I -X GET http://localhost:22300/api/ping | head -n 1)
if [[ ! "$actual_status" =~ "$expected_status" ]]; then
echo 'Failed while checking the status code after request to /api/ping'
echo 'expected: ' $expected_status
echo 'actual: ' $actual_status
exit 1;
fi
# Check if the body response is correct
# if the actual_body is different of expected_body exit with code 1
expected_body='{"status":"ok","message":"Joplin Server is running"}'
actual_body=$(curl http://localhost:22300/api/ping)
if [[ "$actual_body" != "$expected_body" ]]; then
echo 'Failed while checking the body response after request to /api/ping'
exit 1;
fi

194
.gitignore vendored
View File

@@ -67,8 +67,8 @@ packages/app-cli/app/LinkSelector.js
packages/app-cli/app/base-command.js
packages/app-cli/app/command-done.test.js
packages/app-cli/app/command-e2ee.js
packages/app-cli/app/command-mkbook.js
packages/app-cli/app/command-mkbook.test.js
packages/app-cli/app/command-mkbook.js
packages/app-cli/app/command-settingschema.js
packages/app-cli/app/command-sync.js
packages/app-cli/app/command-testing.js
@@ -77,6 +77,7 @@ packages/app-cli/app/services/plugins/PluginRunner.js
packages/app-cli/app/setupCommand.js
packages/app-cli/app/utils/testUtils.js
packages/app-cli/tests/HtmlToMd.js
packages/app-cli/tests/MarkupToHtml.js
packages/app-cli/tests/MdToHtml.js
packages/app-cli/tests/services/keychain/KeychainService.js
packages/app-cli/tests/services/plugins/PluginService.js
@@ -90,9 +91,9 @@ packages/app-cli/tests/testUtils.js
packages/app-cli/tools/populateDatabase.js
packages/app-desktop/ElectronAppWrapper.js
packages/app-desktop/InteropServiceHelper.js
packages/app-desktop/app.js
packages/app-desktop/app.reducer.js
packages/app-desktop/app.reducer.test.js
packages/app-desktop/app.reducer.js
packages/app-desktop/app.js
packages/app-desktop/bridge.js
packages/app-desktop/checkForUpdates.js
packages/app-desktop/commands/copyDevCommand.js
@@ -120,13 +121,14 @@ packages/app-desktop/gui/ConfigScreen/Sidebar.js
packages/app-desktop/gui/ConfigScreen/controls/plugins/PluginBox.js
packages/app-desktop/gui/ConfigScreen/controls/plugins/PluginsStates.js
packages/app-desktop/gui/ConfigScreen/controls/plugins/SearchPlugins.js
packages/app-desktop/gui/ConfigScreen/controls/plugins/useOnInstallHandler.js
packages/app-desktop/gui/ConfigScreen/controls/plugins/useOnInstallHandler.test.js
packages/app-desktop/gui/ConfigScreen/controls/plugins/useOnInstallHandler.js
packages/app-desktop/gui/Dialog.js
packages/app-desktop/gui/DialogButtonRow.js
packages/app-desktop/gui/DialogButtonRow/useKeyboardHandler.js
packages/app-desktop/gui/DialogTitle.js
packages/app-desktop/gui/DropboxLoginScreen.js
packages/app-desktop/gui/Dropdown/Dropdown.js
packages/app-desktop/gui/EditFolderDialog/Dialog.js
packages/app-desktop/gui/EditFolderDialog/IconSelector.js
packages/app-desktop/gui/EmojiBox.js
@@ -138,6 +140,7 @@ packages/app-desktop/gui/HelpButton.js
packages/app-desktop/gui/IconButton.js
packages/app-desktop/gui/ImportScreen.js
packages/app-desktop/gui/ItemList.js
packages/app-desktop/gui/JoplinCloudConfigScreen.js
packages/app-desktop/gui/KeymapConfig/KeymapConfigScreen.js
packages/app-desktop/gui/KeymapConfig/ShortcutRecorder.js
packages/app-desktop/gui/KeymapConfig/styles/index.js
@@ -147,6 +150,9 @@ packages/app-desktop/gui/KeymapConfig/utils/useKeymap.js
packages/app-desktop/gui/MainScreen/MainScreen.js
packages/app-desktop/gui/MainScreen/commands/addProfile.js
packages/app-desktop/gui/MainScreen/commands/commandPalette.js
packages/app-desktop/gui/MainScreen/commands/deleteFolder.js
packages/app-desktop/gui/MainScreen/commands/deleteNote.js
packages/app-desktop/gui/MainScreen/commands/duplicateNote.js
packages/app-desktop/gui/MainScreen/commands/editAlarm.js
packages/app-desktop/gui/MainScreen/commands/exportPdf.js
packages/app-desktop/gui/MainScreen/commands/gotoAnything.js
@@ -181,6 +187,7 @@ packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.js
packages/app-desktop/gui/MainScreen/commands/toggleEditors.js
packages/app-desktop/gui/MainScreen/commands/toggleLayoutMoveMode.js
packages/app-desktop/gui/MainScreen/commands/toggleNoteList.js
packages/app-desktop/gui/MainScreen/commands/toggleNoteType.js
packages/app-desktop/gui/MainScreen/commands/toggleNotesSortOrderField.js
packages/app-desktop/gui/MainScreen/commands/toggleNotesSortOrderReverse.js
packages/app-desktop/gui/MainScreen/commands/togglePerFolderSortOrder.js
@@ -197,8 +204,8 @@ packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.js
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/styles/index.js
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/index.js
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.test.js
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useExternalPlugins.js
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinCommands.js
@@ -210,6 +217,7 @@ packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollHandler.j
packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.js
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/styles/index.js
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/joplinCommandToTinyMceCommands.js
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/openEditDialog.js
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/setupToolbarButtons.js
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/types.js
@@ -225,8 +233,8 @@ packages/app-desktop/gui/NoteEditor/commands/showLocalSearch.js
packages/app-desktop/gui/NoteEditor/commands/showRevisions.js
packages/app-desktop/gui/NoteEditor/editorCommandDeclarations.js
packages/app-desktop/gui/NoteEditor/styles/index.js
packages/app-desktop/gui/NoteEditor/utils/clipboardUtils.js
packages/app-desktop/gui/NoteEditor/utils/clipboardUtils.test.js
packages/app-desktop/gui/NoteEditor/utils/clipboardUtils.js
packages/app-desktop/gui/NoteEditor/utils/contextMenu.js
packages/app-desktop/gui/NoteEditor/utils/contextMenuUtils.js
packages/app-desktop/gui/NoteEditor/utils/index.js
@@ -267,17 +275,17 @@ packages/app-desktop/gui/ResizableLayout/utils/findItemByKey.js
packages/app-desktop/gui/ResizableLayout/utils/isTempContainer.js
packages/app-desktop/gui/ResizableLayout/utils/iterateItems.js
packages/app-desktop/gui/ResizableLayout/utils/layoutItemProp.js
packages/app-desktop/gui/ResizableLayout/utils/movements.js
packages/app-desktop/gui/ResizableLayout/utils/movements.test.js
packages/app-desktop/gui/ResizableLayout/utils/persist.js
packages/app-desktop/gui/ResizableLayout/utils/movements.js
packages/app-desktop/gui/ResizableLayout/utils/persist.test.js
packages/app-desktop/gui/ResizableLayout/utils/persist.js
packages/app-desktop/gui/ResizableLayout/utils/removeItem.js
packages/app-desktop/gui/ResizableLayout/utils/removeKeylessItems.js
packages/app-desktop/gui/ResizableLayout/utils/setLayoutItemProps.js
packages/app-desktop/gui/ResizableLayout/utils/style.js
packages/app-desktop/gui/ResizableLayout/utils/types.js
packages/app-desktop/gui/ResizableLayout/utils/useLayoutItemSizes.js
packages/app-desktop/gui/ResizableLayout/utils/useLayoutItemSizes.test.js
packages/app-desktop/gui/ResizableLayout/utils/useLayoutItemSizes.js
packages/app-desktop/gui/ResizableLayout/utils/useWindowResizeEvent.js
packages/app-desktop/gui/ResizableLayout/utils/validateLayout.js
packages/app-desktop/gui/ResourceScreen.js
@@ -336,11 +344,14 @@ packages/app-desktop/services/plugins/hooks/useViewIsReady.js
packages/app-desktop/services/plugins/hooks/useWebviewToPluginMessages.js
packages/app-desktop/services/restart.js
packages/app-desktop/services/share/invitationRespond.js
packages/app-desktop/services/sortOrder/PerFolderSortOrderService.js
packages/app-desktop/services/sortOrder/PerFolderSortOrderService.test.js
packages/app-desktop/services/sortOrder/notesSortOrderUtils.js
packages/app-desktop/services/sortOrder/PerFolderSortOrderService.js
packages/app-desktop/services/sortOrder/notesSortOrderUtils.test.js
packages/app-desktop/services/sortOrder/notesSortOrderUtils.js
packages/app-desktop/services/spellChecker/SpellCheckerServiceDriverNative.js
packages/app-desktop/tools/notarizeMacApp.js
packages/app-desktop/utils/checkForUpdatesUtils.test.js
packages/app-desktop/utils/checkForUpdatesUtils.js
packages/app-desktop/utils/markupLanguageUtils.js
packages/app-mobile/PluginAssetsLoader.js
packages/app-mobile/components/ActionButton.js
@@ -350,21 +361,22 @@ packages/app-mobile/components/CustomButton.js
packages/app-mobile/components/Dropdown.js
packages/app-mobile/components/ExtendedWebView.js
packages/app-mobile/components/FolderPicker.js
packages/app-mobile/components/Modal.js
packages/app-mobile/components/NoteBodyViewer/NoteBodyViewer.js
packages/app-mobile/components/NoteBodyViewer/hooks/useOnMessage.js
packages/app-mobile/components/NoteBodyViewer/hooks/useOnResourceLongPress.js
packages/app-mobile/components/NoteBodyViewer/hooks/useSource.js
packages/app-mobile/components/NoteEditor/CodeMirror/CodeMirror.js
packages/app-mobile/components/NoteEditor/CodeMirror/CodeMirror.test.js
packages/app-mobile/components/NoteEditor/CodeMirror/CodeMirror.js
packages/app-mobile/components/NoteEditor/CodeMirror/decoratorExtension.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownCommands.bulletedVsChecklist.test.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownCommands.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownCommands.test.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownCommands.toggleList.test.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownMathParser.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownCommands.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownMathParser.test.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownReformatter.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownMathParser.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownReformatter.test.js
packages/app-mobile/components/NoteEditor/CodeMirror/markdownReformatter.js
packages/app-mobile/components/NoteEditor/CodeMirror/syntaxHighlightingLanguages.js
packages/app-mobile/components/NoteEditor/CodeMirror/testUtil/createEditor.js
packages/app-mobile/components/NoteEditor/CodeMirror/testUtil/forceFullParse.js
@@ -390,15 +402,19 @@ packages/app-mobile/components/ProfileSwitcher/ProfileSwitcher.js
packages/app-mobile/components/ProfileSwitcher/useProfileConfig.js
packages/app-mobile/components/ScreenHeader.js
packages/app-mobile/components/SelectDateTimeDialog.js
packages/app-mobile/components/SideMenu.js
packages/app-mobile/components/TextInput.js
packages/app-mobile/components/app-nav.js
packages/app-mobile/components/biometrics/BiometricPopup.js
packages/app-mobile/components/biometrics/biometricAuthenticate.js
packages/app-mobile/components/biometrics/sensorInfo.js
packages/app-mobile/components/getResponsiveValue.js
packages/app-mobile/components/getResponsiveValue.test.js
packages/app-mobile/components/screens/ConfigScreen.js
packages/app-mobile/components/getResponsiveValue.js
packages/app-mobile/components/screens/ConfigScreen/ConfigScreen.js
packages/app-mobile/components/screens/ConfigScreen/ConfigScreenButton.js
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/NoteExportButton.test.js
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/NoteExportButton.js
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/exportAllFolders.js
packages/app-mobile/components/screens/ConfigScreen/configScreenStyles.js
packages/app-mobile/components/screens/Note.js
packages/app-mobile/components/screens/Notes.js
packages/app-mobile/components/screens/UpgradeSyncTargetScreen.js
@@ -419,6 +435,7 @@ packages/app-mobile/tools/buildInjectedJs.js
packages/app-mobile/utils/ShareExtension.js
packages/app-mobile/utils/ShareUtils.js
packages/app-mobile/utils/TlsUtils.js
packages/app-mobile/utils/autodetectTheme.js
packages/app-mobile/utils/checkPermissions.js
packages/app-mobile/utils/createRootStyle.js
packages/app-mobile/utils/debounce.js
@@ -427,19 +444,19 @@ packages/app-mobile/utils/setupNotifications.js
packages/app-mobile/utils/shareHandler.js
packages/app-mobile/utils/types.js
packages/fork-htmlparser2/src/CollectingHandler.js
packages/fork-htmlparser2/src/FeedHandler.js
packages/fork-htmlparser2/src/FeedHandler.spec.js
packages/fork-htmlparser2/src/FeedHandler.js
packages/fork-htmlparser2/src/MultiplexHandler.js
packages/fork-htmlparser2/src/Parser.js
packages/fork-htmlparser2/src/Parser.spec.js
packages/fork-htmlparser2/src/Parser.js
packages/fork-htmlparser2/src/Tokenizer.js
packages/fork-htmlparser2/src/WritableStream.js
packages/fork-htmlparser2/src/WritableStream.spec.js
packages/fork-htmlparser2/src/WritableStream.js
packages/fork-htmlparser2/src/__fixtures__/test-helper.js
packages/fork-htmlparser2/src/__tests__/events.js
packages/fork-htmlparser2/src/__tests__/stream.js
packages/fork-htmlparser2/src/index.js
packages/fork-htmlparser2/src/index.spec.js
packages/fork-htmlparser2/src/index.js
packages/generator-joplin/generators/app/templates/api/index.js
packages/generator-joplin/generators/app/templates/api/types.js
packages/generator-joplin/generators/app/templates/api_index.js
@@ -452,17 +469,19 @@ packages/lib/BaseModel.js
packages/lib/BaseSyncTarget.js
packages/lib/ClipperServer.js
packages/lib/CssUtils.js
packages/lib/EventDispatcher.js
packages/lib/EventDispatcher.test.js
packages/lib/EventDispatcher.js
packages/lib/HtmlToMd.js
packages/lib/InMemoryCache.js
packages/lib/InMemoryCache.test.js
packages/lib/InMemoryCache.js
packages/lib/JoplinDatabase.js
packages/lib/JoplinError.js
packages/lib/JoplinServerApi.js
packages/lib/Logger.js
packages/lib/ObjectUtils.js
packages/lib/PoorManIntervals.js
packages/lib/RotatingLogs.test.js
packages/lib/RotatingLogs.js
packages/lib/SyncTargetJoplinCloud.js
packages/lib/SyncTargetJoplinServer.js
packages/lib/SyncTargetNone.js
@@ -472,8 +491,8 @@ packages/lib/Synchronizer.js
packages/lib/TaskQueue.js
packages/lib/WelcomeUtils.js
packages/lib/array.js
packages/lib/callbackUrlUtils.js
packages/lib/callbackUrlUtils.test.js
packages/lib/callbackUrlUtils.js
packages/lib/commands/historyBackward.js
packages/lib/commands/historyForward.js
packages/lib/commands/index.js
@@ -481,12 +500,14 @@ packages/lib/commands/openMasterPasswordDialog.js
packages/lib/commands/synchronize.js
packages/lib/components/EncryptionConfigScreen/utils.js
packages/lib/components/shared/note-screen-shared.js
packages/lib/components/shared/reduxSharedMiddleware.js
packages/lib/database-driver-better-sqlite.js
packages/lib/database.js
packages/lib/debug/DebugService.js
packages/lib/dom.js
packages/lib/dummy.test.js
packages/lib/errorUtils.js
packages/lib/errors.js
packages/lib/eventManager.js
packages/lib/file-api-driver-joplinServer.js
packages/lib/file-api-driver-memory.js
@@ -499,41 +520,41 @@ packages/lib/geolocation-node.js
packages/lib/hooks/useAsyncEffect.js
packages/lib/hooks/useElementSize.js
packages/lib/hooks/useEventListener.js
packages/lib/htmlUtils.js
packages/lib/htmlUtils.test.js
packages/lib/htmlUtils.js
packages/lib/htmlUtils2.test.js
packages/lib/import-enex-md-gen.js
packages/lib/import-enex-md-gen.test.js
packages/lib/import-enex-md-gen.js
packages/lib/import-enex.js
packages/lib/locale.js
packages/lib/locale.test.js
packages/lib/markdownUtils.js
packages/lib/locale.js
packages/lib/markdownUtils.test.js
packages/lib/markdownUtils.js
packages/lib/markdownUtils2.test.js
packages/lib/markupLanguageUtils.js
packages/lib/migrations/42.js
packages/lib/models/Alarm.js
packages/lib/models/BaseItem.js
packages/lib/models/Folder.js
packages/lib/models/Folder.sharing.test.js
packages/lib/models/Folder.test.js
packages/lib/models/ItemChange.js
packages/lib/models/Folder.js
packages/lib/models/ItemChange.test.js
packages/lib/models/MasterKey.js
packages/lib/models/ItemChange.js
packages/lib/models/MasterKey.test.js
packages/lib/models/MasterKey.js
packages/lib/models/Migration.js
packages/lib/models/Note.js
packages/lib/models/Note.test.js
packages/lib/models/Note.js
packages/lib/models/NoteResource.js
packages/lib/models/NoteTag.js
packages/lib/models/Resource.js
packages/lib/models/Resource.test.js
packages/lib/models/Resource.js
packages/lib/models/ResourceLocalState.js
packages/lib/models/Revision.js
packages/lib/models/Revision.test.js
packages/lib/models/Revision.js
packages/lib/models/Search.js
packages/lib/models/Setting.js
packages/lib/models/Setting.test.js
packages/lib/models/Setting.js
packages/lib/models/SmartFilter.js
packages/lib/models/Tag.js
packages/lib/models/dateTimeFormats.test.js
@@ -541,19 +562,22 @@ packages/lib/models/settings/FileHandler.js
packages/lib/models/utils/itemCanBeEncrypted.js
packages/lib/models/utils/paginatedFeed.js
packages/lib/models/utils/paginationToSql.js
packages/lib/models/utils/readOnly.js
packages/lib/models/utils/types.js
packages/lib/models/utils/userData.test.js
packages/lib/models/utils/userData.js
packages/lib/net-utils.js
packages/lib/ntp.js
packages/lib/onedrive-api.js
packages/lib/path-utils.js
packages/lib/reducer.js
packages/lib/registry.js
packages/lib/registry.test.js
packages/lib/registry.js
packages/lib/services/AlarmService.js
packages/lib/services/AlarmServiceDriverNode.js
packages/lib/services/BaseService.js
packages/lib/services/CommandService.js
packages/lib/services/CommandService.test.js
packages/lib/services/CommandService.js
packages/lib/services/DecryptionWorker.js
packages/lib/services/ExternalEditWatcher.js
packages/lib/services/ExternalEditWatcher/utils.js
@@ -569,14 +593,14 @@ packages/lib/services/ReportService.js
packages/lib/services/ResourceEditWatcher/index.js
packages/lib/services/ResourceEditWatcher/reducer.js
packages/lib/services/ResourceFetcher.js
packages/lib/services/ResourceService.js
packages/lib/services/ResourceService.test.js
packages/lib/services/RevisionService.js
packages/lib/services/ResourceService.js
packages/lib/services/RevisionService.test.js
packages/lib/services/RevisionService.js
packages/lib/services/SettingUtils.js
packages/lib/services/UndoRedoService.js
packages/lib/services/WhenClause.js
packages/lib/services/WhenClause.test.js
packages/lib/services/WhenClause.js
packages/lib/services/commands/MenuUtils.js
packages/lib/services/commands/ToolbarButtonUtils.js
packages/lib/services/commands/commandsToMarkdownTable.js
@@ -587,38 +611,40 @@ packages/lib/services/commands/stateToWhenClauseContext.js
packages/lib/services/contextkey/contextkey.js
packages/lib/services/database/types.js
packages/lib/services/debug/populateDatabase.js
packages/lib/services/e2ee/EncryptionService.js
packages/lib/services/e2ee/EncryptionService.test.js
packages/lib/services/e2ee/EncryptionService.js
packages/lib/services/e2ee/RSA.node.js
packages/lib/services/e2ee/ppk.js
packages/lib/services/e2ee/ppk.test.js
packages/lib/services/e2ee/ppk.js
packages/lib/services/e2ee/ppkTestUtils.js
packages/lib/services/e2ee/types.js
packages/lib/services/e2ee/utils.js
packages/lib/services/e2ee/utils.test.js
packages/lib/services/interop/InteropService.js
packages/lib/services/e2ee/utils.js
packages/lib/services/interop/InteropService.test.js
packages/lib/services/interop/InteropService.js
packages/lib/services/interop/InteropService_Exporter_Base.js
packages/lib/services/interop/InteropService_Exporter_Custom.js
packages/lib/services/interop/InteropService_Exporter_Html.js
packages/lib/services/interop/InteropService_Exporter_Html.test.js
packages/lib/services/interop/InteropService_Exporter_Html.js
packages/lib/services/interop/InteropService_Exporter_Jex.js
packages/lib/services/interop/InteropService_Exporter_Md.js
packages/lib/services/interop/InteropService_Exporter_Md.test.js
packages/lib/services/interop/InteropService_Exporter_Md_frontmatter.js
packages/lib/services/interop/InteropService_Exporter_Md.js
packages/lib/services/interop/InteropService_Exporter_Md_frontmatter.test.js
packages/lib/services/interop/InteropService_Exporter_Md_frontmatter.js
packages/lib/services/interop/InteropService_Exporter_Raw.js
packages/lib/services/interop/InteropService_Importer_Base.js
packages/lib/services/interop/InteropService_Importer_Custom.js
packages/lib/services/interop/InteropService_Importer_EnexToHtml.js
packages/lib/services/interop/InteropService_Importer_EnexToMd.js
packages/lib/services/interop/InteropService_Importer_Jex.js
packages/lib/services/interop/InteropService_Importer_Md.js
packages/lib/services/interop/InteropService_Importer_Md.test.js
packages/lib/services/interop/InteropService_Importer_Md_frontmatter.js
packages/lib/services/interop/InteropService_Importer_Md.js
packages/lib/services/interop/InteropService_Importer_Md_frontmatter.test.js
packages/lib/services/interop/InteropService_Importer_Raw.js
packages/lib/services/interop/InteropService_Importer_Md_frontmatter.js
packages/lib/services/interop/InteropService_Importer_Raw.test.js
packages/lib/services/interop/InteropService_Importer_Raw.js
packages/lib/services/interop/Module.test.js
packages/lib/services/interop/Module.js
packages/lib/services/interop/types.js
packages/lib/services/joplinServer/personalizedUserContentBaseUrl.js
packages/lib/services/keychain/KeychainService.js
@@ -665,23 +691,23 @@ packages/lib/services/plugins/utils/makeListener.js
packages/lib/services/plugins/utils/manifestFromObject.js
packages/lib/services/plugins/utils/mapEventHandlersToIds.js
packages/lib/services/plugins/utils/types.js
packages/lib/services/plugins/utils/validatePluginId.js
packages/lib/services/plugins/utils/validatePluginId.test.js
packages/lib/services/plugins/utils/validatePluginVersion.js
packages/lib/services/plugins/utils/validatePluginId.js
packages/lib/services/plugins/utils/validatePluginVersion.test.js
packages/lib/services/profileConfig/index.js
packages/lib/services/plugins/utils/validatePluginVersion.js
packages/lib/services/profileConfig/index.test.js
packages/lib/services/profileConfig/index.js
packages/lib/services/profileConfig/initProfile.js
packages/lib/services/profileConfig/mergeGlobalAndLocalSettings.js
packages/lib/services/profileConfig/splitGlobalAndLocalSettings.js
packages/lib/services/profileConfig/types.js
packages/lib/services/rest/Api.js
packages/lib/services/rest/Api.test.js
packages/lib/services/rest/Api.js
packages/lib/services/rest/ApiResponse.js
packages/lib/services/rest/actionApi.desktop.js
packages/lib/services/rest/routes/auth.js
packages/lib/services/rest/routes/events.js
packages/lib/services/rest/routes/events.test.js
packages/lib/services/rest/routes/events.js
packages/lib/services/rest/routes/folders.js
packages/lib/services/rest/routes/master_keys.js
packages/lib/services/rest/routes/notes.js
@@ -699,26 +725,26 @@ packages/lib/services/rest/utils/readonlyProperties.js
packages/lib/services/rest/utils/requestFields.js
packages/lib/services/rest/utils/requestPaginationOptions.js
packages/lib/services/searchengine/SearchEngine.js
packages/lib/services/searchengine/SearchEngineUtils.js
packages/lib/services/searchengine/SearchEngineUtils.test.js
packages/lib/services/searchengine/SearchEngineUtils.js
packages/lib/services/searchengine/SearchFilter.test.js
packages/lib/services/searchengine/filterParser.js
packages/lib/services/searchengine/filterParser.test.js
packages/lib/services/searchengine/gotoAnythingStyleQuery.js
packages/lib/services/searchengine/filterParser.js
packages/lib/services/searchengine/gotoAnythingStyleQuery.test.js
packages/lib/services/searchengine/gotoAnythingStyleQuery.js
packages/lib/services/searchengine/queryBuilder.js
packages/lib/services/share/ShareService.js
packages/lib/services/share/ShareService.test.js
packages/lib/services/share/ShareService.js
packages/lib/services/share/reducer.js
packages/lib/services/spellChecker/SpellCheckerService.js
packages/lib/services/spellChecker/SpellCheckerServiceDriverBase.js
packages/lib/services/style/cssToTheme.js
packages/lib/services/style/cssToTheme.test.js
packages/lib/services/style/cssToTheme.js
packages/lib/services/style/loadCssToTheme.js
packages/lib/services/style/themeToCss.js
packages/lib/services/style/themeToCss.test.js
packages/lib/services/synchronizer/ItemUploader.js
packages/lib/services/style/themeToCss.js
packages/lib/services/synchronizer/ItemUploader.test.js
packages/lib/services/synchronizer/ItemUploader.js
packages/lib/services/synchronizer/LockHandler.js
packages/lib/services/synchronizer/MigrationHandler.js
packages/lib/services/synchronizer/Synchronizer.basics.test.js
@@ -735,12 +761,15 @@ packages/lib/services/synchronizer/migrations/1.js
packages/lib/services/synchronizer/migrations/2.js
packages/lib/services/synchronizer/migrations/3.js
packages/lib/services/synchronizer/syncDebugLog.js
packages/lib/services/synchronizer/syncInfoUtils.js
packages/lib/services/synchronizer/syncInfoUtils.test.js
packages/lib/services/synchronizer/syncInfoUtils.js
packages/lib/services/synchronizer/synchronizer_LockHandler.test.js
packages/lib/services/synchronizer/synchronizer_MigrationHandler.test.js
packages/lib/services/synchronizer/tools.js
packages/lib/services/synchronizer/utils/handleConflictAction.js
packages/lib/services/synchronizer/utils/handleSyncStartupOperation.js
packages/lib/services/synchronizer/utils/resourceRemotePath.js
packages/lib/services/synchronizer/utils/syncDeleteStep.js
packages/lib/services/synchronizer/utils/types.js
packages/lib/shim.js
packages/lib/testing/syncTargetUtils.js
@@ -759,11 +788,12 @@ packages/lib/themes/type.js
packages/lib/time.js
packages/lib/utils/credentialFiles.js
packages/lib/utils/joplinCloud.js
packages/lib/utils/webDAVUtils.js
packages/lib/utils/userFetcher.js
packages/lib/utils/webDAVUtils.test.js
packages/lib/utils/webDAVUtils.js
packages/lib/uuid.js
packages/lib/versionInfo.js
packages/lib/versionInfo.test.js
packages/lib/versionInfo.js
packages/pdf-viewer/FullViewer.js
packages/pdf-viewer/Page.js
packages/pdf-viewer/PdfDocument.js
@@ -784,17 +814,17 @@ packages/pdf-viewer/ui/IconButtons.js
packages/pdf-viewer/ui/ZoomControls.js
packages/plugin-repo-cli/commands/updateRelease.js
packages/plugin-repo-cli/index.js
packages/plugin-repo-cli/lib/checkIfPluginCanBeAdded.js
packages/plugin-repo-cli/lib/checkIfPluginCanBeAdded.test.js
packages/plugin-repo-cli/lib/errorsHaveChanged.js
packages/plugin-repo-cli/lib/checkIfPluginCanBeAdded.js
packages/plugin-repo-cli/lib/errorsHaveChanged.test.js
packages/plugin-repo-cli/lib/gitCompareUrl.js
packages/plugin-repo-cli/lib/errorsHaveChanged.js
packages/plugin-repo-cli/lib/gitCompareUrl.test.js
packages/plugin-repo-cli/lib/overrideUtils.js
packages/plugin-repo-cli/lib/gitCompareUrl.js
packages/plugin-repo-cli/lib/overrideUtils.test.js
packages/plugin-repo-cli/lib/overrideUtils.js
packages/plugin-repo-cli/lib/types.js
packages/plugin-repo-cli/lib/updateReadme.js
packages/plugin-repo-cli/lib/updateReadme.test.js
packages/plugin-repo-cli/lib/updateReadme.js
packages/plugin-repo-cli/lib/utils.js
packages/plugins/ToggleSidebars/api/index.js
packages/plugins/ToggleSidebars/api/types.js
@@ -804,10 +834,10 @@ packages/renderer/HtmlToHtml.js
packages/renderer/InMemoryCache.js
packages/renderer/MarkupToHtml.js
packages/renderer/MdToHtml.js
packages/renderer/MdToHtml/createEventHandlingAttrs.js
packages/renderer/MdToHtml/createEventHandlingAttrs.test.js
packages/renderer/MdToHtml/linkReplacement.js
packages/renderer/MdToHtml/createEventHandlingAttrs.js
packages/renderer/MdToHtml/linkReplacement.test.js
packages/renderer/MdToHtml/linkReplacement.js
packages/renderer/MdToHtml/renderMedia.js
packages/renderer/MdToHtml/rules/checkbox.js
packages/renderer/MdToHtml/rules/code_inline.js
@@ -826,25 +856,26 @@ packages/renderer/MdToHtml/setupLinkify.js
packages/renderer/MdToHtml/validateLinks.js
packages/renderer/headerAnchor.js
packages/renderer/highlight.js
packages/renderer/htmlUtils.js
packages/renderer/htmlUtils.test.js
packages/renderer/htmlUtils.js
packages/renderer/index.js
packages/renderer/noteStyle.js
packages/renderer/pathUtils.js
packages/renderer/utils.js
packages/tools/build-release-stats.js
packages/tools/build-welcome.js
packages/tools/buildServerDocker.js
packages/tools/buildServerDocker.test.js
packages/tools/bundleDefaultPlugins.js
packages/tools/buildServerDocker.js
packages/tools/bundleDefaultPlugins.test.js
packages/tools/checkLibPaths.js
packages/tools/bundleDefaultPlugins.js
packages/tools/checkIgnoredFiles.js
packages/tools/checkLibPaths.test.js
packages/tools/checkLibPaths.js
packages/tools/convertThemesToCss.js
packages/tools/generate-database-types.js
packages/tools/generate-images.js
packages/tools/git-changelog.js
packages/tools/git-changelog.test.js
packages/tools/git-changelog.js
packages/tools/licenseChecker.js
packages/tools/release-android.js
packages/tools/release-cli.js
@@ -856,6 +887,7 @@ packages/tools/setupNewRelease.js
packages/tools/spellcheck.js
packages/tools/tagServerLatest.js
packages/tools/tool-utils.js
packages/tools/update-readme-download.test.js
packages/tools/update-readme-download.js
packages/tools/update-readme-sponsors.js
packages/tools/updateMarkdownDoc.js
@@ -866,14 +898,14 @@ packages/tools/website/build.js
packages/tools/website/buildTranslations.js
packages/tools/website/updateDownloadPage.js
packages/tools/website/updateNews.js
packages/tools/website/utils/applyTranslations.js
packages/tools/website/utils/applyTranslations.test.js
packages/tools/website/utils/convertLinksToLocale.js
packages/tools/website/utils/applyTranslations.js
packages/tools/website/utils/convertLinksToLocale.test.js
packages/tools/website/utils/convertLinksToLocale.js
packages/tools/website/utils/frontMatter.js
packages/tools/website/utils/news.js
packages/tools/website/utils/openGraph.js
packages/tools/website/utils/openGraph.test.js
packages/tools/website/utils/openGraph.js
packages/tools/website/utils/parser.js
packages/tools/website/utils/pressCarousel.js
packages/tools/website/utils/processTranslations.js

View File

@@ -0,0 +1,13 @@
diff --git a/templates/nsis/include/allowOnlyOneInstallerInstance.nsh b/templates/nsis/include/allowOnlyOneInstallerInstance.nsh
index a1fd1875d852ff69c087a3103eff827c20d37ca5..5222614ddad3276876857e7a9dde4017a6b9fc85 100644
--- a/templates/nsis/include/allowOnlyOneInstallerInstance.nsh
+++ b/templates/nsis/include/allowOnlyOneInstallerInstance.nsh
@@ -42,7 +42,7 @@
${nsProcess::FindProcess} "${_FILE}" ${_ERR}
!else
# find process owned by current user
- nsExec::Exec `cmd /c tasklist /FI "USERNAME eq %USERNAME%" /FI "IMAGENAME eq ${_FILE}" | %SYSTEMROOT%\System32\find.exe "${_FILE}"`
+ nsExec::Exec `cmd /c tasklist /FI "USERNAME eq %USERNAME%" /FI "PID ne $pid" /FI "IMAGENAME eq ${_FILE}" | %SYSTEMROOT%\System32\find.exe "${_FILE}"`
Pop ${_ERR}
!endif
!macroend

View File

@@ -0,0 +1,15 @@
diff --git a/lib/rules/multiline-comment-style.js b/lib/rules/multiline-comment-style.js
index 9cb7f3473e5a124e2eedb12685650f047afa84b6..124e062955e1b51cbdddd0920c22446dc97dd261 100644
--- a/lib/rules/multiline-comment-style.js
+++ b/lib/rules/multiline-comment-style.js
@@ -377,6 +377,10 @@ module.exports = {
commentLines = commentLines.slice(1, commentLines.length - 1);
}
+ // We have to allow this because it's always a top comment and
+ // it has to be in a jsdoc block
+ if (commentLines.join('').trim().startsWith('@jest-environment')) return;
+
const tokenAfter = sourceCode.getTokenAfter(firstComment, { includeComments: true });
if (tokenAfter && firstComment.loc.end.line === tokenAfter.loc.start.line) {

View File

@@ -0,0 +1,25 @@
diff --git a/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java b/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java
index 0f52b73c61625db2a3081c0950b6bdd2b06e3d40..b0fc3de4be0b3a26b638683613c63c783c2739bb 100644
--- a/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java
+++ b/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java
@@ -38,7 +38,7 @@ import com.facebook.react.uimanager.common.ViewUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
-import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicReference;
/**
@@ -151,7 +151,10 @@ public class NativeAnimatedModule extends NativeAnimatedModuleSpec
}
private class ConcurrentOperationQueue {
- private final Queue<UIThreadOperation> mQueue = new ConcurrentLinkedQueue<>();
+ // Patch: Use LinkedBlockingQueue instead of ConcurrentLinkedQueue.
+ // In some versions of Android, ConcurrentLinkedQueue is known to drop
+ // items, causing crashing. See https://github.com/laurent22/joplin/issues/8425
+ private final Queue<UIThreadOperation> mQueue = new LinkedBlockingQueue<>();
@Nullable private UIThreadOperation mPeekedOperation = null;
@AnyThread

View File

@@ -0,0 +1,27 @@
diff --git a/android/src/main/java/com/swmansion/reanimated/NodesManager.java b/android/src/main/java/com/swmansion/reanimated/NodesManager.java
index e974f8eb827a35be4d7e5fa9b096af9387c595dd..bc9e5ff566c9484274e8eacefc88327a5ff30def 100644
--- a/android/src/main/java/com/swmansion/reanimated/NodesManager.java
+++ b/android/src/main/java/com/swmansion/reanimated/NodesManager.java
@@ -34,7 +34,7 @@ import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.Set;
-import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -80,7 +80,12 @@ public class NodesManager implements EventDispatcherListener {
private ReactApplicationContext mReactApplicationContext;
private RCTEventEmitter mCustomEventHandler;
private List<OnAnimationFrame> mFrameCallbacks = new ArrayList<>();
- private ConcurrentLinkedQueue<CopiedEvent> mEventQueue = new ConcurrentLinkedQueue<>();
+
+ // Patch: On some versions of Android, ConcurrentLinkedQueue is known to
+ // drop items. LinkedBlockingQueue is a potentially-slower alternative that
+ // should not drop items.
+ // See https://github.com/laurent22/joplin/issues/8425
+ private LinkedBlockingQueue<CopiedEvent> mEventQueue = new LinkedBlockingQueue<>();
public double currentFrameTimeMs;
public Set<String> uiProps = Collections.emptySet();
public Set<String> nativeProps = Collections.emptySet();

View File

@@ -36,7 +36,7 @@ index 6afcbbf0cc8ca2d69dd78077d61e59a90b2136bb..9f8d72b4ec5b2b3d290975d6a255917c
def kotlin_version = getExtOrDefault('kotlinVersion')
diff --git a/android/src/main/java/com/reactnativevosk/VoskModule.kt b/android/src/main/java/com/reactnativevosk/VoskModule.kt
index 0e2b6595b1b2cf1ee01c6c64239c4b0ea37fce19..f3da440bc2863a59db6d2d1691c54d8d4870cb3f 100644
index 0e2b6595b1b2cf1ee01c6c64239c4b0ea37fce19..5a8539b9cce8951967640dba755e29a4e3ff404a 100644
--- a/android/src/main/java/com/reactnativevosk/VoskModule.kt
+++ b/android/src/main/java/com/reactnativevosk/VoskModule.kt
@@ -19,13 +19,25 @@ class VoskModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMo
@@ -66,7 +66,25 @@ index 0e2b6595b1b2cf1ee01c6c64239c4b0ea37fce19..f3da440bc2863a59db6d2d1691c54d8d
sendEvent("onResult", text)
}
}
@@ -153,6 +165,25 @@ class VoskModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMo
@@ -93,12 +105,11 @@ class VoskModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMo
@ReactMethod
fun loadModel(path: String, promise: Promise) {
cleanModel();
- StorageService.unpack(context, path, "models",
- { model: Model? ->
- this.model = model
- promise.resolve("Model successfully loaded")
- }
- ) { e: IOException ->
+
+ try {
+ this.model = Model(path);
+ promise.resolve("Model successfully loaded")
+ } catch (e: IOException) {
this.model = null
promise.reject(e)
}
@@ -153,6 +164,25 @@ class VoskModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMo
cleanRecognizer();
}

View File

@@ -24,3 +24,9 @@ logFilters:
# eg "string.prototype.matchall@npm:4.0.8 can't be found in the cache and will be fetched from the remote registry"
- code: YN0013
level: discard
# To avoid the error "The remote archive doesn't match the expected checksum".
# Yarn offers no way to understand what the issue is when it happens, or what
# needs to be done so it's just security theater that we have no choice but to
# disable.
checksumBehavior: update

View File

@@ -0,0 +1,821 @@
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */button,hr,input{overflow:visible}progress,sub,sup{vertical-align:baseline}[type=checkbox],[type=radio],legend{box-sizing:border-box;padding:0}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}details,main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:ButtonText dotted 1px}fieldset{padding:.35em .75em .625em}legend{color:inherit;display:table;max-width:100%;white-space:normal}textarea{overflow:auto}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}[hidden],template{display:none}
/* Global */
:root {
--primary-DarkBlue: #043873;
--primary-White: #ffffff;
--primary-DarkGray: #32363f;
--accent-LightBlue: #4f9cf9;
--accent-Yellow: #ffe492;
--variationPrimary-VaraintDark: #072445;
--variationPrimary-VaraintWhite: #f8f9fa;
--variationPrimary-VaraintDarkGray: #212529;
--variationAccent-VaraintLightBlue: #F7FBFF;
}
* {
font-family: "Montserrat", sans-serif;
}
h2 {
border-bottom: none;
margin-bottom: 0;
margin-top: 0.7em;
}
#mobile_icon_logo{
display: none;
}
.joplin__para {
font-weight: 400;
font-size: 20.8px;
line-height: 1.5;
color: var(--primary-DarkGray);
margin: 0;
padding: 0;
}
@media screen and (max-width: 767px) {
.joplin__para {
/* text-align: center; */
width: 100% !important;
}
}
@media screen and (max-width: 425px) {
.joplin__para {
font-size: 18px;
}
}
.joplin__tagline1 {
font-weight: 700;
font-size: 32px;
line-height: 1.5;
color: var(--variationPrimary-VaraintDarkGray);
}
@media screen and (max-width: 425px) {
.joplin__tagline1 {
font-size: 28px;
}
}
@media (min-width: 576px) {
.container {
max-width: 540px;
}
}
@media (min-width: 768px) {
.container {
max-width: 720px;
}
}
@media (min-width: 992px) {
.container {
max-width: 960px;
}
}
@media (min-width: 1200px) {
.container {
max-width: 1140px;
}
}
@media (min-width: 1400px) {
.container {
max-width: 1220px;
}
}
@media (min-width: 768px) and (max-width: 991px) {
.justify-content-tablet-end {
justify-content: flex-end;
}
}
/* Global */
/* Header */
header {
background-image: url("../images/brand/background\ blue\ motif\ 1.png");
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
border-radius: 5px;
padding: 36px 0;
}
header .container nav {
display: flex;
justify-content: space-between;
align-items: center;
}
@media screen and (max-width: 425px) {
header .container nav {
align-items: flex-start;
}
}
h1.main-logo {
font-weight: 600;
font-size: 48px;
color: var(--primary-DarkBlue);
margin: 0;
border-bottom: 1px solid #ddd;
line-height: 1.3em;
padding-bottom: 0.5em;
}
@media screen and (max-width: 992px) {
header .container nav img {
max-width: 200px;
}
#brand_guidelines{
margin-top: 50px;
font-weight: 600;
}
}
@media screen and (max-width: 767px) {
header .container nav img {
max-width: 150px;
}
}
@media screen and (max-width: 576px) {
#main_lockup {
display: none;
}
#mobile_icon_logo{
display: block;
max-width: 80px;
margin-top: 20px;
}
#brand_guidelines{
text-align: left;
padding-left: 20px;
margin-top: 10px;
}
}
@media screen and (max-width: 375px) {
header .container nav h1.main-logo {
font-size: 40px;
}
#main_lockup{
display: none;
}
#mobile_icon_logo{
display: block;
max-width: 80px;
margin-top: 20px;
}
#brand_guidelines{
text-align: left;
padding-left: 30px;
margin-top: 10px;
}
}
/*header .container nav .logo {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 30px;
flex-wrap: nowrap;
}*/
@media (min-width: 768px) and (max-width: 991px) {
header .container nav .logo {
align-items: flex-start;
}
}
header .container nav .logo h3 {
font-weight: 600;
font-size: 48px;
color: #ffffff;
letter-spacing: 1px;
margin: 0;
}
@media screen and (max-width: 560px) {
header .container nav .logo h3 {
display: none;
}
}
/* Header */
/* joplin Logos */
.joplin__logos {
padding-top: 0px;
padding-bottom: 43px;
}
.joplin__logos h2.main-logo {
font-weight: 700;
font-size: 40px;
color: var(--primary-DarkBlue);
/* margin-bottom: 45px; */
}
@media screen and (max-width: 767px) {
.joplin__logos h2.main-logo {
text-align: center;
}
}
@media screen and (max-width: 767px) {
.joplin__logos h2.main-logo {
font-size: 33px;
}
}
.joplin__logos .container > p {
margin-bottom: 6px;
}
.joplin__logos > .wrapper {
padding: 40px 0 45px 0;
margin: 40px 45px;
/* width: calc(100% - 6.5vw); */
border: 1px solid var(--variationPrimary-VaraintDarkGray);
border-radius: 5px;
margin-left: 0;
margin-right: 0;
}
@media screen and (max-width: 1440px) {
.joplin__logos > .wrapper {
padding: 40px 0 45px 0;
margin: 40px auto;
margin-left: 0;
margin-right: 0;
}
}
.joplin__logos .wrapper .para-1 {
margin-bottom: 19px;
}
.joplin__logos .wrapper .logo-wrapper {
display: flex;
justify-content: flex-start;
align-items: center;
gap: 27px;
}
.joplin__logos .wrapper .logo-wrapper:last-child {
gap: 24px;
}
@media screen and (max-width: 320px) {
.joplin__logos .wrapper .logo-wrapper img {
width: 50px;
height: 50px;
}
}
.joplin__logos .wrapper .logo-wrapper h4 {
font-size: 38px;
font-weight: 600;
}
@media screen and (max-width: 320px) {
.joplin__logos .wrapper .logo-wrapper h4 {
font-size: 32px;
font-weight: 600;
}
}
.joplin__logos .wrapper .logo-wrapper .blue-header {
color: var(--accent-LightBlue);
margin: 0;
}
.joplin__logos .wrapper .logo-wrapper .white-header {
color: var(--primary-White);
margin: 0;
}
.joplin__logos .wrapper .para-1 .blue-text {
font-weight: bold;
color: var(--accent-LightBlue);
}
@media screen and (max-width: 767px) {
.joplin__logos .wrapper .box:nth-child(1) {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
}
.joplin__logos .wrapper .box:nth-child(1) > p {
width: 80%;
}
@media screen and (max-width: 1024px) {
.joplin__logos .wrapper .box:nth-child(1) > p {
width: 90%;
}
}
.para-1 {
width: 100%;
}
.joplin__logos .wrapper-2 .our-para {
width: 100% !important;
}
@media screen and (min-width: 1400px) {
.joplin__logos .wrapper .box2 {
/* padding-left: 50px;
margin-right: -130px; */
}
}
.joplin__logos .wrapper .colored-box {
background-color: var(--primary-DarkBlue);
padding: 17px 15px 15px 24px;
/* width: 320px; */
/* height: 189px; */
}
@media (min-width: 768px) and (max-width: 991px) {
.joplin__logos .wrapper .colored-box {
transform: translateX(-35px);
}
}
.joplin__logos .wrapper .colored-box p {
font-weight: normal;
color: var(--primary-White);
margin-bottom: 20px;
line-height: 1.5;
}
@media screen and (max-width: 767px) {
.joplin__logos .wrapper .colored-box {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 100%;
}
}
.joplin__logos .wrapper .box-wrapper {
display: flex;
justify-content: flex-start;
align-items: flex-start;
gap: 14px;
}
@media screen and (max-width: 767px) {
.joplin__logos .wrapper .box-wrapper {
flex-direction: column-reverse;
justify-content: center;
align-items: center;
}
.joplin__logos .wrapper h2 {
text-align: center;
}
}
.joplin__logos .wrapper .box-wrapper img {
margin-top: 7px;
max-width: 100%;
}
.joplin__logos .wrapper .box-wrapper p {
width: 70%;
}
.joplin__logos .wrapper-2 {
position: relative;
padding: 42px 0 35px 0;
}
@media screen and (max-width: 425px) {
.joplin__logos .wrapper-2 {
padding: 42px 0 35px 0;
}
}
.joplin__logos .wrapper-2 .pipeline {
width: 1px;
height: 94%;
background-color: var(--variationPrimary-VaraintDarkGray);
position: absolute;
top: 50%;
left: 47%;
transform: translate(-50%, -50%);
}
@media screen and (max-width: 1200px) {
.joplin__logos .wrapper-2 .pipeline {
display: none;
}
}
@media screen and (max-width: 1366px) {
.joplin__logos .wrapper-2 .pipeline {
left: 49%;
}
}
.joplin__logos .wrapper-2 .joplin__tagline1 {
margin-bottom: 34px;
}
.joplin__logos .wrapper-2 .our-para {
margin-top: 19px;
}
.joplin__logos .wrapper-2 img {
max-width: 100%;
}
@media screen and (max-width: 425px) {
.joplin__logos .wrapper-2 .box-wrapper {
margin-right: 0;
}
}
@media (min-width: 1400px) and (max-width: 2100px) {
.joplin__logos .wrapper-2 .special-box {
margin-left: 150px;
}
.joplin__logos .wrapper-2 .special-box p {
width: 100%;
}
.joplin__logos .wrapper-2 .pipeline {
left: 53%;
}
}
/* @media (min-width: 1441px) and (max-width: 1750px) {
.joplin__logos .p-row {
padding: 0 5rem;
}
} */
/* joplin Logos */
/* joplin__Colours */
.joplin__colours {
padding: 5px 0;
background-image: url("../images/brand/background\ blue\ motif\ 2.png");
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
}
.joplin__colours h2 {
color: var(--primary-White);
font-size: 40px;
margin-bottom: 28px;
font-weight: 700;
}
@media screen and (max-width: 767px) {
.joplin__colours h2 {
font-size: 33px;
}
}
@media screen and (max-width: 767px) {
.joplin__colours h2 {
text-align: center;
}
}
.joplin__colours p {
color: var(--primary-White);
margin-bottom: 40px;
}
.joplin__colours .custom-row {
display: flex;
justify-content: center;
align-items: center;
gap: 45px;
padding-bottom: 20px;
}
@media screen and (max-width: 1400px) {
.joplin__colours .custom-row {
flex-wrap: wrap;
}
}
.joplin__colours .custom-row .chartjs-wrapper canvas {
width: 535px;
}
@media screen and (max-width: 575px) {
.joplin__colours .custom-row .chartjs-wrapper canvas {
width: 270px;
}
}
/* joplin__Colours */
/* joplin__Pallet */
.joplin__pallet {
padding: 45px 0 92px 0;
}
.joplin__pallet h3 {
font-weight: 600;
font-size: 32px;
margin-bottom: 50px;
}
@media screen and (max-width: 767px) {
.joplin__pallet h3 {
font-size: 28px;
}
}
@media screen and (max-width: 1200px) {
.joplin__pallet h3 {
text-align: center;
}
}
.joplin__pallet .sigma-wrapper {
display: flex;
align-items: center;
justify-content: flex-start;
gap: 35px;
}
@media screen and (max-width: 555px) {
.joplin__pallet .sigma-wrapper {
flex-direction: column;
}
}
.joplin__pallet .sigma-wrapper .circle-wrapper {
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: flex-start;
}
@media screen and (max-width: 992px) {
.joplin__pallet .sigma-wrapper .circle-wrapper {
align-items: center;
}
}
@media screen and (max-width: 1200px) {
.joplin__pallet .sigma-wrapper {
justify-content: center;
}
}
.joplin__pallet .sigma-wrapper .circle-wrapper .circle {
width: 120px;
height: 120px;
border-radius: 50%;
border: 1px solid #000;
margin-bottom: 30px;
}
.joplin__pallet .row-space {
padding: 50px 0;
display: flex;
justify-content: flex-end;
align-items: center;
}
.joplin__pallet .row-space div {
width: 97%;
height: 1px;
background-color: var(--primary-DarkGray);
}
.joplin__pallet .dark-blue {
background-color: var(--primary-DarkBlue);
}
.joplin__pallet .white {
background-color: var(--primary-White);
}
.joplin__pallet .dark-gray {
background-color: var(--primary-DarkGray);
}
.joplin__pallet .light-blue {
background-color: var(--accent-LightBlue);
}
.joplin__pallet .yellow {
background-color: var(--accent-Yellow);
}
.joplin__pallet .variant-dark {
background-color: var(--variationPrimary-VaraintDark);
}
.joplin__pallet .variant-white {
background-color: var(--variationPrimary-VaraintWhite);
}
.joplin__pallet .variant-dark-gray {
background-color: var(--variationPrimary-VaraintDarkGray);
}
.joplin__pallet .variant-light-blue {
background-color: var(--variationAccent-VaraintLightBlue);
}
/* joplin__Pallet */
/* joplin__State */
.joplin__state {
background-color: var(--primary-DarkBlue);
background-image: url("../images/brand/Rectangle\ 16.png");
background-position: bottom center;
background-repeat: no-repeat;
background-size: cover;
padding: 65px 0 78px 0;
position: relative;
}
.joplin__state::before {
content: "";
width: 1px;
height: 98%;
background-color: var(--variationPrimary-VaraintDarkGray);
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
overflow: hidden;
}
@media screen and (max-width: 992px) {
.joplin__state::before {
display: none;
}
}
.joplin__state .image {
transform: translateY(25px);
}
.joplin__state .wrapper > div {
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
}
.joplin__state .wrapper > div .box h2 {
color: var(--primary-White);
font-size: 40px;
margin-bottom: 28px;
font-weight: 700;
}
/* @media screen and (min-width: 1400px) {
.joplin__state .wrapper > div .box h2 {
text-wrap: nowrap;
}
} */
@media screen and (max-width: 767px) {
.joplin__state .wrapper > div .box h2 {
text-align: center;
}
}
@media screen and (max-width: 500px) {
.joplin__state .wrapper > div .box h2 {
font-size: 38px;
}
}
@media screen and (max-width: 767px) {
.joplin__state .wrapper > div .box h2 {
font-size: 33px;
}
}
.joplin__state .wrapper > div .box p {
color: var(--primary-White);
width: 85%;
}
@media screen and (max-width: 500px) {
.joplin__state .wrapper > div .box p {
font-size: 18px;
}
}
.joplin__state .wrapper > div .box img {
max-width: 100%;
}
.joplin__highlighter {
padding: 74px 0;
background-image: url("../images/brand/Rectangle\ 16.png");
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
}
.joplin__highlighter h2 {
color: var(--primary-White);
font-size: 40px;
margin-bottom: 28px;
font-weight: 700;
}
@media screen and (max-width: 767px) {
.joplin__highlighter h2 {
font-size: 33px;
}
}
@media screen and (max-width: 767px) {
.joplin__highlighter h2 {
text-align: center;
}
}
.joplin__highlighter p {
color: var(--primary-White);
}
@media screen and (max-width: 500px) {
.joplin__highlighter p {
font-size: 18px;
}
}
.joplin__highlighter .wrapper {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 22px;
}
@media screen and (max-width: 767px) {
.joplin__highlighter .wrapper {
flex-wrap: wrap;
row-gap: 25px;
justify-content: center;
}
}
.joplin__highlighter .wrapper div {
padding: 32px 62px;
border-radius: 5px;
position: relative;
}
.joplin__highlighter .wrapper div:first-child img {
position: absolute;
top: 57%;
max-width: 100%;
}
.joplin__highlighter .wrapper div:last-child img {
position: absolute;
top: 59%;
max-width: 100%;
}
@media screen and (max-width: 1200px) {
.joplin__highlighter .wrapper div:first-child img {
top: 43%;
}
.joplin__highlighter .wrapper div:last-child img {
top: 44%;
}
}
@media screen and (max-width: 767px) {
.joplin__highlighter .wrapper div:first-child img {
top: 59%;
}
.joplin__highlighter .wrapper div:last-child img {
top: 59%;
}
}
@media screen and (max-width: 490px) {
.joplin__highlighter .wrapper div:first-child img {
top: 43%;
}
.joplin__highlighter .wrapper div:last-child img {
top: 43%;
}
}
@media screen and (max-width: 320px) {
.joplin__highlighter .wrapper div:last-child img {
top: 36%;
}
}
.joplin__highlighter .wrapper div.yellow {
background-color: var(--primary-White);
}
.joplin__highlighter .wrapper div.blue {
background-color: var(--primary-DarkBlue);
}
.joplin__highlighter .wrapper div h4 {
color: var(--variationPrimary-VaraintDarkGray);
margin: 0;
font-weight: 700;
font-size: 20.8px;
line-height: 1.5;
}
.joplin__highlighter .wrapper div.blue h4 {
color: var(--primary-White);
}
/* joplin__State */
/* joplin__Voice */
.joplin__voice {
padding: 78px 0;
}
.joplin__voice .container h2 {
font-weight: 700;
font-size: 40px;
line-height: 1.5;
color: var(--variationPrimary-VaraintDarkGray);
}
@media screen and (max-width: 500px) {
.joplin__voice .container h2 {
font-size: 38px;
}
}
@media screen and (max-width: 767px) {
.joplin__voice .container h2 {
font-size: 33px;
text-align: center;
}
}
.joplin__voice .container .wrapper {
margin-top: 57px;
}
.joplin__voice .container .wrapper .box {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 20px;
}
@media screen and (max-width: 767px) {
.joplin__voice .container .wrapper .box {
flex-direction: column;
}
}
.joplin__voice .container .wrapper .box div:first-child {
flex: 1;
}
.joplin__voice .container .wrapper .box div:last-child {
flex: 2;
}
.joplin__voice .container .wrapper .box div h3 {
font-weight: 700;
font-size: 32px;
line-height: 1.7;
color: var(--primary-DarkGray);
}
@media (max-width: 767px) {
.joplin__voice .container .wrapper .box div h3 {
text-align: center;
font-size:28px;
}
.joplin__voice .container .wrapper .box {
align-items: center;
}
}
.joplin__voice .container .wrapper .box div p {
margin-bottom: 36px;
}
@media screen and (max-width: 500px) {
.joplin__voice .container .wrapper .box div p {
font-size: 18px;
}
}
/* joplin__Voice */
.chartjs-wrapper {
background-color: #d9d9d9;
padding: 10px 20px;
max-width: 45%;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View File

@@ -1,4 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Joplin]]></title><description><![CDATA[Joplin, the open source note-taking application]]></description><link>https://joplinapp.org</link><generator>RSS for Node</generator><lastBuildDate>Mon, 08 May 2023 00:00:00 GMT</lastBuildDate><atom:link href="https://joplinapp.org/rss.xml" rel="self" type="application/rss+xml"/><pubDate>Mon, 08 May 2023 00:00:00 GMT</pubDate><item><title><![CDATA[What's new in Joplin 2.10]]></title><description><![CDATA[<p>Great news! Joplin 2.10 is here and we've made some amazing improvements and bug fixes, with a focus on the mobile app.</p>
<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Joplin]]></title><description><![CDATA[Joplin, the open source note-taking application]]></description><link>https://joplinapp.org</link><generator>RSS for Node</generator><lastBuildDate>Mon, 08 May 2023 00:00:00 GMT</lastBuildDate><atom:link href="https://joplinapp.org/rss.xml" rel="self" type="application/rss+xml"/><pubDate>Mon, 08 May 2023 00:00:00 GMT</pubDate><item><title><![CDATA[What's new in Joplin 2.11]]></title><description><![CDATA[<h2>Desktop<a name="desktop" href="#desktop" class="heading-anchor">🔗</a></h2>
<h3>Add support for plugin user data<a name="add-support-for-plugin-user-data" href="#add-support-for-plugin-user-data" class="heading-anchor">🔗</a></h3>
<p>Developers of plugins now have the ability to associate additional information with notes, notebooks, and tags. This data is then synchronized across multiple devices. For instance, it is possible to envision attaching OCR data to an image or incorporating plugin-specific parameters to a note, which can subsequently be synchronized across all devices.</p>
<h3>Improved end-to-end encryption<a name="improved-end-to-end-encryption" href="#improved-end-to-end-encryption" class="heading-anchor">🔗</a></h3>
<p>End-to-end encryption (E2EE) plays a vital role in safeguarding your data privacy. Our aim is to make it effortlessly user-friendly, seamlessly integrated, and possibly enabled by default.</p>
<p>To achieve this objective, we have implemented several enhancements in this version. These improvements encompass more streamlined management of encryption keys and simplified setup processes for both new and existing devices utilising end-to-end encryption.</p>
<p>Moreover, we have upgraded the encryption algorithm from AES-128 to AES-256, ensuring heightened security for your data in the long run.</p>
<h3>Export a Mermaid graph<a name="export-a-mermaid-graph" href="#export-a-mermaid-graph" class="heading-anchor">🔗</a></h3>
<p>There is now a context menu on Mermaid graphs which you can use to export your graph as PNG, SVG, or by copying the vector data to the clipboard.</p>
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20230711-mermaid-export.png" alt=""></p>
<h3>Auto-detect language on startup<a name="auto-detect-language-on-startup" href="#auto-detect-language-on-startup" class="heading-anchor">🔗</a></h3>
<p>A small but useful change - the application language is now automatically detected startup. Of course, if needed you can later change it in the configuration screen.</p>
<h2>Android<a name="android" href="#android" class="heading-anchor">🔗</a></h2>
<p>As always most of these changes also apply to the mobile applications, such as the improved end-to-end encryption support, language auto-detection, and various bug fixes and improvements. But besides those, we also have several mobile-specific updates:</p>
<h3>Support for offline voice typing<a name="support-for-offline-voice-typing" href="#support-for-offline-voice-typing" class="heading-anchor">🔗</a></h3>
<p>The Android mobile app now support offline voice typing - it means your voice recording does not need to be uploaded to Google or Samsung server - it all takes place on your device for added security. To make use of it, open any note, tap on the three dots menu, then &quot;Voice typing&quot;.</p>
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20230711-voice-typing-1.png" alt=""></p>
<p>The first time, the app will need to download the language files to your device:</p>
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20230711-voice-typing-2.png" alt=""></p>
<p>Once they are there, simply record your message and it will appear in the note:</p>
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20230711-voice-typing-3.png" alt=""></p>
<h3>Create and move sub-notebooks<a name="create-and-move-sub-notebooks" href="#create-and-move-sub-notebooks" class="heading-anchor">🔗</a></h3>
<p>@jcgurango implemented support for creating sub-notebooks, and moving notebooks around in the mobile app. To do so, long press on any notebook and press &quot;Edit&quot;. You can now choose to move it under any other notebook using the provided dropdown list.</p>
<h2>Full changelog<a name="full-changelog" href="#full-changelog" class="heading-anchor">🔗</a></h2>
<p>This is just an overview of the main features. The full changelog is available there:</p>
<ul>
<li>Desktop: <a href="https://joplinapp.org/changelog">https://joplinapp.org/changelog</a></li>
<li>Android: <a href="https://joplinapp.org/changelog_android">https://joplinapp.org/changelog_android</a></li>
<li>iOS: <a href="https://joplinapp.org/changelog_ios">https://joplinapp.org/changelog_ios</a></li>
</ul>
]]></description><link>https://joplinapp.org/news/20230508-release-2-11/</link><guid isPermaLink="false">20230508-release-2-11</guid><pubDate>Mon, 08 May 2023 00:00:00 GMT</pubDate><twitter-text>What&apos;s new in Joplin 2.11</twitter-text></item><item><title><![CDATA[What's new in Joplin 2.10]]></title><description><![CDATA[<p>Great news! Joplin 2.10 is here and we've made some amazing improvements and bug fixes, with a focus on the mobile app.</p>
<h1>New design for &quot;New note&quot; and &quot;New to-do&quot; buttons<a name="new-design-for-new-note-and-new-to-do-buttons" href="#new-design-for-new-note-and-new-to-do-buttons" class="heading-anchor">🔗</a></h1>
<p>We're excited to announce that we've made it even easier to create new notes and to-do lists with new designs for the &quot;New note&quot; and &quot;New to-do&quot; buttons.</p>
<p>If there is enough space, the button labels will be shown in full:</p>
@@ -304,13 +334,4 @@
<p>As always the mobile apps (to be released soon) benefit from several of the above changes since they share the same codebase as the desktop app.</p>
<p>Specific to the mobile version 2.5 are some improvements to the beta editor - in particular the layout has been cleaned up, and the first word of sentences is now automatically capitalised, which makes typing notes easier. If you haven't tried the beta editor yet, you can enable it from the Configuration screen.</p>
<p>The full changelog is available there: <a href="https://joplinapp.org/changelog/">https://joplinapp.org/changelog/</a></p>
]]></description><link>https://joplinapp.org/news/20211031-115215/</link><guid isPermaLink="false">20211031-115215</guid><pubDate>Sun, 31 Oct 2021 11:52:15 GMT</pubDate><twitter-text></twitter-text></item><item><title><![CDATA["Certificate has expired" error with Joplin Cloud, and workaround]]></title><description><![CDATA[<p>Some of you might be experiencing an error &quot;Certificate has expired&quot; when synchronising with Joplin Cloud (and possibly other services) when using the desktop application.</p>
<p>This is due to Let's Encrypt root certificate that expired on 30 September, and the new method they are using is not compatible with the Joplin desktop application.</p>
<p>This actually affects thousands of applications, not just Joplin, so various solutions are being considered right now and hopefully a fix will be available relatively soon.</p>
<p>For now, as a workaround, you can simply check &quot;<strong>Ignore TLS certificate errors</strong>&quot; in <strong>Configuration &gt; Synchronisation &gt; Advanced Options</strong></p>
<p>I will let you know as soon as a fix is available so that you can clear that option.</p>
<p>More info:</p>
<p>- <a href="https://community.letsencrypt.org/t/issues-with-electron-and-expired-root/160991">Issue with Electron and expired root</a> on Let's Encrypt</p>
<p>- <a href="https://github.com/electron/electron/issues/31212">Let's Encrypt root CA isn't working properly</a> on Electron GitHub repository</p>
<p><strong>Update:</strong> I have implemented a temporary fix on Joplin Cloud which should solve the issue for now. If you're still having some issues please let me know. An updated desktop app will be available later on with a more permanent fix.</p>
]]></description><link>https://joplinapp.org/news/20210930-163458/</link><guid isPermaLink="false">20210930-163458</guid><pubDate>Thu, 30 Sep 2021 16:34:58 GMT</pubDate><twitter-text></twitter-text></item></channel></rss>
]]></description><link>https://joplinapp.org/news/20211031-115215/</link><guid isPermaLink="false">20211031-115215</guid><pubDate>Sun, 31 Oct 2021 11:52:15 GMT</pubDate><twitter-text></twitter-text></item></channel></rss>

View File

@@ -0,0 +1,396 @@
<!-- Logos Section -->
<section class="joplin__logos">
<div class="container">
<h1 class="main-logo">Joplin brand guidelines</h1>
<h2 class="main-logo">Logos</h2>
<p class="joplin__para">
All the variations of Joplin logo are all front facing. <br />
To ensure a clarity and legibility of design, the logo should always
be surrounded by a clear space.
</p>
</div>
<div class="wrapper">
<div class="container">
<div class="row align-items-center justify-content-tablet-end gy-5 p-row">
<div class="col-xxl-4 col-xl-4 col-lg-6 col-md-6 col-sm-12">
<div class="box">
<h3 class="joplin__tagline1">Lockup logo</h3>
<p class="joplin__para">
Joplin lockup is the main logo. It is used for
products and marketing communications. To ensure
sufficient contrast and readability, two following versions of
the lockup are provided.
</p>
</div>
</div>
<div class="col-xxl-4 col-xl-4 col-lg-6 col-md-6 col-sm-12">
<div class="box box2">
<p class="joplin__para para-1">
<span class="blue-text">Blue text</span> version to be used on
bright background.
</p>
<div class="logo-wrapper">
<img src="{{imageBaseUrl}}/brand/Vector.png" alt="" />
<h4 class="blue-header">Joplin</h4>
</div>
</div>
</div>
<div class="col-xxl-4 col-xl-4 col-lg-6 col-md-6 col-sm-12">
<div class="colored-box">
<p class="joplin__para">
White text version to be used <br />
on dark background.
</p>
<div class="logo-wrapper">
<img src="{{imageBaseUrl}}/brand/Vector2.png" alt="" />
<h4 class="white-header">Joplin</h4>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="wrapper wrapper-2">
<div class="container">
<div class="pipeline"></div>
<div class="row align-items-center gy-5 p-row justify-between">
<div class="col-xxl-6 col-xl-6 col-lg-12 col-md-12 col-sm-12">
<div class="box">
<h3 class="joplin__tagline1">Brandmark logo</h3>
<div class="box-wrapper">
<img
src="{{imageBaseUrl}}/brand/J logo transparent background 1.png"
alt=""
/>
<p class="joplin__para">
The classic brandmark icon is often used on a bright
background to help increase the contrast. It is a reduced
version of a logo which should be used in limited spacing or
when using a full name is not necessary.
</p>
</div>
</div>
</div>
<div class="col-xxl-6 col-xl-6 col-lg-12 col-md-12 col-sm-12">
<div class="box special-box">
<h3 class="joplin__tagline1">Joplin tagline</h3>
<img src="{{imageBaseUrl}}/brand/tagline 1.png" alt="" />
<p class="joplin__para our-para">
Our tagline is an invitation to capture your thoughts and
securely access them from any device.
</p>
</div>
</div>
</div>
</div>
</div>
</section>
</section>
<section class="joplin__colours">
<div class="container">
<h2>Colours</h2>
<p class="joplin__para">
Two core colour palettes can be used while representing the brand. The
accent colours are used to highlight <br />
important elements and support the colours of the core palettes.
</p>
<div class="custom-row gy-4">
<div
class="chartjs-wrapper"
>
<canvas id="chart1" ></canvas>
</div>
<div
class="chartjs-wrapper"
>
<canvas id="chart2" ></canvas>
</div>
</div>
</div>
</section>
<!-- Colours Section -->
<!-- Pallet Section -->
<section class="joplin__pallet">
<div class="container">
<div class="row gy-5">
<div class="col-xxl-6 col-xl-6 col-lg-12 col-md-12 col-sm-12">
<h3>Primary colours</h3>
<div class="sigma-wrapper">
<div class="circle-wrapper">
<div class="circle dark-blue"></div>
<div class="info">
<p class="joplin__para">Dark blue</p>
<p class="joplin__para">HEX - 043873</p>
</div>
</div>
<div class="circle-wrapper">
<div class="circle white"></div>
<div class="info">
<p class="joplin__para">White</p>
<p class="joplin__para">HEX - FFFFFF</p>
</div>
</div>
<div class="circle-wrapper">
<div class="circle dark-gray"></div>
<div class="info">
<p class="joplin__para">Dark gray</p>
<p class="joplin__para">HEX - 32363F</p>
</div>
</div>
</div>
</div>
<div class="col-1"></div>
<div class="col-xxl-5 col-xl-5 col-lg-12 col-md-12 col-sm-12">
<h3>Accent colours</h3>
<div class="sigma-wrapper">
<div class="circle-wrapper">
<div class="circle light-blue"></div>
<div class="info">
<p class="joplin__para">Light blue</p>
<p class="joplin__para">HEX - 4F9CF9</p>
</div>
</div>
<div class="circle-wrapper">
<div class="circle yellow"></div>
<div class="info">
<p class="joplin__para">Yellow</p>
<p class="joplin__para">HEX - FFE492</p>
</div>
</div>
</div>
</div>
</div>
<div class="row row-space">
<div></div>
</div>
<div class="row gy-5">
<div class="col-xxl-6 col-xl-6 col-lg-12 col-md-12 col-sm-12">
<h3>
Allowed variations of <br />
primary colours
</h3>
<div class="sigma-wrapper">
<div class="circle-wrapper">
<div class="circle variant-dark"></div>
<div class="info">
<p class="joplin__para">Variant dark</p>
<p class="joplin__para">HEX - 072445</p>
</div>
</div>
<div class="circle-wrapper">
<div class="circle variant-white"></div>
<div class="info">
<p class="joplin__para">Variant white</p>
<p class="joplin__para">HEX - F8F9FA</p>
</div>
</div>
<div class="circle-wrapper">
<div class="circle variant-dark-gray"></div>
<div class="info">
<p class="joplin__para">Variant dark gray</p>
<p class="joplin__para">HEX - 212529</p>
</div>
</div>
</div>
</div>
<div class="col-1"></div>
<div class="col-xxl-5 col-xl-5 col-lg-12 col-md-12 col-sm-12">
<h3>
Allowed variations of <br />
accent colours
</h3>
<div class="sigma-wrapper">
<div class="circle-wrapper">
<div class="circle variant-light-blue"></div>
<div class="info">
<p class="joplin__para">Variant light blue</p>
<p class="joplin__para">HEX - F7FBFF</p>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Pallet Section -->
<!-- State Section -->
<section class="joplin__state">
<div class="container">
<div class="wrapper row justify-content-between gy-5">
<div class="col-12 col-lg-5">
<div class="box pb-3">
<h2>Typography</h2>
<p class="joplin__para">
<b>Font-family: Montserrat</b> <br />
Montserrat is a typeface chosen for its great readability. It is
used as a default font. Sans-serif font should be used when
Montserrat is not available.
</p>
</div>
<div class="box">
<h2>Connector element</h2>
<p class="joplin__para">
The graphic element that represents the connection between the
components, files and data. It's Joplin's signature element
present in application's website as well as in marketing
communications.
</p>
</div>
</div>
<div class="col-12 col-lg-5">
<div class="box">
<h2>Imagery</h2>
<p class="joplin__para">
We uses vector art illustration . It ensures high
quality images in any scale, large or small. All the
illustrations come from storyset.com and are personalised to
match the Joplin's colours.
</p>
</div>
<div class="box">
<img src="{{imageBaseUrl}}/brand/customise-it-img 1.png" alt="" class="image" />
</div>
</div>
</div>
</div>
</section>
<section class="joplin__highlighter">
<div class="container">
<h2>Highlighter</h2>
<p class="joplin__para">
It is a reference to process of note taking on paper. It is used to
emphasize words in the titles. There are two <br />
variations of the element:
</p>
<div class="wrapper">
<div class="yellow">
<h4>Yellow version under dark text</h4>
<img src="{{imageBaseUrl}}/brand/frame-yellow 1.png" alt="" />
</div>
<div class="blue">
<h4>Light blue version under white text</h4>
<img src="{{imageBaseUrl}}/brand/frame-blue 1.png" alt="" />
</div>
</div>
</div>
</section>
<section class="joplin__voice">
<div class="container">
<h2>Tone of voice</h2>
<div class="wrapper">
<div class="box">
<div>
<h3>
Professional, <br />
Friendly, <br />
Welcoming, <br />
Trustworthy, <br />
Open-minded, <br />
Genuine
</h3>
</div>
<div>
<p class="joplin__para">
We believe that transparency is key to honest and successful
communication. We remain <b>trustworthy</b> and
<b>genuine</b> in engaging with our users and Joplin community.
</p>
<p class="joplin__para">
As an open-source project we stay
<b>open-minded</b> and <b>enthusiastic</b> about new ideas and
solutions. At the same time we continue to be
<b>professional</b> to honour the trust the users place in us.
</p>
<p class="joplin__para">
We appreciate the value the users bring to our product and
therefore we keep our tone <b>friendly</b> and <b>welcoming</b>.
</p>
</div>
</div>
</div>
</div>
</section>
<!-- State Section -->
<!-- Chart.Js Lib -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js"></script>
<script>
const ctx = document.getElementById("chart1");
const myChart = new Chart(ctx, {
type: "pie",
data: {
labels: ["Dark blue 40%", "Gray 20%", "White 20%", "Light blue 10%", "Yellow 7%", "Dark gray 3%"],
datasets: [
{
label: "# of Votes",
data: [40, 20, 20, 10, 7, 3],
backgroundColor: [
"#043873",
"#f7fbff",
"#ffffff",
"#4f9cf9",
"#ffe492",
"#212529",
],
},
],
},
options: {
layout: {},
elements: {
arc: {
borderColor: '#cccccc',
}
},
plugins: {
title: {
display: true,
text: "Blue colour palette",
font: {
size: 21,
align: "left",
},
},
},
},
});
const ctx2 = document.getElementById("chart2");
const myChart2 = new Chart(ctx2, {
type: "pie",
data: {
labels: ["White 40%", "Gray 20%", "Dark blue 20%", "Light blue 10%", "Dark gray 7%", "Yellow 3%"],
datasets: [
{
label: "# of Votes",
data: [40, 20, 20, 10, 7, 3],
backgroundColor: [
"#ffffff",
"#f7fbff",
"#043873",
"#4f9cf9",
"#212529",
"#ffe492",
],
},
],
},
options: {
layout: {},
elements: {
arc: {
borderColor: '#cccccc',
}
},
plugins: {
title: {
display: true,
text: "White colour palette",
font: {
size: 21,
align: "left",
},
},
},
},
});
</script>

View File

@@ -40,6 +40,7 @@ https://github.com/laurent22/joplin/blob/dev/{{{sourceMarkdownFile}}}
onload="this.media='all'; this.onload = null"
/>
<link rel="stylesheet" href="{{{assetUrls.css.site}}}" as="style" />
{{#assetUrls.css.brand}}<link rel="stylesheet" href="{{{assetUrls.css.brand}}}" as="style" />{{/assetUrls.css.brand}}
<title>{{pageTitle}}</title>
<script

View File

@@ -96,6 +96,8 @@
console.info('Creating Stripe session for price:', priceId, 'Promotion code:', promotionCode);
const source = localStorage.getItem('source');
return fetch("{{{stripeConfig.webhookBaseUrl}}}/stripe/createCheckoutSession", {
method: "POST",
headers: {
@@ -105,6 +107,7 @@
priceId,
promotionCode,
email: checkoutSessionUser ? checkoutSessionUser.email : '',
source,
})
}).then(async function(result) {
if (!result.ok) {

View File

@@ -16,6 +16,7 @@ WORKDIR /build
COPY .yarn/plugins ./.yarn/plugins
COPY .yarn/releases ./.yarn/releases
COPY .yarn/patches ./.yarn/patches
COPY package.json .
COPY .yarnrc.yml .
COPY yarn.lock .

View File

@@ -22,11 +22,11 @@ Three types of applications are available: for **desktop** (Windows, macOS and L
Operating System | Download
---|---
Windows (32 and 64-bit) | <a href='https://objects.joplinusercontent.com/v2.10.19/Joplin-Setup-2.10.19.exe?source=JoplinWebsite&type=New'><img alt='Get it on Windows' width="134px" src='https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/BadgeWindows.png'/></a>
macOS | <a href='https://objects.joplinusercontent.com/v2.10.19/Joplin-2.10.19.dmg?source=JoplinWebsite&type=New'><img alt='Get it on macOS' width="134px" src='https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/BadgeMacOS.png'/></a>
Linux | <a href='https://objects.joplinusercontent.com/v2.10.19/Joplin-2.10.19.AppImage?source=JoplinWebsite&type=New'><img alt='Get it on Linux' width="134px" src='https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/BadgeLinux.png'/></a>
Windows (32 and 64-bit) | <a href='https://objects.joplinusercontent.com/v2.11.11/Joplin-Setup-2.11.11.exe?source=JoplinWebsite&type=New'><img alt='Get it on Windows' width="134px" src='https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/BadgeWindows.png'/></a>
macOS | <a href='https://objects.joplinusercontent.com/v2.11.11/Joplin-2.11.11.dmg?source=JoplinWebsite&type=New'><img alt='Get it on macOS' width="134px" src='https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/BadgeMacOS.png'/></a>
Linux | <a href='https://objects.joplinusercontent.com/v2.11.11/Joplin-2.11.11.AppImage?source=JoplinWebsite&type=New'><img alt='Get it on Linux' width="134px" src='https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/BadgeLinux.png'/></a>
**On Windows**, you may also use the <a href='https://objects.joplinusercontent.com/v2.10.19/JoplinPortable.exe?source=JoplinWebsite&type=New'>Portable version</a>. The [portable application](https://en.wikipedia.org/wiki/Portable_application) allows installing the software on a portable device such as a USB key. Simply copy the file JoplinPortable.exe in any directory on that USB key ; the application will then create a directory called "JoplinProfile" next to the executable file.
**On Windows**, you may also use the <a href='https://objects.joplinusercontent.com/v2.11.11/JoplinPortable.exe?source=JoplinWebsite&type=New'>Portable version</a>. The [portable application](https://en.wikipedia.org/wiki/Portable_application) allows installing the software on a portable device such as a USB key. Simply copy the file JoplinPortable.exe in any directory on that USB key ; the application will then create a directory called "JoplinProfile" next to the executable file.
**On Linux**, the recommended way is to use the following installation script as it will handle the desktop icon too:
@@ -38,7 +38,7 @@ The install and update script supports the [following flags](https://github.com/
Operating System | Download | Alt. Download
---|---|---
Android | <a href='https://play.google.com/store/apps/details?id=net.cozic.joplin&utm_source=GitHub&utm_campaign=README&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' height="40px" src='https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/BadgeAndroid.png'/></a> | or download the APK file: [64-bit](https://objects.joplinusercontent.com/android-v2.9.8/joplin-v2.9.8.apk?source=JoplinWebsite&type=New) [32-bit](https://objects.joplinusercontent.com/android-v2.9.8/joplin-v2.9.8-32bit.apk?source=JoplinWebsite&type=New)
Android | <a href='https://play.google.com/store/apps/details?id=net.cozic.joplin&utm_source=GitHub&utm_campaign=README&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' height="40px" src='https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/BadgeAndroid.png'/></a> | or download the [APK file](https://objects.joplinusercontent.com/v2.11.31/joplin-v2.11.31.apk?source=JoplinWebsite&type=New)
iOS | <a href='https://itunes.apple.com/us/app/joplin/id1315599797'><img alt='Get it on the App Store' height="40px" src='https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/BadgeIOS.png'/></a> | -
## Terminal application
@@ -66,7 +66,7 @@ A community maintained list of these distributions can be found here: [Unofficia
# Sponsors
<!-- SPONSORS-ORG -->
<a href="https://seirei.ne.jp"><img title="Serei Network" width="256" src="https://joplinapp.org/images/sponsors/SeireiNetwork.png"/></a> <a href="https://www.hosting.de/nextcloud/?mtm_campaign=managed-nextcloud&amp;mtm_kwd=joplinapp&amp;mtm_source=joplinapp-webseite&amp;mtm_medium=banner"><img title="Hosting.de" width="256" src="https://joplinapp.org/images/sponsors/HostingDe.png"/></a> <a href="https://residence-greece.com/"><img title="Greece Golden Visa" width="256" src="https://joplinapp.org/images/sponsors/ResidenceGreece.jpg"/></a> <a href="https://grundstueckspreise.info/"><img title="SP Software GmbH" width="256" src="https://joplinapp.org/images/sponsors/Grundstueckspreise.png"/></a> <a href="https://tranio.com/spain/"><img title="Property for sale in Spain" width="256" src="https://joplinapp.org/images/sponsors/TranioOverseasProperty.jpg"/></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://www.hosting.de/nextcloud/?mtm_campaign=managed-nextcloud&amp;mtm_kwd=joplinapp&amp;mtm_source=joplinapp-webseite&amp;mtm_medium=banner"><img title="Hosting.de" width="256" src="https://joplinapp.org/images/sponsors/HostingDe.png"/></a> <a href="https://residence-greece.com/"><img title="Greece Golden Visa" width="256" src="https://joplinapp.org/images/sponsors/ResidenceGreece.jpg"/></a> <a href="https://grundstueckspreise.info/"><img title="SP Software GmbH" width="256" src="https://joplinapp.org/images/sponsors/Grundstueckspreise.png"/></a> <a href="https://tranio.com/spain/"><img title="Property for sale in Spain" width="256" src="https://joplinapp.org/images/sponsors/TranioOverseasProperty.jpg"/></a> <a href="https://citricsheep.com"><img title="Citric Sheep" width="256" src="https://joplinapp.org/images/sponsors/CitricSheep.png"/></a>
<!-- SPONSORS-ORG -->
* * *
@@ -75,10 +75,11 @@ A community maintained list of these distributions can be found here: [Unofficia
| | | | |
| :---: | :---: | :---: | :---: |
| <img width="50" src="https://avatars2.githubusercontent.com/u/215668?s=96&v=4"/></br>[avanderberg](https://github.com/avanderberg) | <img width="50" src="https://avatars2.githubusercontent.com/u/67130?s=96&v=4"/></br>[chr15m](https://github.com/chr15m) | <img width="50" src="https://avatars2.githubusercontent.com/u/2793530?s=96&v=4"/></br>[CyberXZT](https://github.com/CyberXZT) | <img width="50" src="https://avatars2.githubusercontent.com/u/1307332?s=96&v=4"/></br>[dbrandonjohnson](https://github.com/dbrandonjohnson) |
| <img width="50" src="https://avatars2.githubusercontent.com/u/49439044?s=96&v=4"/></br>[fourstepper](https://github.com/fourstepper) | <img width="50" src="https://avatars2.githubusercontent.com/u/64712218?s=96&v=4"/></br>[Hegghammer](https://github.com/Hegghammer) | <img width="50" src="https://avatars2.githubusercontent.com/u/3266447?s=96&v=4"/></br>[iamwillbar](https://github.com/iamwillbar) | <img width="50" src="https://avatars2.githubusercontent.com/u/1310474?s=96&v=4"/></br>[jknowles](https://github.com/jknowles) |
| <img width="50" src="https://avatars2.githubusercontent.com/u/11947658?s=96&v=4"/></br>[KentBrockman](https://github.com/KentBrockman) | <img width="50" src="https://avatars2.githubusercontent.com/u/5588131?s=96&v=4"/></br>[kianenigma](https://github.com/kianenigma) | <img width="50" src="https://avatars2.githubusercontent.com/u/24908652?s=96&v=4"/></br>[konishi-t](https://github.com/konishi-t) | <img width="50" src="https://avatars2.githubusercontent.com/u/42319182?s=96&v=4"/></br>[marcdw1289](https://github.com/marcdw1289) |
| <img width="50" src="https://avatars2.githubusercontent.com/u/126279083?s=96&v=4"/></br>[matmoly](https://github.com/matmoly) | <img width="50" src="https://avatars2.githubusercontent.com/u/1788010?s=96&v=4"/></br>[maxtruxa](https://github.com/maxtruxa) | <img width="50" src="https://avatars2.githubusercontent.com/u/29300939?s=96&v=4"/></br>[mcejp](https://github.com/mcejp) | <img width="50" src="https://avatars2.githubusercontent.com/u/31054972?s=96&v=4"/></br>[saarantras](https://github.com/saarantras) |
| <img width="50" src="https://avatars2.githubusercontent.com/u/327998?s=96&v=4"/></br>[sif](https://github.com/sif) | <img width="50" src="https://avatars2.githubusercontent.com/u/765564?s=96&v=4"/></br>[taskcruncher](https://github.com/taskcruncher) | <img width="50" src="https://avatars2.githubusercontent.com/u/333944?s=96&v=4"/></br>[tateisu](https://github.com/tateisu) | |
| <img width="50" src="https://avatars2.githubusercontent.com/u/14873877?s=96&v=4"/></br>[dchecks](https://github.com/dchecks) | <img width="50" src="https://avatars2.githubusercontent.com/u/56287?s=96&v=4"/></br>[fats](https://github.com/fats) | <img width="50" src="https://avatars2.githubusercontent.com/u/49439044?s=96&v=4"/></br>[fourstepper](https://github.com/fourstepper) | <img width="50" src="https://avatars2.githubusercontent.com/u/64712218?s=96&v=4"/></br>[Hegghammer](https://github.com/Hegghammer) |
| <img width="50" src="https://avatars2.githubusercontent.com/u/3266447?s=96&v=4"/></br>[iamwillbar](https://github.com/iamwillbar) | <img width="50" src="https://avatars2.githubusercontent.com/u/1310474?s=96&v=4"/></br>[jknowles](https://github.com/jknowles) | <img width="50" src="https://avatars2.githubusercontent.com/u/11947658?s=96&v=4"/></br>[KentBrockman](https://github.com/KentBrockman) | <img width="50" src="https://avatars2.githubusercontent.com/u/5588131?s=96&v=4"/></br>[kianenigma](https://github.com/kianenigma) |
| <img width="50" src="https://avatars2.githubusercontent.com/u/24908652?s=96&v=4"/></br>[konishi-t](https://github.com/konishi-t) | <img width="50" src="https://avatars2.githubusercontent.com/u/42319182?s=96&v=4"/></br>[marcdw1289](https://github.com/marcdw1289) | <img width="50" src="https://avatars2.githubusercontent.com/u/126279083?s=96&v=4"/></br>[matmoly](https://github.com/matmoly) | <img width="50" src="https://avatars2.githubusercontent.com/u/1788010?s=96&v=4"/></br>[maxtruxa](https://github.com/maxtruxa) |
| <img width="50" src="https://avatars2.githubusercontent.com/u/29300939?s=96&v=4"/></br>[mcejp](https://github.com/mcejp) | <img width="50" src="https://avatars2.githubusercontent.com/u/31054972?s=96&v=4"/></br>[saarantras](https://github.com/saarantras) | <img width="50" src="https://avatars2.githubusercontent.com/u/327998?s=96&v=4"/></br>[sif](https://github.com/sif) | <img width="50" src="https://avatars2.githubusercontent.com/u/765564?s=96&v=4"/></br>[taskcruncher](https://github.com/taskcruncher) |
| <img width="50" src="https://avatars2.githubusercontent.com/u/333944?s=96&v=4"/></br>[tateisu](https://github.com/tateisu) | | | |
<!-- SPONSORS-GITHUB -->
<!-- TOC -->
@@ -139,6 +140,7 @@ A community maintained list of these distributions can be found here: [Unofficia
- [Server: File URL Format](https://github.com/laurent22/joplin/blob/dev/readme/spec/server_file_url_format.md)
- [Server: Delta Sync](https://github.com/laurent22/joplin/blob/dev/readme/spec/server_delta_sync.md)
- [Server: Sharing](https://github.com/laurent22/joplin/blob/dev/readme/spec/server_sharing.md)
- [Read-only items](https://github.com/laurent22/joplin/blob/dev/readme/spec/read_only.md)
- Google Summer of Code 2022
@@ -153,7 +155,9 @@ A community maintained list of these distributions can be found here: [Unofficia
- [Changelog (iOS)](https://github.com/laurent22/joplin/blob/dev/readme/changelog_ios.md)
- [Changelog (CLI App)](https://github.com/laurent22/joplin/blob/dev/readme/changelog_cli.md)
- [Changelog (Server)](https://github.com/laurent22/joplin/blob/dev/readme/changelog_server.md)
- [Guiding principles](https://github.com/laurent22/joplin/blob/dev/readme/principles.md)
- [Stats](https://github.com/laurent22/joplin/blob/dev/readme/stats.md)
- [Brand guidelines](https://joplinapp.org/brand)
- [Donate](https://github.com/laurent22/joplin/blob/dev/readme/donate.md)
<!-- TOC -->
@@ -555,17 +559,17 @@ Current translations:
<img src="https://joplinapp.org/images/flags/country-4x3/be.png" width="16px"/> | Nederlands (België, Belgique, Belgien) | [nl_BE](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/nl_BE.po) | | 78%
<img src="https://joplinapp.org/images/flags/country-4x3/nl.png" width="16px"/> | Nederlands (Nederland) | [nl_NL](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/nl_NL.po) | [MHolkamp](mailto:mholkamp@users.noreply.github.com) | 87%
<img src="https://joplinapp.org/images/flags/country-4x3/no.png" width="16px"/> | Norwegian (Norge, Noreg) | [nb_NO](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/nb_NO.po) | [Mats Estensen](mailto:code@mxe.no) | 87%
<img src="https://joplinapp.org/images/flags/country-4x3/ir.png" width="16px"/> | Persian | [fa](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/fa.po) | [Kourosh Firoozbakht](mailto:kourox@protonmail.com) | 55%
<img src="https://joplinapp.org/images/flags/country-4x3/pl.png" width="16px"/> | Polski (Polska) | [pl_PL](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/pl_PL.po) | [X3NO](mailto:X3NO@disroot.org) | 90%
<img src="https://joplinapp.org/images/flags/country-4x3/ir.png" width="16px"/> | Persian | [fa](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/fa.po) | [Kourosh Firoozbakht](mailto:kourox@protonmail.com) | 54%
<img src="https://joplinapp.org/images/flags/country-4x3/pl.png" width="16px"/> | Polski (Polska) | [pl_PL](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/pl_PL.po) | [X3NO](mailto:X3NO@disroot.org) | 89%
<img src="https://joplinapp.org/images/flags/country-4x3/br.png" width="16px"/> | Português (Brasil) | [pt_BR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/pt_BR.po) | [Douglas Leão](mailto:djlsplays@gmail.com) | 87%
<img src="https://joplinapp.org/images/flags/country-4x3/pt.png" width="16px"/> | Português (Portugal) | [pt_PT](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/pt_PT.po) | [Diogo Caveiro](mailto:dcaveiro@yahoo.com) | 72%
<img src="https://joplinapp.org/images/flags/country-4x3/ro.png" width="16px"/> | Română | [ro](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ro.po) | [Cristi Duluta](mailto:cristi.duluta@gmail.com) | 50%
<img src="https://joplinapp.org/images/flags/country-4x3/si.png" width="16px"/> | Slovenian (Slovenija) | [sl_SI](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/sl_SI.po) | [Martin Korelič](mailto:martin.korelic@protonmail.com) | 80%
<img src="https://joplinapp.org/images/flags/country-4x3/si.png" width="16px"/> | Slovenian (Slovenija) | [sl_SI](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/sl_SI.po) | [Martin Korelič](mailto:martin.korelic@protonmail.com) | 79%
<img src="https://joplinapp.org/images/flags/country-4x3/se.png" width="16px"/> | Svenska | [sv](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/sv.po) | [Jonatan Nyberg](mailto:jonatan@autistici.org) | 99%
<img src="https://joplinapp.org/images/flags/country-4x3/th.png" width="16px"/> | Thai (ประเทศไทย) | [th_TH](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/th_TH.po) | | 36%
<img src="https://joplinapp.org/images/flags/country-4x3/vn.png" width="16px"/> | Tiếng Việt | [vi](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/vi.po) | | 77%
<img src="https://joplinapp.org/images/flags/country-4x3/tr.png" width="16px"/> | Türkçe (Türkiye) | [tr_TR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/tr_TR.po) | [Arda Kılıçdağı](mailto:arda@kilicdagi.com) | 99%
<img src="https://joplinapp.org/images/flags/country-4x3/ua.png" width="16px"/> | Ukrainian (Україна) | [uk_UA](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/uk_UA.po) | [Vyacheslav Andreykiv](mailto:vandreykiv@gmail.com) | 72%
<img src="https://joplinapp.org/images/flags/country-4x3/ua.png" width="16px"/> | Ukrainian (Україна) | [uk_UA](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/uk_UA.po) | [Vyacheslav Andreykiv](mailto:vandreykiv@gmail.com) | 71%
<img src="https://joplinapp.org/images/flags/country-4x3/gr.png" width="16px"/> | Ελληνικά (Ελλάδα) | [el_GR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/el_GR.po) | [Harris Arvanitis](mailto:xaris@tuta.io) | 87%
<img src="https://joplinapp.org/images/flags/country-4x3/ru.png" width="16px"/> | Русский (Россия) | [ru_RU](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ru_RU.po) | [Dmitriy K](mailto:dmitry@atsip.ru) | 99%
<img src="https://joplinapp.org/images/flags/country-4x3/rs.png" width="16px"/> | српски језик (Србија) | [sr_RS](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/sr_RS.po) | | 64%

View File

@@ -353,5 +353,43 @@
"web/bundles/": true,
"web/env.php": true,
}
},
"tasks": {
"version": "2.0.0",
"tasks": [
{
"label": "transpile-server",
"type": "shell",
"command": "cd ${workspaceFolder}/packages/server && yarn tsc",
"group": "build",
}
]
},
"launch": {
"version": "0.2.0",
"configurations": [
{
"name": "Server",
"type": "node",
"request": "launch",
"preLaunchTask": "transpile-server",
"skipFiles": [
"<node_internals>/**"
],
"outFiles": [
"${workspaceFolder}/**/*.js",
"!**/node_modules/**"
],
"program": "${workspaceFolder}/packages/server/src/app.ts",
"args": [
"--env", "dev"
],
"env": {
"JOPLIN_IS_TESTING": "1",
"TERMS_URL": "https://example.com",
"PRIVACY_URL": "https://example.com",
}
}
]
}
}

View File

@@ -13,5 +13,6 @@ module.exports = {
'*.{js,jsx,ts,tsx}': [
'yarn run linter-precommit',
'yarn run checkLibPaths',
'node packages/tools/checkIgnoredFiles.js',
],
};

View File

@@ -16,7 +16,7 @@
"buildSequential": "yarn workspaces foreach --verbose --interlaced --topological run build && yarn run tsc",
"buildApiDoc": "yarn workspace joplin start apidoc ../../readme/api/references/rest_api.md",
"buildCommandIndex": "node packages/tools/gulp/tasks/buildCommandIndexRun.js",
"buildPluginDoc": "typedoc --name 'Joplin Plugin API Documentation' --mode file -theme './Assets/PluginDocTheme/' --readme './Assets/PluginDocTheme/index.md' --excludeNotExported --excludeExternals --excludePrivate --excludeProtected --out ../joplin-website/docs/api/references/plugin_api packages/lib/services/plugins/api/",
"buildPluginDoc": "cd packages/generate-plugin-doc && yarn run buildPluginDoc_",
"updateMarkdownDoc": "node ./packages/tools/updateMarkdownDoc",
"updateNews": "node ./packages/tools/website/updateNews",
"buildSettingJsonSchema": "yarn workspace joplin start settingschema ../../../joplin-website/docs/schema/settings.json",
@@ -77,25 +77,30 @@
"eslint-plugin-react": "7.32.2",
"execa": "5.1.1",
"fs-extra": "11.1.1",
"glob": "8.1.0",
"glob": "10.2.7",
"gulp": "4.0.2",
"husky": "3.1.0",
"lerna": "3.22.1",
"lint-staged": "13.2.2",
"madge": "6.0.0",
"lint-staged": "13.2.3",
"madge": "6.1.0",
"npm-package-json-lint": "6.4.0",
"typedoc": "0.17.8",
"typescript": "5.0.2"
},
"dependencies": {
"@types/fs-extra": "11.0.1",
"eslint-plugin-github": "4.8.0",
"http-server": "14.1.1",
"node-gyp": "9.3.1",
"node-gyp": "9.4.0",
"nodemon": "2.0.22"
},
"packageManager": "yarn@3.5.0",
"resolutions": {
"react-native-camera@4.2.1": "patch:react-native-camera@npm%3A4.2.1#./.yarn/patches/react-native-camera-npm-4.2.1-24b2600a7e.patch",
"react-native-vosk@0.1.12": "patch:react-native-vosk@npm%3A0.1.12#./.yarn/patches/react-native-vosk-npm-0.1.12-76b1caaae8.patch"
"react-native-vosk@0.1.12": "patch:react-native-vosk@npm%3A0.1.12#./.yarn/patches/react-native-vosk-npm-0.1.12-76b1caaae8.patch",
"eslint@8.39.0": "patch:eslint@npm%3A8.39.0#./.yarn/patches/eslint-npm-8.39.0-d92bace04d.patch",
"eslint@^8.13.0": "patch:eslint@npm%3A8.39.0#./.yarn/patches/eslint-npm-8.39.0-d92bace04d.patch",
"app-builder-lib@24.4.0": "patch:app-builder-lib@npm%3A24.4.0#./.yarn/patches/app-builder-lib-npm-24.4.0-05322ff057.patch",
"react-native@0.71.10": "patch:react-native@npm%3A0.71.10#./.yarn/patches/react-native-animation-fix/react-native-npm-0.71.10-f9c32562d8.patch",
"react-native-reanimated@3.3.0": "patch:react-native-reanimated@npm%3A3.3.0#./.yarn/patches/react-native-animation-fix/react-native-reanimated-npm-3.3.0-fb4272741c.patch"
}
}

View File

@@ -43,6 +43,7 @@ class LinkSelector {
for (let i = 0; i < lines.length; i++) {
const r = (lines[i] as any).matchAll(this.linkRegex_);
const matches = [...r];
// eslint-disable-next-line github/array-foreach -- Old code before rule was applied
matches.forEach((_e, n) => {
newLinkStore.push(
{

View File

@@ -146,6 +146,7 @@ class Application extends BaseApplication {
commands(uiType = null) {
if (!this.allCommandsLoaded_) {
// eslint-disable-next-line github/array-foreach -- Old code before rule was applied
fs.readdirSync(__dirname).forEach(path => {
if (path.indexOf('command-') !== 0) return;
if (path.endsWith('.test.js')) return;

View File

@@ -54,6 +54,7 @@ export default class BaseCommand {
return r[0];
}
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
public setDispatcher(fn: Function) {
this.dispatcher_ = fn;
}
@@ -63,6 +64,7 @@ export default class BaseCommand {
return this.dispatcher_(action);
}
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
public setStdout(fn: Function) {
this.stdout_ = fn;
}
@@ -71,6 +73,7 @@ export default class BaseCommand {
if (this.stdout_) this.stdout_(text);
}
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
public setPrompt(fn: Function) {
this.prompt_ = fn;
}

View File

@@ -49,6 +49,7 @@ function renderCommand(cmd) {
function getCommands() {
const output = [];
// eslint-disable-next-line github/array-foreach -- Old code before rule was applied
fs.readdirSync(__dirname).forEach(path => {
if (path.indexOf('command-') !== 0) return;
const ext = fileExtension(path);

View File

@@ -44,6 +44,7 @@ class Command extends BaseCommand {
return reject(new Error(`Invalid JSON passed to config --import: \n${error.message}.`));
}
if (settingsObj) {
// eslint-disable-next-line github/array-foreach -- Old code before rule was applied
Object.entries(settingsObj)
.forEach(([key, value]) => {
Setting.setValue(key, value);

View File

@@ -179,6 +179,7 @@ class Command extends BaseCommand {
const dirPaths = function(targetPath: string) {
const paths: string[] = [];
// eslint-disable-next-line github/array-foreach -- Old code before rule was applied
fs.readdirSync(targetPath).forEach((path: string) => {
paths.push(path);
});

View File

@@ -18,6 +18,7 @@ import { pathExists, writeFile } from 'fs-extra';
class Command extends BaseCommand {
private syncTargetId_: number = null;
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
private releaseLockFn_: Function = null;
private oneDriveApiUtils_: any = null;

View File

@@ -65,6 +65,7 @@ export default class PluginRunner extends BasePluginRunner {
}
public async run(plugin: Plugin, sandbox: Global): Promise<void> {
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
return new Promise((resolve: Function, reject: Function) => {
const onStarted = () => {
plugin.off('started', onStarted);
@@ -85,6 +86,7 @@ export default class PluginRunner extends BasePluginRunner {
public async waitForSandboxCalls(): Promise<void> {
const startTime = Date.now();
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
return new Promise((resolve: Function, reject: Function) => {
const iid = setInterval(() => {
if (!Object.keys(this.activeSandboxCalls_).length) {

View File

@@ -1,5 +1,6 @@
import { _ } from '@joplin/lib/locale';
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
export default (cmd: any, stdout: Function, store: Function, gui: Function) => {
cmd.setStdout((text: string) => {
return stdout(text);

View File

@@ -3,6 +3,7 @@ import Folder from '@joplin/lib/models/Folder';
import BaseCommand from '../base-command';
import setupCommand from '../setupCommand';
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
export const setupCommandForTesting = (CommandClass: any, stdout: Function = null): BaseCommand => {
const command = new CommandClass();
setupCommand(command, stdout, null, null);

View File

@@ -35,15 +35,15 @@
],
"owner": "Laurent Cozic"
},
"version": "2.11.0",
"version": "2.12.0",
"bin": "./main.js",
"engines": {
"node": ">=10.0.0"
},
"dependencies": {
"@joplin/lib": "~2.11",
"@joplin/renderer": "~2.11",
"@joplin/utils": "~2.11",
"@joplin/lib": "~2.12",
"@joplin/renderer": "~2.12",
"@joplin/utils": "~2.12",
"aws-sdk": "2.1340.0",
"chalk": "4.1.2",
"compare-version": "0.1.2",
@@ -70,7 +70,7 @@
"yargs-parser": "21.1.1"
},
"devDependencies": {
"@joplin/tools": "~2.11",
"@joplin/tools": "~2.12",
"@types/fs-extra": "11.0.1",
"@types/jest": "29.5.1",
"@types/node": "18.15.13",

View File

@@ -1,5 +1,5 @@
const MarkupToHtml = require('@joplin/renderer/MarkupToHtml').default;
import MarkupToHtml, { MarkupLanguage, RenderResult } from '@joplin/renderer/MarkupToHtml';
describe('MarkupToHtml', () => {
@@ -31,7 +31,7 @@ describe('MarkupToHtml', () => {
const input = t[0];
const expected = t[1];
const actual = service.stripMarkup(Number(markup), input);
expect(actual).toBe(expected, `Markup: ${markup}`);
expect(actual).toBe(expected);
}
}
@@ -40,4 +40,18 @@ describe('MarkupToHtml', () => {
expect(service.stripMarkup(1, 'one line\n two line', { collapseWhiteSpaces: true })).toBe('one line two line');
}));
test('should escape HTML in safe mode', async () => {
const service = new MarkupToHtml({ isSafeMode: true });
const testString = '</pre>.<b>Test</b>';
const expectedOutput: RenderResult = {
html: '<pre>&lt;/pre&gt;.&lt;b&gt;Test&lt;/b&gt;</pre>',
cssStrings: [],
pluginAssets: [],
};
expect(await service.render(MarkupLanguage.Html, testString, {}, {})).toMatchObject(expectedOutput);
expect(await service.render(MarkupLanguage.Markdown, testString, {}, {})).toMatchObject(expectedOutput);
});
});

View File

@@ -252,4 +252,41 @@ describe('MdToHtml', () => {
);
}
}));
it('should attach source blocks to block KaTeX', async () => {
const mdToHtml = newTestMdToHtml();
const katex = [
'3 + 3',
'\n\\int_0^1 x dx\n\n',
'\n\\int_0^1 x dx\n3 + 3\n',
'\n\t2^{3^4}\n\t3 + 3\n',
'3\n4',
];
const surroundingTextChoices = [
['', ''],
['Test', ''],
['Test', 'Test!'],
['Test\n\n', '\n\nTest!'],
];
const tests = [];
for (const texSource of katex) {
for (const [start, end] of surroundingTextChoices) {
tests.push([texSource, `${start}\n$$${texSource}$$\n${end}`]);
}
}
for (const [tex, input] of tests) {
const html = await mdToHtml.render(input, null, { bodyOnly: true });
const opening = '<pre class="joplin-source" data-joplin-language="katex" data-joplin-source-open="$$&#10;" data-joplin-source-close="&#10;$$&#10;">';
const closing = '</pre>';
// Remove any single leading and trailing newlines, those are included in data-joplin-source-open
// and data-joplin-source-close.
const trimmedTex = tex.replace(/^[\n]/, '').replace(/[\n]$/, '');
expect(html.html).toContain(opening + trimmedTex + closing);
}
});
});

View File

@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE en-export SYSTEM "http://xml.evernote.com/pub/evernote-export4.dtd">
<en-export export-date="20230809T080314Z" application="Evernote" version="10.58.8">
<note>
<title>Here is a simple test</title>
<created>20230709T080219Z</created>
<updated>20230709T080302Z</updated>
<note-attributes>
</note-attributes>
<content>
<![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd"><en-note><div>a</div><div><br/></div><div>b</div><div><br/></div><div>List 1</div><div style="--en-task-group:true; --en-id:9876cc26-ebd0-482d-bb36-603e2c0512d0;--en-content-hash:7e7703c4ce2d1805937a6024e5f7b426;-webkit-user-modify:read-only;-moz-user-modify:read-only;user-modify:read-only;border-radius:3px;border:1px solid rgba(182,182,182,0.09);background:rgba(174,174,174,0.09);overflow:hidden;color:#868686"><div style="background:rgba(182,182,182,0.09) no-repeat 6px 6px url(&quot;data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iIzg2ODY4NiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE5LjcyNTEgMjBDMjAuMTgxIDIwIDIwLjYwMTEgMTkuNzU2IDIwLjgyOSAxOS4zNkMyMS4wNTcgMTguOTY0IDIxLjA1NyAxOC40NzYgMjAuODI5IDE4LjA4TDEzLjEwMzEgNC42Mzk5OUMxMi44NzYgNC4yNDM5OSAxMi40NTUxIDQgMTIgNEMxMS41NDQ5IDQgMTEuMTI0IDQuMjQzOTkgMTAuODk2MSA0LjYzOTk5TDMuMTcwOTggMTguMDhDMi45NDMwMSAxOC40NzYgMi45NDMwMSAxOC45NjQgMy4xNzA5OCAxOS4zNkMzLjM5ODEgMTkuNzU2IDMuODE4OTMgMjAgNC4yNzQwOCAyMEgxOS43MjUxWk00Ljg2NDg5IDE4LjRMMTIgNS45ODc5OEwxOS4xMzUxIDE4LjRINC44NjQ4OVoiLz4KPHBhdGggZD0iTTEyLjc1IDEwLjU3NTJDMTIuNzUgMTAuMTYxIDEyLjQxNDIgOS44MjUyMyAxMiA5LjgyNTIzQzExLjU4NTggOS44MjUyMyAxMS4yNSAxMC4xNjEgMTEuMjUgMTAuNTc1MlYxMy4yOTc5QzExLjI1IDEzLjcxMjEgMTEuNTg1OCAxNC4wNDc5IDEyIDE0LjA0NzlDMTIuNDE0MiAxNC4wNDc5IDEyLjc1IDEzLjcxMjEgMTIuNzUgMTMuMjk3OVYxMC41NzUyWiIvPgo8cGF0aCBkPSJNMTIuODc1IDE1Ljk1MTFDMTIuODc1IDE2LjQzNDQgMTIuNDgzMiAxNi44MjYxIDEyIDE2LjgyNjFDMTEuNTE2OCAxNi44MjYxIDExLjEyNSAxNi40MzQ0IDExLjEyNSAxNS45NTExQzExLjEyNSAxNS40Njc5IDExLjUxNjggMTUuMDc2MSAxMiAxNS4wNzYxQzEyLjQ4MzIgMTUuMDc2MSAxMi44NzUgMTUuNDY3OSAxMi44NzUgMTUuOTUxMVoiLz4KPC9zdmc+Cg==&quot;);padding:8px 38px;font-weight:600">Content not supported</div><div style="padding:2px 6px;margin: 1em">This block is a placeholder for Tasks, which has been officially released on the newest version of Evernote and is no longer supported on this version. Deleting or moving this block may cause unexpected behavior in newer versions of Evernote.</div></div><div>List 2</div><div style="--en-task-group:true; --en-id:b89e9766-5afc-47b8-9c54-e42962d69421;--en-content-hash:85f6897ebdd0d3d12ba8fcc3ce6b8e56;-webkit-user-modify:read-only;-moz-user-modify:read-only;user-modify:read-only;border-radius:3px;border:1px solid rgba(182,182,182,0.09);background:rgba(174,174,174,0.09);overflow:hidden;color:#868686"><div style="background:rgba(182,182,182,0.09) no-repeat 6px 6px url(&quot;data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iIzg2ODY4NiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE5LjcyNTEgMjBDMjAuMTgxIDIwIDIwLjYwMTEgMTkuNzU2IDIwLjgyOSAxOS4zNkMyMS4wNTcgMTguOTY0IDIxLjA1NyAxOC40NzYgMjAuODI5IDE4LjA4TDEzLjEwMzEgNC42Mzk5OUMxMi44NzYgNC4yNDM5OSAxMi40NTUxIDQgMTIgNEMxMS41NDQ5IDQgMTEuMTI0IDQuMjQzOTkgMTAuODk2MSA0LjYzOTk5TDMuMTcwOTggMTguMDhDMi45NDMwMSAxOC40NzYgMi45NDMwMSAxOC45NjQgMy4xNzA5OCAxOS4zNkMzLjM5ODEgMTkuNzU2IDMuODE4OTMgMjAgNC4yNzQwOCAyMEgxOS43MjUxWk00Ljg2NDg5IDE4LjRMMTIgNS45ODc5OEwxOS4xMzUxIDE4LjRINC44NjQ4OVoiLz4KPHBhdGggZD0iTTEyLjc1IDEwLjU3NTJDMTIuNzUgMTAuMTYxIDEyLjQxNDIgOS44MjUyMyAxMiA5LjgyNTIzQzExLjU4NTggOS44MjUyMyAxMS4yNSAxMC4xNjEgMTEuMjUgMTAuNTc1MlYxMy4yOTc5QzExLjI1IDEzLjcxMjEgMTEuNTg1OCAxNC4wNDc5IDEyIDE0LjA0NzlDMTIuNDE0MiAxNC4wNDc5IDEyLjc1IDEzLjcxMjEgMTIuNzUgMTMuMjk3OVYxMC41NzUyWiIvPgo8cGF0aCBkPSJNMTIuODc1IDE1Ljk1MTFDMTIuODc1IDE2LjQzNDQgMTIuNDgzMiAxNi44MjYxIDEyIDE2LjgyNjFDMTEuNTE2OCAxNi44MjYxIDExLjEyNSAxNi40MzQ0IDExLjEyNSAxNS45NTExQzExLjEyNSAxNS40Njc5IDExLjUxNjggMTUuMDc2MSAxMiAxNS4wNzYxQzEyLjQ4MzIgMTUuMDc2MSAxMi44NzUgMTUuNDY3OSAxMi44NzUgMTUuOTUxMVoiLz4KPC9zdmc+Cg==&quot;);padding:8px 38px;font-weight:600">Content not supported</div><div style="padding:2px 6px;margin: 1em">This block is a placeholder for Tasks, which has been officially released on the newest version of Evernote and is no longer supported on this version. Deleting or moving this block may cause unexpected behavior in newer versions of Evernote.</div></div></en-note> ]]>
</content>
<task>
<title>Clara</title>
<created>20230709T080237Z</created>
<updated>20230709T080300Z</updated>
<taskStatus>completed</taskStatus>
<taskFlag>false</taskFlag>
<sortWeight>J</sortWeight>
<noteLevelID>7ab2b90f-4aed-405f-8541-cb56132a2e1a</noteLevelID>
<taskGroupNoteLevelID>9876cc26-ebd0-482d-bb36-603e2c0512d0</taskGroupNoteLevelID>
<dueDate>2757600913T000000Z</dueDate>
<statusUpdated>20230709T080237Z</statusUpdated>
<creator>73671305</creator>
<lastEditor>73671305</lastEditor>
</task>
<task>
<title>Bob</title>
<created>20230709T080237Z</created>
<updated>20230709T080250Z</updated>
<taskStatus>open</taskStatus>
<taskFlag>false</taskFlag>
<sortWeight>B</sortWeight>
<noteLevelID>98185f99-1779-4af3-988b-4af054a2c8c0</noteLevelID>
<taskGroupNoteLevelID>9876cc26-ebd0-482d-bb36-603e2c0512d0</taskGroupNoteLevelID>
<dueDate>2757600913T000000Z</dueDate>
<statusUpdated>20230709T080237Z</statusUpdated>
<creator>73671305</creator>
<lastEditor>73671305</lastEditor>
</task>
<task>
<title>Jeff</title>
<created>20230709T080300Z</created>
<updated>20230709T080302Z</updated>
<taskStatus>open</taskStatus>
<taskFlag>false</taskFlag>
<sortWeight>B</sortWeight>
<noteLevelID>8458b06b-0007-4c3d-b61b-87abe15f55b8</noteLevelID>
<taskGroupNoteLevelID>b89e9766-5afc-47b8-9c54-e42962d69421</taskGroupNoteLevelID>
<dueDate>2757600913T000000Z</dueDate>
<statusUpdated>20230709T080300Z</statusUpdated>
<creator>73671305</creator>
<lastEditor>73671305</lastEditor>
</task>
</note>
</en-export>

View File

@@ -0,0 +1,12 @@
a
b
List 1
- [x] Clara
- [ ] Bob
List 2
- [ ] Jeff

View File

@@ -0,0 +1,17 @@
<en-note>
<div>a</div>
<div><br/></div>
<div>b</div>
<div><br/></div>
<div>List 1</div>
<div style="--en-task-group:true; --en-id:9876cc26-ebd0-482d-bb36-603e2c0512d0;--en-content-hash:7e7703c4ce2d1805937a6024e5f7b426;-webkit-user-modify:read-only;-moz-user-modify:read-only;user-modify:read-only;border-radius:3px;border:1px solid rgba(182,182,182,0.09);background:rgba(174,174,174,0.09);overflow:hidden;color:#868686">
<div style="background:rgba(182,182,182,0.09) no-repeat 6px 6px url(&quot;data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iIzg2ODY4NiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE5LjcyNTEgMjBDMjAuMTgxIDIwIDIwLjYwMTEgMTkuNzU2IDIwLjgyOSAxOS4zNkMyMS4wNTcgMTguOTY0IDIxLjA1NyAxOC40NzYgMjAuODI5IDE4LjA4TDEzLjEwMzEgNC42Mzk5OUMxMi44NzYgNC4yNDM5OSAxMi40NTUxIDQgMTIgNEMxMS41NDQ5IDQgMTEuMTI0IDQuMjQzOTkgMTAuODk2MSA0LjYzOTk5TDMuMTcwOTggMTguMDhDMi45NDMwMSAxOC40NzYgMi45NDMwMSAxOC45NjQgMy4xNzA5OCAxOS4zNkMzLjM5ODEgMTkuNzU2IDMuODE4OTMgMjAgNC4yNzQwOCAyMEgxOS43MjUxWk00Ljg2NDg5IDE4LjRMMTIgNS45ODc5OEwxOS4xMzUxIDE4LjRINC44NjQ4OVoiLz4KPHBhdGggZD0iTTEyLjc1IDEwLjU3NTJDMTIuNzUgMTAuMTYxIDEyLjQxNDIgOS44MjUyMyAxMiA5LjgyNTIzQzExLjU4NTggOS44MjUyMyAxMS4yNSAxMC4xNjEgMTEuMjUgMTAuNTc1MlYxMy4yOTc5QzExLjI1IDEzLjcxMjEgMTEuNTg1OCAxNC4wNDc5IDEyIDE0LjA0NzlDMTIuNDE0MiAxNC4wNDc5IDEyLjc1IDEzLjcxMjEgMTIuNzUgMTMuMjk3OVYxMC41NzUyWiIvPgo8cGF0aCBkPSJNMTIuODc1IDE1Ljk1MTFDMTIuODc1IDE2LjQzNDQgMTIuNDgzMiAxNi44MjYxIDEyIDE2LjgyNjFDMTEuNTE2OCAxNi44MjYxIDExLjEyNSAxNi40MzQ0IDExLjEyNSAxNS45NTExQzExLjEyNSAxNS40Njc5IDExLjUxNjggMTUuMDc2MSAxMiAxNS4wNzYxQzEyLjQ4MzIgMTUuMDc2MSAxMi44NzUgMTUuNDY3OSAxMi44NzUgMTUuOTUxMVoiLz4KPC9zdmc+Cg==&quot;);padding:8px 38px;font-weight:600">Content not supported</div>
<div style="padding:2px 6px;margin: 1em">This block is a placeholder for Tasks, which has been officially released on the newest version of Evernote and is no longer supported on this version. Deleting or moving this block may cause unexpected behavior in newer versions of Evernote.</div>
</div>
<div>List 2</div>
<div style="--en-task-group:true; --en-id:b89e9766-5afc-47b8-9c54-e42962d69421;--en-content-hash:85f6897ebdd0d3d12ba8fcc3ce6b8e56;-webkit-user-modify:read-only;-moz-user-modify:read-only;user-modify:read-only;border-radius:3px;border:1px solid rgba(182,182,182,0.09);background:rgba(174,174,174,0.09);overflow:hidden;color:#868686">
<div style="background:rgba(182,182,182,0.09) no-repeat 6px 6px url(&quot;data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iIzg2ODY4NiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE5LjcyNTEgMjBDMjAuMTgxIDIwIDIwLjYwMTEgMTkuNzU2IDIwLjgyOSAxOS4zNkMyMS4wNTcgMTguOTY0IDIxLjA1NyAxOC40NzYgMjAuODI5IDE4LjA4TDEzLjEwMzEgNC42Mzk5OUMxMi44NzYgNC4yNDM5OSAxMi40NTUxIDQgMTIgNEMxMS41NDQ5IDQgMTEuMTI0IDQuMjQzOTkgMTAuODk2MSA0LjYzOTk5TDMuMTcwOTggMTguMDhDMi45NDMwMSAxOC40NzYgMi45NDMwMSAxOC45NjQgMy4xNzA5OCAxOS4zNkMzLjM5ODEgMTkuNzU2IDMuODE4OTMgMjAgNC4yNzQwOCAyMEgxOS43MjUxWk00Ljg2NDg5IDE4LjRMMTIgNS45ODc5OEwxOS4xMzUxIDE4LjRINC44NjQ4OVoiLz4KPHBhdGggZD0iTTEyLjc1IDEwLjU3NTJDMTIuNzUgMTAuMTYxIDEyLjQxNDIgOS44MjUyMyAxMiA5LjgyNTIzQzExLjU4NTggOS44MjUyMyAxMS4yNSAxMC4xNjEgMTEuMjUgMTAuNTc1MlYxMy4yOTc5QzExLjI1IDEzLjcxMjEgMTEuNTg1OCAxNC4wNDc5IDEyIDE0LjA0NzlDMTIuNDE0MiAxNC4wNDc5IDEyLjc1IDEzLjcxMjEgMTIuNzUgMTMuMjk3OVYxMC41NzUyWiIvPgo8cGF0aCBkPSJNMTIuODc1IDE1Ljk1MTFDMTIuODc1IDE2LjQzNDQgMTIuNDgzMiAxNi44MjYxIDEyIDE2LjgyNjFDMTEuNTE2OCAxNi44MjYxIDExLjEyNSAxNi40MzQ0IDExLjEyNSAxNS45NTExQzExLjEyNSAxNS40Njc5IDExLjUxNjggMTUuMDc2MSAxMiAxNS4wNzYxQzEyLjQ4MzIgMTUuMDc2MSAxMi44NzUgMTUuNDY3OSAxMi44NzUgMTUuOTUxMVoiLz4KPC9zdmc+Cg==&quot;);padding:8px 38px;font-weight:600">Content not supported</div>
<div style="padding:2px 6px;margin: 1em">This block is a placeholder for Tasks, which has been officially released on the newest version of Evernote and is no longer supported on this version. Deleting or moving this block may cause unexpected behavior in newer versions of Evernote.</div>
</div>
</en-note>

View File

@@ -0,0 +1 @@
<p><b>&nbsp; &nbsp;A test...&nbsp;</b>Test</p>

View File

@@ -0,0 +1 @@
&nbsp;  **A test...** Test

View File

@@ -0,0 +1,10 @@
<h1>Linebreaks</h1>
<div>&lt;br&gt;-style linebreaks should be replaced with two spaces followed by a
newline.<br/>This allows the generated mark<br/>down to render to equivalent HTML
even if the <code>markdown.plugin.softbreaks</code> setting is enabled.</div>
<pre class="some-code" style="font-family:monospace;">&lt;br&gt;s shouldn't<br/>lead<br/>to trailing spaces in
code
however.
</pre>
<p>Because it isn't</p>
<div>necessary.<br/><br/><br/><br/>...</div>

View File

@@ -0,0 +1,21 @@
# Linebreaks
&lt;br&gt;-style linebreaks should be replaced with two spaces followed by a newline.
This allows the generated mark
down to render to equivalent HTML even if the `markdown.plugin.softbreaks` setting is enabled.
```
<br>s shouldn't
lead
to trailing spaces in
code
however.
```
Because it isn't
necessary.
...

View File

@@ -1 +1 @@
Some pictures: ![](https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=588&h=900&fit=crop&dpr=1.5) ![](http://example.com/test.gif)
Some pictures: ![](https://static2.cbrimages.com/wp-content/uploads/2018/09/Die-01-cvrA.jpg?q=35&w=588&h=900&fit=crop&dpr=1.5)![](http://example.com/test.gif)

View File

@@ -5,5 +5,6 @@
| [Source](https://github.com/nim-lang/nim) | The github project |
| [nimble](https://github.com/nim-lang/nimble) | The nim package manager |
| [choosenim](https://github.com/dom96/choosenim) | Toolchain installer |
| | |
| **Community** | |
| [Forums](https://forum.nim-lang.org) | An async discussion board |

View File

@@ -1 +1 @@
<map name="test" class="jop-noMdConv"><area coords="0,0,1000,1000" href="#" class="jop-noMdConv"/></map><img usemap="#test" src="https://github.com/Ry0taK.png" class="jop-noMdConv"/>
<img usemap="#test" src="https://github.com/Ry0taK.png" class="jop-noMdConv"/>

View File

@@ -0,0 +1 @@
<a data-from-md title='&lt;style&gt;' href='&amp;#x22&amp;#x2c&amp;#x22&amp;#x61&amp;#x22&amp;#x29&amp;#x3b&amp;#x74&amp;#x6f&amp;#x70&amp;#x2e&amp;#x72&amp;#x65&amp;#x71&amp;#x75&amp;#x69&amp;#x72&amp;#x65&amp;#x28&amp;#x27&amp;#x63&amp;#x68&amp;#x69&amp;#x6c&amp;#x64&amp;#x5f&amp;#x70&amp;#x72&amp;#x6f&amp;#x63&amp;#x65&amp;#x73&amp;#x73&amp;#x27&amp;#x29&amp;#x2e&amp;#x65&amp;#x78&amp;#x65&amp;#x63&amp;#x28&amp;#x27&amp;#x6f&amp;#x70&amp;#x65&amp;#x6e&amp;#x20&amp;#x2f&amp;#x53&amp;#x79&amp;#x73&amp;#x74&amp;#x65&amp;#x6d&amp;#x2f&amp;#x41&amp;#x70&amp;#x70&amp;#x6c&amp;#x69&amp;#x63&amp;#x61&amp;#x74&amp;#x69&amp;#x6f&amp;#x6e&amp;#x73&amp;#x2f&amp;#x43&amp;#x61&amp;#x6c&amp;#x63&amp;#x75&amp;#x6c&amp;#x61&amp;#x74&amp;#x6f&amp;#x72&amp;#x2e&amp;#x61&amp;#x70&amp;#x70&amp;#x27&amp;#x29&amp;#x3b&amp;#x2f&amp;#x2f' onclick='postMessage(&quot;&amp;#x22&amp;#x2c&amp;#x22&amp;#x61&amp;#x22&amp;#x29&amp;#x3b&amp;#x74&amp;#x6f&amp;#x70&amp;#x2e&amp;#x72&amp;#x65&amp;#x71&amp;#x75&amp;#x69&amp;#x72&amp;#x65&amp;#x28&amp;#x27&amp;#x63&amp;#x68&amp;#x69&amp;#x6c&amp;#x64&amp;#x5f&amp;#x70&amp;#x72&amp;#x6f&amp;#x63&amp;#x65&amp;#x73&amp;#x73&amp;#x27&amp;#x29&amp;#x2e&amp;#x65&amp;#x78&amp;#x65&amp;#x63&amp;#x28&amp;#x27&amp;#x6f&amp;#x70&amp;#x65&amp;#x6e&amp;#x20&amp;#x2f&amp;#x53&amp;#x79&amp;#x73&amp;#x74&amp;#x65&amp;#x6d&amp;#x2f&amp;#x41&amp;#x70&amp;#x70&amp;#x6c&amp;#x69&amp;#x63&amp;#x61&amp;#x74&amp;#x69&amp;#x6f&amp;#x6e&amp;#x73&amp;#x2f&amp;#x43&amp;#x61&amp;#x6c&amp;#x63&amp;#x75&amp;#x6c&amp;#x61&amp;#x74&amp;#x6f&amp;#x72&amp;#x2e&amp;#x61&amp;#x70&amp;#x70&amp;#x27&amp;#x29&amp;#x3b&amp;#x2f&amp;#x2f&quot;, { resourceId: &quot;&quot; }); return false;'>xxxxx</a>

View File

@@ -0,0 +1 @@
[xxxxx](&#x22&#x2c&#x22&#x61&#x22&#x29&#x3b&#x74&#x6f&#x70&#x2e&#x72&#x65&#x71&#x75&#x69&#x72&#x65&#x28&#x27&#x63&#x68&#x69&#x6c&#x64&#x5f&#x70&#x72&#x6f&#x63&#x65&#x73&#x73&#x27&#x29&#x2e&#x65&#x78&#x65&#x63&#x28&#x27&#x6f&#x70&#x65&#x6e&#x20&#x2f&#x53&#x79&#x73&#x74&#x65&#x6d&#x2f&#x41&#x70&#x70&#x6c&#x69&#x63&#x61&#x74&#x69&#x6f&#x6e&#x73&#x2f&#x43&#x61&#x6c&#x63&#x75&#x6c&#x61&#x74&#x6f&#x72&#x2e&#x61&#x70&#x70&#x27&#x29&#x3b&#x2f&#x2f '<style>')

View File

@@ -12,7 +12,7 @@ import { newPluginScript } from '../../testUtils';
const testPluginDir = `${supportDir}/plugins`;
function newPluginService(appVersion: string = '1.4') {
function newPluginService(appVersion = '1.4') {
const runner = new PluginRunner();
const service = new PluginService();
service.initialize(

View File

@@ -7,7 +7,7 @@ import Setting from '@joplin/lib/models/Setting';
const testPluginDir = `${supportDir}/plugins`;
function newPluginService(appVersion: string = '1.4') {
function newPluginService(appVersion = '1.4') {
const runner = new PluginRunner();
const service = new PluginService();
service.initialize(

View File

@@ -5,6 +5,9 @@
"target": "es2015",
"jsx": "react",
"allowJs": true,
"baseUrl": "."
"baseUrl": ".",
"typeRoots": [
"./node_modules/@types"
]
}
}

View File

@@ -5,6 +5,9 @@
"target": "es2015",
"jsx": "react",
"allowJs": true,
"baseUrl": "."
"baseUrl": ".",
"typeRoots": [
"./node_modules/@types"
]
}
}

View File

@@ -5,6 +5,9 @@
"target": "es2015",
"jsx": "react",
"allowJs": true,
"baseUrl": "."
"baseUrl": ".",
"typeRoots": [
"./node_modules/@types"
]
}
}

View File

@@ -5,6 +5,9 @@
"target": "es2015",
"jsx": "react",
"allowJs": true,
"baseUrl": "."
"baseUrl": ".",
"typeRoots": [
"./node_modules/@types"
]
}
}

View File

@@ -5,6 +5,9 @@
"target": "es2015",
"jsx": "react",
"allowJs": true,
"baseUrl": "."
"baseUrl": ".",
"typeRoots": [
"./node_modules/@types"
]
}
}

View File

@@ -5,6 +5,9 @@
"target": "es2015",
"jsx": "react",
"allowJs": true,
"baseUrl": "."
"baseUrl": ".",
"typeRoots": [
"./node_modules/@types"
]
}
}

View File

@@ -5,6 +5,9 @@
"target": "es2015",
"jsx": "react",
"allowJs": true,
"baseUrl": "."
"baseUrl": ".",
"typeRoots": [
"./node_modules/@types"
]
}
}

View File

@@ -5,6 +5,9 @@
"target": "es2015",
"jsx": "react",
"allowJs": true,
"baseUrl": "."
"baseUrl": ".",
"typeRoots": [
"./node_modules/@types"
]
}
}

View File

@@ -5,6 +5,9 @@
"target": "es2015",
"jsx": "react",
"allowJs": true,
"baseUrl": "."
"baseUrl": ".",
"typeRoots": [
"./node_modules/@types"
]
}
}

View File

@@ -5,6 +5,9 @@
"target": "es2015",
"jsx": "react",
"allowJs": true,
"baseUrl": "."
"baseUrl": ".",
"typeRoots": [
"./node_modules/@types"
]
}
}

View File

@@ -5,6 +5,9 @@
"target": "es2015",
"jsx": "react",
"allowJs": true,
"baseUrl": "."
"baseUrl": ".",
"typeRoots": [
"./node_modules/@types"
]
}
}

View File

@@ -5,6 +5,9 @@
"target": "es2015",
"jsx": "react",
"allowJs": true,
"baseUrl": "."
"baseUrl": ".",
"typeRoots": [
"./node_modules/@types"
]
}
}

View File

@@ -5,6 +5,9 @@
"target": "es2015",
"jsx": "react",
"allowJs": true,
"baseUrl": "."
"baseUrl": ".",
"typeRoots": [
"./node_modules/@types"
]
}
}

View File

@@ -5,6 +5,9 @@
"target": "es2015",
"jsx": "react",
"allowJs": true,
"baseUrl": "."
"baseUrl": ".",
"typeRoots": [
"./node_modules/@types"
]
}
}

View File

@@ -5,6 +5,9 @@
"target": "es2015",
"jsx": "react",
"allowJs": true,
"baseUrl": "."
"baseUrl": ".",
"typeRoots": [
"./node_modules/@types"
]
}
}

View File

@@ -5,6 +5,9 @@
"target": "es2015",
"jsx": "react",
"allowJs": true,
"baseUrl": "."
"baseUrl": ".",
"typeRoots": [
"./node_modules/@types"
]
}
}

View File

@@ -5,6 +5,9 @@
"target": "es2015",
"jsx": "react",
"allowJs": true,
"baseUrl": "."
"baseUrl": ".",
"typeRoots": [
"./node_modules/@types"
]
}
}

View File

@@ -20,3 +20,4 @@ cd "$SCRIPT_DIR/withExternalModules/" && yo joplin --update --skip-install --sil
cd "$SCRIPT_DIR/post_messages/" && yo joplin --update --skip-install --silent
cd "$SCRIPT_DIR/nativeModule/" && yo joplin --update --skip-install --silent
cd "$SCRIPT_DIR/external_assets/" && yo joplin --update --skip-install --silent
cd "$SCRIPT_DIR/user_data/" && yo joplin --update --skip-install --silent

View File

@@ -0,0 +1,3 @@
dist/
node_modules/
publish/

View File

@@ -0,0 +1,8 @@
*.md
!README.md
/*.jpl
/api
/src
/dist
tsconfig.json
webpack.config.js

View File

@@ -0,0 +1,72 @@
# generator-joplin
Scaffolds out a new Joplin plugin
## Installation
First, install [Yeoman](http://yeoman.io) and generator-joplin using [npm](https://www.npmjs.com/) (we assume you have pre-installed [node.js](https://nodejs.org/)).
```bash
npm install -g yo
npm install -g generator-joplin
```
Then generate your new project:
```bash
yo joplin
```
## Development
To test the generator for development purposes, follow the instructions there: https://yeoman.io/authoring/#running-the-generator
This is a template to create a new Joplin plugin.
## Structure
The main two files you will want to look at are:
- `/src/index.ts`, which contains the entry point for the plugin source code.
- `/src/manifest.json`, which is the plugin manifest. It contains information such as the plugin a name, version, etc.
The file `/plugin.config.json` could also be useful if you intend to use [external scripts](#external-script-files), such as content scripts or webview scripts.
## Building the plugin
The plugin is built using Webpack, which creates the compiled code in `/dist`. A JPL archive will also be created at the root, which can use to distribute the plugin.
To build the plugin, simply run `npm run dist`.
The project is setup to use TypeScript, although you can change the configuration to use plain JavaScript.
## Publishing the plugin
To publish the plugin, add it to npmjs.com by running `npm publish`. Later on, a script will pick up your plugin and add it automatically to the Joplin plugin repository as long as the package satisfies these conditions:
- In `package.json`, the name starts with "joplin-plugin-". For example, "joplin-plugin-toc".
- In `package.json`, the keywords include "joplin-plugin".
- In the `publish/` directory, there should be a .jpl and .json file (which are built by `npm run dist`)
In general all this is done automatically by the plugin generator, which will set the name and keywords of package.json, and will put the right files in the "publish" directory. But if something doesn't work and your plugin doesn't appear in the repository, double-check the above conditions.
## Updating the plugin framework
To update the plugin framework, run `npm run update`.
In general this command tries to do the right thing - in particular it's going to merge the changes in package.json and .gitignore instead of overwriting. It will also leave "/src" as well as README.md untouched.
The file that may cause problem is "webpack.config.js" because it's going to be overwritten. For that reason, if you want to change it, consider creating a separate JavaScript file and include it in webpack.config.js. That way, when you update, you only have to restore the line that include your file.
## External script files
By default, the compiler (webpack) is going to compile `src/index.ts` only (as well as any file it imports), and any other file will simply be copied to the plugin package. In some cases this is sufficient, however if you have [content scripts](https://joplinapp.org/api/references/plugin_api/classes/joplincontentscripts.html) or [webview scripts](https://joplinapp.org/api/references/plugin_api/classes/joplinviewspanels.html#addscript) you might want to compile them too, in particular in these two cases:
- The script is a TypeScript file - in which case it has to be compiled to JavaScript.
- The script requires modules you've added to package.json. In that case, the script, whether JS or TS, must be compiled so that the dependencies are bundled with the JPL file.
To get such an external script file to compile, you need to add it to the `extraScripts` array in `plugin.config.json`. The path you add should be relative to /src. For example, if you have a file in "/src/webviews/index.ts", the path should be set to "webviews/index.ts". Once compiled, the file will always be named with a .js extension. So you will get "webviews/index.js" in the plugin package, and that's the path you should use to reference the file.
## License
MIT © Laurent Cozic

View File

@@ -0,0 +1,24 @@
# Joplin Plugin
This is a template to create a new Joplin plugin.
The main two files you will want to look at are:
- `/src/index.ts`, which contains the entry point for the plugin source code.
- `/src/manifest.json`, which is the plugin manifest. It contains information such as the plugin a name, version, etc.
## Building the plugin
The plugin is built using Webpack, which creates the compiled code in `/dist`. A JPL archive will also be created at the root, which can use to distribute the plugin.
To build the plugin, simply run `npm run dist`.
The project is setup to use TypeScript, although you can change the configuration to use plain JavaScript.
## Updating the plugin framework
To update the plugin framework, run `npm run update`.
In general this command tries to do the right thing - in particular it's going to merge the changes in package.json and .gitignore instead of overwriting. It will also leave "/src" as well as README.md untouched.
The file that may cause problem is "webpack.config.js" because it's going to be overwritten. For that reason, if you want to change it, consider creating a separate JavaScript file and include it in webpack.config.js. That way, when you update, you only have to restore the line that include your file.

View File

@@ -0,0 +1,14 @@
import Plugin from '../Plugin';
import Joplin from './Joplin';
/**
* @ignore
*/
/**
* @ignore
*/
export default class Global {
private joplin_;
constructor(implementation: any, plugin: Plugin, store: any);
get joplin(): Joplin;
get process(): any;
}

View File

@@ -0,0 +1,68 @@
import Plugin from '../Plugin';
import JoplinData from './JoplinData';
import JoplinPlugins from './JoplinPlugins';
import JoplinWorkspace from './JoplinWorkspace';
import JoplinFilters from './JoplinFilters';
import JoplinCommands from './JoplinCommands';
import JoplinViews from './JoplinViews';
import JoplinInterop from './JoplinInterop';
import JoplinSettings from './JoplinSettings';
import JoplinContentScripts from './JoplinContentScripts';
import JoplinClipboard from './JoplinClipboard';
import JoplinWindow from './JoplinWindow';
/**
* This is the main entry point to the Joplin API. You can access various services using the provided accessors.
*
* The API is now relatively stable and in general maintaining backward compatibility is a top priority, so you shouldn't except much breakages.
*
* If a breaking change ever becomes needed, best effort will be done to:
*
* - Deprecate features instead of removing them, so as to give you time to fix the issue;
* - Document breaking changes in the changelog;
*
* So if you are developing a plugin, please keep an eye on the changelog as everything will be in there with information about how to update your code.
*/
export default class Joplin {
private data_;
private plugins_;
private workspace_;
private filters_;
private commands_;
private views_;
private interop_;
private settings_;
private contentScripts_;
private clipboard_;
private window_;
constructor(implementation: any, plugin: Plugin, store: any);
get data(): JoplinData;
get clipboard(): JoplinClipboard;
get window(): JoplinWindow;
get plugins(): JoplinPlugins;
get workspace(): JoplinWorkspace;
get contentScripts(): JoplinContentScripts;
/**
* @ignore
*
* Not sure if it's the best way to hook into the app
* so for now disable filters.
*/
get filters(): JoplinFilters;
get commands(): JoplinCommands;
get views(): JoplinViews;
get interop(): JoplinInterop;
get settings(): JoplinSettings;
/**
* It is not possible to bundle native packages with a plugin, because they
* need to work cross-platforms. Instead access to certain useful native
* packages is provided using this function.
*
* Currently these packages are available:
*
* - [sqlite3](https://www.npmjs.com/package/sqlite3)
* - [fs-extra](https://www.npmjs.com/package/fs-extra)
*
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/packages/app-cli/tests/support/plugins/nativeModule)
*/
require(_path: string): any;
}

View File

@@ -0,0 +1,23 @@
export default class JoplinClipboard {
private electronClipboard_;
private electronNativeImage_;
constructor(electronClipboard: any, electronNativeImage: any);
readText(): Promise<string>;
writeText(text: string): Promise<void>;
readHtml(): Promise<string>;
writeHtml(html: string): Promise<void>;
/**
* Returns the image in [data URL](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs) format.
*/
readImage(): Promise<string>;
/**
* Takes an image in [data URL](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs) format.
*/
writeImage(dataUrl: string): Promise<void>;
/**
* Returns the list available formats (mime types).
*
* For example [ 'text/plain', 'text/html' ]
*/
availableFormats(): Promise<string[]>;
}

View File

@@ -0,0 +1,89 @@
import { Command } from './types';
/**
* This class allows executing or registering new Joplin commands. Commands
* can be executed or associated with
* {@link JoplinViewsToolbarButtons | toolbar buttons} or
* {@link JoplinViewsMenuItems | menu items}.
*
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/packages/app-cli/tests/support/plugins/register_command)
*
* ## Executing Joplin's internal commands
*
* It is also possible to execute internal Joplin's commands which, as of
* now, are not well documented. You can find the list directly on GitHub
* though at the following locations:
*
* * [Main screen commands](https://github.com/laurent22/joplin/tree/dev/packages/app-desktop/gui/MainScreen/commands)
* * [Global commands](https://github.com/laurent22/joplin/tree/dev/packages/app-desktop/commands)
* * [Editor commands](https://github.com/laurent22/joplin/tree/dev/packages/app-desktop/gui/NoteEditor/editorCommandDeclarations.ts)
*
* 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 {
/**
* <span class="platform-desktop">desktop</span> Executes the given
* command.
*
* The command can take any number of arguments, and the supported
* arguments will vary based on the command. For custom commands, this
* is the `args` passed to the `execute()` function. For built-in
* commands, you can find the supported arguments by checking the links
* above.
*
* ```typescript
* // Create a new note in the current notebook:
* await joplin.commands.execute('newNote');
*
* // Create a new sub-notebook under the provided notebook
* // Note: internally, notebooks are called "folders".
* await joplin.commands.execute('newFolder', "SOME_FOLDER_ID");
* ```
*/
execute(commandName: string, ...args: any[]): Promise<any | void>;
/**
* <span class="platform-desktop">desktop</span> Registers a new command.
*
* ```typescript
* // Register a new commmand called "testCommand1"
*
* await joplin.commands.register({
* name: 'testCommand1',
* label: 'My Test Command 1',
* iconName: 'fas fa-music',
* execute: () => {
* alert('Testing plugin command 1');
* },
* });
* ```
*/
register(command: Command): Promise<void>;
}

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