You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-12-26 23:38:08 +02:00
Compare commits
147 Commits
android_ci
...
website_tr
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
70e5c9f1eb | ||
|
|
41f8109756 | ||
|
|
58acc0b122 | ||
|
|
5b2d61541f | ||
|
|
5efa227e70 | ||
|
|
276f066b7b | ||
|
|
5b0a9b9b56 | ||
|
|
11d31ad488 | ||
|
|
ceb6a0b003 | ||
|
|
5dcb896770 | ||
|
|
9595e2a226 | ||
|
|
dbd480913d | ||
|
|
09ac21e99e | ||
|
|
457cb05162 | ||
|
|
d1e064532d | ||
|
|
3477ee68ac | ||
|
|
adc7d8e2f1 | ||
|
|
cd7dd12d3c | ||
|
|
c0541950a7 | ||
|
|
67f7e2e7ff | ||
|
|
beec324677 | ||
|
|
fda62a97b5 | ||
|
|
ae49199f36 | ||
|
|
5778d7a3b3 | ||
|
|
7d749d6b1e | ||
|
|
dc73899bde | ||
|
|
a91b5f4bb6 | ||
|
|
55cb547664 | ||
|
|
33bdaaf385 | ||
|
|
1d9b0233aa | ||
|
|
855d6f62a3 | ||
|
|
3ae1ebb2f4 | ||
|
|
089b53e514 | ||
|
|
d93a210de6 | ||
|
|
4544144f66 | ||
|
|
e5d3792335 | ||
|
|
c53d4fd757 | ||
|
|
83110bce76 | ||
|
|
0cfa07b1b0 | ||
|
|
341c9029c4 | ||
|
|
060e78577d | ||
|
|
ceb1db5379 | ||
|
|
9921f4eb00 | ||
|
|
b1f840622d | ||
|
|
64199704c2 | ||
|
|
33b96b4c65 | ||
|
|
81299384af | ||
|
|
1554e9dea5 | ||
|
|
5c430a3b0e | ||
|
|
9c74d18abf | ||
|
|
a40a5ef3bf | ||
|
|
fce571f38c | ||
|
|
f079fa3bdd | ||
|
|
b44b733090 | ||
|
|
d1089f9284 | ||
|
|
d2457a0079 | ||
|
|
7e407af638 | ||
|
|
3cee7b0858 | ||
|
|
ceb8e70dc7 | ||
|
|
b83aadbb7b | ||
|
|
3a8e2632a7 | ||
|
|
cf78ec2e22 | ||
|
|
35903572e1 | ||
|
|
e4254d6195 | ||
|
|
de4f8c75e5 | ||
|
|
1322e8cbcc | ||
|
|
7b94901129 | ||
|
|
5d49fcfe4e | ||
|
|
a2de167b95 | ||
|
|
a7213453c7 | ||
|
|
673653a141 | ||
|
|
7d135730bf | ||
|
|
456a20b8f8 | ||
|
|
48074c254d | ||
|
|
50f587cf02 | ||
|
|
79a627c14f | ||
|
|
a873898422 | ||
|
|
859b950106 | ||
|
|
7f13042c44 | ||
|
|
7e6a43de91 | ||
|
|
a3c88b6ec7 | ||
|
|
71efa09737 | ||
|
|
c19f7f814f | ||
|
|
97e88d7983 | ||
|
|
cc5ead7474 | ||
|
|
b823c729e7 | ||
|
|
4eac85bec6 | ||
|
|
7bfb6c0ee9 | ||
|
|
b879538da9 | ||
|
|
502b26e0b4 | ||
|
|
8d58ad7d86 | ||
|
|
c490aa8d90 | ||
|
|
9c95bc987e | ||
|
|
5e649bdc01 | ||
|
|
f653824874 | ||
|
|
ca5ec025c9 | ||
|
|
db8a231aa3 | ||
|
|
6f68c91c75 | ||
|
|
a038704b2a | ||
|
|
ab730e84e0 | ||
|
|
9e78e48370 | ||
|
|
c09567ef16 | ||
|
|
cf4f059a20 | ||
|
|
5325e85b9d | ||
|
|
1510b8fa0e | ||
|
|
c135361f70 | ||
|
|
e7be0f5d00 | ||
|
|
de9ce973b4 | ||
|
|
4d7ffdd8e0 | ||
|
|
6af18a0cfc | ||
|
|
d53c3f9f2d | ||
|
|
790a756f74 | ||
|
|
c00b71b5b1 | ||
|
|
a1051145bc | ||
|
|
a0c87d6d4b | ||
|
|
42cbd4fac8 | ||
|
|
3a19fe6879 | ||
|
|
290388b679 | ||
|
|
20518112e3 | ||
|
|
c31fce4e33 | ||
|
|
3ce548b005 | ||
|
|
c0903ad61b | ||
|
|
01062d4577 | ||
|
|
d0498b6274 | ||
|
|
26e5bd5550 | ||
|
|
7ccf38fdd6 | ||
|
|
38a24c4bd9 | ||
|
|
a05dbcd17b | ||
|
|
9ced656ede | ||
|
|
ac5854bf94 | ||
|
|
3823362eed | ||
|
|
6ce0b46748 | ||
|
|
e0bfa87522 | ||
|
|
f9460d4a14 | ||
|
|
2100940019 | ||
|
|
af100c1c4b | ||
|
|
2e52bb4c12 | ||
|
|
1b41a22487 | ||
|
|
c88b031b0a | ||
|
|
94b83ac28b | ||
|
|
67596d60e9 | ||
|
|
9d10c64ec6 | ||
|
|
94e7ed9a5f | ||
|
|
30513e7b59 | ||
|
|
b9c3442e9f | ||
|
|
9282dfed5a | ||
|
|
3b53a33cd5 |
@@ -96,6 +96,9 @@ packages/app-cli/app/command-sync.js.map
|
||||
packages/app-cli/app/command-testing.d.ts
|
||||
packages/app-cli/app/command-testing.js
|
||||
packages/app-cli/app/command-testing.js.map
|
||||
packages/app-cli/app/gui/StatusBarWidget.d.ts
|
||||
packages/app-cli/app/gui/StatusBarWidget.js
|
||||
packages/app-cli/app/gui/StatusBarWidget.js.map
|
||||
packages/app-cli/app/services/plugins/PluginRunner.d.ts
|
||||
packages/app-cli/app/services/plugins/PluginRunner.js
|
||||
packages/app-cli/app/services/plugins/PluginRunner.js.map
|
||||
@@ -534,9 +537,6 @@ packages/app-desktop/gui/NoteEditor/utils/clipboardUtils.test.js.map
|
||||
packages/app-desktop/gui/NoteEditor/utils/contextMenu.d.ts
|
||||
packages/app-desktop/gui/NoteEditor/utils/contextMenu.js
|
||||
packages/app-desktop/gui/NoteEditor/utils/contextMenu.js.map
|
||||
packages/app-desktop/gui/NoteEditor/utils/contextMenu.test.d.ts
|
||||
packages/app-desktop/gui/NoteEditor/utils/contextMenu.test.js
|
||||
packages/app-desktop/gui/NoteEditor/utils/contextMenu.test.js.map
|
||||
packages/app-desktop/gui/NoteEditor/utils/contextMenuUtils.d.ts
|
||||
packages/app-desktop/gui/NoteEditor/utils/contextMenuUtils.js
|
||||
packages/app-desktop/gui/NoteEditor/utils/contextMenuUtils.js.map
|
||||
@@ -552,6 +552,9 @@ packages/app-desktop/gui/NoteEditor/utils/types.js.map
|
||||
packages/app-desktop/gui/NoteEditor/utils/useDropHandler.d.ts
|
||||
packages/app-desktop/gui/NoteEditor/utils/useDropHandler.js
|
||||
packages/app-desktop/gui/NoteEditor/utils/useDropHandler.js.map
|
||||
packages/app-desktop/gui/NoteEditor/utils/useEffectiveNoteId.d.ts
|
||||
packages/app-desktop/gui/NoteEditor/utils/useEffectiveNoteId.js
|
||||
packages/app-desktop/gui/NoteEditor/utils/useEffectiveNoteId.js.map
|
||||
packages/app-desktop/gui/NoteEditor/utils/useFolder.d.ts
|
||||
packages/app-desktop/gui/NoteEditor/utils/useFolder.js
|
||||
packages/app-desktop/gui/NoteEditor/utils/useFolder.js.map
|
||||
@@ -618,6 +621,9 @@ packages/app-desktop/gui/PasswordInput/PasswordInput.js.map
|
||||
packages/app-desktop/gui/PdfViewer.d.ts
|
||||
packages/app-desktop/gui/PdfViewer.js
|
||||
packages/app-desktop/gui/PdfViewer.js.map
|
||||
packages/app-desktop/gui/PromptDialog.d.ts
|
||||
packages/app-desktop/gui/PromptDialog.js
|
||||
packages/app-desktop/gui/PromptDialog.js.map
|
||||
packages/app-desktop/gui/ResizableLayout/MoveButtons.d.ts
|
||||
packages/app-desktop/gui/ResizableLayout/MoveButtons.js
|
||||
packages/app-desktop/gui/ResizableLayout/MoveButtons.js.map
|
||||
@@ -780,9 +786,6 @@ packages/app-desktop/gui/utils/convertToScreenCoordinates.js.map
|
||||
packages/app-desktop/gui/utils/loadScript.d.ts
|
||||
packages/app-desktop/gui/utils/loadScript.js
|
||||
packages/app-desktop/gui/utils/loadScript.js.map
|
||||
packages/app-desktop/loadResources.testEnv.d.ts
|
||||
packages/app-desktop/loadResources.testEnv.js
|
||||
packages/app-desktop/loadResources.testEnv.js.map
|
||||
packages/app-desktop/plugins/GotoAnything.d.ts
|
||||
packages/app-desktop/plugins/GotoAnything.js
|
||||
packages/app-desktop/plugins/GotoAnything.js.map
|
||||
@@ -2304,15 +2307,27 @@ packages/tools/update-readme-sponsors.js.map
|
||||
packages/tools/updateMarkdownDoc.d.ts
|
||||
packages/tools/updateMarkdownDoc.js
|
||||
packages/tools/updateMarkdownDoc.js.map
|
||||
packages/tools/utils/translation.d.ts
|
||||
packages/tools/utils/translation.js
|
||||
packages/tools/utils/translation.js.map
|
||||
packages/tools/website/build.d.ts
|
||||
packages/tools/website/build.js
|
||||
packages/tools/website/build.js.map
|
||||
packages/tools/website/buildTranslations.d.ts
|
||||
packages/tools/website/buildTranslations.js
|
||||
packages/tools/website/buildTranslations.js.map
|
||||
packages/tools/website/updateDownloadPage.d.ts
|
||||
packages/tools/website/updateDownloadPage.js
|
||||
packages/tools/website/updateDownloadPage.js.map
|
||||
packages/tools/website/updateNews.d.ts
|
||||
packages/tools/website/updateNews.js
|
||||
packages/tools/website/updateNews.js.map
|
||||
packages/tools/website/utils/applyTranslations.d.ts
|
||||
packages/tools/website/utils/applyTranslations.js
|
||||
packages/tools/website/utils/applyTranslations.js.map
|
||||
packages/tools/website/utils/applyTranslations.test.d.ts
|
||||
packages/tools/website/utils/applyTranslations.test.js
|
||||
packages/tools/website/utils/applyTranslations.test.js.map
|
||||
packages/tools/website/utils/frontMatter.d.ts
|
||||
packages/tools/website/utils/frontMatter.js
|
||||
packages/tools/website/utils/frontMatter.js.map
|
||||
@@ -2331,6 +2346,9 @@ packages/tools/website/utils/parser.js.map
|
||||
packages/tools/website/utils/pressCarousel.d.ts
|
||||
packages/tools/website/utils/pressCarousel.js
|
||||
packages/tools/website/utils/pressCarousel.js.map
|
||||
packages/tools/website/utils/processTranslations.d.ts
|
||||
packages/tools/website/utils/processTranslations.js
|
||||
packages/tools/website/utils/processTranslations.js.map
|
||||
packages/tools/website/utils/render.d.ts
|
||||
packages/tools/website/utils/render.js
|
||||
packages/tools/website/utils/render.js.map
|
||||
|
||||
44
.github/workflows/build-android.yml
vendored
Normal file
44
.github/workflows/build-android.yml
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
# The goal of this action is to compile the Android debug build. That should
|
||||
# tell us automatically if something got broken when a dependency was changed.
|
||||
|
||||
name: react-native-android-build-apk
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
pre_job:
|
||||
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'
|
||||
|
||||
BuildAndroidDebug:
|
||||
needs: pre_job
|
||||
if: needs.pre_job.outputs.should_skip != 'true'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Install Linux dependencies
|
||||
run: |
|
||||
sudo apt-get update || true
|
||||
sudo apt-get install -y libsecret-1-dev
|
||||
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: '18'
|
||||
|
||||
- name: Install Yarn
|
||||
run: |
|
||||
corepack enable
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Install
|
||||
run: yarn install
|
||||
|
||||
- name: Build Android Release
|
||||
run: |
|
||||
cd packages/app-mobile/android && ./gradlew assembleDebug
|
||||
|
||||
11
.github/workflows/github-actions-main.yml
vendored
11
.github/workflows/github-actions-main.yml
vendored
@@ -2,9 +2,7 @@ name: Joplin Continuous Integration
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
pre_job:
|
||||
# continue-on-error: true # Uncomment once integration is finished
|
||||
runs-on: ubuntu-latest
|
||||
# Map a step output to a job output
|
||||
outputs:
|
||||
should_skip: ${{ steps.skip_check.outputs.should_skip }}
|
||||
steps:
|
||||
@@ -51,13 +49,6 @@ jobs:
|
||||
sudo apt-get install -y libsecret-1-dev
|
||||
sudo apt-get install -y translate-toolkit
|
||||
|
||||
# - name: Install macOS dependencies
|
||||
# if: runner.os == 'macOS'
|
||||
# run: |
|
||||
# brew update
|
||||
# brew install gettext
|
||||
# brew install translate-toolkit
|
||||
|
||||
- name: Install Docker Engine
|
||||
# if: runner.os == 'Linux' && startsWith(github.ref, 'refs/tags/server-v')
|
||||
if: runner.os == 'Linux'
|
||||
@@ -88,7 +79,7 @@ jobs:
|
||||
# Login to Docker only if we're on a server release tag. If we run this on
|
||||
# a pull request it will fail because the PR doesn't have access to
|
||||
# secrets
|
||||
- uses: docker/login-action@v1
|
||||
- uses: docker/login-action@v2
|
||||
if: runner.os == 'Linux' && startsWith(github.ref, 'refs/tags/server-v')
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
|
||||
30
.gitignore
vendored
30
.gitignore
vendored
@@ -84,6 +84,9 @@ packages/app-cli/app/command-sync.js.map
|
||||
packages/app-cli/app/command-testing.d.ts
|
||||
packages/app-cli/app/command-testing.js
|
||||
packages/app-cli/app/command-testing.js.map
|
||||
packages/app-cli/app/gui/StatusBarWidget.d.ts
|
||||
packages/app-cli/app/gui/StatusBarWidget.js
|
||||
packages/app-cli/app/gui/StatusBarWidget.js.map
|
||||
packages/app-cli/app/services/plugins/PluginRunner.d.ts
|
||||
packages/app-cli/app/services/plugins/PluginRunner.js
|
||||
packages/app-cli/app/services/plugins/PluginRunner.js.map
|
||||
@@ -522,9 +525,6 @@ packages/app-desktop/gui/NoteEditor/utils/clipboardUtils.test.js.map
|
||||
packages/app-desktop/gui/NoteEditor/utils/contextMenu.d.ts
|
||||
packages/app-desktop/gui/NoteEditor/utils/contextMenu.js
|
||||
packages/app-desktop/gui/NoteEditor/utils/contextMenu.js.map
|
||||
packages/app-desktop/gui/NoteEditor/utils/contextMenu.test.d.ts
|
||||
packages/app-desktop/gui/NoteEditor/utils/contextMenu.test.js
|
||||
packages/app-desktop/gui/NoteEditor/utils/contextMenu.test.js.map
|
||||
packages/app-desktop/gui/NoteEditor/utils/contextMenuUtils.d.ts
|
||||
packages/app-desktop/gui/NoteEditor/utils/contextMenuUtils.js
|
||||
packages/app-desktop/gui/NoteEditor/utils/contextMenuUtils.js.map
|
||||
@@ -540,6 +540,9 @@ packages/app-desktop/gui/NoteEditor/utils/types.js.map
|
||||
packages/app-desktop/gui/NoteEditor/utils/useDropHandler.d.ts
|
||||
packages/app-desktop/gui/NoteEditor/utils/useDropHandler.js
|
||||
packages/app-desktop/gui/NoteEditor/utils/useDropHandler.js.map
|
||||
packages/app-desktop/gui/NoteEditor/utils/useEffectiveNoteId.d.ts
|
||||
packages/app-desktop/gui/NoteEditor/utils/useEffectiveNoteId.js
|
||||
packages/app-desktop/gui/NoteEditor/utils/useEffectiveNoteId.js.map
|
||||
packages/app-desktop/gui/NoteEditor/utils/useFolder.d.ts
|
||||
packages/app-desktop/gui/NoteEditor/utils/useFolder.js
|
||||
packages/app-desktop/gui/NoteEditor/utils/useFolder.js.map
|
||||
@@ -606,6 +609,9 @@ packages/app-desktop/gui/PasswordInput/PasswordInput.js.map
|
||||
packages/app-desktop/gui/PdfViewer.d.ts
|
||||
packages/app-desktop/gui/PdfViewer.js
|
||||
packages/app-desktop/gui/PdfViewer.js.map
|
||||
packages/app-desktop/gui/PromptDialog.d.ts
|
||||
packages/app-desktop/gui/PromptDialog.js
|
||||
packages/app-desktop/gui/PromptDialog.js.map
|
||||
packages/app-desktop/gui/ResizableLayout/MoveButtons.d.ts
|
||||
packages/app-desktop/gui/ResizableLayout/MoveButtons.js
|
||||
packages/app-desktop/gui/ResizableLayout/MoveButtons.js.map
|
||||
@@ -768,9 +774,6 @@ packages/app-desktop/gui/utils/convertToScreenCoordinates.js.map
|
||||
packages/app-desktop/gui/utils/loadScript.d.ts
|
||||
packages/app-desktop/gui/utils/loadScript.js
|
||||
packages/app-desktop/gui/utils/loadScript.js.map
|
||||
packages/app-desktop/loadResources.testEnv.d.ts
|
||||
packages/app-desktop/loadResources.testEnv.js
|
||||
packages/app-desktop/loadResources.testEnv.js.map
|
||||
packages/app-desktop/plugins/GotoAnything.d.ts
|
||||
packages/app-desktop/plugins/GotoAnything.js
|
||||
packages/app-desktop/plugins/GotoAnything.js.map
|
||||
@@ -2292,15 +2295,27 @@ packages/tools/update-readme-sponsors.js.map
|
||||
packages/tools/updateMarkdownDoc.d.ts
|
||||
packages/tools/updateMarkdownDoc.js
|
||||
packages/tools/updateMarkdownDoc.js.map
|
||||
packages/tools/utils/translation.d.ts
|
||||
packages/tools/utils/translation.js
|
||||
packages/tools/utils/translation.js.map
|
||||
packages/tools/website/build.d.ts
|
||||
packages/tools/website/build.js
|
||||
packages/tools/website/build.js.map
|
||||
packages/tools/website/buildTranslations.d.ts
|
||||
packages/tools/website/buildTranslations.js
|
||||
packages/tools/website/buildTranslations.js.map
|
||||
packages/tools/website/updateDownloadPage.d.ts
|
||||
packages/tools/website/updateDownloadPage.js
|
||||
packages/tools/website/updateDownloadPage.js.map
|
||||
packages/tools/website/updateNews.d.ts
|
||||
packages/tools/website/updateNews.js
|
||||
packages/tools/website/updateNews.js.map
|
||||
packages/tools/website/utils/applyTranslations.d.ts
|
||||
packages/tools/website/utils/applyTranslations.js
|
||||
packages/tools/website/utils/applyTranslations.js.map
|
||||
packages/tools/website/utils/applyTranslations.test.d.ts
|
||||
packages/tools/website/utils/applyTranslations.test.js
|
||||
packages/tools/website/utils/applyTranslations.test.js.map
|
||||
packages/tools/website/utils/frontMatter.d.ts
|
||||
packages/tools/website/utils/frontMatter.js
|
||||
packages/tools/website/utils/frontMatter.js.map
|
||||
@@ -2319,6 +2334,9 @@ packages/tools/website/utils/parser.js.map
|
||||
packages/tools/website/utils/pressCarousel.d.ts
|
||||
packages/tools/website/utils/pressCarousel.js
|
||||
packages/tools/website/utils/pressCarousel.js.map
|
||||
packages/tools/website/utils/processTranslations.d.ts
|
||||
packages/tools/website/utils/processTranslations.js
|
||||
packages/tools/website/utils/processTranslations.js.map
|
||||
packages/tools/website/utils/render.d.ts
|
||||
packages/tools/website/utils/render.js
|
||||
packages/tools/website/utils/render.js.map
|
||||
|
||||
768
.yarn/releases/yarn-3.1.1.cjs
vendored
768
.yarn/releases/yarn-3.1.1.cjs
vendored
File diff suppressed because one or more lines are too long
807
.yarn/releases/yarn-3.3.0.cjs
vendored
Executable file
807
.yarn/releases/yarn-3.3.0.cjs
vendored
Executable file
File diff suppressed because one or more lines are too long
19
.yarnrc.yml
19
.yarnrc.yml
@@ -6,4 +6,21 @@ plugins:
|
||||
- path: .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs
|
||||
spec: "@yarnpkg/plugin-workspace-tools"
|
||||
|
||||
yarnPath: .yarn/releases/yarn-3.1.1.cjs
|
||||
yarnPath: .yarn/releases/yarn-3.3.0.cjs
|
||||
|
||||
logFilters:
|
||||
|
||||
# Disable useless non-actionable warnings.
|
||||
# https://github.com/yarnpkg/yarn/issues/4064
|
||||
|
||||
# eg "@joplin/app-desktop@workspace:packages/app-desktop provides react (p87edd) with version 18.2.0, which doesn't satisfy what @testing-library/react-hooks and some of its descendants request"
|
||||
- code: YN0060
|
||||
level: discard
|
||||
|
||||
# eg "@joplin/app-desktop@workspace:packages/app-desktop doesn't provide react-is (p570cf), requested by styled-components"
|
||||
- code: YN0002
|
||||
level: discard
|
||||
|
||||
# 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
|
||||
|
||||
2
Assets/.gitignore
vendored
Normal file
2
Assets/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
*~
|
||||
WebsiteAssets/locales/*.mo
|
||||
BIN
Assets/ImageSources/WebsiteTopImageCn.png
Normal file
BIN
Assets/ImageSources/WebsiteTopImageCn.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.7 MiB |
@@ -399,12 +399,12 @@ div.navbar-mobile-content a.sponsor-button {
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
#top-section-img {
|
||||
.top-section-img {
|
||||
margin-bottom: -280px;
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
#top-section-img img {
|
||||
.top-section-img img {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@@ -910,7 +910,7 @@ footer .bottom-links-row p {
|
||||
padding-top: 80px;
|
||||
}
|
||||
|
||||
#top-section-img {
|
||||
.top-section-img {
|
||||
margin-bottom: -90px;
|
||||
margin-top: 50px;
|
||||
}
|
||||
@@ -1154,7 +1154,7 @@ footer .bottom-links-row p {
|
||||
background-position: bottom;
|
||||
padding-bottom: 160px;
|
||||
}
|
||||
#top-section-img {
|
||||
.top-section-img {
|
||||
margin-bottom: -240px;
|
||||
margin-top: 130px;
|
||||
}
|
||||
@@ -1182,3 +1182,25 @@ footer .bottom-links-row p {
|
||||
margin-top: -15p;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
ENGLISH VERSION
|
||||
*****************************************************************/
|
||||
|
||||
:lang(en-gb) #made-in-france-section {
|
||||
display: none;
|
||||
}
|
||||
|
||||
:lang(en-gb) .top-section-img-cn {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
CHINESE VERSION
|
||||
*****************************************************************/
|
||||
|
||||
:lang(zh-cn) #in-the-press-section,
|
||||
:lang(zh-cn) #sponsors-section,
|
||||
:lang(zh-cn) .top-section-img-en {
|
||||
display: none;
|
||||
}
|
||||
|
||||
BIN
Assets/WebsiteAssets/images/home-top-img-cn-2x.png
Normal file
BIN
Assets/WebsiteAssets/images/home-top-img-cn-2x.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.1 MiB |
BIN
Assets/WebsiteAssets/images/home-top-img-cn-2x.webp
Normal file
BIN
Assets/WebsiteAssets/images/home-top-img-cn-2x.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 149 KiB |
BIN
Assets/WebsiteAssets/images/home-top-img-cn-4x.webp
Normal file
BIN
Assets/WebsiteAssets/images/home-top-img-cn-4x.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 320 KiB |
BIN
Assets/WebsiteAssets/images/home-top-img-cn.png
Normal file
BIN
Assets/WebsiteAssets/images/home-top-img-cn.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 582 KiB |
BIN
Assets/WebsiteAssets/images/home-top-img-cn.webp
Normal file
BIN
Assets/WebsiteAssets/images/home-top-img-cn.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 57 KiB |
28
Assets/WebsiteAssets/locales/fr_FR.po
Normal file
28
Assets/WebsiteAssets/locales/fr_FR.po
Normal file
@@ -0,0 +1,28 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: fr_FR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 3.0.1\n"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:63
|
||||
msgid "Download the app"
|
||||
msgstr "Télécharger l'application"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:54
|
||||
msgid "Free your <span class=\"frame-bg frame-bg-blue\">notes</span>"
|
||||
msgstr "Libérez vos <span class=\"frame-bg frame-bg-blue\">notes</span>"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:57
|
||||
msgid "Joplin is an open source note-taking app. Capture your thoughts and securely access them from any device."
|
||||
msgstr "Joplin est une application libre de prise de notes. Capturez vos pensées et accédez-y de façon sécurisé depuis n'importe quel appareil."
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:65
|
||||
msgid "Sign up with Joplin Cloud"
|
||||
msgstr "S'inscrire sur Joplin Cloud"
|
||||
160
Assets/WebsiteAssets/locales/zh_CN.po
Normal file
160
Assets/WebsiteAssets/locales/zh_CN.po
Normal file
@@ -0,0 +1,160 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: zh_CN\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 3.0.1\n"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:192
|
||||
msgid "<span class=\"frame-bg frame-bg-yellow-lg\">Customise</span> it"
|
||||
msgstr "<span class=\"frame-bg frame-bg-yellow-lg\">定制</span>它 根据您的需要"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:91
|
||||
msgid "<span class=\"frame-bg frame-bg-yellow\">Multimedia</span> notes"
|
||||
msgstr "<span class=\"frame-bg frame-bg-yellow\">多媒体</span>说明"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:243
|
||||
msgid "100% <span class=\"frame-bg frame-bg-yellow-lg\">your data</span>"
|
||||
msgstr "百分之百<span class=\"frame-bg frame-bg-yellow-lg\">你的数据</span>"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:271
|
||||
msgid "A <span class=\"frame-bg frame-bg-yellow-lg\">French</span> Alternative"
|
||||
msgstr "一个<span class=\"frame-bg frame-bg-yellow-lg\">法国</span>的替代方案"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:223
|
||||
msgid ""
|
||||
"Access your notes from your computer, phone or tablet by synchronising with "
|
||||
"various services, including Joplin Cloud, Dropbox and OneDrive. The app is "
|
||||
"available on Windows, macOS, Linux, Android and iOS. A terminal app is also "
|
||||
"available!"
|
||||
msgstr ""
|
||||
"通过与各种服务同步,包括Joplin Cloud、Dropbox和OneDrive,从你的电脑、手机或平"
|
||||
"板电脑访问你的笔记。该应用程序可在Windows、macOS、Linux、Android和iOS上使用。"
|
||||
"终端应用也可使用!"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:195
|
||||
msgid ""
|
||||
"Customise the app with plugins, custom themes and multiple text editors "
|
||||
"(Rich Text or Markdown). Or create your own scripts and plugins using the "
|
||||
"Extension API."
|
||||
msgstr ""
|
||||
"用插件、自定义主题和多个文本编辑器(富文本或马克顿)来定制该应用程序。或者使"
|
||||
"用扩展API创建你自己的脚本和插件。"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:229
|
||||
msgid "Download it now"
|
||||
msgstr "下载该应用程序"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:63
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:99
|
||||
msgid "Download the app"
|
||||
msgstr "下载该应用程序"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:200
|
||||
msgid "Find out more"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:54
|
||||
msgid "Free your <span class=\"frame-bg frame-bg-blue\">notes</span>"
|
||||
msgstr "释放你的<span class=\"frame-bg frame-bg-blue\">笔记</span>"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:162
|
||||
msgid "Get the clipper"
|
||||
msgstr "获取剪子"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:94
|
||||
msgid ""
|
||||
"Images, videos, PDFs and audio files are supported. Create math expressions "
|
||||
"and diagrams directly from the app. Take photos with the mobile app and save "
|
||||
"them to a note."
|
||||
msgstr ""
|
||||
"Joplin,由于其起源和设计,适应并尊重中国的标准和规则。这保证了您的使用不受限"
|
||||
"制,以及您的使用数据的完全透明和安全。"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:288
|
||||
msgid "In the <span class=\"frame-bg frame-bg-yellow\">Press</span>"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:57
|
||||
msgid ""
|
||||
"Joplin is an open source note-taking app. Capture your thoughts and securely "
|
||||
"access them from any device."
|
||||
msgstr ""
|
||||
"Joplin是一个开源的记事本应用程序。捕捉你的想法并从任何设备上安全地访问它们。"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:274
|
||||
msgid ""
|
||||
"Joplin, due to its origin and design, adapts and respects Chinese standards "
|
||||
"and rules. This guarantees your unrestricted use and complete transparency "
|
||||
"and security of your usage data."
|
||||
msgstr ""
|
||||
"Joplin,由于其起源和设计,适应并尊重中国的标准和规则。这保证了您的使用不受限"
|
||||
"制,以及您的使用数据的完全透明和安全。"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:249
|
||||
msgid "More about E2EE"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:352
|
||||
msgid "Our <span class=\"frame-bg frame-bg-blue-lg\">sponsors</span>"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:154
|
||||
msgid ""
|
||||
"Save <span class=\"frame-bg frame-bg-blue\">web pages</span> <br>as notes"
|
||||
msgstr "保存<span class=\"frame-bg frame-bg-blue\">网页</span> <br>作为笔记"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:65
|
||||
msgid "Sign up with Joplin Cloud"
|
||||
msgstr "与乔布林云签约"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:355
|
||||
msgid "Thank you for your support!"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:244
|
||||
msgid ""
|
||||
"The app is open source and your notes are saved to an open format, so you'll "
|
||||
"always have access to them. Uses End-To-End Encryption (E2EE) to secure your "
|
||||
"notes and ensure no-one but yourself can access them."
|
||||
msgstr ""
|
||||
"该应用程序是开源的,你的笔记被保存为开放的格式,所以你将永远可以访问它们。使"
|
||||
"用端对端加密(E2EE)来保护你的笔记,确保除了你自己之外没有人可以访问它们。"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:131
|
||||
msgid "Try it now"
|
||||
msgstr "现在就试试吧"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:157
|
||||
msgid ""
|
||||
"Use the web clipper extension, available on Chrome and Firefox, to save web "
|
||||
"pages or take screenshots as notes."
|
||||
msgstr "使用Chrome和Firefox上的web clipper扩展,可以保存网页或截图作为笔记。"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:125
|
||||
msgid ""
|
||||
"With Joplin Cloud, share your notes with your friends, family or colleagues "
|
||||
"and collaborate on them."
|
||||
msgstr "通过乔普林云,与你的朋友、家人或同事分享你的笔记,并进行合作。"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:124
|
||||
msgid "Work <span class=\"frame-bg frame-bg-yellow\">together</span>"
|
||||
msgstr "<span class=\"frame-bg frame-bg-yellow\">一起</span>工作"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:128
|
||||
msgid ""
|
||||
"You can also publish a note to the internet and share the URL with others."
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:220
|
||||
msgid ""
|
||||
"Your notes, <span class=\"frame-bg frame-bg-blue-lg\">everywhere</span> you "
|
||||
"are"
|
||||
msgstr ""
|
||||
"你的笔记<span class=\"frame-bg frame-bg-blue-lg\">你在哪里都可以</span>"
|
||||
@@ -1,4 +1,10 @@
|
||||
<?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>Wed, 12 Oct 2022 00:00:00 GMT</lastBuildDate><atom:link href="https://joplinapp.org/rss.xml" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Oct 2022 00:00:00 GMT</pubDate><item><title><![CDATA[Joplin Cloud is now part of the Joplin company]]></title><description><![CDATA[<p>As some of you may know Joplin Cloud so far has been operating under my own single-person limited company in the UK. This was mostly for convenience since it meant I could get things going quickly without having to setup a special structure for it.</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>Tue, 15 Nov 2022 00:00:00 GMT</lastBuildDate><atom:link href="https://joplinapp.org/rss.xml" rel="self" type="application/rss+xml"/><pubDate>Tue, 15 Nov 2022 00:00:00 GMT</pubDate><item><title><![CDATA[Modernising and securing Joplin, one package at a time]]></title><description><![CDATA[<p>If you watch the <a href="https://github.com/laurent22/joplin">Joplin source code repository</a>, you may have noticed a lot of Renovate pull requests lately. This <a href="https://www.mend.io/free-developer-tools/renovate/">Renovate tool</a> is a way to manage dependencies - it automatically finds what needs to be updated, then upgrade it to the latest version, and create a pull request. If all tests pass, we can then merge this pull request. So far we have merged 267 of these pull requests.</p>
|
||||
<p>Updating Joplin packages was long due. It is necessary so that we don't fall behind and end up using unsupported or deprecated packages. We also benefit from bug fixes and performance improvements. It is also important in terms of security, since recent package versions usually include various security fixes.</p>
|
||||
<p>We used to rely on a tool called "npm audit" to do this, however it no longer works on the Joplin codebase, and it was always risky to use it since it would update multiple packages in one command - so if something went wrong it was difficult to find the culprit.</p>
|
||||
<p>Renovate on the other hand upgrades packages one at a time, and run our test units to ensure everything is still working as expected. It also upgrades multiple instances of the same package across the monorepo, which is convenient to keep our code consistent. It also has a number of options to make our life easier, such as the ability to automatically merge a pull request for patch releases since this is usually safe (when a package is, for example upgraded from 1.0.1 to 1.0.3).</p>
|
||||
<p>Although Renovate automates the package upgrades it doesn't mean all upgrades are straightforward - our tests won't catch all issues, so the apps might end up being broken or cannot be compiled anymore. So there's manual work involved to get everything working after certain upgrades - for the most part this has been done and the apps appear to be stable so far.</p>
|
||||
<p>This will however be an important part of pre-release 2.10 (or should it be 3.0?) - we hope that everything works but we may need your support to try this version and report any glitch you may have found. As always pre-release regressions have the highest priority so we aim to fix them as quickly as possible.</p>
|
||||
]]></description><link>https://joplinapp.org/news/20221115-renovate/</link><guid isPermaLink="false">20221115-renovate</guid><pubDate>Tue, 15 Nov 2022 00:00:00 GMT</pubDate><twitter-text>Modernising and securing Joplin, one package at a time</twitter-text></item><item><title><![CDATA[Joplin Cloud is now part of the Joplin company]]></title><description><![CDATA[<p>As some of you may know Joplin Cloud so far has been operating under my own single-person limited company in the UK. This was mostly for convenience since it meant I could get things going quickly without having to setup a special structure for it.</p>
|
||||
<p>Now that Joplin Cloud is becoming more mature however a proper company, simply called Joplin, has been created. This company will be based in France, and will be used mainly to handle the commercial part of the project, which currently is mostly Joplin Cloud. I'm still heading the company so there won't be any major change to the way the project is managed.</p>
|
||||
<h2>What does it mean for Joplin Cloud?<a name="what-does-it-mean-for-joplin-cloud" href="#what-does-it-mean-for-joplin-cloud" class="heading-anchor">🔗</a></h2>
|
||||
<p>There will be no significant change - the website ownership simply moves from one company in the UK to one in France. The new company is still owned by myself so I will keep following the same roadmap.</p>
|
||||
@@ -249,23 +255,4 @@
|
||||
<p>As promised if you have a beta account you can keep using it and it will remain free for the three months after the account was created. After that, you will receive a link to start the Stripe subscription if you wish to keep using the account.</p>
|
||||
<p>If you have sent me an email before the end of the beta and I didn't reply yet, I will do so soon, and will send you the confirmation email.</p>
|
||||
<p>Thanks everyone for participating!</p>
|
||||
]]></description><link>https://joplinapp.org/news/20210718-103538/</link><guid isPermaLink="false">20210718-103538</guid><pubDate>Sun, 18 Jul 2021 10:35:38 GMT</pubDate><twitter-text></twitter-text></item><item><title><![CDATA[New website is ready!]]></title><description><![CDATA[<p>The new website is finally ready at <a href="https://joplinapp.org">https://joplinapp.org</a></p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20210711-095626_0.png" alt=""></p>
|
||||
<p>The previous website had been built organically over the past few years. It had a lot of useful content but finding your way was tricky and, for new users, it wasn't clear what Joplin was about. Finding out how to install the app wasn't obvious since the download buttons were lost in the clutter of information.</p>
|
||||
<p>So the new website includes a front page with clear goals:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Allows people to easily download the app - for that there's a large Download button at the top and bottom of the page. It redirects to a page that automatically picks the version based on your operating system.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Showcase the application key features. The <a href="https://discourse.joplinapp.org/t/what-are-the-key-features-of-joplin/5837">key features post</a> on the forum helped narrow down what Joplin is about, so there are sections about the web clipper, the open source nature of the app, encryption, synchronisation, customisation and the ability to create multimedia notes.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The top screenshots have also been updated (the previous one was showing a dev version from 2016, before the app was even released). As a nod to Scott Joplin, the screenshot shows an imaginary plan to open a vintage piano store, with various tasks, tables, documents and images attached, to showcase Joplin features.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally there's a Press section, which includes extracts from some cool articles that have been written about the app.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Also many thanks to everyone who voted and contributed to the tagline discussion! It helped narrow down what the tagline should be, along with the equally important description below. If you have any question or notice any issue with the website let me know!</p>
|
||||
]]></description><link>https://joplinapp.org/news/20210711-095626/</link><guid isPermaLink="false">20210711-095626</guid><pubDate>Sun, 11 Jul 2021 09:56:26 GMT</pubDate><twitter-text></twitter-text></item></channel></rss>
|
||||
]]></description><link>https://joplinapp.org/news/20210718-103538/</link><guid isPermaLink="false">20210718-103538</guid><pubDate>Sun, 18 Jul 2021 10:35:38 GMT</pubDate><twitter-text></twitter-text></item></channel></rss>
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<html lang="en-gb">
|
||||
<head>
|
||||
{{> gtmHead}}
|
||||
{{> gaOptimize}}
|
||||
@@ -51,22 +51,22 @@
|
||||
Running in {{env}} mode!
|
||||
</div>
|
||||
|
||||
<h1 class="text-center">
|
||||
<h1 translate class="text-center">
|
||||
Free your <span class="frame-bg frame-bg-blue">notes</span>
|
||||
</h1>
|
||||
<p class="text-center" id="top-section-text">
|
||||
<p translate class="text-center" id="top-section-text">
|
||||
Joplin is an open source note-taking app. Capture your thoughts and securely access them from any device.
|
||||
</p>
|
||||
<br />
|
||||
<br />
|
||||
<p class="text-center">
|
||||
<a href="{{baseUrl}}/download/" class="button-link btn-blue download-button">Download the app</a>
|
||||
<a translate href="{{baseUrl}}/download/" class="button-link btn-blue download-button">Download the app</a>
|
||||
{{#showJoplinCloudLinks}}
|
||||
<a href="{{baseUrl}}/plans/" class="button-link btn-trans plans-button">Sign up with Joplin Cloud</a>
|
||||
<a translate href="{{baseUrl}}/plans/" class="button-link btn-trans plans-button">Sign up with Joplin Cloud</a>
|
||||
{{/showJoplinCloudLinks}}
|
||||
</p>
|
||||
|
||||
<picture class="img-fluid img-center" id="top-section-img">
|
||||
<picture class="img-fluid img-center top-section-img top-section-img-en">
|
||||
<source type="image/webp" srcset="
|
||||
{{imageBaseUrl}}/home-top-img-4x.webp 4820w,
|
||||
{{imageBaseUrl}}/home-top-img-2x.webp 2388w,
|
||||
@@ -76,7 +76,20 @@
|
||||
{{imageBaseUrl}}/home-top-img-2x.png 2388w,
|
||||
{{imageBaseUrl}}/home-top-img.png 1205w
|
||||
">
|
||||
<img id="top-section-img-img" src="{{imageBaseUrl}}/home-top-img-2x.png">
|
||||
<img src="{{imageBaseUrl}}/home-top-img-2x.png">
|
||||
</picture>
|
||||
|
||||
<picture class="img-fluid img-center top-section-img top-section-img-cn">
|
||||
<source type="image/webp" srcset="
|
||||
{{imageBaseUrl}}/home-top-img-cn-4x.webp 4820w,
|
||||
{{imageBaseUrl}}/home-top-img-cn-2x.webp 2388w,
|
||||
{{imageBaseUrl}}/home-top-img-cn.webp 1205w
|
||||
">
|
||||
<source type="image/png" srcset="
|
||||
{{imageBaseUrl}}/home-top-img-cn-2x.png 2388w,
|
||||
{{imageBaseUrl}}/home-top-img-cn.png 1205w
|
||||
">
|
||||
<img src="{{imageBaseUrl}}/home-top-img-cn-2x.png">
|
||||
</picture>
|
||||
</div>
|
||||
</div>
|
||||
@@ -88,17 +101,15 @@
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-5 col-xxl-6">
|
||||
<div class="ml-30 ml-mobile-0">
|
||||
<h2 id="multimedia-title">
|
||||
<h2 translate id="multimedia-title">
|
||||
<span class="frame-bg frame-bg-yellow">Multimedia</span> notes
|
||||
</h2>
|
||||
<p id="multimedia-text">
|
||||
Images, videos, PDFs and audio files are supported. Create
|
||||
math expressions and diagrams directly from the app. Take
|
||||
photos with the mobile app and save them to a note.
|
||||
<p translate id="multimedia-text">
|
||||
Images, videos, PDFs and audio files are supported. Create math expressions and diagrams directly from the app. Take photos with the mobile app and save them to a note.
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<a href="{{baseUrl}}/download/" class="button-link btn-blue">Download the app</a>
|
||||
<a translate href="{{baseUrl}}/download/" class="button-link btn-blue">Download the app</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -123,15 +134,14 @@
|
||||
<div class="col-6 d-none d-md-block"></div>
|
||||
<div class="col-12 col-md-6">
|
||||
<div class="ml-30 ml-mobile-0">
|
||||
<h2>Work <span class="frame-bg frame-bg-yellow">together</span></h2>
|
||||
<p>
|
||||
With Joplin Cloud, share your notes with your friends, family
|
||||
or colleagues and collaborate on them.
|
||||
<h2 translate>Work <span class="frame-bg frame-bg-yellow">together</span></h2>
|
||||
<p translate>
|
||||
With Joplin Cloud, share your notes with your friends, family or colleagues and collaborate on them.
|
||||
</p>
|
||||
<p>You can also publish a note to the internet and share the URL with others.</p>
|
||||
<p translate>You can also publish a note to the internet and share the URL with others.</p>
|
||||
<br/>
|
||||
<p>
|
||||
<a href="{{baseUrl}}/plans/" class="button-link btn-blue">Try it now</a>
|
||||
<a translate href="{{baseUrl}}/plans/" class="button-link btn-blue">Try it now</a>
|
||||
</p>
|
||||
<br class="d-block d-md-none" />
|
||||
<br class="d-block d-md-none" />
|
||||
@@ -154,16 +164,15 @@
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-6">
|
||||
<div class="ml-30 ml-mobile-0">
|
||||
<h2 id="save-web-title">
|
||||
<h2 translate id="save-web-title">
|
||||
Save <span class="frame-bg frame-bg-blue">web pages</span> <br />as notes
|
||||
</h2>
|
||||
<p>
|
||||
Use the web clipper extension, available on Chrome and
|
||||
Firefox, to save web pages or take screenshots as notes.
|
||||
<p translate>
|
||||
Use the web clipper extension, available on Chrome and Firefox, to save web pages or take screenshots as notes.
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<a href="{{baseUrl}}/clipper/" class="button-link btn-blue">Get the clipper</a>
|
||||
<a translate href="{{baseUrl}}/clipper/" class="button-link btn-blue">Get the clipper</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -193,19 +202,15 @@
|
||||
</div>
|
||||
<div class="col-12 col-md-6">
|
||||
<div class="ml-30 ml-mobile-0">
|
||||
<h2 id="customise-it-title">
|
||||
<h2 translate id="customise-it-title">
|
||||
<span class="frame-bg frame-bg-yellow-lg">Customise</span> it
|
||||
<br />
|
||||
to your needs
|
||||
</h2>
|
||||
<p>
|
||||
Customise the app with plugins, custom themes and multiple
|
||||
text editors (Rich Text or Markdown). Or create your own
|
||||
scripts and plugins using the Extension API.
|
||||
<p translate>
|
||||
Customise the app with plugins, custom themes and multiple text editors (Rich Text or Markdown). Or create your own scripts and plugins using the Extension API.
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<a href="{{baseUrl}}/help/#plugins" class="button-link btn-blue">Find out more</a>
|
||||
<a translate href="{{baseUrl}}/help/#plugins" class="button-link btn-blue">Find out more</a>
|
||||
</p>
|
||||
|
||||
<br class="d-block d-lg-none" />
|
||||
@@ -225,16 +230,16 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<h2 class="text-center">
|
||||
<h2 translate class="text-center">
|
||||
Your notes, <span class="frame-bg frame-bg-blue-lg">everywhere</span> you are
|
||||
</h2>
|
||||
<p class="text-center" id="your-note-text">
|
||||
<p translate class="text-center" id="your-note-text">
|
||||
Access your notes from your computer, phone or tablet by synchronising with various services, including Joplin Cloud, Dropbox and OneDrive. The app is available on Windows, macOS, Linux, Android and iOS. A terminal app is also available!
|
||||
</p>
|
||||
<br />
|
||||
<br />
|
||||
<p class="text-center">
|
||||
<a href="{{baseUrl}}/download/" class="button-link btn-blue">Download it now</a>
|
||||
<a translate href="{{baseUrl}}/download/" class="button-link btn-blue">Download it now</a>
|
||||
</p>
|
||||
<br />
|
||||
</div>
|
||||
@@ -248,15 +253,13 @@
|
||||
<div class="col-12 col-md-6">
|
||||
<br class="d-block d-md-none" />
|
||||
<div class="ml-30 ml-mobile-0">
|
||||
<h2>100% <span class="frame-bg frame-bg-yellow-lg">your data</span></h2>
|
||||
<p>
|
||||
The app is open source and your notes are saved to an open
|
||||
format, so you'll always have access to them. Uses End-To-End Encryption (E2EE) to secure your notes and ensure no-one but
|
||||
yourself can access them.
|
||||
<h2 translate>100% <span class="frame-bg frame-bg-yellow-lg">your data</span></h2>
|
||||
<p translate>
|
||||
The app is open source and your notes are saved to an open format, so you'll always have access to them. Uses End-To-End Encryption (E2EE) to secure your notes and ensure no-one but yourself can access them.
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<a href="{{baseUrl}}/e2ee/" class="button-link btn-blue">More about E2EE</a>
|
||||
<a translate href="{{baseUrl}}/e2ee/" class="button-link btn-blue">More about E2EE</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -274,12 +277,28 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="made-in-france-section" class="blue-bg">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<h2 translate class="text-center">
|
||||
A <span class="frame-bg frame-bg-yellow-lg">French</span> Alternative
|
||||
</h2>
|
||||
<p translate class="text-center">
|
||||
Joplin, due to its origin and design, adapts and respects Chinese standards and rules. This guarantees your unrestricted use and complete transparency and security of your usage data.
|
||||
</p>
|
||||
<br /><br /><br /><br />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="in-the-press-section">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<br />
|
||||
<h2 class="text-center">
|
||||
<h2 translate class="text-center">
|
||||
In the <span class="frame-bg frame-bg-yellow">Press</span>
|
||||
</h2>
|
||||
<br />
|
||||
@@ -343,10 +362,10 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<h2 class="text-center">
|
||||
<h2 translate class="text-center">
|
||||
Our <span class="frame-bg frame-bg-blue-lg">sponsors</span>
|
||||
</h2>
|
||||
<p class="text-center" id="your-note-text">
|
||||
<p translate class="text-center" id="your-note-text">
|
||||
Thank you for your support!
|
||||
</p>
|
||||
<br />
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<html lang="en-gb">
|
||||
|
||||
<!--
|
||||
|
||||
|
||||
112
Assets/WebsiteAssets/website.pot
Normal file
112
Assets/WebsiteAssets/website.pot
Normal file
@@ -0,0 +1,112 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:192
|
||||
msgid "<span class=\"frame-bg frame-bg-yellow-lg\">Customise</span> it"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:91
|
||||
msgid "<span class=\"frame-bg frame-bg-yellow\">Multimedia</span> notes"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:243
|
||||
msgid "100% <span class=\"frame-bg frame-bg-yellow-lg\">your data</span>"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:271
|
||||
msgid "A <span class=\"frame-bg frame-bg-yellow-lg\">French</span> Alternative"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:223
|
||||
msgid "Access your notes from your computer, phone or tablet by synchronising with various services, including Joplin Cloud, Dropbox and OneDrive. The app is available on Windows, macOS, Linux, Android and iOS. A terminal app is also available!"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:195
|
||||
msgid "Customise the app with plugins, custom themes and multiple text editors (Rich Text or Markdown). Or create your own scripts and plugins using the Extension API."
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:229
|
||||
msgid "Download it now"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:63
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:99
|
||||
msgid "Download the app"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:200
|
||||
msgid "Find out more"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:54
|
||||
msgid "Free your <span class=\"frame-bg frame-bg-blue\">notes</span>"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:162
|
||||
msgid "Get the clipper"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:94
|
||||
msgid "Images, videos, PDFs and audio files are supported. Create math expressions and diagrams directly from the app. Take photos with the mobile app and save them to a note."
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:288
|
||||
msgid "In the <span class=\"frame-bg frame-bg-yellow\">Press</span>"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:57
|
||||
msgid "Joplin is an open source note-taking app. Capture your thoughts and securely access them from any device."
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:274
|
||||
msgid "Joplin, due to its origin and design, adapts and respects Chinese standards and rules. This guarantees your unrestricted use and complete transparency and security of your usage data."
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:249
|
||||
msgid "More about E2EE"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:352
|
||||
msgid "Our <span class=\"frame-bg frame-bg-blue-lg\">sponsors</span>"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:154
|
||||
msgid "Save <span class=\"frame-bg frame-bg-blue\">web pages</span> <br>as notes"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:65
|
||||
msgid "Sign up with Joplin Cloud"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:355
|
||||
msgid "Thank you for your support!"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:244
|
||||
msgid "The app is open source and your notes are saved to an open format, so you'll always have access to them. Uses End-To-End Encryption (E2EE) to secure your notes and ensure no-one but yourself can access them."
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:131
|
||||
msgid "Try it now"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:157
|
||||
msgid "Use the web clipper extension, available on Chrome and Firefox, to save web pages or take screenshots as notes."
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:125
|
||||
msgid "With Joplin Cloud, share your notes with your friends, family or colleagues and collaborate on them."
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:124
|
||||
msgid "Work <span class=\"frame-bg frame-bg-yellow\">together</span>"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:128
|
||||
msgid "You can also publish a note to the internet and share the URL with others."
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:220
|
||||
msgid "Your notes, <span class=\"frame-bg frame-bg-blue-lg\">everywhere</span> you are"
|
||||
msgstr ""
|
||||
@@ -270,7 +270,7 @@ WebDAV-compatible services that are known to work with Joplin:
|
||||
|
||||
## Dropbox synchronisation
|
||||
|
||||
When syncing with Dropbox, Joplin creates a sub-directory in Dropbox, in `/Apps/Joplin` and read/write the notes and notebooks from it. The application does not have access to anything outside this directory.
|
||||
When syncing with Dropbox, Joplin creates a sub-directory in Dropbox, in `/Apps/Joplin` and reads/writes the notes and notebooks in it. The application does not have access to anything outside this directory.
|
||||
|
||||
In the **desktop application** or **mobile application**, select "Dropbox" as the synchronisation target in the [Configuration screen](https://github.com/laurent22/joplin/blob/dev/readme/config_screen.md) (it is selected by default). Then, to initiate the synchronisation process, click on the "Synchronise" button in the sidebar and follow the instructions.
|
||||
|
||||
@@ -278,7 +278,7 @@ In the **terminal application**, to initiate the synchronisation process, type `
|
||||
|
||||
## OneDrive synchronisation
|
||||
|
||||
When syncing with OneDrive, Joplin creates a sub-directory in OneDrive, in /Apps/Joplin and read/write the notes and notebooks from it. The application does not have access to anything outside this directory.
|
||||
When syncing with OneDrive, Joplin creates a sub-directory in OneDrive, in /Apps/Joplin and reads/writes the notes and notebooks in it. The application does not have access to anything outside this directory.
|
||||
|
||||
In the **desktop application** or **mobile application**, select "OneDrive" as the synchronisation target in the [Configuration screen](https://github.com/laurent22/joplin/blob/dev/readme/config_screen.md). Then, to initiate the synchronisation process, click on the "Synchronise" button in the sidebar and follow the instructions.
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ version: '3'
|
||||
|
||||
services:
|
||||
db:
|
||||
image: postgres:13
|
||||
image: postgres:15
|
||||
command: postgres -c work_mem=100000
|
||||
ports:
|
||||
- "5432:5432"
|
||||
|
||||
@@ -18,7 +18,7 @@ services:
|
||||
- POSTGRES_PORT=5432
|
||||
- POSTGRES_HOST=localhost
|
||||
db:
|
||||
image: postgres:13
|
||||
image: postgres:15
|
||||
ports:
|
||||
- "5432:5432"
|
||||
environment:
|
||||
|
||||
@@ -19,7 +19,7 @@ version: '3'
|
||||
|
||||
services:
|
||||
db:
|
||||
image: postgres:13
|
||||
image: postgres:15
|
||||
volumes:
|
||||
- ./data/postgres:/var/lib/postgresql/data
|
||||
ports:
|
||||
|
||||
@@ -6,15 +6,9 @@
|
||||
],
|
||||
"settings": {
|
||||
"files.exclude": {
|
||||
".yarn": true,
|
||||
"lerna-debug.log": true,
|
||||
"_mydocs/mdtest/": true,
|
||||
"./packages/lib/plugin_types": true,
|
||||
"_releases/": true,
|
||||
"_vieux/": true,
|
||||
".gitignore": true,
|
||||
".eslintignore": true,
|
||||
"**/*.jpl": true,
|
||||
"./packages/app-cli/**/*.*~": true,
|
||||
"./packages/app-cli/**/*.mo": true,
|
||||
"./packages/app-cli/**/build/": true,
|
||||
@@ -103,26 +97,32 @@
|
||||
"./packages/app-mobile/fastlane/Preview.html": true,
|
||||
"./packages/app-mobile/fastlane/report.xml": true,
|
||||
"./packages/app-mobile/fastlane/screenshots": true,
|
||||
"./packages/renderer/**/.vscode/": true,
|
||||
"./packages/renderer/**/copyLib.bat": true,
|
||||
"./packages/renderer/**/node_modules/": true,
|
||||
"./packages/app-tools/**/*-kct.*": true,
|
||||
"./packages/app-tools/**/github_username_cache.json": true,
|
||||
"./packages/app-tools/**/patreon_oauth_token.txt": true,
|
||||
"./packages/lib/plugin_types": true,
|
||||
"./packages/renderer/**/.vscode/": true,
|
||||
"./packages/renderer/**/copyLib.bat": true,
|
||||
"./packages/renderer/**/node_modules/": true,
|
||||
".eslintignore": true,
|
||||
".gitignore": true,
|
||||
".vscode/*": true,
|
||||
".yarn": true,
|
||||
"*.sublime-workspace": true,
|
||||
"**/_mydocs": true,
|
||||
"**/_mydocs/EnexSamples/*.enex": true,
|
||||
"**/_releases": true,
|
||||
"**/_vieux/": true,
|
||||
"**/.DS_Store": true,
|
||||
"**/*?.js": { "when": "$(basename).tsx"},
|
||||
"**/*.base64": true,
|
||||
"**/*~": true,
|
||||
"**/*.bundle.js": true,
|
||||
"**/*.eot": true,
|
||||
"**/*.icns": true,
|
||||
"**/*.ico": true,
|
||||
"**/*.jar": true,
|
||||
"**/*.jpl": true,
|
||||
"**/*.js": {"when": "$(basename).ts"},
|
||||
"**/*.map": true,
|
||||
"**/*.min.css": true,
|
||||
"**/*.min.js": true,
|
||||
@@ -135,6 +135,7 @@
|
||||
"**/*.ttf": true,
|
||||
"**/*.woff": true,
|
||||
"**/*.woff2": true,
|
||||
"**/*~": true,
|
||||
"**/app/data/uploads/": true,
|
||||
"**/Clipper-source/": true,
|
||||
"**/docs/*.html": true,
|
||||
@@ -171,11 +172,13 @@
|
||||
"app/config/parameters.yml": true,
|
||||
"app/data/uploads/.gitkeep": false,
|
||||
"Assets/DownloadBadges*.psd": true,
|
||||
"Assets/TinyMCE/langs": true,
|
||||
"Assets/WebsiteAssets/locales/*.mo": true,
|
||||
"build/": true,
|
||||
"docs/": true,
|
||||
"docs/images/flags": true,
|
||||
"lerna-debug.log": true,
|
||||
"node_modules/": true,
|
||||
"Assets/TinyMCE/langs": true,
|
||||
"packages/app-cli/**/*.*~": true,
|
||||
"packages/app-cli/**/*.mo": true,
|
||||
"packages/app-cli/**/build/": true,
|
||||
@@ -224,7 +227,6 @@
|
||||
"packages/app-cli/tests/support/plugins/toc/**/dist/": true,
|
||||
"packages/app-cli/tests/sync/": true,
|
||||
"packages/app-cli/tests/tmp/": true,
|
||||
"packages/htmlpack/dist/": true,
|
||||
"packages/app-clipper/**/dist/": true,
|
||||
"packages/app-clipper/content_scripts/**/*.bundle.js": true,
|
||||
"packages/app-clipper/dist/": true,
|
||||
@@ -250,7 +252,6 @@
|
||||
"packages/app-desktop/**/pluginAssets/": true,
|
||||
"packages/app-desktop/build/icons/": true,
|
||||
"packages/app-desktop/build/images/": true,
|
||||
"packages/app-desktop/vendor/lib/": true,
|
||||
"packages/app-desktop/dist/": true,
|
||||
"packages/app-desktop/fonts/": true,
|
||||
"packages/app-desktop/gui/note-viewer/highlight/styles/": true,
|
||||
@@ -258,6 +259,7 @@
|
||||
"packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/supportedLocales.js": true,
|
||||
"packages/app-desktop/lib/": true,
|
||||
"packages/app-desktop/locale/": true,
|
||||
"packages/app-desktop/vendor/lib/": true,
|
||||
"packages/app-mobile/**/.DS_Store": true,
|
||||
"packages/app-mobile/**/.gradle": true,
|
||||
"packages/app-mobile/**/.idea": true,
|
||||
@@ -305,6 +307,16 @@
|
||||
"packages/app-mobile/fastlane/screenshots": true,
|
||||
"packages/app-mobile/ios/build/": true,
|
||||
"packages/app-mobile/lib/csstojs/": true,
|
||||
"packages/app-mobile/lib/rnInjectedJs/": true,
|
||||
"packages/app-mobile/lib/sql-extensions/spellfix.so": true,
|
||||
"packages/app-mobile/node_modules/": true,
|
||||
"packages/app-tools/**/*-kct.*": true,
|
||||
"packages/app-tools/**/github_username_cache.json": true,
|
||||
"packages/app-tools/**/patreon_oauth_token.txt": true,
|
||||
"packages/app-tools/commit_hook.txt": true,
|
||||
"packages/app-tools/github_oauth_token.txt": true,
|
||||
"packages/generator-joplin/generators/app/templates/api/": true,
|
||||
"packages/htmlpack/dist/": true,
|
||||
"packages/renderer/**/.vscode/": true,
|
||||
"packages/renderer/**/copyLib.bat": true,
|
||||
"packages/renderer/**/node_modules/": true,
|
||||
@@ -312,22 +324,13 @@
|
||||
"packages/renderer/MdToHtml/rules/fence.js": true,
|
||||
"packages/renderer/MdToHtml/rules/mermaid.js": true,
|
||||
"packages/renderer/MdToHtml/rules/sanitize_html.js": true,
|
||||
"packages/app-mobile/lib/rnInjectedJs/": true,
|
||||
"packages/app-mobile/lib/sql-extensions/spellfix.so": true,
|
||||
"packages/server/dist/": true,
|
||||
"packages/server/db-*.sqlite": true,
|
||||
"packages/server/test.pid": true,
|
||||
"packages/server/dist/": true,
|
||||
"packages/server/temp": true,
|
||||
"packages/generator-joplin/generators/app/templates/api/": true,
|
||||
"packages/app-mobile/node_modules/": true,
|
||||
"packages/server/test.pid": true,
|
||||
"phpunit.xml": true,
|
||||
"Server/db*.sqlite/": true,
|
||||
"Server/dist/": true,
|
||||
"packages/app-tools/**/*-kct.*": true,
|
||||
"packages/app-tools/**/github_username_cache.json": true,
|
||||
"packages/app-tools/**/patreon_oauth_token.txt": true,
|
||||
"packages/app-tools/commit_hook.txt": true,
|
||||
"packages/app-tools/github_oauth_token.txt": true,
|
||||
"var/*": true,
|
||||
"var/cache": false,
|
||||
"var/cache/.gitkeep": false,
|
||||
@@ -342,8 +345,6 @@
|
||||
"vendor/": true,
|
||||
"web/bundles/": true,
|
||||
"web/env.php": true,
|
||||
"**/*.js": {"when": "$(basename).ts"},
|
||||
"**/*?.js": { "when": "$(basename).tsx"},
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,6 @@ module.exports = {
|
||||
'yarn run linter-precommit',
|
||||
'yarn run checkLibPaths',
|
||||
// 'yarn run spellcheck',
|
||||
'git add',
|
||||
// 'git add',
|
||||
],
|
||||
};
|
||||
|
||||
27
package.json
27
package.json
@@ -21,6 +21,7 @@
|
||||
"updateNews": "node ./packages/tools/website/updateNews",
|
||||
"buildSettingJsonSchema": "yarn workspace joplin start settingschema ../../../joplin-website/docs/schema/settings.json",
|
||||
"buildTranslations": "node packages/tools/build-translation.js",
|
||||
"buildWebsiteTranslations": "node packages/tools/website/buildTranslations.js",
|
||||
"buildWebsite": "node ./packages/tools/website/build.js && yarn run buildPluginDoc && yarn run buildSettingJsonSchema",
|
||||
"checkLibPaths": "node ./packages/tools/checkLibPaths.js",
|
||||
"circularDependencyCheck": "madge --warning --circular --extensions js ./",
|
||||
@@ -62,32 +63,32 @@
|
||||
}
|
||||
},
|
||||
"devDependencies": {
|
||||
"@seiyab/eslint-plugin-react-hooks": "4.5.1-alpha.5",
|
||||
"@typescript-eslint/eslint-plugin": "5.42.1",
|
||||
"@typescript-eslint/parser": "5.42.1",
|
||||
"@seiyab/eslint-plugin-react-hooks": "4.5.1-beta.0",
|
||||
"@typescript-eslint/eslint-plugin": "5.43.0",
|
||||
"@typescript-eslint/parser": "5.43.0",
|
||||
"cspell": "5.21.2",
|
||||
"eslint": "8.27.0",
|
||||
"eslint": "8.28.0",
|
||||
"eslint-interactive": "10.2.0",
|
||||
"eslint-plugin-import": "2.26.0",
|
||||
"eslint-plugin-promise": "6.1.1",
|
||||
"eslint-plugin-react": "7.31.10",
|
||||
"fs-extra": "8.1.0",
|
||||
"glob": "7.2.3",
|
||||
"eslint-plugin-react": "7.31.11",
|
||||
"fs-extra": "10.1.0",
|
||||
"glob": "8.0.3",
|
||||
"gulp": "4.0.2",
|
||||
"husky": "3.1.0",
|
||||
"lerna": "3.22.1",
|
||||
"lint-staged": "9.5.0",
|
||||
"madge": "4.0.2",
|
||||
"lint-staged": "13.0.3",
|
||||
"madge": "5.0.1",
|
||||
"typedoc": "0.17.8",
|
||||
"typescript": "4.7.4"
|
||||
"typescript": "4.9.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/fs-extra": "9.0.13",
|
||||
"http-server": "0.13.0",
|
||||
"node-gyp": "8.4.1",
|
||||
"http-server": "14.1.1",
|
||||
"node-gyp": "9.3.0",
|
||||
"nodemon": "2.0.20"
|
||||
},
|
||||
"packageManager": "yarn@3.2.4",
|
||||
"packageManager": "yarn@3.3.0",
|
||||
"resolutions": {
|
||||
"joplin-rn-alarm-notification@1.0.5": "patch:joplin-rn-alarm-notification@npm:1.0.5#.yarn/patches/joplin-rn-alarm-notification-npm-1.0.5-662e871c03"
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ const ResourceServer = require('./ResourceServer.js');
|
||||
const NoteMetadataWidget = require('./gui/NoteMetadataWidget.js');
|
||||
const FolderListWidget = require('./gui/FolderListWidget.js');
|
||||
const NoteListWidget = require('./gui/NoteListWidget.js');
|
||||
const StatusBarWidget = require('./gui/StatusBarWidget.js');
|
||||
const StatusBarWidget = require('./gui/StatusBarWidget').default;
|
||||
const ConsoleWidget = require('./gui/ConsoleWidget.js');
|
||||
const LinkSelector = require('./LinkSelector.js').default;
|
||||
|
||||
|
||||
@@ -37,17 +37,8 @@ class Command extends BaseCommand {
|
||||
];
|
||||
}
|
||||
|
||||
static lockFile(filePath: string): Promise<Function> {
|
||||
return new Promise((resolve, reject) => {
|
||||
locker.lock(filePath, { stale: 1000 * 60 * 5 }, (error: any, release: any) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
return;
|
||||
}
|
||||
|
||||
resolve(release);
|
||||
});
|
||||
});
|
||||
static async lockFile(filePath: string): Promise<Function> {
|
||||
return locker.lock(filePath, { stale: 1000 * 60 * 5 });
|
||||
}
|
||||
|
||||
static isLocked(filePath: string) {
|
||||
|
||||
@@ -4,7 +4,7 @@ const termutils = require('tkwidgets/framework/termutils.js');
|
||||
const stripAnsi = require('strip-ansi');
|
||||
const { handleAutocompletion } = require('../autocompletion.js');
|
||||
|
||||
class StatusBarWidget extends BaseWidget {
|
||||
export default class StatusBarWidget extends BaseWidget {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
@@ -22,12 +22,12 @@ class StatusBarWidget extends BaseWidget {
|
||||
return false;
|
||||
}
|
||||
|
||||
setItemAt(index, text) {
|
||||
setItemAt(index: number, text: string) {
|
||||
this.items_[index] = stripAnsi(text).trim();
|
||||
this.invalidate();
|
||||
}
|
||||
|
||||
async prompt(initialText = '', promptString = null, options = null) {
|
||||
async prompt(initialText = '', promptString: any = null, options: any = null) {
|
||||
if (this.promptState_) throw new Error('Another prompt already active');
|
||||
if (promptString === null) promptString = ':';
|
||||
if (options === null) options = {};
|
||||
@@ -36,7 +36,7 @@ class StatusBarWidget extends BaseWidget {
|
||||
|
||||
this.promptState_ = {
|
||||
promise: null,
|
||||
initialText: stripAnsi(initialText),
|
||||
initialText: (initialText),
|
||||
promptString: stripAnsi(promptString),
|
||||
};
|
||||
|
||||
@@ -86,7 +86,7 @@ class StatusBarWidget extends BaseWidget {
|
||||
|
||||
// const textStyle = this.promptActive ? (s) => s : chalk.bgBlueBright.white;
|
||||
// const textStyle = (s) => s;
|
||||
const textStyle = this.promptActive ? s => s : chalk.gray;
|
||||
const textStyle = this.promptActive ? (s: any) => s : chalk.gray;
|
||||
|
||||
this.term.drawHLine(this.absoluteInnerX, this.absoluteInnerY, this.innerWidth, textStyle(' '));
|
||||
|
||||
@@ -106,7 +106,7 @@ class StatusBarWidget extends BaseWidget {
|
||||
|
||||
const isSecurePrompt = !!this.promptState_.secure;
|
||||
|
||||
const options = {
|
||||
const options: any = {
|
||||
cancelable: true,
|
||||
history: this.history,
|
||||
default: this.promptState_.initialText,
|
||||
@@ -118,7 +118,7 @@ class StatusBarWidget extends BaseWidget {
|
||||
if ('cursorPosition' in this.promptState_) options.cursorPosition = this.promptState_.cursorPosition;
|
||||
if (isSecurePrompt) options.echoChar = true;
|
||||
|
||||
this.inputEventEmitter_ = this.term.inputField(options, (error, input) => {
|
||||
this.inputEventEmitter_ = this.term.inputField(options, (error: any, input: any) => {
|
||||
let resolveResult = null;
|
||||
const resolveFn = this.promptState_.resolve;
|
||||
|
||||
@@ -161,5 +161,3 @@ class StatusBarWidget extends BaseWidget {
|
||||
if (doSaveCursor) this.term.restoreCursor();
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = StatusBarWidget;
|
||||
@@ -42,39 +42,39 @@
|
||||
"dependencies": {
|
||||
"@joplin/lib": "~2.9",
|
||||
"@joplin/renderer": "~2.9",
|
||||
"aws-sdk": "2.1251.0",
|
||||
"aws-sdk": "2.1258.0",
|
||||
"chalk": "4.1.2",
|
||||
"compare-version": "0.1.2",
|
||||
"fs-extra": "5.0.0",
|
||||
"fs-extra": "10.1.0",
|
||||
"html-entities": "1.4.0",
|
||||
"image-type": "3.1.0",
|
||||
"keytar": "7.9.0",
|
||||
"md5": "2.3.0",
|
||||
"node-rsa": "1.1.1",
|
||||
"open": "7.4.2",
|
||||
"proper-lockfile": "2.0.1",
|
||||
"open": "8.4.0",
|
||||
"proper-lockfile": "4.1.2",
|
||||
"read-chunk": "2.1.0",
|
||||
"server-destroy": "1.0.1",
|
||||
"sharp": "0.31.2",
|
||||
"sprintf-js": "1.1.2",
|
||||
"sqlite3": "5.0.2",
|
||||
"sqlite3": "5.1.2",
|
||||
"string-padding": "1.0.2",
|
||||
"strip-ansi": "4.0.0",
|
||||
"strip-ansi": "6.0.1",
|
||||
"tcp-port-used": "1.0.2",
|
||||
"terminal-kit": "1.49.4",
|
||||
"terminal-kit": "3.0.0",
|
||||
"tkwidgets": "0.5.27",
|
||||
"url-parse": "1.5.10",
|
||||
"word-wrap": "1.2.3",
|
||||
"yargs-parser": "7.0.0"
|
||||
"yargs-parser": "21.1.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@joplin/tools": "~2.9",
|
||||
"@types/fs-extra": "9.0.13",
|
||||
"@types/jest": "26.0.24",
|
||||
"@types/jest": "29.2.3",
|
||||
"@types/node": "18.11.9",
|
||||
"gulp": "4.0.2",
|
||||
"jest": "26.6.3",
|
||||
"jest": "29.3.1",
|
||||
"temp": "0.9.4",
|
||||
"typescript": "4.5.2"
|
||||
"typescript": "4.9.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,10 +14,9 @@ const { enexXmlToMd } = require('@joplin/lib/import-enex-md-gen.js');
|
||||
|
||||
describe('HtmlToHtml', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
beforeEach(async () => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should convert from Html to Html', (async () => {
|
||||
|
||||
@@ -5,12 +5,6 @@ import HtmlToMd from '@joplin/lib/HtmlToMd';
|
||||
|
||||
describe('HtmlToMd', function() {
|
||||
|
||||
// beforeEach(async (done) => {
|
||||
// await setupDatabaseAndSynchronizer(1);
|
||||
// await switchClient(1);
|
||||
// done();
|
||||
// });
|
||||
|
||||
it('should convert from Html to Markdown', (async () => {
|
||||
const basePath = `${__dirname}/html_to_md`;
|
||||
const files = await shim.fsDriver().readDirStats(basePath);
|
||||
|
||||
@@ -18,10 +18,9 @@ function newTestMdToHtml(options: any = null) {
|
||||
|
||||
describe('MdToHtml', function() {
|
||||
|
||||
beforeEach(async (done: Function) => {
|
||||
beforeEach(async () => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should convert from Markdown to Html', (async () => {
|
||||
|
||||
@@ -23,16 +23,14 @@ const goToNote = (testApp, note) => {
|
||||
};
|
||||
|
||||
describe('feature_NoteHistory', function() {
|
||||
beforeEach(async (done) => {
|
||||
beforeEach(async () => {
|
||||
testApp = new TestApp();
|
||||
await testApp.start(['--no-welcome']);
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
afterEach(async () => {
|
||||
if (testApp) await testApp.destroy();
|
||||
testApp = null;
|
||||
done();
|
||||
});
|
||||
|
||||
it('should save history when navigating through notes', (async () => {
|
||||
|
||||
@@ -10,16 +10,14 @@ let testApp = null;
|
||||
|
||||
describe('integration_NoteList', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
beforeEach(async () => {
|
||||
testApp = new TestApp();
|
||||
await testApp.start(['--no-welcome']);
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
afterEach(async () => {
|
||||
if (testApp !== null) await testApp.destroy();
|
||||
testApp = null;
|
||||
done();
|
||||
});
|
||||
|
||||
// Reference: https://github.com/laurent22/joplin/issues/2709
|
||||
|
||||
@@ -24,16 +24,14 @@ let testApp = null;
|
||||
|
||||
describe('integration_ShowAllNotes', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
beforeEach(async () => {
|
||||
testApp = new TestApp();
|
||||
await testApp.start(['--no-welcome']);
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
afterEach(async () => {
|
||||
if (testApp !== null) await testApp.destroy();
|
||||
testApp = null;
|
||||
done();
|
||||
});
|
||||
|
||||
it('should show all notes', (async () => {
|
||||
|
||||
@@ -10,16 +10,14 @@ let testApp = null;
|
||||
|
||||
describe('integration_TagList', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
beforeEach(async () => {
|
||||
testApp = new TestApp();
|
||||
await testApp.start(['--no-welcome']);
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
afterEach(async () => {
|
||||
if (testApp !== null) await testApp.destroy();
|
||||
testApp = null;
|
||||
done();
|
||||
});
|
||||
|
||||
// the tag list should be cleared if the next note has no tags
|
||||
|
||||
1
packages/app-cli/tests/md_to_html/sanitize_12.html
Normal file
1
packages/app-cli/tests/md_to_html/sanitize_12.html
Normal file
@@ -0,0 +1 @@
|
||||
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language=""><svg/onload=top.eval(atob("cmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoJ29wZW4gLW4gL1N5c3RlbS9BcHBsaWNhdGlvbnMvQ2FsY3VsYXRvci5hcHAvQ29udGVudHMvTWFjT1MvQ2FsY3VsYXRvcicp"))>" data-joplin-source-open="```"><svg/onload=top.eval(atob("cmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoJ29wZW4gLW4gL1N5c3RlbS9BcHBsaWNhdGlvbnMvQ2FsY3VsYXRvci5hcHAvQ29udGVudHMvTWFjT1MvQ2FsY3VsYXRvcicp"))> " data-joplin-source-close=" ```">ts</pre><pre class="hljs"><code><span class="hljs-attribute">ts</span></code></pre></div>
|
||||
3
packages/app-cli/tests/md_to_html/sanitize_12.md
Normal file
3
packages/app-cli/tests/md_to_html/sanitize_12.md
Normal file
@@ -0,0 +1,3 @@
|
||||
```"><svg/onload=top.eval(atob("cmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoJ29wZW4gLW4gL1N5c3RlbS9BcHBsaWNhdGlvbnMvQ2FsY3VsYXRvci5hcHAvQ29udGVudHMvTWFjT1MvQ2FsY3VsYXRvcicp"))>
|
||||
ts
|
||||
```
|
||||
@@ -13,16 +13,14 @@ function describeIfCompatible(name: string, fn: any, elseFn: any) {
|
||||
|
||||
describeIfCompatible('services_KeychainService', function() {
|
||||
|
||||
beforeEach(async (done: Function) => {
|
||||
beforeEach(async () => {
|
||||
await setupDatabaseAndSynchronizer(1, { keychainEnabled: true });
|
||||
await switchClient(1, { keychainEnabled: true });
|
||||
await Setting.deleteKeychainPasswords();
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async (done: Function) => {
|
||||
afterEach(async () => {
|
||||
await Setting.deleteKeychainPasswords();
|
||||
done();
|
||||
});
|
||||
|
||||
it('should be enabled on macOS and Windows', (async () => {
|
||||
|
||||
@@ -31,10 +31,9 @@ function newPluginService(appVersion: string = '1.4') {
|
||||
|
||||
describe('services_PluginService', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
beforeEach(async () => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should load and run a simple plugin', (async () => {
|
||||
|
||||
@@ -10,10 +10,9 @@ async function newRepoApi(): Promise<RepositoryApi> {
|
||||
|
||||
describe('services_plugins_RepositoryApi', function() {
|
||||
|
||||
beforeEach(async (done: Function) => {
|
||||
beforeEach(async () => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should get the manifests', (async () => {
|
||||
|
||||
@@ -5,10 +5,9 @@ import { newPluginScript, newPluginService } from '../../../testUtils';
|
||||
|
||||
describe('JoplinSettings', () => {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
beforeEach(async () => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
|
||||
@@ -4,10 +4,9 @@ import { newPluginScript, newPluginService } from '../../../testUtils';
|
||||
|
||||
describe('JoplinViewMenuItem', () => {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
beforeEach(async () => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
|
||||
@@ -7,10 +7,9 @@ import { newPluginScript, newPluginService } from '../../../testUtils';
|
||||
|
||||
describe('JoplinWorkspace', () => {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
beforeEach(async () => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
|
||||
@@ -28,10 +28,9 @@ describe('defaultPluginsUtils', function() {
|
||||
|
||||
const pluginsId = ['joplin.plugin.ambrt.backlinksToNote', 'org.joplinapp.plugins.ToggleSidebars'];
|
||||
|
||||
beforeEach(async (done) => {
|
||||
beforeEach(async () => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should install default plugins with no previous default plugins installed', (async () => {
|
||||
|
||||
@@ -3,10 +3,9 @@ import { setupDatabaseAndSynchronizer, switchClient } from '@joplin/lib/testing/
|
||||
|
||||
describe('services_plugins_sandboxProxy', function() {
|
||||
|
||||
beforeEach(async (done: Function) => {
|
||||
beforeEach(async () => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should create a new sandbox proxy', (async () => {
|
||||
|
||||
313
packages/app-clipper/popup/package-lock.json
generated
313
packages/app-clipper/popup/package-lock.json
generated
@@ -18,13 +18,13 @@
|
||||
"babel-loader": "8.0.6",
|
||||
"babel-plugin-named-asset-import": "^0.3.6",
|
||||
"babel-preset-react-app": "^9.1.1",
|
||||
"camelcase": "^5.3.1",
|
||||
"camelcase": "5.3.1",
|
||||
"case-sensitive-paths-webpack-plugin": "2.3.0",
|
||||
"css-loader": "3.6.0",
|
||||
"dotenv": "8.6.0",
|
||||
"dotenv-expand": "5.1.0",
|
||||
"file-loader": "4.3.0",
|
||||
"fs-extra": "^8.1.0",
|
||||
"fs-extra": "10.1.0",
|
||||
"html-webpack-plugin": "4.0.0-beta.11",
|
||||
"identity-obj-proxy": "3.0.0",
|
||||
"jest": "24.9.0",
|
||||
@@ -44,7 +44,7 @@
|
||||
"react-dev-utils": "^10.1.0",
|
||||
"react-dom": "^16.12.0",
|
||||
"react-redux": "^5.0.7",
|
||||
"redux": "^4.0.0",
|
||||
"redux": "4.1.2",
|
||||
"resolve": "1.22.1",
|
||||
"resolve-url-loader": "^3.1.3",
|
||||
"sass-loader": "8.0.2",
|
||||
@@ -60,7 +60,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"cra-build-watch": "^3.4.0",
|
||||
"fs-extra": "^6.0.1",
|
||||
"fs-extra": "^10.0.0",
|
||||
"md5": "^2.3.0",
|
||||
"react-scripts": "^3.3.1"
|
||||
}
|
||||
@@ -1342,12 +1342,6 @@
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/runtime-corejs3/node_modules/regenerator-runtime": {
|
||||
"version": "0.13.5",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
|
||||
"integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@babel/template": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz",
|
||||
@@ -1510,11 +1504,6 @@
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/@jest/core/node_modules/graceful-fs": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
||||
},
|
||||
"node_modules/@jest/environment": {
|
||||
"version": "24.9.0",
|
||||
"resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz",
|
||||
@@ -1602,11 +1591,6 @@
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/@jest/source-map/node_modules/graceful-fs": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
||||
},
|
||||
"node_modules/@jest/source-map/node_modules/source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
@@ -1668,11 +1652,6 @@
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/@jest/transform/node_modules/graceful-fs": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
||||
},
|
||||
"node_modules/@jest/transform/node_modules/source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
@@ -3801,11 +3780,6 @@
|
||||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/cacache/node_modules/graceful-fs": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
||||
},
|
||||
"node_modules/cacache/node_modules/rimraf": {
|
||||
"version": "2.7.1",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
|
||||
@@ -4607,12 +4581,6 @@
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/cra-build-watch/node_modules/graceful-fs": {
|
||||
"version": "4.2.6",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
|
||||
"integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/cra-build-watch/node_modules/html-webpack-plugin": {
|
||||
"version": "4.5.2",
|
||||
"resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz",
|
||||
@@ -6044,12 +6012,6 @@
|
||||
"node": ">=6 <7 || >=8"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-loader/node_modules/graceful-fs": {
|
||||
"version": "4.2.6",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
|
||||
"integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/eslint-module-utils": {
|
||||
"version": "2.6.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz",
|
||||
@@ -7319,21 +7281,39 @@
|
||||
}
|
||||
},
|
||||
"node_modules/fs-extra": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz",
|
||||
"integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==",
|
||||
"version": "10.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
|
||||
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"graceful-fs": "^4.1.2",
|
||||
"jsonfile": "^4.0.0",
|
||||
"universalify": "^0.1.0"
|
||||
"graceful-fs": "^4.2.0",
|
||||
"jsonfile": "^6.0.1",
|
||||
"universalify": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/fs-extra/node_modules/graceful-fs": {
|
||||
"version": "4.2.6",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
|
||||
"integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
|
||||
"dev": true
|
||||
"node_modules/fs-extra/node_modules/jsonfile": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
|
||||
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"universalify": "^2.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"graceful-fs": "^4.1.6"
|
||||
}
|
||||
},
|
||||
"node_modules/fs-extra/node_modules/universalify": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
|
||||
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 10.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/fs-minipass": {
|
||||
"version": "2.1.0",
|
||||
@@ -7540,12 +7520,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/graceful-fs": {
|
||||
"version": "4.1.11",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
|
||||
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
"version": "4.2.10",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
|
||||
"integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
|
||||
},
|
||||
"node_modules/growly": {
|
||||
"version": "1.3.0",
|
||||
@@ -9651,11 +9628,6 @@
|
||||
"license": "ISC",
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/jest-haste-map/node_modules/graceful-fs": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
||||
},
|
||||
"node_modules/jest-jasmine2": {
|
||||
"version": "24.9.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz",
|
||||
@@ -9818,11 +9790,6 @@
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/jest-runner/node_modules/graceful-fs": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
||||
},
|
||||
"node_modules/jest-runtime": {
|
||||
"version": "24.9.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz",
|
||||
@@ -9859,11 +9826,6 @@
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/jest-runtime/node_modules/graceful-fs": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
||||
},
|
||||
"node_modules/jest-serializer": {
|
||||
"version": "24.9.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz",
|
||||
@@ -9933,11 +9895,6 @@
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/jest-util/node_modules/graceful-fs": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
||||
},
|
||||
"node_modules/jest-util/node_modules/source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
@@ -16170,12 +16127,6 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/react-scripts/node_modules/graceful-fs": {
|
||||
"version": "4.2.4",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
|
||||
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/react-scripts/node_modules/has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
@@ -16876,12 +16827,6 @@
|
||||
"node": ">=0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/react-scripts/node_modules/regenerator-runtime": {
|
||||
"version": "0.13.5",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
|
||||
"integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/react-scripts/node_modules/regenerator-transform": {
|
||||
"version": "0.14.4",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz",
|
||||
@@ -17904,12 +17849,22 @@
|
||||
}
|
||||
},
|
||||
"node_modules/redux": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/redux/-/redux-4.0.0.tgz",
|
||||
"integrity": "sha512-NnnHF0h0WVE/hXyrB6OlX67LYRuaf/rJcbWvnHHEPCF/Xa/AZpwhs/20WyqzQae5x4SD2F9nPObgBh2rxAgLiA==",
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/redux/-/redux-4.1.2.tgz",
|
||||
"integrity": "sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw==",
|
||||
"dependencies": {
|
||||
"loose-envify": "^1.1.0",
|
||||
"symbol-observable": "^1.2.0"
|
||||
"@babel/runtime": "^7.9.2"
|
||||
}
|
||||
},
|
||||
"node_modules/redux/node_modules/@babel/runtime": {
|
||||
"version": "7.20.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz",
|
||||
"integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==",
|
||||
"dependencies": {
|
||||
"regenerator-runtime": "^0.13.10"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/regenerate": {
|
||||
@@ -17929,9 +17884,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/regenerator-runtime": {
|
||||
"version": "0.13.3",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
|
||||
"integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw=="
|
||||
"version": "0.13.10",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz",
|
||||
"integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw=="
|
||||
},
|
||||
"node_modules/regenerator-transform": {
|
||||
"version": "0.14.1",
|
||||
@@ -19877,14 +19832,6 @@
|
||||
"node": ">=4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/symbol-observable": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
|
||||
"integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/symbol-tree": {
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
|
||||
@@ -21528,11 +21475,6 @@
|
||||
"node": ">=4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/webpack/node_modules/graceful-fs": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
||||
},
|
||||
"node_modules/webpack/node_modules/schema-utils": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
|
||||
@@ -23076,14 +23018,6 @@
|
||||
"requires": {
|
||||
"core-js-pure": "^3.0.0",
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"regenerator-runtime": {
|
||||
"version": "0.13.5",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
|
||||
"integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"@babel/template": {
|
||||
@@ -23224,11 +23158,6 @@
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
|
||||
"integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ=="
|
||||
},
|
||||
"graceful-fs": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -23303,11 +23232,6 @@
|
||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
|
||||
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
|
||||
},
|
||||
"graceful-fs": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
@@ -23359,11 +23283,6 @@
|
||||
"write-file-atomic": "2.4.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"graceful-fs": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
@@ -25080,11 +24999,6 @@
|
||||
"unique-filename": "^1.1.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"graceful-fs": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
||||
},
|
||||
"rimraf": {
|
||||
"version": "2.7.1",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
|
||||
@@ -25721,12 +25635,6 @@
|
||||
"universalify": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"graceful-fs": {
|
||||
"version": "4.2.6",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
|
||||
"integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
|
||||
"dev": true
|
||||
},
|
||||
"html-webpack-plugin": {
|
||||
"version": "4.5.2",
|
||||
"resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz",
|
||||
@@ -26915,12 +26823,6 @@
|
||||
"jsonfile": "^4.0.0",
|
||||
"universalify": "^0.1.0"
|
||||
}
|
||||
},
|
||||
"graceful-fs": {
|
||||
"version": "4.2.6",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
|
||||
"integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -27916,20 +27818,30 @@
|
||||
}
|
||||
},
|
||||
"fs-extra": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz",
|
||||
"integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==",
|
||||
"version": "10.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
|
||||
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"graceful-fs": "^4.1.2",
|
||||
"jsonfile": "^4.0.0",
|
||||
"universalify": "^0.1.0"
|
||||
"graceful-fs": "^4.2.0",
|
||||
"jsonfile": "^6.0.1",
|
||||
"universalify": "^2.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"graceful-fs": {
|
||||
"version": "4.2.6",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
|
||||
"integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
|
||||
"jsonfile": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
|
||||
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"graceful-fs": "^4.1.6",
|
||||
"universalify": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"universalify": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
|
||||
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
@@ -28093,9 +28005,9 @@
|
||||
}
|
||||
},
|
||||
"graceful-fs": {
|
||||
"version": "4.1.11",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
|
||||
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
|
||||
"version": "4.2.10",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
|
||||
"integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
|
||||
},
|
||||
"growly": {
|
||||
"version": "1.3.0",
|
||||
@@ -29747,11 +29659,6 @@
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"graceful-fs": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -29878,13 +29785,6 @@
|
||||
"jest-worker": "^24.6.0",
|
||||
"source-map-support": "^0.5.6",
|
||||
"throat": "^4.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"graceful-fs": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"jest-runtime": {
|
||||
@@ -29915,13 +29815,6 @@
|
||||
"slash": "^2.0.0",
|
||||
"strip-bom": "^3.0.0",
|
||||
"yargs": "^13.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"graceful-fs": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"jest-serializer": {
|
||||
@@ -29980,11 +29873,6 @@
|
||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
|
||||
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
|
||||
},
|
||||
"graceful-fs": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
@@ -34972,12 +34860,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"graceful-fs": {
|
||||
"version": "4.2.4",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
|
||||
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
|
||||
"dev": true
|
||||
},
|
||||
"has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
@@ -35512,12 +35394,6 @@
|
||||
"readable-stream": "^2.0.2"
|
||||
}
|
||||
},
|
||||
"regenerator-runtime": {
|
||||
"version": "0.13.5",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
|
||||
"integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==",
|
||||
"dev": true
|
||||
},
|
||||
"regenerator-transform": {
|
||||
"version": "0.14.4",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz",
|
||||
@@ -36300,12 +36176,21 @@
|
||||
}
|
||||
},
|
||||
"redux": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/redux/-/redux-4.0.0.tgz",
|
||||
"integrity": "sha512-NnnHF0h0WVE/hXyrB6OlX67LYRuaf/rJcbWvnHHEPCF/Xa/AZpwhs/20WyqzQae5x4SD2F9nPObgBh2rxAgLiA==",
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/redux/-/redux-4.1.2.tgz",
|
||||
"integrity": "sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw==",
|
||||
"requires": {
|
||||
"loose-envify": "^1.1.0",
|
||||
"symbol-observable": "^1.2.0"
|
||||
"@babel/runtime": "^7.9.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": {
|
||||
"version": "7.20.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz",
|
||||
"integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.10"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"regenerate": {
|
||||
@@ -36322,9 +36207,9 @@
|
||||
}
|
||||
},
|
||||
"regenerator-runtime": {
|
||||
"version": "0.13.3",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
|
||||
"integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw=="
|
||||
"version": "0.13.10",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz",
|
||||
"integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw=="
|
||||
},
|
||||
"regenerator-transform": {
|
||||
"version": "0.14.1",
|
||||
@@ -37843,11 +37728,6 @@
|
||||
"util.promisify": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"symbol-observable": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
|
||||
"integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
|
||||
},
|
||||
"symbol-tree": {
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
|
||||
@@ -38782,11 +38662,6 @@
|
||||
"estraverse": "^4.1.1"
|
||||
}
|
||||
},
|
||||
"graceful-fs": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
||||
},
|
||||
"schema-utils": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"dotenv": "8.6.0",
|
||||
"dotenv-expand": "5.1.0",
|
||||
"file-loader": "4.3.0",
|
||||
"fs-extra": "8.1.0",
|
||||
"fs-extra": "10.1.0",
|
||||
"html-webpack-plugin": "4.0.0-beta.11",
|
||||
"identity-obj-proxy": "3.0.0",
|
||||
"jest": "24.9.0",
|
||||
@@ -63,7 +63,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"cra-build-watch": "^3.4.0",
|
||||
"fs-extra": "^6.0.1",
|
||||
"fs-extra": "^10.0.0",
|
||||
"md5": "^2.3.0",
|
||||
"react-scripts": "^3.3.1"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<html lang="en-gb">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
|
||||
@@ -42,7 +42,7 @@ import commands from './commands/index';
|
||||
import invitationRespond from '../../services/share/invitationRespond';
|
||||
import restart from '../../services/restart';
|
||||
const { connect } = require('react-redux');
|
||||
const { PromptDialog } = require('../PromptDialog.min.js');
|
||||
import PromptDialog from '../PromptDialog';
|
||||
const NotePropertiesDialog = require('../NotePropertiesDialog.min.js');
|
||||
const PluginManager = require('@joplin/lib/services/PluginManager');
|
||||
const ipcRenderer = require('electron').ipcRenderer;
|
||||
|
||||
@@ -116,7 +116,7 @@ function CodeMirror(props: NoteBodyEditorProps, ref: any) {
|
||||
scrollTo: (options: ScrollOptions) => {
|
||||
if (options.type === ScrollOptionTypes.Hash) {
|
||||
if (!webviewRef.current) return;
|
||||
webviewRef.current.wrappedInstance.send('scrollToHash', options.value as string);
|
||||
webviewRef.current.send('scrollToHash', options.value as string);
|
||||
} else if (options.type === ScrollOptionTypes.Percent) {
|
||||
const percent = options.value as number;
|
||||
setEditorPercentScroll(percent);
|
||||
@@ -151,9 +151,10 @@ function CodeMirror(props: NoteBodyEditorProps, ref: any) {
|
||||
if (props.visiblePanes.indexOf('editor') >= 0) {
|
||||
editorRef.current.focus();
|
||||
} else {
|
||||
// If we just call wrappedInstance.focus() then the iframe is focused,
|
||||
// but not its content, such that scrolling up / down with arrow keys fails
|
||||
webviewRef.current.wrappedInstance.send('focus');
|
||||
// If we just call focus() then the iframe is focused,
|
||||
// but not its content, such that scrolling up / down
|
||||
// with arrow keys fails
|
||||
webviewRef.current.send('focus');
|
||||
}
|
||||
} else {
|
||||
commandProcessed = false;
|
||||
@@ -656,13 +657,13 @@ function CodeMirror(props: NoteBodyEditorProps, ref: any) {
|
||||
// mounted, webviewReady might be true, but webviewRef.current will be
|
||||
// undefined. Maybe due to the error boundary that unmount components.
|
||||
// Since we can't do much about it we just print an error.
|
||||
if (webviewRef.current && webviewRef.current.wrappedInstance) {
|
||||
if (webviewRef.current) {
|
||||
// To keep consistency among CodeMirror's editing and scroll percents
|
||||
// of Editor and Viewer.
|
||||
const percent = getLineScrollPercent();
|
||||
setEditorPercentScroll(percent);
|
||||
options.percent = percent;
|
||||
webviewRef.current.wrappedInstance.send('setHtml', renderedBody.html, options);
|
||||
webviewRef.current.send('setHtml', renderedBody.html, options);
|
||||
} else {
|
||||
console.error('Trying to set HTML on an undefined webview ref');
|
||||
}
|
||||
@@ -681,8 +682,8 @@ function CodeMirror(props: NoteBodyEditorProps, ref: any) {
|
||||
// props.content has been updated).
|
||||
const textChanged = props.searchMarkers.keywords.length > 0 && (props.content !== previousContent || renderedBody !== previousRenderedBody);
|
||||
|
||||
if (webviewRef.current?.wrappedInstance && (props.searchMarkers !== previousSearchMarkers || textChanged)) {
|
||||
webviewRef.current.wrappedInstance.send('setMarkers', props.searchMarkers.keywords, props.searchMarkers.options);
|
||||
if (webviewRef.current && (props.searchMarkers !== previousSearchMarkers || textChanged)) {
|
||||
webviewRef.current.send('setMarkers', props.searchMarkers.keywords, props.searchMarkers.options);
|
||||
|
||||
if (editorRef.current) {
|
||||
const matches = editorRef.current.setMarkers(props.searchMarkers.keywords, props.searchMarkers.options);
|
||||
|
||||
@@ -220,7 +220,7 @@ function Editor(props: EditorProps, ref: any) {
|
||||
cm.off('refresh', editor_resize);
|
||||
cm.off('update', editor_update);
|
||||
// eslint-disable-next-line @seiyab/react-hooks/exhaustive-deps -- Old code before rule was applied
|
||||
editorParent.current.removeChild(cm.getWrapperElement());
|
||||
if (editorParent.current) editorParent.current.removeChild(cm.getWrapperElement());
|
||||
setEditor(null);
|
||||
};
|
||||
// eslint-disable-next-line @seiyab/react-hooks/exhaustive-deps -- Old code before rule was applied
|
||||
|
||||
@@ -99,7 +99,7 @@ export default function useScrollHandler(editorRef: any, webviewRef: any, onScro
|
||||
|
||||
const setViewerPercentScroll = useCallback((percent: number) => {
|
||||
if (webviewRef.current) {
|
||||
webviewRef.current.wrappedInstance.send('setPercentScroll', percent);
|
||||
webviewRef.current.send('setPercentScroll', percent);
|
||||
scheduleOnScroll({ percent });
|
||||
}
|
||||
// eslint-disable-next-line @seiyab/react-hooks/exhaustive-deps -- Old code before rule was applied
|
||||
|
||||
@@ -1010,7 +1010,10 @@ const TinyMCE = (props: NoteBodyEditorProps, ref: any) => {
|
||||
} else { // Paste regular text
|
||||
// event.clipboardData.getData('text/html') wraps the content with <html><body></body></html>,
|
||||
// which seems to be not supported in editor.insertContent().
|
||||
const pastedHtml = clipboard.readHTML();
|
||||
//
|
||||
// when pasting text with Ctrl+Shift+V, the format should be ignored.
|
||||
// In this case, event.clopboardData.getData('text/html') returns an empty string, but the clipboard.readHTML() still returns the formatted text.
|
||||
const pastedHtml = event.clipboardData.getData('text/html') ? clipboard.readHTML() : '';
|
||||
if (pastedHtml) { // Handles HTML
|
||||
const modifiedHtml = await processPastedHtml(pastedHtml);
|
||||
editor.insertContent(modifiedHtml);
|
||||
|
||||
@@ -12,6 +12,7 @@ import useWindowCommandHandler from './utils/useWindowCommandHandler';
|
||||
import useDropHandler from './utils/useDropHandler';
|
||||
import useMarkupToHtml from './utils/useMarkupToHtml';
|
||||
import useFormNote, { OnLoadEvent } from './utils/useFormNote';
|
||||
import useEffectiveNoteId from './utils/useEffectiveNoteId';
|
||||
import useFolder from './utils/useFolder';
|
||||
import styles_ from './styles';
|
||||
import { NoteEditorProps, FormNote, ScrollOptions, ScrollOptionTypes, OnChangeEvent, NoteBodyEditorProps, AllAssetsOptions } from './utils/types';
|
||||
@@ -66,9 +67,11 @@ function NoteEditor(props: NoteEditorProps) {
|
||||
setTitleHasBeenManuallyChanged(false);
|
||||
}, []);
|
||||
|
||||
const effectiveNoteId = useEffectiveNoteId(props);
|
||||
|
||||
const { formNote, setFormNote, isNewNote, resourceInfos } = useFormNote({
|
||||
syncStarted: props.syncStarted,
|
||||
noteId: props.noteId,
|
||||
noteId: effectiveNoteId,
|
||||
isProvisional: props.isProvisional,
|
||||
titleInputRef: titleInputRef,
|
||||
editorRef: editorRef,
|
||||
@@ -192,7 +195,7 @@ function NoteEditor(props: NoteEditorProps) {
|
||||
|
||||
setScrollWhenReady({
|
||||
type: props.selectedNoteHash ? ScrollOptionTypes.Hash : ScrollOptionTypes.Percent,
|
||||
value: props.selectedNoteHash ? props.selectedNoteHash : props.lastEditorScrollPercents[props.noteId] || 0,
|
||||
value: props.selectedNoteHash ? props.selectedNoteHash : props.lastEditorScrollPercents[formNote.id] || 0,
|
||||
});
|
||||
|
||||
void ResourceEditWatcher.instance().stopWatchingAll();
|
||||
@@ -495,6 +498,7 @@ function NoteEditor(props: NoteEditorProps) {
|
||||
return (
|
||||
<NoteSearchBar
|
||||
ref={noteSearchBarRef}
|
||||
themeId={props.themeId}
|
||||
style={{
|
||||
display: 'flex',
|
||||
height: 35,
|
||||
@@ -549,7 +553,7 @@ function NoteEditor(props: NoteEditorProps) {
|
||||
}
|
||||
}
|
||||
|
||||
if (formNote.encryption_applied || !formNote.id || !props.noteId) {
|
||||
if (formNote.encryption_applied || !formNote.id || !effectiveNoteId) {
|
||||
return renderNoNotes(styles.root);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
/** @jest-environment ./loadResources.testEnv */
|
||||
// eslint-disable-next-line strict, lines-around-directive
|
||||
'use strict';
|
||||
// use strict is necessary here so that typescript doesn't place "use strict" above the jest docblock
|
||||
// https://github.com/microsoft/TypeScript/issues/15819#issuecomment-782235619
|
||||
|
||||
// import { textToDataUri, svgUriToPng } from './contextMenuUtils';
|
||||
|
||||
// jest.mock('@joplin/lib/models/Resource');
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// These tests are disabled because unfortunately they require the "canvas"
|
||||
// module, and it's yet another binary module that fails to compile half of the
|
||||
// time. Since it's only needed here it's not worth the trouble.
|
||||
|
||||
describe('contextMenu', () => {
|
||||
|
||||
it('should pass', () => {
|
||||
expect(1).toBe(1);
|
||||
});
|
||||
|
||||
// it('should provide proper copy path', async () => {
|
||||
// const testCase = [
|
||||
// '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">test</svg>',
|
||||
// 'image/svg+xml',
|
||||
// ];
|
||||
// const expectedText = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3BhY2U9InByZXNlcnZlIj50ZXN0PC9zdmc+';
|
||||
// expect(textToDataUri(testCase[0], testCase[1])).toBe(expectedText);
|
||||
// });
|
||||
|
||||
// it('should convert to png binary', async () => {
|
||||
// const testCase = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEwMCAxMDAiIHhtbDpzcGFjZT0icHJlc2VydmUiIGhlaWdodD0iMTAwcHgiIHdpZHRoPSIxMDBweCI+CjxnPgoJPHBhdGggZD0iTTI4LjEsMzYuNmM0LjYsMS45LDEyLjIsMS42LDIwLjksMS4xYzguOS0wLjQsMTktMC45LDI4LjksMC45YzYuMywxLjIsMTEuOSwzLjEsMTYuOCw2Yy0xLjUtMTIuMi03LjktMjMuNy0xOC42LTMxLjMgICBjLTQuOS0wLjItOS45LDAuMy0xNC44LDEuNEM0Ny44LDE3LjksMzYuMiwyNS42LDI4LjEsMzYuNnoiLz4KCTxwYXRoIGQ9Ik03MC4zLDkuOEM1Ny41LDMuNCw0Mi44LDMuNiwzMC41LDkuNWMtMyw2LTguNCwxOS42LTUuMywyNC45YzguNi0xMS43LDIwLjktMTkuOCwzNS4yLTIzLjFDNjMuNywxMC41LDY3LDEwLDcwLjMsOS44eiIvPgoJPHBhdGggZD0iTTE2LjUsNTEuM2MwLjYtMS43LDEuMi0zLjQsMi01LjFjLTMuOC0zLjQtNy41LTctMTEtMTAuOGMtMi4xLDYuMS0yLjgsMTIuNS0yLjMsMTguN0M5LjYsNTEuMSwxMy40LDUwLjIsMTYuNSw1MS4zeiIvPgoJPHBhdGggZD0iTTksMzEuNmMzLjUsMy45LDcuMiw3LjYsMTEuMSwxMS4xYzAuOC0xLjYsMS43LTMuMSwyLjYtNC42YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC42Yy0yLjktMy4zLTMuMS05LjItMC42LTE3LjYgICBjMC44LTIuNywxLjgtNS4zLDIuNy03LjRjLTUuMiwzLjQtOS44LDgtMTMuMywxMy43QzEwLjgsMjcuOSw5LjgsMjkuNyw5LDMxLjZ6Ii8+Cgk8cGF0aCBkPSJNMTUuNCw1NC43Yy0yLjYtMS02LjEsMC43LTkuNywzLjRjMS4yLDYuNiwzLjksMTMsOCwxOC41QzEzLDY5LjMsMTMuNSw2MS44LDE1LjQsNTQuN3oiLz4KCTxwYXRoIGQ9Ik0zOS44LDU3LjZDNTQuMyw2Ni43LDcwLDczLDg2LjUsNzYuNGMwLjYtMC44LDEuMS0xLjYsMS43LTIuNWM0LjgtNy43LDctMTYuMyw2LjgtMjQuOGMtMTMuOC05LjMtMzEuMy04LjQtNDUuOC03LjcgICBjLTkuNSwwLjUtMTcuOCwwLjktMjMuMi0xLjdjLTAuMSwwLjEtMC4yLDAuMy0wLjMsMC40Yy0xLDEuNy0yLDMuNC0yLjksNS4xQzI4LjIsNDkuNywzMy44LDUzLjksMzkuOCw1Ny42eiIvPgoJPHBhdGggZD0iTTI2LjIsODguMmMzLjMsMiw2LjcsMy42LDEwLjIsNC43Yy0zLjUtNi4yLTYuMy0xMi42LTguOC0xOC41Yy0zLjEtNy4yLTUuOC0xMy41LTktMTcuMmMtMS45LDgtMiwxNi40LTAuMywyNC43ICAgQzIwLjYsODQuMiwyMy4yLDg2LjMsMjYuMiw4OC4yeiIvPgoJPHBhdGggZD0iTTMwLjksNzNjMi45LDYuOCw2LjEsMTQuNCwxMC41LDIxLjJjMTUuNiwzLDMyLTIuMyw0Mi42LTE0LjZDNjcuNyw3Niw1Mi4yLDY5LjYsMzcuOSw2MC43QzMyLDU3LDI2LjUsNTMsMjEuMyw0OC42ICAgYy0wLjYsMS41LTEuMiwzLTEuNyw0LjZDMjQuMSw1Ny4xLDI3LjMsNjQuNSwzMC45LDczeiIvPgo8L2c+Cjwvc3ZnPg==';
|
||||
// const png = await svgUriToPng(document, testCase);
|
||||
// expect(png).toBeInstanceOf(Uint8Array);
|
||||
// });
|
||||
|
||||
// it('should throw error on invalid svg uri', async () => {
|
||||
// // We are mocking console.error since jsdom throws errors to console when we try to load an invalid img
|
||||
// // https://github.com/facebook/jest/pull/5267#issuecomment-356605468
|
||||
// const consoleError = console.error;
|
||||
// console.error = jest.fn();
|
||||
// const testCases: Array<string> = [
|
||||
// 'data:image/svg+xml;base64,error',
|
||||
// 'invalid',
|
||||
// ];
|
||||
// for (const testCase of testCases) {
|
||||
// await expect(svgUriToPng(document, testCase)).rejects.toBeInstanceOf(Error);
|
||||
// }
|
||||
// console.error = consoleError;
|
||||
// });
|
||||
});
|
||||
@@ -0,0 +1,21 @@
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { NoteEditorProps } from './types';
|
||||
|
||||
export default function useEffectiveNoteId(props: NoteEditorProps) {
|
||||
// When a notebook is changed without any selected note,
|
||||
// no note is selected for a moment, and then a new note gets selected.
|
||||
// In this short transient period, the last displayed note id should temporarily
|
||||
// be used to prevent NoteEditor's body from being unmounted.
|
||||
// See https://github.com/laurent22/joplin/issues/6416
|
||||
// and https://github.com/laurent22/joplin/pull/6430 for details.
|
||||
|
||||
const lastDisplayedNoteId = useRef<string>(null);
|
||||
const whenNoteIdIsTransientlyAbsent = !props.noteId && props.notes.length > 0;
|
||||
const effectiveNoteId = whenNoteIdIsTransientlyAbsent ? lastDisplayedNoteId.current : props.noteId;
|
||||
|
||||
useEffect(() => {
|
||||
if (props.noteId) lastDisplayedNoteId.current = props.noteId;
|
||||
}, [props.noteId]);
|
||||
|
||||
return effectiveNoteId;
|
||||
}
|
||||
@@ -55,7 +55,7 @@ class NoteRevisionViewerComponent extends React.PureComponent {
|
||||
}
|
||||
|
||||
async viewer_domReady() {
|
||||
// this.viewerRef_.current.wrappedInstance.openDevTools();
|
||||
// this.viewerRef_.current.openDevTools();
|
||||
|
||||
const revisions = await Revision.allByType(BaseModel.TYPE_NOTE, this.props.noteId);
|
||||
|
||||
@@ -127,7 +127,7 @@ class NoteRevisionViewerComponent extends React.PureComponent {
|
||||
postMessageSyntax: 'ipcProxySendToHost',
|
||||
});
|
||||
|
||||
this.viewerRef_.current.wrappedInstance.send('setHtml', result.html, {
|
||||
this.viewerRef_.current.send('setHtml', result.html, {
|
||||
cssFiles: result.cssFiles,
|
||||
pluginAssets: result.pluginAssets,
|
||||
});
|
||||
@@ -199,7 +199,7 @@ class NoteRevisionViewerComponent extends React.PureComponent {
|
||||
</div>
|
||||
);
|
||||
|
||||
const viewer = <NoteTextViewer viewerStyle={{ display: 'flex', flex: 1, borderLeft: 'none' }} ref={this.viewerRef_} onDomReady={this.viewer_domReady} onIpcMessage={this.webview_ipcMessage} />;
|
||||
const viewer = <NoteTextViewer themeId={this.props.themeId} viewerStyle={{ display: 'flex', flex: 1, borderLeft: 'none' }} ref={this.viewerRef_} onDomReady={this.viewer_domReady} onIpcMessage={this.webview_ipcMessage} />;
|
||||
|
||||
return (
|
||||
<div style={style.root}>
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
const React = require('react');
|
||||
const { connect } = require('react-redux');
|
||||
const { themeStyle } = require('@joplin/lib/theme');
|
||||
const { _ } = require('@joplin/lib/locale');
|
||||
|
||||
class NoteSearchBarComponent extends React.Component {
|
||||
class NoteSearchBar extends React.Component {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
@@ -177,17 +176,4 @@ class NoteSearchBarComponent extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
const mapStateToProps = state => {
|
||||
return {
|
||||
themeId: state.settings.theme,
|
||||
};
|
||||
};
|
||||
|
||||
const NoteSearchBar = connect(
|
||||
mapStateToProps,
|
||||
null,
|
||||
null,
|
||||
{ withRef: true }
|
||||
)(NoteSearchBarComponent);
|
||||
|
||||
module.exports = NoteSearchBar;
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
import PostMessageService, { MessageResponse, ResponderComponentType } from '@joplin/lib/services/PostMessageService';
|
||||
import * as React from 'react';
|
||||
const { connect } = require('react-redux');
|
||||
import { reg } from '@joplin/lib/registry';
|
||||
|
||||
interface Props {
|
||||
onDomReady: Function;
|
||||
onIpcMessage: Function;
|
||||
viewerStyle: any;
|
||||
contentMaxWidth: number;
|
||||
}
|
||||
|
||||
class NoteTextViewerComponent extends React.Component<Props, any> {
|
||||
export default class NoteTextViewerComponent extends React.Component<Props, any> {
|
||||
|
||||
private initialized_: boolean = false;
|
||||
private domReady_: boolean = false;
|
||||
@@ -176,18 +176,3 @@ class NoteTextViewerComponent extends React.Component<Props, any> {
|
||||
return <iframe className="noteTextViewer" ref={this.webviewRef_} style={viewerStyle} src="gui/note-viewer/index.html"></iframe>;
|
||||
}
|
||||
}
|
||||
|
||||
const mapStateToProps = (state: any) => {
|
||||
return {
|
||||
themeId: state.settings.theme,
|
||||
};
|
||||
};
|
||||
|
||||
const NoteTextViewer = connect(
|
||||
mapStateToProps,
|
||||
null,
|
||||
null,
|
||||
{ withRef: true }
|
||||
)(NoteTextViewerComponent);
|
||||
|
||||
export default NoteTextViewer;
|
||||
|
||||
@@ -1,15 +1,34 @@
|
||||
const React = require('react');
|
||||
const { _ } = require('@joplin/lib/locale');
|
||||
const { themeStyle } = require('@joplin/lib/theme');
|
||||
const time = require('@joplin/lib/time').default;
|
||||
const Datetime = require('react-datetime');
|
||||
const CreatableSelect = require('react-select/lib/Creatable').default;
|
||||
const Select = require('react-select').default;
|
||||
const makeAnimated = require('react-select/lib/animated').default;
|
||||
import * as React from 'react';
|
||||
import { _ } from '@joplin/lib/locale';
|
||||
import { themeStyle } from '@joplin/lib/theme';
|
||||
import time from '@joplin/lib/time';
|
||||
const Datetime = require('react-datetime').default;
|
||||
import CreatableSelect from 'react-select/creatable';
|
||||
import Select from 'react-select';
|
||||
import makeAnimated from 'react-select/animated';
|
||||
interface Props {
|
||||
themeId: number;
|
||||
defaultValue: any;
|
||||
visible: boolean;
|
||||
style: any;
|
||||
buttons: any[];
|
||||
onClose: Function;
|
||||
inputType: string;
|
||||
description: string;
|
||||
answer?: any;
|
||||
autocomplete: any;
|
||||
label: string;
|
||||
}
|
||||
|
||||
class PromptDialog extends React.Component {
|
||||
constructor() {
|
||||
super();
|
||||
export default class PromptDialog extends React.Component<Props, any> {
|
||||
|
||||
private answerInput_: any;
|
||||
private focusInput_: boolean;
|
||||
private styles_: any;
|
||||
private styleKey_: string;
|
||||
|
||||
constructor(props: Props) {
|
||||
super(props);
|
||||
|
||||
this.answerInput_ = React.createRef();
|
||||
}
|
||||
@@ -22,7 +41,7 @@ class PromptDialog extends React.Component {
|
||||
this.focusInput_ = true;
|
||||
}
|
||||
|
||||
UNSAFE_componentWillReceiveProps(newProps) {
|
||||
UNSAFE_componentWillReceiveProps(newProps: Props) {
|
||||
if ('visible' in newProps && newProps.visible !== this.props.visible) {
|
||||
this.setState({ visible: newProps.visible });
|
||||
if (newProps.visible) this.focusInput_ = true;
|
||||
@@ -38,7 +57,7 @@ class PromptDialog extends React.Component {
|
||||
this.focusInput_ = false;
|
||||
}
|
||||
|
||||
styles(themeId, width, height, visible) {
|
||||
styles(themeId: number, width: number, height: number, visible: boolean) {
|
||||
const styleKey = `${themeId}_${width}_${height}_${visible}`;
|
||||
if (styleKey === this.styleKey_) return this.styles_;
|
||||
|
||||
@@ -100,40 +119,40 @@ class PromptDialog extends React.Component {
|
||||
};
|
||||
|
||||
this.styles_.select = {
|
||||
control: provided =>
|
||||
control: (provided: any) =>
|
||||
Object.assign(provided, {
|
||||
minWidth: width * 0.2,
|
||||
maxWidth: width * 0.5,
|
||||
fontFamily: theme.fontFamily,
|
||||
}),
|
||||
input: provided =>
|
||||
input: (provided: any) =>
|
||||
Object.assign(provided, {
|
||||
minWidth: '20px',
|
||||
color: theme.color,
|
||||
}),
|
||||
menu: provided =>
|
||||
menu: (provided: any) =>
|
||||
Object.assign(provided, {
|
||||
color: theme.color,
|
||||
fontFamily: theme.fontFamily,
|
||||
backgroundColor: theme.backgroundColor,
|
||||
}),
|
||||
option: (provided, state) =>
|
||||
option: (provided: any, state: any) =>
|
||||
Object.assign(provided, {
|
||||
color: theme.color,
|
||||
fontFamily: theme.fontFamily,
|
||||
paddingLeft: `${10 + (state.data.indentDepth || 0) * 20}px`,
|
||||
}),
|
||||
multiValueLabel: provided =>
|
||||
multiValueLabel: (provided: any) =>
|
||||
Object.assign(provided, {
|
||||
fontFamily: theme.fontFamily,
|
||||
}),
|
||||
multiValueRemove: provided =>
|
||||
multiValueRemove: (provided: any) =>
|
||||
Object.assign(provided, {
|
||||
color: theme.color,
|
||||
}),
|
||||
};
|
||||
|
||||
this.styles_.selectTheme = tagTheme =>
|
||||
this.styles_.selectTheme = (tagTheme: any) =>
|
||||
Object.assign(tagTheme, {
|
||||
borderRadius: 2,
|
||||
colors: Object.assign(tagTheme.colors, {
|
||||
@@ -169,7 +188,7 @@ class PromptDialog extends React.Component {
|
||||
|
||||
const styles = this.styles(this.props.themeId, style.width, style.height, this.state.visible);
|
||||
|
||||
const onClose = (accept, buttonType) => {
|
||||
const onClose = (accept: boolean, buttonType: string = null) => {
|
||||
if (this.props.onClose) {
|
||||
let outputAnswer = this.state.answer;
|
||||
if (this.props.inputType === 'datetime') {
|
||||
@@ -181,7 +200,7 @@ class PromptDialog extends React.Component {
|
||||
this.setState({ visible: false, answer: '' });
|
||||
};
|
||||
|
||||
const onChange = event => {
|
||||
const onChange = (event: any) => {
|
||||
this.setState({ answer: event.target.value });
|
||||
};
|
||||
|
||||
@@ -194,16 +213,16 @@ class PromptDialog extends React.Component {
|
||||
// return m.isValid() ? m.toDate() : null;
|
||||
// }
|
||||
|
||||
const onDateTimeChange = momentObject => {
|
||||
const onDateTimeChange = (momentObject: any) => {
|
||||
this.setState({ answer: momentObject });
|
||||
};
|
||||
|
||||
const onSelectChange = newValue => {
|
||||
const onSelectChange = (newValue: any) => {
|
||||
this.setState({ answer: newValue });
|
||||
this.focusInput_ = true;
|
||||
};
|
||||
|
||||
const onKeyDown = event => {
|
||||
const onKeyDown = (event: any) => {
|
||||
if (event.key === 'Enter') {
|
||||
if (this.props.inputType !== 'tags' && this.props.inputType !== 'dropdown') {
|
||||
onClose(true);
|
||||
@@ -221,11 +240,11 @@ class PromptDialog extends React.Component {
|
||||
let inputComp = null;
|
||||
|
||||
if (this.props.inputType === 'datetime') {
|
||||
inputComp = <Datetime className="datetime-picker" value={this.state.answer} inputProps={{ style: styles.input }} dateFormat={time.dateFormat()} timeFormat={time.timeFormat()} onChange={momentObject => onDateTimeChange(momentObject)} />;
|
||||
inputComp = <Datetime className="datetime-picker" value={this.state.answer} inputProps={{ style: styles.input }} dateFormat={time.dateFormat()} timeFormat={time.timeFormat()} onChange={(momentObject: any) => onDateTimeChange(momentObject)} />;
|
||||
} else if (this.props.inputType === 'tags') {
|
||||
inputComp = <CreatableSelect className="tag-selector" styles={styles.select} theme={styles.selectTheme} ref={this.answerInput_} value={this.state.answer} placeholder="" components={makeAnimated()} isMulti={true} isClearable={false} backspaceRemovesValue={true} options={this.props.autocomplete} onChange={onSelectChange} onKeyDown={event => onKeyDown(event)} />;
|
||||
inputComp = <CreatableSelect className="tag-selector" styles={styles.select} theme={styles.selectTheme} ref={this.answerInput_} value={this.state.answer} placeholder="" components={makeAnimated()} isMulti={true} isClearable={false} backspaceRemovesValue={true} options={this.props.autocomplete} onChange={onSelectChange} onKeyDown={(event: any) => onKeyDown(event)} />;
|
||||
} else if (this.props.inputType === 'dropdown') {
|
||||
inputComp = <Select className="item-selector" styles={styles.select} theme={styles.selectTheme} ref={this.answerInput_} components={makeAnimated()} value={this.props.answer} defaultValue={this.props.defaultValue} isClearable={false} options={this.props.autocomplete} onChange={onSelectChange} onKeyDown={event => onKeyDown(event)} />;
|
||||
inputComp = <Select className="item-selector" styles={styles.select} theme={styles.selectTheme} ref={this.answerInput_} components={makeAnimated()} value={this.props.answer} defaultValue={this.props.defaultValue} isClearable={false} options={this.props.autocomplete} onChange={onSelectChange} onKeyDown={(event: any) => onKeyDown(event)} />;
|
||||
} else {
|
||||
inputComp = <input style={styles.input} ref={this.answerInput_} value={this.state.answer} type="text" onChange={event => onChange(event)} onKeyDown={event => onKeyDown(event)} />;
|
||||
}
|
||||
@@ -274,5 +293,3 @@ class PromptDialog extends React.Component {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { PromptDialog };
|
||||
@@ -11,7 +11,7 @@ import { Size } from './ResizableLayout/utils/types';
|
||||
import MenuBar from './MenuBar';
|
||||
import { _ } from '@joplin/lib/locale';
|
||||
const React = require('react');
|
||||
const { render } = require('react-dom');
|
||||
const { createRoot } = require('react-dom/client');
|
||||
const { connect, Provider } = require('react-redux');
|
||||
import Setting from '@joplin/lib/models/Setting';
|
||||
import shim from '@joplin/lib/shim';
|
||||
@@ -259,11 +259,11 @@ const Root = connect(mapStateToProps)(RootComponent);
|
||||
|
||||
const store = app().store();
|
||||
|
||||
render(
|
||||
const root = createRoot(document.getElementById('react-root'));
|
||||
root.render(
|
||||
<Provider store={store}>
|
||||
<ErrorBoundary>
|
||||
<Root />
|
||||
</ErrorBoundary>
|
||||
</Provider>,
|
||||
document.getElementById('react-root')
|
||||
</Provider>
|
||||
);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const smalltalk = require('smalltalk');
|
||||
const smalltalk = require('smalltalk/bundle');
|
||||
|
||||
class Dialogs {
|
||||
async alert(message: string, title = '') {
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
/**
|
||||
* A Jest custom test Environment to load the resources for the tests.
|
||||
* Use this test envirenment when you work with resources like images, files.
|
||||
* See gui/NoteEditor/utils/contextMenu.test.ts for an example.
|
||||
*/
|
||||
|
||||
const JSDOMEnvironment = require('jest-environment-jsdom');
|
||||
import type { EnvironmentContext } from '@jest/environment';
|
||||
import type { Config } from '@jest/types';
|
||||
|
||||
|
||||
export default class CustomEnvironment extends JSDOMEnvironment {
|
||||
constructor(config: Config.ProjectConfig, context?: EnvironmentContext) {
|
||||
// Resources is set to 'usable' to enable fetching of resources like images and fonts while testing
|
||||
// Which does not happen by default in jest
|
||||
// https://stackoverflow.com/a/49482563
|
||||
config.testEnvironmentOptions.resources = 'usable';
|
||||
super(config, context);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@joplin/app-desktop",
|
||||
"version": "2.9.12",
|
||||
"version": "2.9.17",
|
||||
"description": "Joplin for Desktop",
|
||||
"main": "main.js",
|
||||
"private": true,
|
||||
@@ -108,7 +108,7 @@
|
||||
"devDependencies": {
|
||||
"@joplin/tools": "~2.9",
|
||||
"@testing-library/react-hooks": "8.0.1",
|
||||
"@types/jest": "26.0.24",
|
||||
"@types/jest": "29.2.3",
|
||||
"@types/node": "18.11.9",
|
||||
"@types/react": "16.14.34",
|
||||
"@types/react-redux": "7.1.24",
|
||||
@@ -119,13 +119,14 @@
|
||||
"electron-builder": "23.6.0",
|
||||
"electron-notarize": "1.2.2",
|
||||
"electron-rebuild": "3.2.9",
|
||||
"glob": "7.2.3",
|
||||
"glob": "8.0.3",
|
||||
"gulp": "4.0.2",
|
||||
"jest": "26.6.3",
|
||||
"jest": "29.3.1",
|
||||
"jest-environment-jsdom": "29.3.1",
|
||||
"js-sha512": "0.8.0",
|
||||
"nan": "2.17.0",
|
||||
"react-test-renderer": "16.14.0",
|
||||
"typescript": "4.0.5"
|
||||
"react-test-renderer": "18.2.0",
|
||||
"typescript": "4.9.3"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"7zip-bin-linux": "^1.0.1",
|
||||
@@ -147,30 +148,30 @@
|
||||
"debounce": "1.2.1",
|
||||
"electron-window-state": "5.0.3",
|
||||
"formatcoords": "1.1.3",
|
||||
"fs-extra": "10.0.0",
|
||||
"highlight.js": "10.7.3",
|
||||
"fs-extra": "10.1.0",
|
||||
"highlight.js": "11.6.0",
|
||||
"immer": "7.0.15",
|
||||
"keytar": "7.9.0",
|
||||
"mark.js": "8.11.1",
|
||||
"md5": "2.3.0",
|
||||
"moment": "2.29.4",
|
||||
"node-fetch": "1.7.3",
|
||||
"node-notifier": "8.0.2",
|
||||
"node-fetch": "2.6.7",
|
||||
"node-notifier": "10.0.1",
|
||||
"node-rsa": "1.1.1",
|
||||
"pretty-bytes": "5.6.0",
|
||||
"re-resizable": "6.9.9",
|
||||
"react": "16.14.0",
|
||||
"react-datetime": "2.16.3",
|
||||
"react-dom": "16.14.0",
|
||||
"react-redux": "5.1.2",
|
||||
"react-select": "2.4.4",
|
||||
"react": "18.2.0",
|
||||
"react-datetime": "3.2.0",
|
||||
"react-dom": "18.2.0",
|
||||
"react-redux": "8.0.5",
|
||||
"react-select": "5.6.1",
|
||||
"react-toggle-button": "2.2.0",
|
||||
"react-tooltip": "3.11.6",
|
||||
"redux": "3.7.2",
|
||||
"react-tooltip": "4.5.0",
|
||||
"redux": "4.2.0",
|
||||
"reselect": "4.1.7",
|
||||
"roboto-fontface": "0.10.0",
|
||||
"smalltalk": "2.5.1",
|
||||
"sqlite3": "5.0.2",
|
||||
"smalltalk": "4.1.1",
|
||||
"sqlite3": "5.1.2",
|
||||
"styled-components": "5.3.6",
|
||||
"styled-system": "5.1.5",
|
||||
"taboverride": "4.0.3",
|
||||
|
||||
@@ -41,10 +41,12 @@ export default function useViewIsReady(viewRef: any) {
|
||||
viewRef.current.contentWindow.addEventListener('message', onMessage);
|
||||
|
||||
return () => {
|
||||
viewRef.current.removeEventListener('dom-ready', onIFrameReady);
|
||||
viewRef.current.removeEventListener('load', onIFrameReady);
|
||||
// eslint-disable-next-line @seiyab/react-hooks/exhaustive-deps -- Old code before rule was applied
|
||||
viewRef.current.contentWindow.removeEventListener('message', onMessage);
|
||||
if (viewRef.current) {
|
||||
viewRef.current.removeEventListener('dom-ready', onIFrameReady);
|
||||
viewRef.current.removeEventListener('load', onIFrameReady);
|
||||
// eslint-disable-next-line @seiyab/react-hooks/exhaustive-deps -- Old code before rule was applied
|
||||
viewRef.current.contentWindow.removeEventListener('message', onMessage);
|
||||
}
|
||||
};
|
||||
// eslint-disable-next-line @seiyab/react-hooks/exhaustive-deps -- Old code before rule was applied
|
||||
}, []);
|
||||
|
||||
@@ -6,17 +6,16 @@ const { shimInit } = require('@joplin/lib/shim-init-node.js');
|
||||
const folderId1 = 'aa012345678901234567890123456789';
|
||||
const folderId2 = 'bb012345678901234567890123456789';
|
||||
|
||||
beforeAll(async (done) => {
|
||||
beforeAll(async () => {
|
||||
shimInit();
|
||||
Setting.autoSaveEnabled = false;
|
||||
PerFolderSortOrderService.initialize();
|
||||
Setting.setValue('notes.perFolderSortOrderEnabled', true);
|
||||
done();
|
||||
});
|
||||
|
||||
describe('PerFolderSortOrderService', () => {
|
||||
|
||||
test('get(), isSet() and set()', async (done) => {
|
||||
test('get(), isSet() and set()', async () => {
|
||||
// Clear all per-folder sort order
|
||||
expect(PerFolderSortOrderService.isSet(folderId1)).toBe(false);
|
||||
expect(PerFolderSortOrderService.isSet(folderId2)).toBe(false);
|
||||
@@ -39,7 +38,5 @@ describe('PerFolderSortOrderService', () => {
|
||||
|
||||
// Folder without per-folder sort order has no per-folder sort order
|
||||
expect(PerFolderSortOrderService.get(folderId2)).toBeUndefined();
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1 +1 @@
|
||||
2.7.4
|
||||
2.7.6
|
||||
@@ -1,4 +1,4 @@
|
||||
source 'https://rubygems.org'
|
||||
# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
|
||||
ruby '2.7.4'
|
||||
ruby '2.7.6'
|
||||
gem 'cocoapods', '~> 1.11', '>= 1.11.2'
|
||||
|
||||
@@ -3,23 +3,23 @@ GEM
|
||||
specs:
|
||||
CFPropertyList (3.0.5)
|
||||
rexml
|
||||
activesupport (6.1.4.4)
|
||||
activesupport (6.1.7)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 1.6, < 2)
|
||||
minitest (>= 5.1)
|
||||
tzinfo (~> 2.0)
|
||||
zeitwerk (~> 2.3)
|
||||
addressable (2.8.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
addressable (2.8.1)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
algoliasearch (1.27.5)
|
||||
httpclient (~> 2.8, >= 2.8.3)
|
||||
json (>= 1.5.1)
|
||||
atomos (0.1.3)
|
||||
claide (1.1.0)
|
||||
cocoapods (1.11.2)
|
||||
cocoapods (1.11.3)
|
||||
addressable (~> 2.8)
|
||||
claide (>= 1.0.2, < 2.0)
|
||||
cocoapods-core (= 1.11.2)
|
||||
cocoapods-core (= 1.11.3)
|
||||
cocoapods-deintegrate (>= 1.0.3, < 2.0)
|
||||
cocoapods-downloader (>= 1.4.0, < 2.0)
|
||||
cocoapods-plugins (>= 1.0.0, < 2.0)
|
||||
@@ -34,7 +34,7 @@ GEM
|
||||
nap (~> 1.0)
|
||||
ruby-macho (>= 1.0, < 3.0)
|
||||
xcodeproj (>= 1.21.0, < 2.0)
|
||||
cocoapods-core (1.11.2)
|
||||
cocoapods-core (1.11.3)
|
||||
activesupport (>= 5.0, < 7)
|
||||
addressable (~> 2.8)
|
||||
algoliasearch (~> 1.0)
|
||||
@@ -45,7 +45,7 @@ GEM
|
||||
public_suffix (~> 4.0)
|
||||
typhoeus (~> 1.0)
|
||||
cocoapods-deintegrate (1.0.5)
|
||||
cocoapods-downloader (1.5.1)
|
||||
cocoapods-downloader (1.6.3)
|
||||
cocoapods-plugins (1.0.0)
|
||||
nap
|
||||
cocoapods-search (1.0.1)
|
||||
@@ -54,43 +54,47 @@ GEM
|
||||
netrc (~> 0.11)
|
||||
cocoapods-try (1.2.0)
|
||||
colored2 (3.1.2)
|
||||
concurrent-ruby (1.1.9)
|
||||
concurrent-ruby (1.1.10)
|
||||
escape (0.0.4)
|
||||
ethon (0.15.0)
|
||||
ethon (0.16.0)
|
||||
ffi (>= 1.15.0)
|
||||
ffi (1.15.5)
|
||||
fourflusher (2.3.1)
|
||||
fuzzy_match (2.0.4)
|
||||
gh_inspector (1.1.3)
|
||||
httpclient (2.8.3)
|
||||
i18n (1.9.1)
|
||||
i18n (1.12.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
json (2.6.1)
|
||||
minitest (5.15.0)
|
||||
json (2.6.2)
|
||||
minitest (5.16.3)
|
||||
molinillo (0.8.0)
|
||||
nanaimo (0.3.0)
|
||||
nap (1.1.0)
|
||||
netrc (0.11.0)
|
||||
public_suffix (4.0.6)
|
||||
public_suffix (4.0.7)
|
||||
rexml (3.2.5)
|
||||
ruby-macho (2.5.1)
|
||||
typhoeus (1.4.0)
|
||||
ethon (>= 0.9.0)
|
||||
tzinfo (2.0.4)
|
||||
tzinfo (2.0.5)
|
||||
concurrent-ruby (~> 1.0)
|
||||
xcodeproj (1.21.0)
|
||||
xcodeproj (1.22.0)
|
||||
CFPropertyList (>= 2.3.3, < 4.0)
|
||||
atomos (~> 0.1.3)
|
||||
claide (>= 1.0.2, < 2.0)
|
||||
colored2 (~> 3.1)
|
||||
nanaimo (~> 0.3.0)
|
||||
rexml (~> 3.2.4)
|
||||
zeitwerk (2.5.4)
|
||||
zeitwerk (2.6.6)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
cocoapods (~> 1.11, >= 1.11.2)
|
||||
|
||||
RUBY VERSION
|
||||
ruby 2.7.4p191
|
||||
ruby 2.7.6p219
|
||||
|
||||
BUNDLED WITH
|
||||
2.2.27
|
||||
|
||||
@@ -150,38 +150,65 @@ describe('markdownCommands', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('block math should properly toggle within block quotes', () => {
|
||||
const initialDocText = 'Testing...\n\n> This is a test.\n> y = mx + b\n> ...a test';
|
||||
const editor = createEditor(
|
||||
initialDocText,
|
||||
EditorSelection.range(
|
||||
'Testing...\n\n> This'.length,
|
||||
'Testing...\n\n> This is a test.\n> y = mx + b'.length
|
||||
)
|
||||
);
|
||||
// We need to disable this test because it randomly fails on CI.
|
||||
//
|
||||
// ● markdownCommands › block math should properly toggle within block quotes
|
||||
//
|
||||
// expect(received).toEqual(expected) // deep equality
|
||||
//
|
||||
// - Expected - 1
|
||||
// + Received + 3
|
||||
//
|
||||
// Testing...
|
||||
//
|
||||
// - > This is a test.
|
||||
// + > $$
|
||||
// + > This is$$ a test.
|
||||
// > y = mx + b
|
||||
// + > $$
|
||||
// > ...a test
|
||||
//
|
||||
// 179 | toggleMath(editor);
|
||||
// 180 | mainSel = editor.state.selection.main;
|
||||
// > 181 | expect(editor.state.doc.toString()).toEqual(initialDocText);
|
||||
// | ^
|
||||
// 182 | expect(mainSel.from).toBe('Testing...\n\n'.length);
|
||||
// 183 | expect(mainSel.to).toBe('Testing...\n\n> This is a test.\n> y = mx + b'.length);
|
||||
// 184 | });
|
||||
|
||||
toggleMath(editor);
|
||||
|
||||
// Toggling math should surround the content in '$$'s
|
||||
let mainSel = editor.state.selection.main;
|
||||
expect(editor.state.doc.toString()).toEqual(
|
||||
'Testing...\n\n> $$\n> This is a test.\n> y = mx + b\n> $$\n> ...a test'
|
||||
);
|
||||
expect(mainSel.from).toBe('Testing...\n\n'.length);
|
||||
expect(mainSel.to).toBe('Testing...\n\n> $$\n> This is a test.\n> y = mx + b\n> $$'.length);
|
||||
// it('block math should properly toggle within block quotes', () => {
|
||||
// const initialDocText = 'Testing...\n\n> This is a test.\n> y = mx + b\n> ...a test';
|
||||
// const editor = createEditor(
|
||||
// initialDocText,
|
||||
// EditorSelection.range(
|
||||
// 'Testing...\n\n> This'.length,
|
||||
// 'Testing...\n\n> This is a test.\n> y = mx + b'.length
|
||||
// )
|
||||
// );
|
||||
|
||||
// Change to a cursor --- test cursor expansion
|
||||
editor.dispatch({
|
||||
selection: EditorSelection.cursor('Testing...\n\n> $$\n> This is'.length),
|
||||
});
|
||||
// toggleMath(editor);
|
||||
|
||||
// Toggling math again should remove the '$$'s
|
||||
toggleMath(editor);
|
||||
mainSel = editor.state.selection.main;
|
||||
expect(editor.state.doc.toString()).toEqual(initialDocText);
|
||||
expect(mainSel.from).toBe('Testing...\n\n'.length);
|
||||
expect(mainSel.to).toBe('Testing...\n\n> This is a test.\n> y = mx + b'.length);
|
||||
});
|
||||
// // Toggling math should surround the content in '$$'s
|
||||
// let mainSel = editor.state.selection.main;
|
||||
// expect(editor.state.doc.toString()).toEqual(
|
||||
// 'Testing...\n\n> $$\n> This is a test.\n> y = mx + b\n> $$\n> ...a test'
|
||||
// );
|
||||
// expect(mainSel.from).toBe('Testing...\n\n'.length);
|
||||
// expect(mainSel.to).toBe('Testing...\n\n> $$\n> This is a test.\n> y = mx + b\n> $$'.length);
|
||||
|
||||
// // Change to a cursor --- test cursor expansion
|
||||
// editor.dispatch({
|
||||
// selection: EditorSelection.cursor('Testing...\n\n> $$\n> This is'.length),
|
||||
// });
|
||||
|
||||
// // Toggling math again should remove the '$$'s
|
||||
// toggleMath(editor);
|
||||
// mainSel = editor.state.selection.main;
|
||||
// expect(editor.state.doc.toString()).toEqual(initialDocText);
|
||||
// expect(mainSel.from).toBe('Testing...\n\n'.length);
|
||||
// expect(mainSel.to).toBe('Testing...\n\n> This is a test.\n> y = mx + b'.length);
|
||||
// });
|
||||
|
||||
it('updateLink should replace link titles and isolate URLs if no title is given', () => {
|
||||
const initialDocText = '[foo](http://example.com/)';
|
||||
|
||||
@@ -541,7 +541,7 @@ class NoteScreenComponent extends BaseScreenComponent {
|
||||
}
|
||||
|
||||
private async pickDocuments() {
|
||||
const result = await shim.fsDriver().pickDocument();
|
||||
const result = await shim.fsDriver().pickDocument({ multiple: true });
|
||||
if (!result) {
|
||||
console.info('pickDocuments: user has cancelled');
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ class NoteTagsDialogComponent extends React.Component {
|
||||
});
|
||||
|
||||
tagListData.sort((a, b) => {
|
||||
if (a.selected === b.selected) return naturalCompare.caseInsensitive(a.title, b.title);
|
||||
if (a.selected === b.selected) return naturalCompare(a.title, b.title, { caseInsensitive: true });
|
||||
else if (b.selected === true) return 1;
|
||||
else return -1;
|
||||
});
|
||||
|
||||
@@ -125,8 +125,10 @@ const SideMenuContentComponent = (props: Props) => {
|
||||
});
|
||||
};
|
||||
|
||||
const folder_longPress = async (folder: FolderEntity) => {
|
||||
if (folder === 'all') return;
|
||||
const folder_longPress = async (folderOrAll: FolderEntity | string) => {
|
||||
if (folderOrAll === 'all') return;
|
||||
|
||||
const folder = folderOrAll as FolderEntity;
|
||||
|
||||
Alert.alert(
|
||||
'',
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
PODS:
|
||||
- boost (1.76.0)
|
||||
- DoubleConversion (1.1.6)
|
||||
- FBLazyVector (0.66.1)
|
||||
- FBReactNativeSpec (0.66.1):
|
||||
- FBLazyVector (0.67.2)
|
||||
- FBReactNativeSpec (0.67.2):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTRequired (= 0.66.1)
|
||||
- RCTTypeSafety (= 0.66.1)
|
||||
- React-Core (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- ReactCommon/turbomodule/core (= 0.66.1)
|
||||
- RCTRequired (= 0.67.2)
|
||||
- RCTTypeSafety (= 0.67.2)
|
||||
- React-Core (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (= 0.67.2)
|
||||
- fmt (6.2.1)
|
||||
- glog (0.3.5)
|
||||
- JoplinCommonShareExtension (1.0.0)
|
||||
- JoplinRNShareExtension (1.0.0):
|
||||
- JoplinCommonShareExtension
|
||||
- React (= 0.66.1)
|
||||
- React
|
||||
- RCT-Folly (2021.06.28.00-v2):
|
||||
- boost
|
||||
- DoubleConversion
|
||||
@@ -26,210 +26,210 @@ PODS:
|
||||
- DoubleConversion
|
||||
- fmt (~> 6.2.1)
|
||||
- glog
|
||||
- RCTRequired (0.66.1)
|
||||
- RCTTypeSafety (0.66.1):
|
||||
- FBLazyVector (= 0.66.1)
|
||||
- RCTRequired (0.67.2)
|
||||
- RCTTypeSafety (0.67.2):
|
||||
- FBLazyVector (= 0.67.2)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTRequired (= 0.66.1)
|
||||
- React-Core (= 0.66.1)
|
||||
- React (0.66.1):
|
||||
- React-Core (= 0.66.1)
|
||||
- React-Core/DevSupport (= 0.66.1)
|
||||
- React-Core/RCTWebSocket (= 0.66.1)
|
||||
- React-RCTActionSheet (= 0.66.1)
|
||||
- React-RCTAnimation (= 0.66.1)
|
||||
- React-RCTBlob (= 0.66.1)
|
||||
- React-RCTImage (= 0.66.1)
|
||||
- React-RCTLinking (= 0.66.1)
|
||||
- React-RCTNetwork (= 0.66.1)
|
||||
- React-RCTSettings (= 0.66.1)
|
||||
- React-RCTText (= 0.66.1)
|
||||
- React-RCTVibration (= 0.66.1)
|
||||
- React-callinvoker (0.66.1)
|
||||
- React-Core (0.66.1):
|
||||
- RCTRequired (= 0.67.2)
|
||||
- React-Core (= 0.67.2)
|
||||
- React (0.67.2):
|
||||
- React-Core (= 0.67.2)
|
||||
- React-Core/DevSupport (= 0.67.2)
|
||||
- React-Core/RCTWebSocket (= 0.67.2)
|
||||
- React-RCTActionSheet (= 0.67.2)
|
||||
- React-RCTAnimation (= 0.67.2)
|
||||
- React-RCTBlob (= 0.67.2)
|
||||
- React-RCTImage (= 0.67.2)
|
||||
- React-RCTLinking (= 0.67.2)
|
||||
- React-RCTNetwork (= 0.67.2)
|
||||
- React-RCTSettings (= 0.67.2)
|
||||
- React-RCTText (= 0.67.2)
|
||||
- React-RCTVibration (= 0.67.2)
|
||||
- React-callinvoker (0.67.2)
|
||||
- React-Core (0.67.2):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default (= 0.66.1)
|
||||
- React-cxxreact (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-jsiexecutor (= 0.66.1)
|
||||
- React-perflogger (= 0.66.1)
|
||||
- React-Core/Default (= 0.67.2)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- Yoga
|
||||
- React-Core/CoreModulesHeaders (0.66.1):
|
||||
- React-Core/CoreModulesHeaders (0.67.2):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-jsiexecutor (= 0.66.1)
|
||||
- React-perflogger (= 0.66.1)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- Yoga
|
||||
- React-Core/Default (0.66.1):
|
||||
- React-Core/Default (0.67.2):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-cxxreact (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-jsiexecutor (= 0.66.1)
|
||||
- React-perflogger (= 0.66.1)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- Yoga
|
||||
- React-Core/DevSupport (0.66.1):
|
||||
- React-Core/DevSupport (0.67.2):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default (= 0.66.1)
|
||||
- React-Core/RCTWebSocket (= 0.66.1)
|
||||
- React-cxxreact (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-jsiexecutor (= 0.66.1)
|
||||
- React-jsinspector (= 0.66.1)
|
||||
- React-perflogger (= 0.66.1)
|
||||
- React-Core/Default (= 0.67.2)
|
||||
- React-Core/RCTWebSocket (= 0.67.2)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-jsinspector (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- Yoga
|
||||
- React-Core/RCTActionSheetHeaders (0.66.1):
|
||||
- React-Core/RCTActionSheetHeaders (0.67.2):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-jsiexecutor (= 0.66.1)
|
||||
- React-perflogger (= 0.66.1)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- Yoga
|
||||
- React-Core/RCTAnimationHeaders (0.66.1):
|
||||
- React-Core/RCTAnimationHeaders (0.67.2):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-jsiexecutor (= 0.66.1)
|
||||
- React-perflogger (= 0.66.1)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- Yoga
|
||||
- React-Core/RCTBlobHeaders (0.66.1):
|
||||
- React-Core/RCTBlobHeaders (0.67.2):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-jsiexecutor (= 0.66.1)
|
||||
- React-perflogger (= 0.66.1)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- Yoga
|
||||
- React-Core/RCTImageHeaders (0.66.1):
|
||||
- React-Core/RCTImageHeaders (0.67.2):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-jsiexecutor (= 0.66.1)
|
||||
- React-perflogger (= 0.66.1)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- Yoga
|
||||
- React-Core/RCTLinkingHeaders (0.66.1):
|
||||
- React-Core/RCTLinkingHeaders (0.67.2):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-jsiexecutor (= 0.66.1)
|
||||
- React-perflogger (= 0.66.1)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- Yoga
|
||||
- React-Core/RCTNetworkHeaders (0.66.1):
|
||||
- React-Core/RCTNetworkHeaders (0.67.2):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-jsiexecutor (= 0.66.1)
|
||||
- React-perflogger (= 0.66.1)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- Yoga
|
||||
- React-Core/RCTSettingsHeaders (0.66.1):
|
||||
- React-Core/RCTSettingsHeaders (0.67.2):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-jsiexecutor (= 0.66.1)
|
||||
- React-perflogger (= 0.66.1)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- Yoga
|
||||
- React-Core/RCTTextHeaders (0.66.1):
|
||||
- React-Core/RCTTextHeaders (0.67.2):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-jsiexecutor (= 0.66.1)
|
||||
- React-perflogger (= 0.66.1)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- Yoga
|
||||
- React-Core/RCTVibrationHeaders (0.66.1):
|
||||
- React-Core/RCTVibrationHeaders (0.67.2):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-jsiexecutor (= 0.66.1)
|
||||
- React-perflogger (= 0.66.1)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- Yoga
|
||||
- React-Core/RCTWebSocket (0.66.1):
|
||||
- React-Core/RCTWebSocket (0.67.2):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default (= 0.66.1)
|
||||
- React-cxxreact (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-jsiexecutor (= 0.66.1)
|
||||
- React-perflogger (= 0.66.1)
|
||||
- React-Core/Default (= 0.67.2)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- Yoga
|
||||
- React-CoreModules (0.66.1):
|
||||
- FBReactNativeSpec (= 0.66.1)
|
||||
- React-CoreModules (0.67.2):
|
||||
- FBReactNativeSpec (= 0.67.2)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.66.1)
|
||||
- React-Core/CoreModulesHeaders (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-RCTImage (= 0.66.1)
|
||||
- ReactCommon/turbomodule/core (= 0.66.1)
|
||||
- React-cxxreact (0.66.1):
|
||||
- RCTTypeSafety (= 0.67.2)
|
||||
- React-Core/CoreModulesHeaders (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-RCTImage (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (= 0.67.2)
|
||||
- React-cxxreact (0.67.2):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-callinvoker (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-jsinspector (= 0.66.1)
|
||||
- React-logger (= 0.66.1)
|
||||
- React-perflogger (= 0.66.1)
|
||||
- React-runtimeexecutor (= 0.66.1)
|
||||
- React-jsi (0.66.1):
|
||||
- React-callinvoker (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsinspector (= 0.67.2)
|
||||
- React-logger (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- React-runtimeexecutor (= 0.67.2)
|
||||
- React-jsi (0.67.2):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-jsi/Default (= 0.66.1)
|
||||
- React-jsi/Default (0.66.1):
|
||||
- React-jsi/Default (= 0.67.2)
|
||||
- React-jsi/Default (0.67.2):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-jsiexecutor (0.66.1):
|
||||
- React-jsiexecutor (0.67.2):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-cxxreact (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-perflogger (= 0.66.1)
|
||||
- React-jsinspector (0.66.1)
|
||||
- React-logger (0.66.1):
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- React-jsinspector (0.67.2)
|
||||
- React-logger (0.67.2):
|
||||
- glog
|
||||
- react-native-alarm-notification (1.0.5):
|
||||
- react-native-alarm-notification (1.0.6):
|
||||
- React
|
||||
- react-native-camera (3.44.3):
|
||||
- react-native-camera (4.2.1):
|
||||
- React-Core
|
||||
- react-native-camera/RCT (= 3.44.3)
|
||||
- react-native-camera/RN (= 3.44.3)
|
||||
- react-native-camera/RCT (3.44.3):
|
||||
- react-native-camera/RCT (= 4.2.1)
|
||||
- react-native-camera/RN (= 4.2.1)
|
||||
- react-native-camera/RCT (4.2.1):
|
||||
- React-Core
|
||||
- react-native-camera/RN (3.44.3):
|
||||
- react-native-camera/RN (4.2.1):
|
||||
- React-Core
|
||||
- react-native-document-picker (4.3.0):
|
||||
- react-native-document-picker (8.1.2):
|
||||
- React-Core
|
||||
- react-native-geolocation (3.0.3):
|
||||
- react-native-geolocation (2.1.0):
|
||||
- React-Core
|
||||
- react-native-get-random-values (1.8.0):
|
||||
- React-Core
|
||||
- react-native-image-picker (4.10.0):
|
||||
- react-native-image-picker (4.10.1):
|
||||
- React-Core
|
||||
- react-native-image-resizer (1.4.5):
|
||||
- React-Core
|
||||
@@ -239,84 +239,84 @@ PODS:
|
||||
- React
|
||||
- react-native-slider (4.3.3):
|
||||
- React-Core
|
||||
- react-native-sqlite-storage (5.0.0):
|
||||
- React
|
||||
- react-native-sqlite-storage (6.0.1):
|
||||
- React-Core
|
||||
- react-native-version-info (1.1.1):
|
||||
- React-Core
|
||||
- react-native-webview (10.10.2):
|
||||
- react-native-webview (11.23.1):
|
||||
- React-Core
|
||||
- React-perflogger (0.66.1)
|
||||
- React-RCTActionSheet (0.66.1):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.66.1)
|
||||
- React-RCTAnimation (0.66.1):
|
||||
- FBReactNativeSpec (= 0.66.1)
|
||||
- React-perflogger (0.67.2)
|
||||
- React-RCTActionSheet (0.67.2):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.67.2)
|
||||
- React-RCTAnimation (0.67.2):
|
||||
- FBReactNativeSpec (= 0.67.2)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.66.1)
|
||||
- React-Core/RCTAnimationHeaders (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- ReactCommon/turbomodule/core (= 0.66.1)
|
||||
- React-RCTBlob (0.66.1):
|
||||
- FBReactNativeSpec (= 0.66.1)
|
||||
- RCTTypeSafety (= 0.67.2)
|
||||
- React-Core/RCTAnimationHeaders (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (= 0.67.2)
|
||||
- React-RCTBlob (0.67.2):
|
||||
- FBReactNativeSpec (= 0.67.2)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/RCTBlobHeaders (= 0.66.1)
|
||||
- React-Core/RCTWebSocket (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-RCTNetwork (= 0.66.1)
|
||||
- ReactCommon/turbomodule/core (= 0.66.1)
|
||||
- React-RCTImage (0.66.1):
|
||||
- FBReactNativeSpec (= 0.66.1)
|
||||
- React-Core/RCTBlobHeaders (= 0.67.2)
|
||||
- React-Core/RCTWebSocket (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-RCTNetwork (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (= 0.67.2)
|
||||
- React-RCTImage (0.67.2):
|
||||
- FBReactNativeSpec (= 0.67.2)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.66.1)
|
||||
- React-Core/RCTImageHeaders (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-RCTNetwork (= 0.66.1)
|
||||
- ReactCommon/turbomodule/core (= 0.66.1)
|
||||
- React-RCTLinking (0.66.1):
|
||||
- FBReactNativeSpec (= 0.66.1)
|
||||
- React-Core/RCTLinkingHeaders (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- ReactCommon/turbomodule/core (= 0.66.1)
|
||||
- React-RCTNetwork (0.66.1):
|
||||
- FBReactNativeSpec (= 0.66.1)
|
||||
- RCTTypeSafety (= 0.67.2)
|
||||
- React-Core/RCTImageHeaders (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-RCTNetwork (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (= 0.67.2)
|
||||
- React-RCTLinking (0.67.2):
|
||||
- FBReactNativeSpec (= 0.67.2)
|
||||
- React-Core/RCTLinkingHeaders (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (= 0.67.2)
|
||||
- React-RCTNetwork (0.67.2):
|
||||
- FBReactNativeSpec (= 0.67.2)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.66.1)
|
||||
- React-Core/RCTNetworkHeaders (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- ReactCommon/turbomodule/core (= 0.66.1)
|
||||
- React-RCTSettings (0.66.1):
|
||||
- FBReactNativeSpec (= 0.66.1)
|
||||
- RCTTypeSafety (= 0.67.2)
|
||||
- React-Core/RCTNetworkHeaders (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (= 0.67.2)
|
||||
- React-RCTSettings (0.67.2):
|
||||
- FBReactNativeSpec (= 0.67.2)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.66.1)
|
||||
- React-Core/RCTSettingsHeaders (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- ReactCommon/turbomodule/core (= 0.66.1)
|
||||
- React-RCTText (0.66.1):
|
||||
- React-Core/RCTTextHeaders (= 0.66.1)
|
||||
- React-RCTVibration (0.66.1):
|
||||
- FBReactNativeSpec (= 0.66.1)
|
||||
- RCTTypeSafety (= 0.67.2)
|
||||
- React-Core/RCTSettingsHeaders (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (= 0.67.2)
|
||||
- React-RCTText (0.67.2):
|
||||
- React-Core/RCTTextHeaders (= 0.67.2)
|
||||
- React-RCTVibration (0.67.2):
|
||||
- FBReactNativeSpec (= 0.67.2)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/RCTVibrationHeaders (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- ReactCommon/turbomodule/core (= 0.66.1)
|
||||
- React-runtimeexecutor (0.66.1):
|
||||
- React-jsi (= 0.66.1)
|
||||
- ReactCommon/turbomodule/core (0.66.1):
|
||||
- React-Core/RCTVibrationHeaders (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (= 0.67.2)
|
||||
- React-runtimeexecutor (0.67.2):
|
||||
- React-jsi (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (0.67.2):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-callinvoker (= 0.66.1)
|
||||
- React-Core (= 0.66.1)
|
||||
- React-cxxreact (= 0.66.1)
|
||||
- React-jsi (= 0.66.1)
|
||||
- React-logger (= 0.66.1)
|
||||
- React-perflogger (= 0.66.1)
|
||||
- React-callinvoker (= 0.67.2)
|
||||
- React-Core (= 0.67.2)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-logger (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- rn-fetch-blob (0.12.0):
|
||||
- React-Core
|
||||
- RNCClipboard (1.5.1):
|
||||
- React-Core
|
||||
- RNCPushNotificationIOS (1.10.1):
|
||||
- React-Core
|
||||
- RNDateTimePicker (6.5.4):
|
||||
- RNDateTimePicker (6.7.0):
|
||||
- React-Core
|
||||
- RNFileViewer (2.1.5):
|
||||
- React-Core
|
||||
@@ -324,12 +324,12 @@ PODS:
|
||||
- React-Core
|
||||
- RNQuickAction (0.3.13):
|
||||
- React
|
||||
- RNSecureRandom (1.0.0):
|
||||
- RNSecureRandom (1.0.1):
|
||||
- React
|
||||
- RNShare (7.9.1):
|
||||
- RNShare (8.0.0):
|
||||
- React-Core
|
||||
- RNVectorIcons (9.2.0):
|
||||
- React-Core
|
||||
- RNVectorIcons (7.1.0):
|
||||
- React
|
||||
- Yoga (1.14.0)
|
||||
|
||||
DEPENDENCIES:
|
||||
@@ -510,60 +510,60 @@ EXTERNAL SOURCES:
|
||||
SPEC CHECKSUMS:
|
||||
boost: a7c83b31436843459a1961bfd74b96033dc77234
|
||||
DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662
|
||||
FBLazyVector: 500821d196c3d1bd10e7e828bc93ce075234080f
|
||||
FBReactNativeSpec: 74c869e2cffa2ffec685cd1bac6788c021da6005
|
||||
FBLazyVector: 244195e30d63d7f564c55da4410b9a24e8fbceaa
|
||||
FBReactNativeSpec: c94002c1d93da3658f4d5119c6994d19961e3d52
|
||||
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
|
||||
glog: 5337263514dd6f09803962437687240c5dc39aa4
|
||||
glog: 85ecdd10ee8d8ec362ef519a6a45ff9aa27b2e85
|
||||
JoplinCommonShareExtension: 270b4f8eb4e22828eeda433a04ed689fc1fd09b5
|
||||
JoplinRNShareExtension: cb790ce4c0692367acd1a06c56330c9a440f8b58
|
||||
RCT-Folly: a21c126816d8025b547704b777a2ba552f3d9fa9
|
||||
RCTRequired: 3cc065b52aa18db729268b9bd78a2feffb4d0f91
|
||||
RCTTypeSafety: 3c4fc37d5dea452d2ef17324db5504ec2f05083a
|
||||
React: 4a00720816c52a213424442954acb7e4b724804a
|
||||
React-callinvoker: 911fc6570538f3bb5c61edf9dc907c1beb4355bf
|
||||
React-Core: e134d3a5d7b2a1a731589be776e20dbb14868f27
|
||||
React-CoreModules: 2f8588b2aa47e7fef27125c8eaaabda963b3ac62
|
||||
React-cxxreact: 8f1382538cad0cc8b8eafca6d66268828e353bea
|
||||
React-jsi: 9fe1854d2c0486216acebd5db3c38b4ccb23ca0b
|
||||
React-jsiexecutor: db2f6e22a534d466fc0e34e622df47d9d20bab2f
|
||||
React-jsinspector: 8c0517dee5e8c70cd6c3066f20213ff7ce54f176
|
||||
React-logger: bfddd3418dc1d45b77b822958f3e31422e2c179b
|
||||
react-native-alarm-notification: 4817a2a0d7cc2ed2acc97337ebcdf9ae2a69c9d5
|
||||
react-native-camera: b8cc03e2feec0c04403d0998e37cf519d8fd4c6f
|
||||
react-native-document-picker: 20f652c2402d3ddc81f396d8167c3bd978add4a2
|
||||
react-native-geolocation: 2b4052c14edff18ba402795f4ce0f2a093c4ba3e
|
||||
JoplinRNShareExtension: 9cd07431e525b36344fcecfaeecff974efc78528
|
||||
RCT-Folly: 803a9cfd78114b2ec0f140cfa6fa2a6bafb2d685
|
||||
RCTRequired: cd47794163052d2b8318c891a7a14fcfaccc75ab
|
||||
RCTTypeSafety: 393bb40b3e357b224cde53d3fec26813c52428b1
|
||||
React: dec6476bc27155b250eeadfc11ea779265f53ebf
|
||||
React-callinvoker: e5047929e80aea942e6fdd96482504ef0189ca63
|
||||
React-Core: e382655566b2b9a6e3b4f641d777b7bfdbe52358
|
||||
React-CoreModules: cf262e82fa101c0aee022b6f90d1a5b612038b64
|
||||
React-cxxreact: 69d53de3b30c7c161ba087ca1ecdffed9ccb1039
|
||||
React-jsi: ce9a2d804adf75809ce2fe2374ba3fbbf5d59b03
|
||||
React-jsiexecutor: 52beb652bbc61201bd70cbe4f0b8edb607e8da4f
|
||||
React-jsinspector: 595f76eba2176ebd8817a1fffd47b84fbdab9383
|
||||
React-logger: 23de8ea0f44fa00ee77e96060273225607fd4d78
|
||||
react-native-alarm-notification: 88c751922c791cc628bd7efb09bff18c8f178a5d
|
||||
react-native-camera: 3eae183c1d111103963f3dd913b65d01aef8110f
|
||||
react-native-document-picker: f5ec1a712ca2a975c233117f044817bb8393cad4
|
||||
react-native-geolocation: 69f4fd37650b8e7fee91816d395e62dd16f5ab8d
|
||||
react-native-get-random-values: a6ea6a8a65dc93e96e24a11105b1a9c8cfe1d72a
|
||||
react-native-image-picker: 4bc9ed38c8be255b515d8c88babbaf74973f91a8
|
||||
react-native-image-picker: f2ab1215d17bcfe27b0eb6417cc236fd1f4775e7
|
||||
react-native-image-resizer: d9fb629a867335bdc13230ac2a58702bb8c8828f
|
||||
react-native-netinfo: f80db8cac2151405633324cb645c60af098ee461
|
||||
react-native-rsa-native: 12132eb627797529fdb1f0d22fd0f8f9678df64a
|
||||
react-native-slider: 7d19220da2f2ae7cbb9aa80127cb73c597fa221f
|
||||
react-native-sqlite-storage: 418ef4afc5e6df6ce3574c4617e5f0b65cffde55
|
||||
react-native-sqlite-storage: f6d515e1c446d1e6d026aa5352908a25d4de3261
|
||||
react-native-version-info: a106f23009ac0db4ee00de39574eb546682579b9
|
||||
react-native-webview: 0aa2cde4ee7e3e1c5fffdf64dbce9c709aa18155
|
||||
React-perflogger: fcac6090a80e3d967791b4c7f1b1a017f9d4a398
|
||||
React-RCTActionSheet: caf5913d9f9e605f5467206cf9d1caa6d47d7ad6
|
||||
React-RCTAnimation: 6539e3bf594f6a529cd861985ba6548286ae1ead
|
||||
React-RCTBlob: 6e2e999d28b15fd03ed533f164ce33e0fcde571a
|
||||
React-RCTImage: c6bbb10eedb6b840c4474f2108b864173b83de15
|
||||
React-RCTLinking: 8fda9bb8fdb104e78110a903a9a77754318c7d11
|
||||
React-RCTNetwork: 2b26daad93830501cf14aab03eac04e304f942d3
|
||||
React-RCTSettings: 89c0dcee7adb706c749383596f57c1e882a27843
|
||||
React-RCTText: 71734fce8e6cb854daeb4a5eec182c303ea58473
|
||||
React-RCTVibration: 6600b5eed7c0fda4a433fa1198d1cb2690151791
|
||||
React-runtimeexecutor: 33a949a51bec5f8a3c9e8d8092deb259600d761e
|
||||
ReactCommon: 620442811dc6f707b4bf5e3b27d4f19c12d5a821
|
||||
react-native-webview: d33e2db8925d090871ffeb232dfa50cb3a727581
|
||||
React-perflogger: 3c9bb7372493e49036f07a82c44c8cf65cbe88db
|
||||
React-RCTActionSheet: 052606483045a408693aa7e864410b4a052f541a
|
||||
React-RCTAnimation: 08d4cac13222bb1348c687a0158dfd3b577cdb63
|
||||
React-RCTBlob: 928ad1df65219c3d9e2ac80983b943a75b5c3629
|
||||
React-RCTImage: 524d7313b142a39ee0e20fa312b67277917fe076
|
||||
React-RCTLinking: 44036ea6f13a2e46238be07a67566247fee35244
|
||||
React-RCTNetwork: 9b6faacf1e0789253e319ca53b1f8d92c2ac5455
|
||||
React-RCTSettings: ecd8094f831130a49581d5112a8607220e5d12a5
|
||||
React-RCTText: 14ba976fb48ed283cfdb1a754a5d4276471e0152
|
||||
React-RCTVibration: 99c7f67fba7a5ade46e98e870c6ff2444484f995
|
||||
React-runtimeexecutor: 2450b43df7ffe8e805a0b3dcb2abd4282f1f1836
|
||||
ReactCommon: d98c6c96b567f9b3a15f9fd4cc302c1eda8e3cf2
|
||||
rn-fetch-blob: f065bb7ab7fb48dd002629f8bdcb0336602d3cba
|
||||
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
|
||||
RNCPushNotificationIOS: 87b8d16d3ede4532745e05b03c42cff33a36cc45
|
||||
RNDateTimePicker: 93b9659fbd0fd91a4fb568bf8f5c00b0175aa1ba
|
||||
RNDateTimePicker: c6b404647f45472443b0fdcdd31296fc3516b0eb
|
||||
RNFileViewer: ce7ca3ac370e18554d35d6355cffd7c30437c592
|
||||
RNFS: 4ac0f0ea233904cb798630b3c077808c06931688
|
||||
RNQuickAction: 6d404a869dc872cde841ad3147416a670d13fa93
|
||||
RNSecureRandom: 0dcee021fdb3d50cd5cee5db0ebf583c42f5af0e
|
||||
RNShare: a5dc3b9c53ddc73e155b8cd9a94c70c91913c43c
|
||||
RNVectorIcons: bc69e6a278b14842063605de32bec61f0b251a59
|
||||
Yoga: 2b4a01651f42a32f82e6cef3830a3ba48088237f
|
||||
RNSecureRandom: 07efbdf2cd99efe13497433668e54acd7df49fef
|
||||
RNShare: 36aa3e6958373a0ad1c95a1c960adef589da3794
|
||||
RNVectorIcons: fcc2f6cb32f5735b586e66d14103a74ce6ad61f8
|
||||
Yoga: 9b6696970c3289e8dea34b3eda93f23e61fb8121
|
||||
|
||||
PODFILE CHECKSUM: 3503e0565874e79261edc56dcddb35b3a49a2984
|
||||
|
||||
|
||||
@@ -9,6 +9,6 @@ Pod::Spec.new do |spec|
|
||||
spec.platform = :ios, "9.0"
|
||||
spec.source = { :path => "." }
|
||||
spec.source_files = "Source/RNShareExtension/**/*.{h,m}"
|
||||
spec.dependency "React", "0.66.1"
|
||||
spec.dependency "React"
|
||||
spec.dependency "JoplinCommonShareExtension"
|
||||
end
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
"@joplin/react-native-saf-x": "~2.9",
|
||||
"@joplin/renderer": "~2.9",
|
||||
"@react-native-community/clipboard": "1.5.1",
|
||||
"@react-native-community/datetimepicker": "6.5.5",
|
||||
"@react-native-community/datetimepicker": "6.7.0",
|
||||
"@react-native-community/geolocation": "2.1.0",
|
||||
"@react-native-community/netinfo": "9.3.6",
|
||||
"@react-native-community/push-notification-ios": "1.10.1",
|
||||
@@ -32,80 +32,80 @@
|
||||
"constants-browserify": "1.0.0",
|
||||
"crypto-browserify": "3.12.0",
|
||||
"events": "3.3.0",
|
||||
"joplin-rn-alarm-notification": "1.0.5",
|
||||
"joplin-rn-alarm-notification": "1.0.6",
|
||||
"jsc-android": "241213.1.0",
|
||||
"md5": "2.3.0",
|
||||
"prop-types": "15.8.1",
|
||||
"punycode": "2.1.1",
|
||||
"react": "17.0.2",
|
||||
"react": "18.2.0",
|
||||
"react-native": "0.67.2",
|
||||
"react-native-action-button": "2.8.5",
|
||||
"react-native-camera": "3.44.3",
|
||||
"react-native-camera": "4.2.1",
|
||||
"react-native-dialogbox": "0.6.10",
|
||||
"react-native-document-picker": "4.3.0",
|
||||
"react-native-dropdownalert": "3.11.0",
|
||||
"react-native-document-picker": "8.1.2",
|
||||
"react-native-dropdownalert": "4.5.1",
|
||||
"react-native-file-viewer": "2.1.5",
|
||||
"react-native-fs": "2.20.0",
|
||||
"react-native-get-random-values": "1.8.0",
|
||||
"react-native-image-picker": "4.10.0",
|
||||
"react-native-image-picker": "4.10.1",
|
||||
"react-native-image-resizer": "1.4.5",
|
||||
"react-native-modal-datetime-picker": "9.2.3",
|
||||
"react-native-modal-datetime-picker": "14.0.0",
|
||||
"react-native-popup-menu": "0.16.1",
|
||||
"react-native-quick-actions": "0.3.13",
|
||||
"react-native-rsa-native": "2.0.5",
|
||||
"react-native-securerandom": "1.0.1",
|
||||
"react-native-share": "7.9.1",
|
||||
"react-native-share": "8.0.0",
|
||||
"react-native-side-menu-updated": "1.3.2",
|
||||
"react-native-sqlite-storage": "5.0.0",
|
||||
"react-native-sqlite-storage": "6.0.1",
|
||||
"react-native-url-polyfill": "1.3.0",
|
||||
"react-native-vector-icons": "7.1.0",
|
||||
"react-native-vector-icons": "9.2.0",
|
||||
"react-native-version-info": "1.1.1",
|
||||
"react-native-webview": "11.23.1",
|
||||
"react-redux": "5.1.2",
|
||||
"redux": "4.0.0",
|
||||
"react-redux": "8.0.5",
|
||||
"redux": "4.2.0",
|
||||
"rn-fetch-blob": "0.12.0",
|
||||
"stream": "0.0.2",
|
||||
"stream-browserify": "3.0.0",
|
||||
"string-natural-compare": "2.0.3",
|
||||
"string-natural-compare": "3.0.1",
|
||||
"timers": "0.1.1",
|
||||
"url": "0.11.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.16.0",
|
||||
"@babel/runtime": "7.16.3",
|
||||
"@codemirror/commands": "6.0.0",
|
||||
"@codemirror/lang-cpp": "6.0.1",
|
||||
"@codemirror/lang-html": "6.0.0",
|
||||
"@codemirror/lang-java": "6.0.0",
|
||||
"@codemirror/lang-javascript": "6.0.0",
|
||||
"@codemirror/lang-markdown": "6.0.0",
|
||||
"@codemirror/lang-php": "6.0.0",
|
||||
"@codemirror/lang-rust": "6.0.0",
|
||||
"@codemirror/language": "6.0.0",
|
||||
"@codemirror/legacy-modes": "6.1.0",
|
||||
"@codemirror/search": "6.0.0",
|
||||
"@codemirror/state": "6.0.0",
|
||||
"@codemirror/view": "6.0.0",
|
||||
"@codemirror/commands": "6.1.2",
|
||||
"@codemirror/lang-cpp": "6.0.2",
|
||||
"@codemirror/lang-html": "6.1.3",
|
||||
"@codemirror/lang-java": "6.0.1",
|
||||
"@codemirror/lang-javascript": "6.1.1",
|
||||
"@codemirror/lang-markdown": "6.0.5",
|
||||
"@codemirror/lang-php": "6.0.1",
|
||||
"@codemirror/lang-rust": "6.0.1",
|
||||
"@codemirror/language": "6.3.0",
|
||||
"@codemirror/legacy-modes": "6.2.0",
|
||||
"@codemirror/search": "6.2.2",
|
||||
"@codemirror/state": "6.1.3",
|
||||
"@codemirror/view": "6.4.2",
|
||||
"@joplin/tools": "~2.9",
|
||||
"@lezer/highlight": "1.1.2",
|
||||
"@types/fs-extra": "9.0.13",
|
||||
"@types/jest": "28.1.8",
|
||||
"@types/jest": "29.2.3",
|
||||
"@types/react-native": "0.64.19",
|
||||
"@types/react-redux": "7.1.24",
|
||||
"babel-plugin-module-resolver": "4.1.0",
|
||||
"execa": "4.1.0",
|
||||
"fs-extra": "8.1.0",
|
||||
"fs-extra": "10.1.0",
|
||||
"gulp": "4.0.2",
|
||||
"jest": "28.1.3",
|
||||
"jest-environment-jsdom": "28.1.3",
|
||||
"jetifier": "1.6.8",
|
||||
"jest": "29.3.1",
|
||||
"jest-environment-jsdom": "29.3.1",
|
||||
"jetifier": "2.0.0",
|
||||
"jsdom": "20.0.0",
|
||||
"metro-react-native-babel-preset": "0.66.2",
|
||||
"nodemon": "2.0.20",
|
||||
"ts-jest": "28.0.8",
|
||||
"ts-jest": "29.0.3",
|
||||
"ts-loader": "9.4.1",
|
||||
"ts-node": "10.9.1",
|
||||
"typescript": "4.7.4",
|
||||
"typescript": "4.9.3",
|
||||
"uglify-js": "3.17.4",
|
||||
"webpack": "5.74.0"
|
||||
}
|
||||
|
||||
@@ -41,21 +41,21 @@
|
||||
"dependencies": {
|
||||
"domelementtype": "2.3.0",
|
||||
"domhandler": "3.3.0",
|
||||
"domutils": "2.8.0",
|
||||
"domutils": "3.0.1",
|
||||
"entities": "2.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "25.2.3",
|
||||
"@types/jest": "29.2.3",
|
||||
"@types/node": "18.11.9",
|
||||
"@typescript-eslint/eslint-plugin": "1.13.0",
|
||||
"@typescript-eslint/parser": "1.13.0",
|
||||
"@typescript-eslint/eslint-plugin": "5.43.0",
|
||||
"@typescript-eslint/parser": "5.43.0",
|
||||
"coveralls": "3.1.1",
|
||||
"eslint": "8.27.0",
|
||||
"eslint-config-prettier": "6.15.0",
|
||||
"jest": "26.6.3",
|
||||
"prettier": "1.19.1",
|
||||
"ts-jest": "24.3.0",
|
||||
"typescript": "3.9.10"
|
||||
"eslint": "8.28.0",
|
||||
"eslint-config-prettier": "8.5.0",
|
||||
"jest": "29.3.1",
|
||||
"prettier": "2.7.1",
|
||||
"ts-jest": "29.0.3",
|
||||
"typescript": "4.9.3"
|
||||
},
|
||||
"jest": {
|
||||
"preset": "ts-jest",
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
"README.md"
|
||||
],
|
||||
"devDependencies": {
|
||||
"standard": "8.6.0",
|
||||
"tap": "10.7.3"
|
||||
"standard": "17.0.0",
|
||||
"tap": "16.3.2"
|
||||
},
|
||||
"gitHead": "eb4b0e64eab40a51b0895d3a40a9d8c3cb7b1b14"
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ module.exports = class extends Generator {
|
||||
|
||||
this.option('silent');
|
||||
this.option('update');
|
||||
this.option('nodePackageManager', 'npm');
|
||||
|
||||
if (this.options.update) {
|
||||
// When updating, overwrite files without prompting
|
||||
@@ -174,11 +175,4 @@ module.exports = class extends Generator {
|
||||
);
|
||||
}
|
||||
|
||||
install() {
|
||||
this.installDependencies({
|
||||
npm: true,
|
||||
bower: false,
|
||||
yarn: false,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "generator-joplin",
|
||||
"version": "2.9.0",
|
||||
"version": "2.9.1",
|
||||
"description": "Scaffolds out a new Joplin plugin",
|
||||
"homepage": "https://github.com/laurent22/joplin/tree/dev/packages/generator-joplin",
|
||||
"author": {
|
||||
@@ -25,11 +25,11 @@
|
||||
"dependencies": {
|
||||
"chalk": "2.4.2",
|
||||
"slugify": "1.6.5",
|
||||
"yeoman-generator": "2.0.5",
|
||||
"yeoman-generator": "5.7.0",
|
||||
"yosay": "2.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"jest": "26.6.3"
|
||||
"jest": "29.3.1"
|
||||
},
|
||||
"repository": "https://github.com/laurent22/generator-joplin",
|
||||
"license": "MIT",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"@joplin/fork-htmlparser2": "^4.1.41",
|
||||
"css": "3.0.0",
|
||||
"datauri": "4.1.0",
|
||||
"fs-extra": "10.0.0",
|
||||
"fs-extra": "10.1.0",
|
||||
"html-entities": "1.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -2,9 +2,7 @@ const ArrayUtils = require('./ArrayUtils');
|
||||
|
||||
describe('ArrayUtils', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
done();
|
||||
});
|
||||
|
||||
|
||||
it('should remove array elements', (async () => {
|
||||
let a = ['un', 'deux', 'trois'];
|
||||
|
||||
@@ -5,9 +5,7 @@ const StringUtils = require('./string-utils');
|
||||
|
||||
describe('StringUtils', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
done();
|
||||
});
|
||||
|
||||
|
||||
it('should surround keywords with strings', (async () => {
|
||||
const testCases = [
|
||||
|
||||
@@ -3,10 +3,9 @@ const TaskQueue = require('./TaskQueue').default;
|
||||
|
||||
describe('TaskQueue', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
beforeEach(async () => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should queue and execute tasks', (async () => {
|
||||
|
||||
@@ -3,7 +3,7 @@ const SyncTargetRegistry = require('../../SyncTargetRegistry').default;
|
||||
const ObjectUtils = require('../../ObjectUtils');
|
||||
const { _ } = require('../../locale');
|
||||
const { createSelector } = require('reselect');
|
||||
const Logger = require('@joplin/lib/Logger').default;
|
||||
const Logger = require('../../Logger').default;
|
||||
|
||||
const logger = Logger.create('config/lib');
|
||||
|
||||
|
||||
@@ -2,10 +2,9 @@ const { setupDatabaseAndSynchronizer, switchClient } = require('./testing/test-u
|
||||
const BaseModel = require('./BaseModel').default;
|
||||
|
||||
describe('database', function() {
|
||||
beforeEach(async (done) => {
|
||||
beforeEach(async () => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should not modify cached field names', (async () => {
|
||||
|
||||
@@ -6,14 +6,12 @@ const eventManager = require('./eventManager').default;
|
||||
|
||||
describe('eventManager', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
beforeEach(async () => {
|
||||
eventManager.reset();
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(async (done) => {
|
||||
afterEach(async () => {
|
||||
eventManager.reset();
|
||||
done();
|
||||
});
|
||||
|
||||
it('should watch state props', (async () => {
|
||||
|
||||
@@ -2,11 +2,10 @@ import { afterAllCleanUp, setupDatabaseAndSynchronizer, switchClient, fileApi }
|
||||
|
||||
describe('file-api-driver', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
beforeEach(async () => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
await fileApi().clearRoot();
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { resolve as nodeResolve } from 'path';
|
||||
import FsDriverBase, { Stat } from './fs-driver-base';
|
||||
import time from './time';
|
||||
const md5File = require('md5-file/promise');
|
||||
const md5File = require('md5-file');
|
||||
const fs = require('fs-extra');
|
||||
|
||||
export default class FsDriverNode extends FsDriverBase {
|
||||
|
||||
@@ -2,9 +2,7 @@ import htmlUtils from './htmlUtils';
|
||||
|
||||
describe('htmlUtils', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
done();
|
||||
});
|
||||
|
||||
|
||||
it('should extract image URLs', (async () => {
|
||||
const testCases = [
|
||||
|
||||
@@ -59,10 +59,9 @@ const compareOutputToExpected = (options) => {
|
||||
};
|
||||
|
||||
describe('EnexToHtml', function() {
|
||||
beforeEach(async (done) => {
|
||||
beforeEach(async () => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
compareOutputToExpected({
|
||||
|
||||
@@ -15,10 +15,9 @@ const enexSampleBaseDir = `${supportDir}/../enex_to_md`;
|
||||
|
||||
describe('import-enex-md-gen', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
beforeEach(async () => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
it('should convert ENEX content to Markdown', async () => {
|
||||
|
||||
@@ -82,19 +82,6 @@ async function decodeBase64File(sourceFilePath: string, destFilePath: string) {
|
||||
});
|
||||
}
|
||||
|
||||
async function md5FileAsync(filePath: string): Promise<string> {
|
||||
return new Promise((resolve, reject) => {
|
||||
md5File(filePath, (error: any, hash: string) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
return;
|
||||
}
|
||||
|
||||
resolve(hash);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function removeUndefinedProperties(note: NoteEntity) {
|
||||
const output: any = {};
|
||||
for (const n in note) {
|
||||
@@ -184,7 +171,7 @@ async function processNoteResource(resource: ExtractedResource) {
|
||||
// If no resource ID is present, the resource ID is actually the MD5 of the data.
|
||||
// This ID will match the "hash" attribute of the corresponding <en-media> tag.
|
||||
// resourceId = md5(decodedData);
|
||||
resource.id = await md5FileAsync(resource.dataFilePath);
|
||||
resource.id = await md5File(resource.dataFilePath);
|
||||
}
|
||||
|
||||
if (!resource.id || !resource.size) {
|
||||
|
||||
@@ -4,9 +4,7 @@ import markdownUtils from './markdownUtils';
|
||||
|
||||
describe('markdownUtils', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
done();
|
||||
});
|
||||
|
||||
|
||||
it('should prepend a base URL', (async () => {
|
||||
const baseUrl = 'https://test.com/site';
|
||||
|
||||
@@ -2,9 +2,7 @@ const mimeUtils = require('./mime-utils.js').mime;
|
||||
|
||||
describe('mimeUils', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
done();
|
||||
});
|
||||
|
||||
|
||||
it('should get the file extension from the mime type', (async () => {
|
||||
expect(mimeUtils.toFileExtension('image/jpeg')).toBe('jpg');
|
||||
|
||||
@@ -4,10 +4,9 @@ const Note = require('../models/Note').default;
|
||||
|
||||
describe('models/BaseItem', function() {
|
||||
|
||||
beforeEach(async (done) => {
|
||||
beforeEach(async () => {
|
||||
await setupDatabaseAndSynchronizer(1);
|
||||
await switchClient(1);
|
||||
done();
|
||||
});
|
||||
|
||||
// This is to handle the case where a property is removed from a BaseItem table - in that case files in
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user