You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-09-02 20:46:21 +02:00
Compare commits
626 Commits
android-v1
...
android-v1
Author | SHA1 | Date | |
---|---|---|---|
|
1e3bd937ed | ||
|
0f6932f1e8 | ||
|
cab98776db | ||
|
fbc1e3ed3b | ||
|
805d16abda | ||
|
f133229287 | ||
|
8f4031572a | ||
|
d25fa796c0 | ||
|
089d6a5c9e | ||
|
3f83355d9f | ||
|
40380e3066 | ||
|
a6748bafb3 | ||
|
b52f6eb77c | ||
|
98c933fdb7 | ||
|
ece7ffadd6 | ||
|
591bceb8ef | ||
|
04cfd07176 | ||
|
db2282a351 | ||
|
0ec3d6ca9d | ||
|
442b7ce0d3 | ||
|
6a068a90b2 | ||
|
9a6f6c8b39 | ||
|
52d5c32950 | ||
|
de47cff86d | ||
|
a459174f98 | ||
|
75d5aa3a77 | ||
|
c254ca524f | ||
|
51934b8d8d | ||
|
a5dd686bb2 | ||
|
4cbfd04522 | ||
|
6d5d9323bd | ||
|
76063a6284 | ||
|
4119924e57 | ||
|
537336754c | ||
|
06f73919bd | ||
|
3f3e46081c | ||
|
68e4b4eaad | ||
|
9dcb4b51e5 | ||
|
8543849ea1 | ||
|
6ce5240e12 | ||
|
5bc25aefce | ||
|
b737ca7471 | ||
|
a5d7366f94 | ||
|
98f822d89c | ||
|
c33a8250ee | ||
|
adad406696 | ||
|
d82eec0fa4 | ||
|
c93f474547 | ||
|
0afd4a6234 | ||
|
f42786a840 | ||
|
1c1f044966 | ||
|
ad7a80e260 | ||
|
5e040c062c | ||
|
0cede5f90a | ||
|
8dc0deb2a4 | ||
|
1ca44b8f44 | ||
|
4ba9e60194 | ||
|
9d0bb4257f | ||
|
1a273b9bca | ||
|
d9e93cd6c4 | ||
|
5d39860707 | ||
|
60a6f714bc | ||
|
6eebeca259 | ||
|
995034c53f | ||
|
45a0981d05 | ||
|
3d8577a689 | ||
|
5292fc1402 | ||
|
03063f1137 | ||
|
b125a768b8 | ||
|
a721f170e4 | ||
|
76cd69ea16 | ||
|
45d4f277e2 | ||
|
fc2a52aa1a | ||
|
b3e5a1e48d | ||
|
45eb902030 | ||
|
456f7ac00c | ||
|
a93bda71fe | ||
|
0f9d92dd3d | ||
|
5543e9ef64 | ||
|
22dd613660 | ||
|
f7502fe34b | ||
|
8254206f44 | ||
|
3a57cfea02 | ||
|
71bf0437c1 | ||
|
eca4e24362 | ||
|
9a6efb7b37 | ||
|
4b666cbbd2 | ||
|
f8f46db910 | ||
|
f529adac99 | ||
|
3a52b9764b | ||
|
7e78d7716b | ||
|
0488c5c4cb | ||
|
921cc3b6c6 | ||
|
2a7aa28d4c | ||
|
7b3440ac4c | ||
|
958e5a80b7 | ||
|
3179117c62 | ||
|
d895463167 | ||
|
7e0e513051 | ||
|
4309c4f8e2 | ||
|
20b1c90574 | ||
|
7ff6ceb585 | ||
|
3dc3f334ec | ||
|
3476211f8b | ||
|
48e299916f | ||
|
35aebc9f52 | ||
|
cb3e1cf1e9 | ||
|
db509955f6 | ||
|
fb39899f8e | ||
|
f5d4bedc07 | ||
|
e710709c15 | ||
|
d74d6d9539 | ||
|
435e8dfc3b | ||
|
6c68459b34 | ||
|
2e75a63b26 | ||
|
c328996568 | ||
|
c648f19693 | ||
|
2caaf8e8c1 | ||
|
ceb7a7303d | ||
|
c01f533342 | ||
|
ff50361e19 | ||
|
3539a452a3 | ||
|
ea878fb614 | ||
|
5fd0408365 | ||
|
2d099b2bed | ||
|
3c0b9ee522 | ||
|
9dfe084a02 | ||
|
987890ba98 | ||
|
3358c46122 | ||
|
66204401c9 | ||
|
0644e2897d | ||
|
5761451def | ||
|
d819e6ee0c | ||
|
b66be79351 | ||
|
433fa21069 | ||
|
12db3d20ee | ||
|
80a70a6649 | ||
|
02ed297529 | ||
|
30543104be | ||
|
b6a004086c | ||
|
4265b3afb0 | ||
|
ccd7ba28d7 | ||
|
871f8b3a72 | ||
|
f276d2b2d4 | ||
|
2bb5acdfb1 | ||
|
dda0d8ca08 | ||
|
15f22c0507 | ||
|
fa7bd2cfab | ||
|
dc51781976 | ||
|
c874aee774 | ||
|
6c84fdc51d | ||
|
8ff0f7c529 | ||
|
b326ffc41c | ||
|
a0de8582e6 | ||
|
5eb0417b1a | ||
|
c42d9cf069 | ||
|
d965a7b6db | ||
|
c1919c2908 | ||
|
3fd7470104 | ||
|
0bf74142ac | ||
|
b3bf7144ac | ||
|
5738a4f92b | ||
|
784851b217 | ||
|
0e0803e050 | ||
|
3d3abfe259 | ||
|
3f38b518fe | ||
|
e673ee97de | ||
|
7cb55ffdc4 | ||
|
b706217d41 | ||
|
6f680081f4 | ||
|
fe41d37f8f | ||
|
833fb1264f | ||
|
f007735936 | ||
|
73a39d36ea | ||
|
a43ab26a46 | ||
|
f5f117cb72 | ||
|
fc6da04081 | ||
|
12ff654986 | ||
|
e852ad846f | ||
|
28e00fdf2e | ||
|
3bd0656eab | ||
|
e9af71dd76 | ||
|
73b33e8e32 | ||
|
c2c7efee91 | ||
|
c9c44d5643 | ||
|
0836fca822 | ||
|
566df5039c | ||
|
559655bf33 | ||
|
0eab23fbcf | ||
|
f334f4f487 | ||
|
49bfa49489 | ||
|
5f81944a3e | ||
|
00057da17d | ||
|
0a05464013 | ||
|
26f5a606e0 | ||
|
9ebb574059 | ||
|
d29c3c2466 | ||
|
a71f1c19ec | ||
|
485921d879 | ||
|
15de7572c0 | ||
|
09f41dd50e | ||
|
7b8ee467a0 | ||
|
99a496d684 | ||
|
9d6975a9e2 | ||
|
f43ee123d8 | ||
|
f42fb1b871 | ||
|
cf2442c5b2 | ||
|
e0e4735b03 | ||
|
138faa2aae | ||
|
8bd58c9608 | ||
|
215a725ded | ||
|
12c0a05af0 | ||
|
a7fa119041 | ||
|
7fb52b8b0e | ||
|
3e86ae4a82 | ||
|
ca46590ff3 | ||
|
947d81d96d | ||
|
6ca640d2ed | ||
|
6aca233b21 | ||
|
2200be697e | ||
|
25ab3c323b | ||
|
5bf30a9586 | ||
|
b6779a8074 | ||
|
59599d318c | ||
|
538600fd6c | ||
|
63264ba471 | ||
|
95e7f3df7d | ||
|
366fd2a333 | ||
|
5be99a4a16 | ||
|
d86f6a1fbd | ||
|
7d68208cb4 | ||
|
e9de9d9128 | ||
|
1af16d9f0b | ||
|
8e11eababa | ||
|
4ec9faadd5 | ||
|
5cf462c885 | ||
|
f7ef0a2b1e | ||
|
870f55a6c5 | ||
|
7f7e38b434 | ||
|
460a07b1a3 | ||
|
48c9b86d2b | ||
|
7202066c1f | ||
|
5226f0019b | ||
|
26ac745419 | ||
|
b3f2bbee5b | ||
|
56c6cfc785 | ||
|
1db4932573 | ||
|
a2873ebbc5 | ||
|
f652011d59 | ||
|
27c572b2f5 | ||
|
7a4c97618d | ||
|
3ac4fbeee5 | ||
|
9e05fa553c | ||
|
d4f0d2423d | ||
|
abdd7e3256 | ||
|
f3ea476f27 | ||
|
aa22af443c | ||
|
ce3bd2a47d | ||
|
a9b26246e6 | ||
|
cc1e941dd9 | ||
|
9610b7e6bd | ||
|
ad85a12535 | ||
|
b825346829 | ||
|
bd4cbaf93d | ||
|
9af2a19bdf | ||
|
d3fa906a9a | ||
|
22679641ee | ||
|
0ca7457000 | ||
|
c84e49c71c | ||
|
07ab0e986d | ||
|
17957f5da4 | ||
|
a7b5d43e69 | ||
|
38eda3f151 | ||
|
056285deda | ||
|
bdedf69439 | ||
|
c9451d8675 | ||
|
c38834b04c | ||
|
851eee1500 | ||
|
40e24102ce | ||
|
7614a795e9 | ||
|
1273a1dc5f | ||
|
10909fe4fc | ||
|
9b3d3026bf | ||
|
96076c84f4 | ||
|
2c553db45a | ||
|
7d7005596f | ||
|
998dd52adc | ||
|
2a1c6d6475 | ||
|
1ba0644142 | ||
|
88ac57d7f3 | ||
|
314686bede | ||
|
af8845f209 | ||
|
c95d7f9d37 | ||
|
2510c659e6 | ||
|
b7523e1b21 | ||
|
e4e9e801a2 | ||
|
524ec12d8a | ||
|
1108e8c28a | ||
|
0f1156ab9c | ||
|
2a08cc332a | ||
|
5d2baa872e | ||
|
4b377589aa | ||
|
cf78204c85 | ||
|
c513cdd4eb | ||
|
5f410e80e6 | ||
|
2aa7eaa192 | ||
|
b24d060281 | ||
|
a014b9347e | ||
|
582ab4ac13 | ||
|
c9adccad4a | ||
|
f41ba67e15 | ||
|
1f70a76c7e | ||
|
5fe3732a38 | ||
|
445533cfcc | ||
|
a8e29249d6 | ||
|
e4a3cbd2ff | ||
|
96b7ce9d50 | ||
|
2bbc1e7ecd | ||
|
83619b279d | ||
|
8b5a99d494 | ||
|
67d4123608 | ||
|
a424e3c899 | ||
|
08d4b5a714 | ||
|
68aefd5e4c | ||
|
57d750bc9a | ||
|
fbe966903b | ||
|
652748f969 | ||
|
e108fdb1d8 | ||
|
a8296e2e37 | ||
|
0998fc0ad7 | ||
|
d5f3e860b9 | ||
|
4e624f7db5 | ||
|
5b697b7e16 | ||
|
30e0d69a74 | ||
|
652816fd26 | ||
|
3a33e5f416 | ||
|
277dac5512 | ||
|
81d97d9f9d | ||
|
a4873cd40d | ||
|
20cb2daf43 | ||
|
e5b5250a91 | ||
|
db7d617e2b | ||
|
a627884876 | ||
|
ed30d09e07 | ||
|
179e3f9aee | ||
|
a67aedba35 | ||
|
199c411a7d | ||
|
5cd7bb5bdb | ||
|
30b8f5e2aa | ||
|
44f2842820 | ||
|
569355a318 | ||
|
8464e16d5d | ||
|
874c1e3e82 | ||
|
2530ecfc86 | ||
|
6b49f1dfcc | ||
|
b1af25ea18 | ||
|
3086007a9c | ||
|
bdfb6b97f5 | ||
|
c01219e6be | ||
|
743c11c279 | ||
|
11646d1c21 | ||
|
797f4a9669 | ||
|
815775ad8f | ||
|
085109288f | ||
|
c6cf0f3ba5 | ||
|
f9bdce7e24 | ||
|
f8cf4db5db | ||
|
14e6ae373f | ||
|
39bffd2790 | ||
|
f3cb903901 | ||
|
abad1883bc | ||
|
bb8770a967 | ||
|
c903947704 | ||
|
82e96840e9 | ||
|
e190d90832 | ||
|
0ae8d454ad | ||
|
77c7f966cf | ||
|
619fa1d607 | ||
|
157736ff7e | ||
|
0b57d906f8 | ||
|
86bfdb5c79 | ||
|
fc7d34f79c | ||
|
9d962f0328 | ||
|
79e1a33b28 | ||
|
0eedae1f62 | ||
|
e1144c098e | ||
|
5c5cb0f781 | ||
|
656615b571 | ||
|
799a9e810d | ||
|
aa147bbcdc | ||
|
8c7a24282c | ||
|
f99f3f8a6d | ||
|
29fbafdfff | ||
|
3253146dae | ||
|
7e4ac0fd73 | ||
|
60d77cb5ea | ||
|
8299164964 | ||
|
488393e75d | ||
|
c19f8c8035 | ||
|
b0b55718cc | ||
|
5ade9ff2f6 | ||
|
e4cfb518ba | ||
|
89864de1ff | ||
|
ee2a474611 | ||
|
223caca0f5 | ||
|
ee358f70dd | ||
|
0718828d60 | ||
|
d13f54c2ce | ||
|
90f7f99cd1 | ||
|
a273bbaeee | ||
|
619b426689 | ||
|
97c752a39e | ||
|
7565f1cada | ||
|
0c147236a3 | ||
|
88f22fabf7 | ||
|
5f46d60c5e | ||
|
cc8c200826 | ||
|
4485947b0f | ||
|
9f1a877f96 | ||
|
13280ce1b3 | ||
|
7f73931530 | ||
|
bbfed9bca8 | ||
|
bab29cd582 | ||
|
baea44cbd6 | ||
|
ab0538df43 | ||
|
58d4a69053 | ||
|
9147b3061a | ||
|
1b0102f62c | ||
|
471631933b | ||
|
cd761932c1 | ||
|
e63eee89ef | ||
|
4393ebbcc6 | ||
|
ed82390a8d | ||
|
79e708779f | ||
|
98905f6892 | ||
|
44e57c3959 | ||
|
35d48394ce | ||
|
eb42a5f34b | ||
|
729c8c6fac | ||
|
7a1707d864 | ||
|
64d7603eed | ||
|
89e6b680a6 | ||
|
da071a804c | ||
|
7833ca5ae6 | ||
|
44d49b57b9 | ||
|
9db150f8ff | ||
|
e2d3630783 | ||
|
cb1b5cae9f | ||
|
3af5b31c1c | ||
|
b6dafd6da6 | ||
|
d08b922632 | ||
|
9d4e250f6b | ||
|
c19cc1b39a | ||
|
73bd6f9776 | ||
|
6fef55398f | ||
|
d209d5036b | ||
|
4be02bc33c | ||
|
d6daa34e0a | ||
|
9cebbbe7cf | ||
|
71e5304298 | ||
|
8f8d11c9b3 | ||
|
1cd86fd3ea | ||
|
7f1f5a8c3d | ||
|
9dfb0642da | ||
|
0fa8dfa063 | ||
|
1d79dedf6d | ||
|
a274a56e65 | ||
|
44d3a4213f | ||
|
e68eb196b7 | ||
|
4bef79cd71 | ||
|
f3dc3602c8 | ||
|
17e140ba56 | ||
|
89d0575ccd | ||
|
ca0197a319 | ||
|
62bc296abe | ||
|
e58dc809ec | ||
|
abd57ad384 | ||
|
bada9286d0 | ||
|
3807317e66 | ||
|
10ff43f4f0 | ||
|
282f6de1a9 | ||
|
9a55afec01 | ||
|
c8c4bb3245 | ||
|
e1f831af62 | ||
|
657cebfda9 | ||
|
7f1c25793a | ||
|
b770ffda4d | ||
|
d0b3e15999 | ||
|
20433b0282 | ||
|
452b41de0f | ||
|
b69008225f | ||
|
b3a778e983 | ||
|
a57c6e9155 | ||
|
3fbfba2c03 | ||
|
8a5e6875f0 | ||
|
e11e57f1d8 | ||
|
073bd80f89 | ||
|
e3aaee738a | ||
|
f1b2b7b86b | ||
|
e0a87d6253 | ||
|
a7eae2e033 | ||
|
51235f191d | ||
|
003ead2511 | ||
|
8dc8527fdc | ||
|
985dcc2605 | ||
|
4063cdba11 | ||
|
c96c591fa9 | ||
|
4913fdb800 | ||
|
24bc7f153a | ||
|
8732c97dcd | ||
|
e092eaef6f | ||
|
4ade1bf65f | ||
|
77a03599de | ||
|
9c057071b5 | ||
|
ee3f4beeaf | ||
|
7035b1f9f6 | ||
|
3aea55ee63 | ||
|
28acb4eca6 | ||
|
c63c6370b5 | ||
|
6046f40e45 | ||
|
262159cf73 | ||
|
8eb94bc8ab | ||
|
a9390affaa | ||
|
66392b4e8a | ||
|
3283f34c79 | ||
|
fd4e5d7d30 | ||
|
5bbf9d87c2 | ||
|
acf1ff6d1d | ||
|
05acc51054 | ||
|
eb8841379c | ||
|
d601575549 | ||
|
0d2f253218 | ||
|
349d020da2 | ||
|
87ccb86f54 | ||
|
20482b2f14 | ||
|
47a05fb4ba | ||
|
ac0a89625a | ||
|
a07638239b | ||
|
5143870d3b | ||
|
f61c4c1374 | ||
|
254735fcae | ||
|
44024371ff | ||
|
be232fa34b | ||
|
1a90165255 | ||
|
13417d15b7 | ||
|
9fe1f6acfc | ||
|
1899d86641 | ||
|
6ca63ca56b | ||
|
e796968ec0 | ||
|
7b64c8dbe3 | ||
|
2377f7bc07 | ||
|
47fdcef182 | ||
|
d27b658392 | ||
|
07720ed6f8 | ||
|
a9cdecf599 | ||
|
c6b5a5c328 | ||
|
e7f3aa3764 | ||
|
89ca8e08d6 | ||
|
6350506ce7 | ||
|
d5ed611920 | ||
|
acc10ccac4 | ||
|
45160a2e73 | ||
|
e38794171a | ||
|
c2d6da83c0 | ||
|
fd568b5300 | ||
|
77005fc495 | ||
|
0273e58783 | ||
|
3e88a24753 | ||
|
1205908233 | ||
|
3a7a068196 | ||
|
845ecfe742 | ||
|
53355aaad3 | ||
|
7cd0e25538 | ||
|
2f15178ff6 | ||
|
a4b13be0d1 | ||
|
23ae4fb790 | ||
|
cff036d08b | ||
|
7826cc0b03 | ||
|
2bfa28a311 | ||
|
780c5c80ae | ||
|
fcd00b3212 | ||
|
6a41d6e85a | ||
|
3733858145 | ||
|
95d8ee65a5 | ||
|
8e57697b71 | ||
|
c9c371b297 | ||
|
d4f794920e | ||
|
13b5ef36d7 | ||
|
83e0bac52a | ||
|
9943ae0fa5 | ||
|
4c95872826 | ||
|
4aef72572d | ||
|
126918be54 | ||
|
1dc4516efc | ||
|
9a9cfbd130 | ||
|
341c9ba64b | ||
|
f432734338 | ||
|
b7f5f848f2 | ||
|
d80cf6bf37 | ||
|
31bce2e644 | ||
|
faabd17fc6 | ||
|
4c4ed60cfb | ||
|
be1895a080 | ||
|
b81b6135f6 | ||
|
583ac7960b | ||
|
b749bb60fc | ||
|
2c6a298758 | ||
|
42544cc63b | ||
|
d2b81d221b | ||
|
f19f148297 | ||
|
79c6eb5503 | ||
|
1204bed80a | ||
|
dc91b1f7d6 | ||
|
66dc2b33de | ||
|
811942d45e | ||
|
dbde239a25 | ||
|
ab3ba3e2ca | ||
|
79e77b5a10 | ||
|
c3395133c9 | ||
|
b1d073cdeb | ||
|
25d723b373 | ||
|
e9783d050b | ||
|
e1be1ead86 | ||
|
b129bed69f | ||
|
265ad50ce4 | ||
|
3e2570601f |
251
.eslintignore
251
.eslintignore
@@ -59,16 +59,80 @@ Tools/node_modules
|
|||||||
Tools/PortableAppsLauncher
|
Tools/PortableAppsLauncher
|
||||||
Modules/TinyMCE/IconPack/postinstall.js
|
Modules/TinyMCE/IconPack/postinstall.js
|
||||||
Modules/TinyMCE/langs/
|
Modules/TinyMCE/langs/
|
||||||
|
CliClient/build/
|
||||||
|
|
||||||
# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD
|
# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD
|
||||||
|
CliClient/app/LinkSelector.js
|
||||||
|
CliClient/app/services/plugins/PluginRunner.js
|
||||||
|
CliClient/tests/fsDriver.js
|
||||||
|
CliClient/tests/InMemoryCache.js
|
||||||
|
CliClient/tests/MdToHtml.js
|
||||||
|
CliClient/tests/models_Setting.js
|
||||||
|
CliClient/tests/services_CommandService.js
|
||||||
|
CliClient/tests/services_InteropService.js
|
||||||
|
CliClient/tests/services_keychainService.js
|
||||||
|
CliClient/tests/services_PluginService.js
|
||||||
|
CliClient/tests/services_rest_Api.js
|
||||||
|
CliClient/tests/services/plugins/api/JoplinSetting.js
|
||||||
|
CliClient/tests/services/plugins/sandboxProxy.js
|
||||||
|
CliClient/tests/synchronizer_LockHandler.js
|
||||||
|
CliClient/tests/synchronizer_MigrationHandler.js
|
||||||
|
ElectronClient/app.js
|
||||||
|
ElectronClient/bridge.js
|
||||||
|
ElectronClient/commands/copyDevCommand.js
|
||||||
|
ElectronClient/commands/focusElement.js
|
||||||
|
ElectronClient/commands/openProfileDirectory.js
|
||||||
|
ElectronClient/commands/startExternalEditing.js
|
||||||
|
ElectronClient/commands/stopExternalEditing.js
|
||||||
|
ElectronClient/commands/toggleExternalEditing.js
|
||||||
|
ElectronClient/ElectronAppWrapper.js
|
||||||
|
ElectronClient/global.d.js
|
||||||
|
ElectronClient/gui/Button/Button.js
|
||||||
|
ElectronClient/gui/ConfigScreen/ButtonBar.js
|
||||||
|
ElectronClient/gui/ConfigScreen/ConfigScreen.js
|
||||||
|
ElectronClient/gui/ConfigScreen/SideBar.js
|
||||||
|
ElectronClient/gui/DropboxLoginScreen.js
|
||||||
|
ElectronClient/gui/ErrorBoundary.js
|
||||||
|
ElectronClient/gui/KeymapConfig/KeymapConfigScreen.js
|
||||||
|
ElectronClient/gui/KeymapConfig/ShortcutRecorder.js
|
||||||
|
ElectronClient/gui/KeymapConfig/styles/index.js
|
||||||
|
ElectronClient/gui/KeymapConfig/utils/getLabel.js
|
||||||
|
ElectronClient/gui/KeymapConfig/utils/useCommandStatus.js
|
||||||
|
ElectronClient/gui/KeymapConfig/utils/useKeymap.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/editAlarm.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/exportPdf.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/hideModalMessage.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/moveToFolder.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/newFolder.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/newNote.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/newSubFolder.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/newTodo.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/openFolder.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/openNote.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/openTag.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/print.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/renameFolder.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/renameTag.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/search.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/selectTemplate.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/setTags.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/showModalMessage.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/showNoteContentProperties.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/showNoteProperties.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/showShareNoteDialog.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/toggleEditors.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/toggleNoteList.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/toggleSideBar.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/toggleVisiblePanes.js
|
||||||
|
ElectronClient/gui/MainScreen/MainScreen.js
|
||||||
|
ElectronClient/gui/MenuBar.js
|
||||||
ElectronClient/gui/MultiNoteActions.js
|
ElectronClient/gui/MultiNoteActions.js
|
||||||
ElectronClient/gui/NoteContentPropertiesDialog.js
|
ElectronClient/gui/NoteContentPropertiesDialog.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/AceEditor.js
|
ElectronClient/gui/NoteEditor/commands/editorCommandDeclarations.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/styles/index.js
|
ElectronClient/gui/NoteEditor/commands/focusElementNoteBody.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/Toolbar.js
|
ElectronClient/gui/NoteEditor/commands/focusElementNoteTitle.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/utils/index.js
|
ElectronClient/gui/NoteEditor/commands/showLocalSearch.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/utils/types.js
|
ElectronClient/gui/NoteEditor/commands/showRevisions.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/utils/useListIdent.js
|
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.js
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Editor.js
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Editor.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/styles/index.js
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/styles/index.js
|
||||||
@@ -76,9 +140,13 @@ ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.js
|
|||||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/index.js
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/index.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useKeymap.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.js
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.js
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.js
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/styles/index.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js
|
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js
|
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js
|
||||||
ElectronClient/gui/NoteEditor/NoteEditor.js
|
ElectronClient/gui/NoteEditor/NoteEditor.js
|
||||||
@@ -88,34 +156,203 @@ ElectronClient/gui/NoteEditor/utils/index.js
|
|||||||
ElectronClient/gui/NoteEditor/utils/resourceHandling.js
|
ElectronClient/gui/NoteEditor/utils/resourceHandling.js
|
||||||
ElectronClient/gui/NoteEditor/utils/types.js
|
ElectronClient/gui/NoteEditor/utils/types.js
|
||||||
ElectronClient/gui/NoteEditor/utils/useDropHandler.js
|
ElectronClient/gui/NoteEditor/utils/useDropHandler.js
|
||||||
|
ElectronClient/gui/NoteEditor/utils/useFolder.js
|
||||||
ElectronClient/gui/NoteEditor/utils/useFormNote.js
|
ElectronClient/gui/NoteEditor/utils/useFormNote.js
|
||||||
ElectronClient/gui/NoteEditor/utils/useMarkupToHtml.js
|
ElectronClient/gui/NoteEditor/utils/useMarkupToHtml.js
|
||||||
ElectronClient/gui/NoteEditor/utils/useMessageHandler.js
|
ElectronClient/gui/NoteEditor/utils/useMessageHandler.js
|
||||||
ElectronClient/gui/NoteEditor/utils/useNoteSearchBar.js
|
ElectronClient/gui/NoteEditor/utils/useNoteSearchBar.js
|
||||||
|
ElectronClient/gui/NoteEditor/utils/usePluginServiceRegistration.js
|
||||||
ElectronClient/gui/NoteEditor/utils/useSearchMarkers.js
|
ElectronClient/gui/NoteEditor/utils/useSearchMarkers.js
|
||||||
ElectronClient/gui/NoteEditor/utils/useWindowCommandHandler.js
|
ElectronClient/gui/NoteEditor/utils/useWindowCommandHandler.js
|
||||||
|
ElectronClient/gui/NoteList/commands/focusElementNoteList.js
|
||||||
|
ElectronClient/gui/NoteList/NoteList.js
|
||||||
|
ElectronClient/gui/NoteListControls/commands/focusSearch.js
|
||||||
|
ElectronClient/gui/NoteListControls/NoteListControls.js
|
||||||
ElectronClient/gui/NoteListItem.js
|
ElectronClient/gui/NoteListItem.js
|
||||||
|
ElectronClient/gui/NoteTextViewer.js
|
||||||
ElectronClient/gui/NoteToolbar/NoteToolbar.js
|
ElectronClient/gui/NoteToolbar/NoteToolbar.js
|
||||||
|
ElectronClient/gui/OneDriveLoginScreen.js
|
||||||
|
ElectronClient/gui/ResizableLayout/hooks/useLayoutItemSizes.js
|
||||||
|
ElectronClient/gui/ResizableLayout/hooks/useWindowResizeEvent.js
|
||||||
|
ElectronClient/gui/ResizableLayout/ResizableLayout.js
|
||||||
ElectronClient/gui/ResourceScreen.js
|
ElectronClient/gui/ResourceScreen.js
|
||||||
|
ElectronClient/gui/Root_UpgradeSyncTarget.js
|
||||||
|
ElectronClient/gui/Root.js
|
||||||
|
ElectronClient/gui/SearchBar/hooks/useSearch.js
|
||||||
|
ElectronClient/gui/SearchBar/SearchBar.js
|
||||||
|
ElectronClient/gui/SearchBar/styles/index.js
|
||||||
ElectronClient/gui/ShareNoteDialog.js
|
ElectronClient/gui/ShareNoteDialog.js
|
||||||
|
ElectronClient/gui/SideBar/commands/focusElementSideBar.js
|
||||||
|
ElectronClient/gui/SideBar/SideBar.js
|
||||||
|
ElectronClient/gui/SideBar/styles/index.js
|
||||||
|
ElectronClient/gui/StatusScreen/StatusScreen.js
|
||||||
|
ElectronClient/gui/style/StyledInput.js
|
||||||
|
ElectronClient/gui/style/StyledTextInput.js
|
||||||
|
ElectronClient/gui/TagList.js
|
||||||
|
ElectronClient/gui/ToggleEditorsButton/styles/index.js
|
||||||
|
ElectronClient/gui/ToggleEditorsButton/ToggleEditorsButton.js
|
||||||
|
ElectronClient/gui/ToolbarBase.js
|
||||||
|
ElectronClient/gui/ToolbarButton/styles/index.js
|
||||||
|
ElectronClient/gui/ToolbarButton/ToolbarButton.js
|
||||||
|
ElectronClient/gui/utils/NoteListUtils.js
|
||||||
|
ElectronClient/InteropServiceHelper.js
|
||||||
|
ElectronClient/plugins/GotoAnything.js
|
||||||
|
ElectronClient/services/bridge.js
|
||||||
|
ElectronClient/services/commands/types.js
|
||||||
|
ElectronClient/services/plugins/hooks/useThemeCss.js
|
||||||
|
ElectronClient/services/plugins/hooks/useViewIsReady.js
|
||||||
|
ElectronClient/services/plugins/PlatformImplementation.js
|
||||||
|
ElectronClient/services/plugins/PluginRunner.js
|
||||||
|
ElectronClient/services/plugins/UserWebview.js
|
||||||
|
ElectronClient/services/plugins/UserWebviewDialog.js
|
||||||
|
ElectronClient/services/plugins/UserWebviewDialogButtonBar.js
|
||||||
ReactNativeClient/lib/AsyncActionQueue.js
|
ReactNativeClient/lib/AsyncActionQueue.js
|
||||||
|
ReactNativeClient/lib/BaseApplication.js
|
||||||
ReactNativeClient/lib/checkPermissions.js
|
ReactNativeClient/lib/checkPermissions.js
|
||||||
|
ReactNativeClient/lib/commands/historyBackward.js
|
||||||
|
ReactNativeClient/lib/commands/historyForward.js
|
||||||
|
ReactNativeClient/lib/commands/synchronize.js
|
||||||
|
ReactNativeClient/lib/components/BackButtonDialogBox.js
|
||||||
|
ReactNativeClient/lib/components/CameraView.js
|
||||||
|
ReactNativeClient/lib/components/NoteBodyViewer/hooks/useOnMessage.js
|
||||||
|
ReactNativeClient/lib/components/NoteBodyViewer/hooks/useOnResourceLongPress.js
|
||||||
|
ReactNativeClient/lib/components/NoteBodyViewer/hooks/useSource.js
|
||||||
|
ReactNativeClient/lib/components/NoteBodyViewer/NoteBodyViewer.js
|
||||||
|
ReactNativeClient/lib/components/screens/Note.js
|
||||||
|
ReactNativeClient/lib/components/screens/UpgradeSyncTargetScreen.js
|
||||||
|
ReactNativeClient/lib/components/SelectDateTimeDialog.js
|
||||||
|
ReactNativeClient/lib/errorUtils.js
|
||||||
|
ReactNativeClient/lib/eventManager.js
|
||||||
|
ReactNativeClient/lib/fs-driver-node.js
|
||||||
|
ReactNativeClient/lib/hooks/useEffectDebugger.js
|
||||||
ReactNativeClient/lib/hooks/useImperativeHandlerDebugger.js
|
ReactNativeClient/lib/hooks/useImperativeHandlerDebugger.js
|
||||||
ReactNativeClient/lib/hooks/usePrevious.js
|
ReactNativeClient/lib/hooks/usePrevious.js
|
||||||
|
ReactNativeClient/lib/hooks/usePropsDebugger.js
|
||||||
|
ReactNativeClient/lib/InMemoryCache.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MarkupToHtml.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml.js
|
||||||
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/checkbox.js
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/checkbox.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/code_inline.js
|
||||||
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fence.js
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fence.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fountain.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/highlight_keywords.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/html_image.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/image.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/katex.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/link_open.js
|
||||||
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.js
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.js
|
||||||
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/sanitize_html.js
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/sanitize_html.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/noteStyle.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/pathUtils.js
|
||||||
ReactNativeClient/lib/JoplinServerApi.js
|
ReactNativeClient/lib/JoplinServerApi.js
|
||||||
|
ReactNativeClient/lib/locale.js
|
||||||
|
ReactNativeClient/lib/Logger.js
|
||||||
|
ReactNativeClient/lib/markdownUtils.js
|
||||||
|
ReactNativeClient/lib/markupLanguageUtils.js
|
||||||
|
ReactNativeClient/lib/models/Alarm.js
|
||||||
|
ReactNativeClient/lib/models/Setting.js
|
||||||
|
ReactNativeClient/lib/ntpDate.js
|
||||||
|
ReactNativeClient/lib/path-utils.js
|
||||||
|
ReactNativeClient/lib/PoorManIntervals.js
|
||||||
|
ReactNativeClient/lib/reducer.js
|
||||||
|
ReactNativeClient/lib/services/AlarmService.js
|
||||||
|
ReactNativeClient/lib/services/AlarmServiceDriver.android.js
|
||||||
|
ReactNativeClient/lib/services/AlarmServiceDriver.ios.js
|
||||||
|
ReactNativeClient/lib/services/AlarmServiceDriverNode.js
|
||||||
|
ReactNativeClient/lib/services/BaseService.js
|
||||||
|
ReactNativeClient/lib/services/commands/commandsToMarkdownTable.js
|
||||||
|
ReactNativeClient/lib/services/commands/MenuUtils.js
|
||||||
|
ReactNativeClient/lib/services/commands/propsHaveChanged.js
|
||||||
|
ReactNativeClient/lib/services/commands/stateToWhenClauseContext.js
|
||||||
|
ReactNativeClient/lib/services/commands/ToolbarButtonUtils.js
|
||||||
|
ReactNativeClient/lib/services/CommandService.js
|
||||||
|
ReactNativeClient/lib/services/contextkey/contextkey.js
|
||||||
|
ReactNativeClient/lib/services/debug/populateDatabase.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Exporter_Base.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Exporter_Custom.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Exporter_Html.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Exporter_Jex.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Exporter_Md.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Exporter_Raw.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_Base.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_Custom.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToHtml.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToMd.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_Jex.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_Md.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_Raw.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService.js
|
||||||
|
ReactNativeClient/lib/services/interop/types.js
|
||||||
ReactNativeClient/lib/services/keychain/KeychainService.js
|
ReactNativeClient/lib/services/keychain/KeychainService.js
|
||||||
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.dummy.js
|
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.dummy.js
|
||||||
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.mobile.js
|
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.mobile.js
|
||||||
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.node.js
|
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.node.js
|
||||||
ReactNativeClient/lib/services/keychain/KeychainServiceDriverBase.js
|
ReactNativeClient/lib/services/keychain/KeychainServiceDriverBase.js
|
||||||
ReactNativeClient/lib/services/ResourceEditWatcher.js
|
ReactNativeClient/lib/services/KeymapService.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/Global.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/Joplin.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinCommands.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinData.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinFilters.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinInterop.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinPlugins.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinSettings.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinViews.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinViewsDialogs.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinViewsMenuItems.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinViewsMenus.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinViewsPanels.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinViewsToolbarButtons.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinWorkspace.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/types.js
|
||||||
|
ReactNativeClient/lib/services/plugins/BasePluginRunner.js
|
||||||
|
ReactNativeClient/lib/services/plugins/MenuController.js
|
||||||
|
ReactNativeClient/lib/services/plugins/MenuItemController.js
|
||||||
|
ReactNativeClient/lib/services/plugins/Plugin.js
|
||||||
|
ReactNativeClient/lib/services/plugins/PluginService.js
|
||||||
|
ReactNativeClient/lib/services/plugins/reducer.js
|
||||||
|
ReactNativeClient/lib/services/plugins/sandboxProxy.js
|
||||||
|
ReactNativeClient/lib/services/plugins/ToolbarButtonController.js
|
||||||
|
ReactNativeClient/lib/services/plugins/utils/contentScriptsToRendererRules.js
|
||||||
|
ReactNativeClient/lib/services/plugins/utils/createViewHandle.js
|
||||||
|
ReactNativeClient/lib/services/plugins/utils/executeSandboxCall.js
|
||||||
|
ReactNativeClient/lib/services/plugins/utils/manifestFromObject.js
|
||||||
|
ReactNativeClient/lib/services/plugins/utils/mapEventHandlersToIds.js
|
||||||
|
ReactNativeClient/lib/services/plugins/utils/types.js
|
||||||
|
ReactNativeClient/lib/services/plugins/ViewController.js
|
||||||
|
ReactNativeClient/lib/services/plugins/WebviewController.js
|
||||||
|
ReactNativeClient/lib/services/ResourceEditWatcher/index.js
|
||||||
|
ReactNativeClient/lib/services/ResourceEditWatcher/reducer.js
|
||||||
|
ReactNativeClient/lib/services/rest/actionApi.desktop.js
|
||||||
|
ReactNativeClient/lib/services/rest/Api.js
|
||||||
|
ReactNativeClient/lib/services/rest/errors.js
|
||||||
|
ReactNativeClient/lib/services/searchengine/filterParser.js
|
||||||
|
ReactNativeClient/lib/services/searchengine/queryBuilder.js
|
||||||
ReactNativeClient/lib/services/SettingUtils.js
|
ReactNativeClient/lib/services/SettingUtils.js
|
||||||
|
ReactNativeClient/lib/services/synchronizer/gui/useSyncTargetUpgrade.js
|
||||||
|
ReactNativeClient/lib/services/synchronizer/LockHandler.js
|
||||||
|
ReactNativeClient/lib/services/synchronizer/MigrationHandler.js
|
||||||
|
ReactNativeClient/lib/services/synchronizer/migrations/1.js
|
||||||
|
ReactNativeClient/lib/services/synchronizer/migrations/2.js
|
||||||
|
ReactNativeClient/lib/services/synchronizer/utils/types.js
|
||||||
|
ReactNativeClient/lib/services/UndoRedoService.js
|
||||||
|
ReactNativeClient/lib/services/WhenClause.js
|
||||||
ReactNativeClient/lib/ShareExtension.js
|
ReactNativeClient/lib/ShareExtension.js
|
||||||
ReactNativeClient/lib/shareHandler.js
|
ReactNativeClient/lib/shareHandler.js
|
||||||
|
ReactNativeClient/lib/shim.js
|
||||||
|
ReactNativeClient/lib/Synchronizer.js
|
||||||
|
ReactNativeClient/lib/theme.js
|
||||||
|
ReactNativeClient/lib/themes/aritimDark.js
|
||||||
|
ReactNativeClient/lib/themes/dark.js
|
||||||
|
ReactNativeClient/lib/themes/dracula.js
|
||||||
|
ReactNativeClient/lib/themes/light.js
|
||||||
|
ReactNativeClient/lib/themes/nord.js
|
||||||
|
ReactNativeClient/lib/themes/oledDark.js
|
||||||
|
ReactNativeClient/lib/themes/solarizedDark.js
|
||||||
|
ReactNativeClient/lib/themes/solarizedLight.js
|
||||||
|
ReactNativeClient/lib/themes/type.js
|
||||||
|
ReactNativeClient/lib/uuid.js
|
||||||
|
ReactNativeClient/lib/versionInfo.js
|
||||||
ReactNativeClient/PluginAssetsLoader.js
|
ReactNativeClient/PluginAssetsLoader.js
|
||||||
ReactNativeClient/setUpQuickActions.js
|
ReactNativeClient/setUpQuickActions.js
|
||||||
# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD
|
# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD
|
||||||
|
132
.eslintrc.js
132
.eslintrc.js
@@ -4,9 +4,9 @@ module.exports = {
|
|||||||
'es6': true,
|
'es6': true,
|
||||||
'node': true,
|
'node': true,
|
||||||
},
|
},
|
||||||
"parser": "@typescript-eslint/parser",
|
'parser': '@typescript-eslint/parser',
|
||||||
'extends': ['eslint:recommended'],
|
'extends': ['eslint:recommended'],
|
||||||
"settings": {
|
'settings': {
|
||||||
'react': {
|
'react': {
|
||||||
'version': '16.12',
|
'version': '16.12',
|
||||||
},
|
},
|
||||||
@@ -37,32 +37,39 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
'parserOptions': {
|
'parserOptions': {
|
||||||
'ecmaVersion': 2018,
|
'ecmaVersion': 2018,
|
||||||
"ecmaFeatures": {
|
'ecmaFeatures': {
|
||||||
"jsx": true,
|
'jsx': true,
|
||||||
},
|
},
|
||||||
"sourceType": "module",
|
'sourceType': 'module',
|
||||||
},
|
},
|
||||||
'rules': {
|
'rules': {
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
// Code correctness
|
// Code correctness
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
"react/jsx-uses-react": "error",
|
'react/jsx-uses-react': 'error',
|
||||||
"react/jsx-uses-vars": "error",
|
'react/jsx-uses-vars': 'error',
|
||||||
"no-unused-vars": "error",
|
'no-unused-vars': ['error', { 'argsIgnorePattern': '^_' }],
|
||||||
"@typescript-eslint/no-unused-vars": "error",
|
'@typescript-eslint/no-unused-vars': ['error', { 'argsIgnorePattern': '^_' }],
|
||||||
"no-constant-condition": 0,
|
'@typescript-eslint/explicit-member-accessibility': 'off',
|
||||||
"no-prototype-builtins": 0,
|
'no-constant-condition': 0,
|
||||||
|
'no-prototype-builtins': 0,
|
||||||
// This error is always a false positive so far since it detects
|
// This error is always a false positive so far since it detects
|
||||||
// possible race conditions in contexts where we know it cannot happen.
|
// possible race conditions in contexts where we know it cannot happen.
|
||||||
"require-atomic-updates": 0,
|
'require-atomic-updates': 0,
|
||||||
"prefer-const": ["error"],
|
'prefer-const': ['error'],
|
||||||
"no-var": ["error"],
|
'no-var': ['error'],
|
||||||
"no-new-func": ["error"],
|
'no-new-func': ['error'],
|
||||||
"import/prefer-default-export": ["error"],
|
'import/prefer-default-export': ['error'],
|
||||||
"import/first": ["error"],
|
'import/first': ['error'],
|
||||||
|
'no-array-constructor': ['error'],
|
||||||
|
'radix': ['error'],
|
||||||
|
|
||||||
|
// Warn only for now because fixing everything would take too much
|
||||||
|
// refactoring, but new code should try to stick to it.
|
||||||
|
'complexity': ['warn', { max: 10 }],
|
||||||
|
|
||||||
// Checks rules of Hooks
|
// Checks rules of Hooks
|
||||||
"react-hooks/rules-of-hooks": "error",
|
'react-hooks/rules-of-hooks': 'error',
|
||||||
// Checks effect dependencies
|
// Checks effect dependencies
|
||||||
// Disable because of this: https://github.com/facebook/react/issues/16265
|
// Disable because of this: https://github.com/facebook/react/issues/16265
|
||||||
// "react-hooks/exhaustive-deps": "warn",
|
// "react-hooks/exhaustive-deps": "warn",
|
||||||
@@ -70,43 +77,60 @@ module.exports = {
|
|||||||
// -------------------------------
|
// -------------------------------
|
||||||
// Formatting
|
// Formatting
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
"space-in-parens": ["error", "never"],
|
'space-in-parens': ['error', 'never'],
|
||||||
"space-infix-ops": ["error"],
|
'space-infix-ops': ['error'],
|
||||||
"curly": ["error", "multi-line", "consistent"],
|
'curly': ['error', 'multi-line', 'consistent'],
|
||||||
"semi": ["error", "always"],
|
'semi': ['error', 'always'],
|
||||||
"eol-last": ["error", "always"],
|
'eol-last': ['error', 'always'],
|
||||||
"quotes": ["error", "single"],
|
'quotes': ['error', 'single'],
|
||||||
"indent": ["error", "tab"],
|
'indent': ['error', 'tab'],
|
||||||
"comma-dangle": ["error", "always-multiline"],
|
'comma-dangle': ['error', {
|
||||||
"no-trailing-spaces": "error",
|
'arrays': 'always-multiline',
|
||||||
"linebreak-style": ["error", "unix"],
|
'objects': 'always-multiline',
|
||||||
"prefer-template": ["error"],
|
'imports': 'always-multiline',
|
||||||
"template-curly-spacing": ["error", "never"],
|
'exports': 'always-multiline',
|
||||||
"object-curly-spacing": ["error", "always"],
|
'functions': 'never',
|
||||||
"array-bracket-spacing": ["error", "never"],
|
|
||||||
"key-spacing": ["error", {
|
|
||||||
"beforeColon": false,
|
|
||||||
"afterColon": true,
|
|
||||||
"mode": "strict"
|
|
||||||
}],
|
}],
|
||||||
"block-spacing": ["error"],
|
'no-trailing-spaces': 'error',
|
||||||
"brace-style": ["error", "1tbs", { "allowSingleLine": true }],
|
'linebreak-style': ['error', 'unix'],
|
||||||
"no-spaced-func": ["error"],
|
'prefer-template': ['error'],
|
||||||
"func-call-spacing": ["error"],
|
'template-curly-spacing': ['error', 'never'],
|
||||||
"space-before-function-paren": ["error", {
|
'object-curly-spacing': ['error', 'always'],
|
||||||
"anonymous": "never",
|
'array-bracket-spacing': ['error', 'never'],
|
||||||
"named": "never",
|
'key-spacing': ['error', {
|
||||||
"asyncArrow": "always"
|
'beforeColon': false,
|
||||||
|
'afterColon': true,
|
||||||
|
'mode': 'strict',
|
||||||
}],
|
}],
|
||||||
"multiline-comment-style": ["error", "separate-lines"],
|
'block-spacing': ['error'],
|
||||||
"space-before-blocks": "error",
|
'brace-style': ['error', '1tbs', { 'allowSingleLine': true }],
|
||||||
"spaced-comment": ["error", "always"],
|
'no-spaced-func': ['error'],
|
||||||
"keyword-spacing": ["error", { "before": true, "after": true }],
|
'func-call-spacing': ['error'],
|
||||||
|
'space-before-function-paren': ['error', {
|
||||||
|
'anonymous': 'never',
|
||||||
|
'named': 'never',
|
||||||
|
'asyncArrow': 'always',
|
||||||
|
}],
|
||||||
|
'multiline-comment-style': ['error', 'separate-lines'],
|
||||||
|
'space-before-blocks': 'error',
|
||||||
|
'spaced-comment': ['error', 'always'],
|
||||||
|
'keyword-spacing': ['error', { 'before': true, 'after': true }],
|
||||||
},
|
},
|
||||||
"plugins": [
|
'plugins': [
|
||||||
"react",
|
'react',
|
||||||
"@typescript-eslint",
|
'@typescript-eslint',
|
||||||
"react-hooks",
|
'react-hooks',
|
||||||
"import",
|
'import',
|
||||||
|
],
|
||||||
|
'overrides': [
|
||||||
|
{
|
||||||
|
// enable the rule specifically for TypeScript files
|
||||||
|
'files': ['*.ts', '*.tsx'],
|
||||||
|
'rules': {
|
||||||
|
// Warn only because it would make it difficult to convert JS classes to TypeScript, unless we
|
||||||
|
// make everything public which is not great. New code however should specify member accessibility.
|
||||||
|
'@typescript-eslint/explicit-member-accessibility': ['warn'],
|
||||||
|
},
|
||||||
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
2
.github/PULL_REQUEST_TEMPLATE
vendored
2
.github/PULL_REQUEST_TEMPLATE
vendored
@@ -20,6 +20,6 @@ If it's not related to any platform (such as a translation, change to the docume
|
|||||||
|
|
||||||
Then please append the issue that you've addressed or fixed. Use "Resolves #123" for new features or improvements and "Fixes #123" for bug fixes.
|
Then please append the issue that you've addressed or fixed. Use "Resolves #123" for new features or improvements and "Fixes #123" for bug fixes.
|
||||||
|
|
||||||
AND PLEASE READ THE GUIDE: https://github.com/laurent22/joplin/blob/master/CONTRIBUTING.md
|
AND PLEASE READ THE GUIDE: https://github.com/laurent22/joplin/blob/dev/CONTRIBUTING.md
|
||||||
|
|
||||||
-->
|
-->
|
||||||
|
3
.github/stale.yml
vendored
3
.github/stale.yml
vendored
@@ -1,6 +1,6 @@
|
|||||||
# Configuration for probot-stale - https://github.com/probot/stale
|
# Configuration for probot-stale - https://github.com/probot/stale
|
||||||
# Number of days of inactivity before an issue becomes stale
|
# Number of days of inactivity before an issue becomes stale
|
||||||
daysUntilStale: 45
|
daysUntilStale: 30
|
||||||
# Number of days of inactivity before a stale issue is closed
|
# Number of days of inactivity before a stale issue is closed
|
||||||
daysUntilClose: 7
|
daysUntilClose: 7
|
||||||
# Issues with these labels will never be considered stale
|
# Issues with these labels will never be considered stale
|
||||||
@@ -9,6 +9,7 @@ exemptLabels:
|
|||||||
- "upstream"
|
- "upstream"
|
||||||
- "backlog"
|
- "backlog"
|
||||||
- "high"
|
- "high"
|
||||||
|
- "spec"
|
||||||
# Label to use when marking an issue as stale
|
# Label to use when marking an issue as stale
|
||||||
staleLabel: stale
|
staleLabel: stale
|
||||||
# Comment to post when marking an issue as stale. Set to `false` to disable
|
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||||
|
255
.gitignore
vendored
255
.gitignore
vendored
@@ -37,6 +37,7 @@ _mydocs
|
|||||||
Assets/DownloadBadges*.psd
|
Assets/DownloadBadges*.psd
|
||||||
node_modules
|
node_modules
|
||||||
Tools/github_oauth_token.txt
|
Tools/github_oauth_token.txt
|
||||||
|
CliClient/tests/support/amazon-s3-auth.json
|
||||||
_releases
|
_releases
|
||||||
ReactNativeClient/lib/csstojs/
|
ReactNativeClient/lib/csstojs/
|
||||||
ReactNativeClient/lib/rnInjectedJs/
|
ReactNativeClient/lib/rnInjectedJs/
|
||||||
@@ -49,16 +50,83 @@ joplin-webclipper-source.zip
|
|||||||
Tools/commit_hook.txt
|
Tools/commit_hook.txt
|
||||||
.vscode/*
|
.vscode/*
|
||||||
*.map
|
*.map
|
||||||
|
ReactNativeClient/lib/sql-extensions/spellfix.so
|
||||||
|
ReactNativeClient/lib/sql-extensions/spellfix.dylib
|
||||||
|
CliClient/build/
|
||||||
|
plugin_types/
|
||||||
|
|
||||||
# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD
|
# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD
|
||||||
|
CliClient/app/LinkSelector.js
|
||||||
|
CliClient/app/services/plugins/PluginRunner.js
|
||||||
|
CliClient/tests/fsDriver.js
|
||||||
|
CliClient/tests/InMemoryCache.js
|
||||||
|
CliClient/tests/MdToHtml.js
|
||||||
|
CliClient/tests/models_Setting.js
|
||||||
|
CliClient/tests/services_CommandService.js
|
||||||
|
CliClient/tests/services_InteropService.js
|
||||||
|
CliClient/tests/services_keychainService.js
|
||||||
|
CliClient/tests/services_PluginService.js
|
||||||
|
CliClient/tests/services_rest_Api.js
|
||||||
|
CliClient/tests/services/plugins/api/JoplinSetting.js
|
||||||
|
CliClient/tests/services/plugins/sandboxProxy.js
|
||||||
|
CliClient/tests/synchronizer_LockHandler.js
|
||||||
|
CliClient/tests/synchronizer_MigrationHandler.js
|
||||||
|
ElectronClient/app.js
|
||||||
|
ElectronClient/bridge.js
|
||||||
|
ElectronClient/commands/copyDevCommand.js
|
||||||
|
ElectronClient/commands/focusElement.js
|
||||||
|
ElectronClient/commands/openProfileDirectory.js
|
||||||
|
ElectronClient/commands/startExternalEditing.js
|
||||||
|
ElectronClient/commands/stopExternalEditing.js
|
||||||
|
ElectronClient/commands/toggleExternalEditing.js
|
||||||
|
ElectronClient/ElectronAppWrapper.js
|
||||||
|
ElectronClient/global.d.js
|
||||||
|
ElectronClient/gui/Button/Button.js
|
||||||
|
ElectronClient/gui/ConfigScreen/ButtonBar.js
|
||||||
|
ElectronClient/gui/ConfigScreen/ConfigScreen.js
|
||||||
|
ElectronClient/gui/ConfigScreen/SideBar.js
|
||||||
|
ElectronClient/gui/DropboxLoginScreen.js
|
||||||
|
ElectronClient/gui/ErrorBoundary.js
|
||||||
|
ElectronClient/gui/KeymapConfig/KeymapConfigScreen.js
|
||||||
|
ElectronClient/gui/KeymapConfig/ShortcutRecorder.js
|
||||||
|
ElectronClient/gui/KeymapConfig/styles/index.js
|
||||||
|
ElectronClient/gui/KeymapConfig/utils/getLabel.js
|
||||||
|
ElectronClient/gui/KeymapConfig/utils/useCommandStatus.js
|
||||||
|
ElectronClient/gui/KeymapConfig/utils/useKeymap.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/editAlarm.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/exportPdf.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/hideModalMessage.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/moveToFolder.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/newFolder.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/newNote.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/newSubFolder.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/newTodo.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/openFolder.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/openNote.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/openTag.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/print.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/renameFolder.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/renameTag.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/search.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/selectTemplate.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/setTags.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/showModalMessage.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/showNoteContentProperties.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/showNoteProperties.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/showShareNoteDialog.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/toggleEditors.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/toggleNoteList.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/toggleSideBar.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/toggleVisiblePanes.js
|
||||||
|
ElectronClient/gui/MainScreen/MainScreen.js
|
||||||
|
ElectronClient/gui/MenuBar.js
|
||||||
ElectronClient/gui/MultiNoteActions.js
|
ElectronClient/gui/MultiNoteActions.js
|
||||||
ElectronClient/gui/NoteContentPropertiesDialog.js
|
ElectronClient/gui/NoteContentPropertiesDialog.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/AceEditor.js
|
ElectronClient/gui/NoteEditor/commands/editorCommandDeclarations.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/styles/index.js
|
ElectronClient/gui/NoteEditor/commands/focusElementNoteBody.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/Toolbar.js
|
ElectronClient/gui/NoteEditor/commands/focusElementNoteTitle.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/utils/index.js
|
ElectronClient/gui/NoteEditor/commands/showLocalSearch.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/utils/types.js
|
ElectronClient/gui/NoteEditor/commands/showRevisions.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/AceEditor/utils/useListIdent.js
|
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.js
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Editor.js
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Editor.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/styles/index.js
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/styles/index.js
|
||||||
@@ -66,9 +134,13 @@ ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.js
|
|||||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/index.js
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/index.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useKeymap.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.js
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.js
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.js
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/styles/index.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js
|
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js
|
||||||
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js
|
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js
|
||||||
ElectronClient/gui/NoteEditor/NoteEditor.js
|
ElectronClient/gui/NoteEditor/NoteEditor.js
|
||||||
@@ -78,34 +150,203 @@ ElectronClient/gui/NoteEditor/utils/index.js
|
|||||||
ElectronClient/gui/NoteEditor/utils/resourceHandling.js
|
ElectronClient/gui/NoteEditor/utils/resourceHandling.js
|
||||||
ElectronClient/gui/NoteEditor/utils/types.js
|
ElectronClient/gui/NoteEditor/utils/types.js
|
||||||
ElectronClient/gui/NoteEditor/utils/useDropHandler.js
|
ElectronClient/gui/NoteEditor/utils/useDropHandler.js
|
||||||
|
ElectronClient/gui/NoteEditor/utils/useFolder.js
|
||||||
ElectronClient/gui/NoteEditor/utils/useFormNote.js
|
ElectronClient/gui/NoteEditor/utils/useFormNote.js
|
||||||
ElectronClient/gui/NoteEditor/utils/useMarkupToHtml.js
|
ElectronClient/gui/NoteEditor/utils/useMarkupToHtml.js
|
||||||
ElectronClient/gui/NoteEditor/utils/useMessageHandler.js
|
ElectronClient/gui/NoteEditor/utils/useMessageHandler.js
|
||||||
ElectronClient/gui/NoteEditor/utils/useNoteSearchBar.js
|
ElectronClient/gui/NoteEditor/utils/useNoteSearchBar.js
|
||||||
|
ElectronClient/gui/NoteEditor/utils/usePluginServiceRegistration.js
|
||||||
ElectronClient/gui/NoteEditor/utils/useSearchMarkers.js
|
ElectronClient/gui/NoteEditor/utils/useSearchMarkers.js
|
||||||
ElectronClient/gui/NoteEditor/utils/useWindowCommandHandler.js
|
ElectronClient/gui/NoteEditor/utils/useWindowCommandHandler.js
|
||||||
|
ElectronClient/gui/NoteList/commands/focusElementNoteList.js
|
||||||
|
ElectronClient/gui/NoteList/NoteList.js
|
||||||
|
ElectronClient/gui/NoteListControls/commands/focusSearch.js
|
||||||
|
ElectronClient/gui/NoteListControls/NoteListControls.js
|
||||||
ElectronClient/gui/NoteListItem.js
|
ElectronClient/gui/NoteListItem.js
|
||||||
|
ElectronClient/gui/NoteTextViewer.js
|
||||||
ElectronClient/gui/NoteToolbar/NoteToolbar.js
|
ElectronClient/gui/NoteToolbar/NoteToolbar.js
|
||||||
|
ElectronClient/gui/OneDriveLoginScreen.js
|
||||||
|
ElectronClient/gui/ResizableLayout/hooks/useLayoutItemSizes.js
|
||||||
|
ElectronClient/gui/ResizableLayout/hooks/useWindowResizeEvent.js
|
||||||
|
ElectronClient/gui/ResizableLayout/ResizableLayout.js
|
||||||
ElectronClient/gui/ResourceScreen.js
|
ElectronClient/gui/ResourceScreen.js
|
||||||
|
ElectronClient/gui/Root_UpgradeSyncTarget.js
|
||||||
|
ElectronClient/gui/Root.js
|
||||||
|
ElectronClient/gui/SearchBar/hooks/useSearch.js
|
||||||
|
ElectronClient/gui/SearchBar/SearchBar.js
|
||||||
|
ElectronClient/gui/SearchBar/styles/index.js
|
||||||
ElectronClient/gui/ShareNoteDialog.js
|
ElectronClient/gui/ShareNoteDialog.js
|
||||||
|
ElectronClient/gui/SideBar/commands/focusElementSideBar.js
|
||||||
|
ElectronClient/gui/SideBar/SideBar.js
|
||||||
|
ElectronClient/gui/SideBar/styles/index.js
|
||||||
|
ElectronClient/gui/StatusScreen/StatusScreen.js
|
||||||
|
ElectronClient/gui/style/StyledInput.js
|
||||||
|
ElectronClient/gui/style/StyledTextInput.js
|
||||||
|
ElectronClient/gui/TagList.js
|
||||||
|
ElectronClient/gui/ToggleEditorsButton/styles/index.js
|
||||||
|
ElectronClient/gui/ToggleEditorsButton/ToggleEditorsButton.js
|
||||||
|
ElectronClient/gui/ToolbarBase.js
|
||||||
|
ElectronClient/gui/ToolbarButton/styles/index.js
|
||||||
|
ElectronClient/gui/ToolbarButton/ToolbarButton.js
|
||||||
|
ElectronClient/gui/utils/NoteListUtils.js
|
||||||
|
ElectronClient/InteropServiceHelper.js
|
||||||
|
ElectronClient/plugins/GotoAnything.js
|
||||||
|
ElectronClient/services/bridge.js
|
||||||
|
ElectronClient/services/commands/types.js
|
||||||
|
ElectronClient/services/plugins/hooks/useThemeCss.js
|
||||||
|
ElectronClient/services/plugins/hooks/useViewIsReady.js
|
||||||
|
ElectronClient/services/plugins/PlatformImplementation.js
|
||||||
|
ElectronClient/services/plugins/PluginRunner.js
|
||||||
|
ElectronClient/services/plugins/UserWebview.js
|
||||||
|
ElectronClient/services/plugins/UserWebviewDialog.js
|
||||||
|
ElectronClient/services/plugins/UserWebviewDialogButtonBar.js
|
||||||
ReactNativeClient/lib/AsyncActionQueue.js
|
ReactNativeClient/lib/AsyncActionQueue.js
|
||||||
|
ReactNativeClient/lib/BaseApplication.js
|
||||||
ReactNativeClient/lib/checkPermissions.js
|
ReactNativeClient/lib/checkPermissions.js
|
||||||
|
ReactNativeClient/lib/commands/historyBackward.js
|
||||||
|
ReactNativeClient/lib/commands/historyForward.js
|
||||||
|
ReactNativeClient/lib/commands/synchronize.js
|
||||||
|
ReactNativeClient/lib/components/BackButtonDialogBox.js
|
||||||
|
ReactNativeClient/lib/components/CameraView.js
|
||||||
|
ReactNativeClient/lib/components/NoteBodyViewer/hooks/useOnMessage.js
|
||||||
|
ReactNativeClient/lib/components/NoteBodyViewer/hooks/useOnResourceLongPress.js
|
||||||
|
ReactNativeClient/lib/components/NoteBodyViewer/hooks/useSource.js
|
||||||
|
ReactNativeClient/lib/components/NoteBodyViewer/NoteBodyViewer.js
|
||||||
|
ReactNativeClient/lib/components/screens/Note.js
|
||||||
|
ReactNativeClient/lib/components/screens/UpgradeSyncTargetScreen.js
|
||||||
|
ReactNativeClient/lib/components/SelectDateTimeDialog.js
|
||||||
|
ReactNativeClient/lib/errorUtils.js
|
||||||
|
ReactNativeClient/lib/eventManager.js
|
||||||
|
ReactNativeClient/lib/fs-driver-node.js
|
||||||
|
ReactNativeClient/lib/hooks/useEffectDebugger.js
|
||||||
ReactNativeClient/lib/hooks/useImperativeHandlerDebugger.js
|
ReactNativeClient/lib/hooks/useImperativeHandlerDebugger.js
|
||||||
ReactNativeClient/lib/hooks/usePrevious.js
|
ReactNativeClient/lib/hooks/usePrevious.js
|
||||||
|
ReactNativeClient/lib/hooks/usePropsDebugger.js
|
||||||
|
ReactNativeClient/lib/InMemoryCache.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MarkupToHtml.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml.js
|
||||||
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/checkbox.js
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/checkbox.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/code_inline.js
|
||||||
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fence.js
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fence.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fountain.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/highlight_keywords.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/html_image.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/image.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/katex.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/link_open.js
|
||||||
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.js
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.js
|
||||||
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/sanitize_html.js
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/sanitize_html.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/noteStyle.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/pathUtils.js
|
||||||
ReactNativeClient/lib/JoplinServerApi.js
|
ReactNativeClient/lib/JoplinServerApi.js
|
||||||
|
ReactNativeClient/lib/locale.js
|
||||||
|
ReactNativeClient/lib/Logger.js
|
||||||
|
ReactNativeClient/lib/markdownUtils.js
|
||||||
|
ReactNativeClient/lib/markupLanguageUtils.js
|
||||||
|
ReactNativeClient/lib/models/Alarm.js
|
||||||
|
ReactNativeClient/lib/models/Setting.js
|
||||||
|
ReactNativeClient/lib/ntpDate.js
|
||||||
|
ReactNativeClient/lib/path-utils.js
|
||||||
|
ReactNativeClient/lib/PoorManIntervals.js
|
||||||
|
ReactNativeClient/lib/reducer.js
|
||||||
|
ReactNativeClient/lib/services/AlarmService.js
|
||||||
|
ReactNativeClient/lib/services/AlarmServiceDriver.android.js
|
||||||
|
ReactNativeClient/lib/services/AlarmServiceDriver.ios.js
|
||||||
|
ReactNativeClient/lib/services/AlarmServiceDriverNode.js
|
||||||
|
ReactNativeClient/lib/services/BaseService.js
|
||||||
|
ReactNativeClient/lib/services/commands/commandsToMarkdownTable.js
|
||||||
|
ReactNativeClient/lib/services/commands/MenuUtils.js
|
||||||
|
ReactNativeClient/lib/services/commands/propsHaveChanged.js
|
||||||
|
ReactNativeClient/lib/services/commands/stateToWhenClauseContext.js
|
||||||
|
ReactNativeClient/lib/services/commands/ToolbarButtonUtils.js
|
||||||
|
ReactNativeClient/lib/services/CommandService.js
|
||||||
|
ReactNativeClient/lib/services/contextkey/contextkey.js
|
||||||
|
ReactNativeClient/lib/services/debug/populateDatabase.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Exporter_Base.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Exporter_Custom.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Exporter_Html.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Exporter_Jex.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Exporter_Md.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Exporter_Raw.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_Base.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_Custom.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToHtml.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToMd.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_Jex.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_Md.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_Raw.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService.js
|
||||||
|
ReactNativeClient/lib/services/interop/types.js
|
||||||
ReactNativeClient/lib/services/keychain/KeychainService.js
|
ReactNativeClient/lib/services/keychain/KeychainService.js
|
||||||
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.dummy.js
|
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.dummy.js
|
||||||
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.mobile.js
|
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.mobile.js
|
||||||
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.node.js
|
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.node.js
|
||||||
ReactNativeClient/lib/services/keychain/KeychainServiceDriverBase.js
|
ReactNativeClient/lib/services/keychain/KeychainServiceDriverBase.js
|
||||||
ReactNativeClient/lib/services/ResourceEditWatcher.js
|
ReactNativeClient/lib/services/KeymapService.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/Global.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/Joplin.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinCommands.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinData.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinFilters.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinInterop.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinPlugins.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinSettings.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinViews.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinViewsDialogs.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinViewsMenuItems.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinViewsMenus.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinViewsPanels.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinViewsToolbarButtons.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinWorkspace.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/types.js
|
||||||
|
ReactNativeClient/lib/services/plugins/BasePluginRunner.js
|
||||||
|
ReactNativeClient/lib/services/plugins/MenuController.js
|
||||||
|
ReactNativeClient/lib/services/plugins/MenuItemController.js
|
||||||
|
ReactNativeClient/lib/services/plugins/Plugin.js
|
||||||
|
ReactNativeClient/lib/services/plugins/PluginService.js
|
||||||
|
ReactNativeClient/lib/services/plugins/reducer.js
|
||||||
|
ReactNativeClient/lib/services/plugins/sandboxProxy.js
|
||||||
|
ReactNativeClient/lib/services/plugins/ToolbarButtonController.js
|
||||||
|
ReactNativeClient/lib/services/plugins/utils/contentScriptsToRendererRules.js
|
||||||
|
ReactNativeClient/lib/services/plugins/utils/createViewHandle.js
|
||||||
|
ReactNativeClient/lib/services/plugins/utils/executeSandboxCall.js
|
||||||
|
ReactNativeClient/lib/services/plugins/utils/manifestFromObject.js
|
||||||
|
ReactNativeClient/lib/services/plugins/utils/mapEventHandlersToIds.js
|
||||||
|
ReactNativeClient/lib/services/plugins/utils/types.js
|
||||||
|
ReactNativeClient/lib/services/plugins/ViewController.js
|
||||||
|
ReactNativeClient/lib/services/plugins/WebviewController.js
|
||||||
|
ReactNativeClient/lib/services/ResourceEditWatcher/index.js
|
||||||
|
ReactNativeClient/lib/services/ResourceEditWatcher/reducer.js
|
||||||
|
ReactNativeClient/lib/services/rest/actionApi.desktop.js
|
||||||
|
ReactNativeClient/lib/services/rest/Api.js
|
||||||
|
ReactNativeClient/lib/services/rest/errors.js
|
||||||
|
ReactNativeClient/lib/services/searchengine/filterParser.js
|
||||||
|
ReactNativeClient/lib/services/searchengine/queryBuilder.js
|
||||||
ReactNativeClient/lib/services/SettingUtils.js
|
ReactNativeClient/lib/services/SettingUtils.js
|
||||||
|
ReactNativeClient/lib/services/synchronizer/gui/useSyncTargetUpgrade.js
|
||||||
|
ReactNativeClient/lib/services/synchronizer/LockHandler.js
|
||||||
|
ReactNativeClient/lib/services/synchronizer/MigrationHandler.js
|
||||||
|
ReactNativeClient/lib/services/synchronizer/migrations/1.js
|
||||||
|
ReactNativeClient/lib/services/synchronizer/migrations/2.js
|
||||||
|
ReactNativeClient/lib/services/synchronizer/utils/types.js
|
||||||
|
ReactNativeClient/lib/services/UndoRedoService.js
|
||||||
|
ReactNativeClient/lib/services/WhenClause.js
|
||||||
ReactNativeClient/lib/ShareExtension.js
|
ReactNativeClient/lib/ShareExtension.js
|
||||||
ReactNativeClient/lib/shareHandler.js
|
ReactNativeClient/lib/shareHandler.js
|
||||||
|
ReactNativeClient/lib/shim.js
|
||||||
|
ReactNativeClient/lib/Synchronizer.js
|
||||||
|
ReactNativeClient/lib/theme.js
|
||||||
|
ReactNativeClient/lib/themes/aritimDark.js
|
||||||
|
ReactNativeClient/lib/themes/dark.js
|
||||||
|
ReactNativeClient/lib/themes/dracula.js
|
||||||
|
ReactNativeClient/lib/themes/light.js
|
||||||
|
ReactNativeClient/lib/themes/nord.js
|
||||||
|
ReactNativeClient/lib/themes/oledDark.js
|
||||||
|
ReactNativeClient/lib/themes/solarizedDark.js
|
||||||
|
ReactNativeClient/lib/themes/solarizedLight.js
|
||||||
|
ReactNativeClient/lib/themes/type.js
|
||||||
|
ReactNativeClient/lib/uuid.js
|
||||||
|
ReactNativeClient/lib/versionInfo.js
|
||||||
ReactNativeClient/PluginAssetsLoader.js
|
ReactNativeClient/PluginAssetsLoader.js
|
||||||
ReactNativeClient/setUpQuickActions.js
|
ReactNativeClient/setUpQuickActions.js
|
||||||
# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD
|
# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD
|
||||||
|
301
.ignore
Normal file
301
.ignore
Normal file
@@ -0,0 +1,301 @@
|
|||||||
|
# This is used by VSCode to ignore patterns during search.
|
||||||
|
# Before they were in joplin.code-workspace, under the `files.exclude` key
|
||||||
|
# but it eventually reached the limit with ENAMETOOLONG error.
|
||||||
|
#
|
||||||
|
# https://github.com/microsoft/vscode/issues/94718
|
||||||
|
|
||||||
|
# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD
|
||||||
|
CliClient/app/LinkSelector.js
|
||||||
|
CliClient/app/services/plugins/PluginRunner.js
|
||||||
|
CliClient/tests/fsDriver.js
|
||||||
|
CliClient/tests/InMemoryCache.js
|
||||||
|
CliClient/tests/MdToHtml.js
|
||||||
|
CliClient/tests/models_Setting.js
|
||||||
|
CliClient/tests/services_CommandService.js
|
||||||
|
CliClient/tests/services_InteropService.js
|
||||||
|
CliClient/tests/services_keychainService.js
|
||||||
|
CliClient/tests/services_PluginService.js
|
||||||
|
CliClient/tests/services_rest_Api.js
|
||||||
|
CliClient/tests/services/plugins/api/JoplinSetting.js
|
||||||
|
CliClient/tests/services/plugins/sandboxProxy.js
|
||||||
|
CliClient/tests/synchronizer_LockHandler.js
|
||||||
|
CliClient/tests/synchronizer_MigrationHandler.js
|
||||||
|
ElectronClient/app.js
|
||||||
|
ElectronClient/bridge.js
|
||||||
|
ElectronClient/commands/copyDevCommand.js
|
||||||
|
ElectronClient/commands/focusElement.js
|
||||||
|
ElectronClient/commands/openProfileDirectory.js
|
||||||
|
ElectronClient/commands/startExternalEditing.js
|
||||||
|
ElectronClient/commands/stopExternalEditing.js
|
||||||
|
ElectronClient/commands/toggleExternalEditing.js
|
||||||
|
ElectronClient/ElectronAppWrapper.js
|
||||||
|
ElectronClient/global.d.js
|
||||||
|
ElectronClient/gui/Button/Button.js
|
||||||
|
ElectronClient/gui/ConfigScreen/ButtonBar.js
|
||||||
|
ElectronClient/gui/ConfigScreen/ConfigScreen.js
|
||||||
|
ElectronClient/gui/ConfigScreen/SideBar.js
|
||||||
|
ElectronClient/gui/DropboxLoginScreen.js
|
||||||
|
ElectronClient/gui/ErrorBoundary.js
|
||||||
|
ElectronClient/gui/KeymapConfig/KeymapConfigScreen.js
|
||||||
|
ElectronClient/gui/KeymapConfig/ShortcutRecorder.js
|
||||||
|
ElectronClient/gui/KeymapConfig/styles/index.js
|
||||||
|
ElectronClient/gui/KeymapConfig/utils/getLabel.js
|
||||||
|
ElectronClient/gui/KeymapConfig/utils/useCommandStatus.js
|
||||||
|
ElectronClient/gui/KeymapConfig/utils/useKeymap.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/editAlarm.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/exportPdf.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/hideModalMessage.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/moveToFolder.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/newFolder.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/newNote.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/newSubFolder.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/newTodo.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/openFolder.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/openNote.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/openTag.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/print.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/renameFolder.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/renameTag.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/search.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/selectTemplate.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/setTags.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/showModalMessage.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/showNoteContentProperties.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/showNoteProperties.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/showShareNoteDialog.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/toggleEditors.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/toggleNoteList.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/toggleSideBar.js
|
||||||
|
ElectronClient/gui/MainScreen/commands/toggleVisiblePanes.js
|
||||||
|
ElectronClient/gui/MainScreen/MainScreen.js
|
||||||
|
ElectronClient/gui/MenuBar.js
|
||||||
|
ElectronClient/gui/MultiNoteActions.js
|
||||||
|
ElectronClient/gui/NoteContentPropertiesDialog.js
|
||||||
|
ElectronClient/gui/NoteEditor/commands/editorCommandDeclarations.js
|
||||||
|
ElectronClient/gui/NoteEditor/commands/focusElementNoteBody.js
|
||||||
|
ElectronClient/gui/NoteEditor/commands/focusElementNoteTitle.js
|
||||||
|
ElectronClient/gui/NoteEditor/commands/showLocalSearch.js
|
||||||
|
ElectronClient/gui/NoteEditor/commands/showRevisions.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Editor.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/styles/index.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/index.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useKeymap.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/styles/index.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js
|
||||||
|
ElectronClient/gui/NoteEditor/NoteEditor.js
|
||||||
|
ElectronClient/gui/NoteEditor/styles/index.js
|
||||||
|
ElectronClient/gui/NoteEditor/utils/contextMenu.js
|
||||||
|
ElectronClient/gui/NoteEditor/utils/index.js
|
||||||
|
ElectronClient/gui/NoteEditor/utils/resourceHandling.js
|
||||||
|
ElectronClient/gui/NoteEditor/utils/types.js
|
||||||
|
ElectronClient/gui/NoteEditor/utils/useDropHandler.js
|
||||||
|
ElectronClient/gui/NoteEditor/utils/useFolder.js
|
||||||
|
ElectronClient/gui/NoteEditor/utils/useFormNote.js
|
||||||
|
ElectronClient/gui/NoteEditor/utils/useMarkupToHtml.js
|
||||||
|
ElectronClient/gui/NoteEditor/utils/useMessageHandler.js
|
||||||
|
ElectronClient/gui/NoteEditor/utils/useNoteSearchBar.js
|
||||||
|
ElectronClient/gui/NoteEditor/utils/usePluginServiceRegistration.js
|
||||||
|
ElectronClient/gui/NoteEditor/utils/useSearchMarkers.js
|
||||||
|
ElectronClient/gui/NoteEditor/utils/useWindowCommandHandler.js
|
||||||
|
ElectronClient/gui/NoteList/commands/focusElementNoteList.js
|
||||||
|
ElectronClient/gui/NoteList/NoteList.js
|
||||||
|
ElectronClient/gui/NoteListControls/commands/focusSearch.js
|
||||||
|
ElectronClient/gui/NoteListControls/NoteListControls.js
|
||||||
|
ElectronClient/gui/NoteListItem.js
|
||||||
|
ElectronClient/gui/NoteTextViewer.js
|
||||||
|
ElectronClient/gui/NoteToolbar/NoteToolbar.js
|
||||||
|
ElectronClient/gui/OneDriveLoginScreen.js
|
||||||
|
ElectronClient/gui/ResizableLayout/hooks/useLayoutItemSizes.js
|
||||||
|
ElectronClient/gui/ResizableLayout/hooks/useWindowResizeEvent.js
|
||||||
|
ElectronClient/gui/ResizableLayout/ResizableLayout.js
|
||||||
|
ElectronClient/gui/ResourceScreen.js
|
||||||
|
ElectronClient/gui/Root_UpgradeSyncTarget.js
|
||||||
|
ElectronClient/gui/Root.js
|
||||||
|
ElectronClient/gui/SearchBar/hooks/useSearch.js
|
||||||
|
ElectronClient/gui/SearchBar/SearchBar.js
|
||||||
|
ElectronClient/gui/SearchBar/styles/index.js
|
||||||
|
ElectronClient/gui/ShareNoteDialog.js
|
||||||
|
ElectronClient/gui/SideBar/commands/focusElementSideBar.js
|
||||||
|
ElectronClient/gui/SideBar/SideBar.js
|
||||||
|
ElectronClient/gui/SideBar/styles/index.js
|
||||||
|
ElectronClient/gui/StatusScreen/StatusScreen.js
|
||||||
|
ElectronClient/gui/style/StyledInput.js
|
||||||
|
ElectronClient/gui/style/StyledTextInput.js
|
||||||
|
ElectronClient/gui/TagList.js
|
||||||
|
ElectronClient/gui/ToggleEditorsButton/styles/index.js
|
||||||
|
ElectronClient/gui/ToggleEditorsButton/ToggleEditorsButton.js
|
||||||
|
ElectronClient/gui/ToolbarBase.js
|
||||||
|
ElectronClient/gui/ToolbarButton/styles/index.js
|
||||||
|
ElectronClient/gui/ToolbarButton/ToolbarButton.js
|
||||||
|
ElectronClient/gui/utils/NoteListUtils.js
|
||||||
|
ElectronClient/InteropServiceHelper.js
|
||||||
|
ElectronClient/plugins/GotoAnything.js
|
||||||
|
ElectronClient/services/bridge.js
|
||||||
|
ElectronClient/services/commands/types.js
|
||||||
|
ElectronClient/services/plugins/hooks/useThemeCss.js
|
||||||
|
ElectronClient/services/plugins/hooks/useViewIsReady.js
|
||||||
|
ElectronClient/services/plugins/PlatformImplementation.js
|
||||||
|
ElectronClient/services/plugins/PluginRunner.js
|
||||||
|
ElectronClient/services/plugins/UserWebview.js
|
||||||
|
ElectronClient/services/plugins/UserWebviewDialog.js
|
||||||
|
ElectronClient/services/plugins/UserWebviewDialogButtonBar.js
|
||||||
|
ReactNativeClient/lib/AsyncActionQueue.js
|
||||||
|
ReactNativeClient/lib/BaseApplication.js
|
||||||
|
ReactNativeClient/lib/checkPermissions.js
|
||||||
|
ReactNativeClient/lib/commands/historyBackward.js
|
||||||
|
ReactNativeClient/lib/commands/historyForward.js
|
||||||
|
ReactNativeClient/lib/commands/synchronize.js
|
||||||
|
ReactNativeClient/lib/components/BackButtonDialogBox.js
|
||||||
|
ReactNativeClient/lib/components/CameraView.js
|
||||||
|
ReactNativeClient/lib/components/NoteBodyViewer/hooks/useOnMessage.js
|
||||||
|
ReactNativeClient/lib/components/NoteBodyViewer/hooks/useOnResourceLongPress.js
|
||||||
|
ReactNativeClient/lib/components/NoteBodyViewer/hooks/useSource.js
|
||||||
|
ReactNativeClient/lib/components/NoteBodyViewer/NoteBodyViewer.js
|
||||||
|
ReactNativeClient/lib/components/screens/Note.js
|
||||||
|
ReactNativeClient/lib/components/screens/UpgradeSyncTargetScreen.js
|
||||||
|
ReactNativeClient/lib/components/SelectDateTimeDialog.js
|
||||||
|
ReactNativeClient/lib/errorUtils.js
|
||||||
|
ReactNativeClient/lib/eventManager.js
|
||||||
|
ReactNativeClient/lib/fs-driver-node.js
|
||||||
|
ReactNativeClient/lib/hooks/useEffectDebugger.js
|
||||||
|
ReactNativeClient/lib/hooks/useImperativeHandlerDebugger.js
|
||||||
|
ReactNativeClient/lib/hooks/usePrevious.js
|
||||||
|
ReactNativeClient/lib/hooks/usePropsDebugger.js
|
||||||
|
ReactNativeClient/lib/InMemoryCache.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MarkupToHtml.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/checkbox.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/code_inline.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fence.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fountain.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/highlight_keywords.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/html_image.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/image.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/katex.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/link_open.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/sanitize_html.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/noteStyle.js
|
||||||
|
ReactNativeClient/lib/joplin-renderer/pathUtils.js
|
||||||
|
ReactNativeClient/lib/JoplinServerApi.js
|
||||||
|
ReactNativeClient/lib/locale.js
|
||||||
|
ReactNativeClient/lib/Logger.js
|
||||||
|
ReactNativeClient/lib/markdownUtils.js
|
||||||
|
ReactNativeClient/lib/markupLanguageUtils.js
|
||||||
|
ReactNativeClient/lib/models/Alarm.js
|
||||||
|
ReactNativeClient/lib/models/Setting.js
|
||||||
|
ReactNativeClient/lib/ntpDate.js
|
||||||
|
ReactNativeClient/lib/path-utils.js
|
||||||
|
ReactNativeClient/lib/PoorManIntervals.js
|
||||||
|
ReactNativeClient/lib/reducer.js
|
||||||
|
ReactNativeClient/lib/services/AlarmService.js
|
||||||
|
ReactNativeClient/lib/services/AlarmServiceDriver.android.js
|
||||||
|
ReactNativeClient/lib/services/AlarmServiceDriver.ios.js
|
||||||
|
ReactNativeClient/lib/services/AlarmServiceDriverNode.js
|
||||||
|
ReactNativeClient/lib/services/BaseService.js
|
||||||
|
ReactNativeClient/lib/services/commands/commandsToMarkdownTable.js
|
||||||
|
ReactNativeClient/lib/services/commands/MenuUtils.js
|
||||||
|
ReactNativeClient/lib/services/commands/propsHaveChanged.js
|
||||||
|
ReactNativeClient/lib/services/commands/stateToWhenClauseContext.js
|
||||||
|
ReactNativeClient/lib/services/commands/ToolbarButtonUtils.js
|
||||||
|
ReactNativeClient/lib/services/CommandService.js
|
||||||
|
ReactNativeClient/lib/services/contextkey/contextkey.js
|
||||||
|
ReactNativeClient/lib/services/debug/populateDatabase.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Exporter_Base.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Exporter_Custom.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Exporter_Html.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Exporter_Jex.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Exporter_Md.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Exporter_Raw.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_Base.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_Custom.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToHtml.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToMd.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_Jex.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_Md.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService_Importer_Raw.js
|
||||||
|
ReactNativeClient/lib/services/interop/InteropService.js
|
||||||
|
ReactNativeClient/lib/services/interop/types.js
|
||||||
|
ReactNativeClient/lib/services/keychain/KeychainService.js
|
||||||
|
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.dummy.js
|
||||||
|
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.mobile.js
|
||||||
|
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.node.js
|
||||||
|
ReactNativeClient/lib/services/keychain/KeychainServiceDriverBase.js
|
||||||
|
ReactNativeClient/lib/services/KeymapService.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/Global.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/Joplin.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinCommands.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinData.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinFilters.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinInterop.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinPlugins.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinSettings.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinViews.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinViewsDialogs.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinViewsMenuItems.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinViewsMenus.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinViewsPanels.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinViewsToolbarButtons.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/JoplinWorkspace.js
|
||||||
|
ReactNativeClient/lib/services/plugins/api/types.js
|
||||||
|
ReactNativeClient/lib/services/plugins/BasePluginRunner.js
|
||||||
|
ReactNativeClient/lib/services/plugins/MenuController.js
|
||||||
|
ReactNativeClient/lib/services/plugins/MenuItemController.js
|
||||||
|
ReactNativeClient/lib/services/plugins/Plugin.js
|
||||||
|
ReactNativeClient/lib/services/plugins/PluginService.js
|
||||||
|
ReactNativeClient/lib/services/plugins/reducer.js
|
||||||
|
ReactNativeClient/lib/services/plugins/sandboxProxy.js
|
||||||
|
ReactNativeClient/lib/services/plugins/ToolbarButtonController.js
|
||||||
|
ReactNativeClient/lib/services/plugins/utils/contentScriptsToRendererRules.js
|
||||||
|
ReactNativeClient/lib/services/plugins/utils/createViewHandle.js
|
||||||
|
ReactNativeClient/lib/services/plugins/utils/executeSandboxCall.js
|
||||||
|
ReactNativeClient/lib/services/plugins/utils/manifestFromObject.js
|
||||||
|
ReactNativeClient/lib/services/plugins/utils/mapEventHandlersToIds.js
|
||||||
|
ReactNativeClient/lib/services/plugins/utils/types.js
|
||||||
|
ReactNativeClient/lib/services/plugins/ViewController.js
|
||||||
|
ReactNativeClient/lib/services/plugins/WebviewController.js
|
||||||
|
ReactNativeClient/lib/services/ResourceEditWatcher/index.js
|
||||||
|
ReactNativeClient/lib/services/ResourceEditWatcher/reducer.js
|
||||||
|
ReactNativeClient/lib/services/rest/actionApi.desktop.js
|
||||||
|
ReactNativeClient/lib/services/rest/Api.js
|
||||||
|
ReactNativeClient/lib/services/rest/errors.js
|
||||||
|
ReactNativeClient/lib/services/searchengine/filterParser.js
|
||||||
|
ReactNativeClient/lib/services/searchengine/queryBuilder.js
|
||||||
|
ReactNativeClient/lib/services/SettingUtils.js
|
||||||
|
ReactNativeClient/lib/services/synchronizer/gui/useSyncTargetUpgrade.js
|
||||||
|
ReactNativeClient/lib/services/synchronizer/LockHandler.js
|
||||||
|
ReactNativeClient/lib/services/synchronizer/MigrationHandler.js
|
||||||
|
ReactNativeClient/lib/services/synchronizer/migrations/1.js
|
||||||
|
ReactNativeClient/lib/services/synchronizer/migrations/2.js
|
||||||
|
ReactNativeClient/lib/services/synchronizer/utils/types.js
|
||||||
|
ReactNativeClient/lib/services/UndoRedoService.js
|
||||||
|
ReactNativeClient/lib/services/WhenClause.js
|
||||||
|
ReactNativeClient/lib/ShareExtension.js
|
||||||
|
ReactNativeClient/lib/shareHandler.js
|
||||||
|
ReactNativeClient/lib/shim.js
|
||||||
|
ReactNativeClient/lib/Synchronizer.js
|
||||||
|
ReactNativeClient/lib/theme.js
|
||||||
|
ReactNativeClient/lib/themes/aritimDark.js
|
||||||
|
ReactNativeClient/lib/themes/dark.js
|
||||||
|
ReactNativeClient/lib/themes/dracula.js
|
||||||
|
ReactNativeClient/lib/themes/light.js
|
||||||
|
ReactNativeClient/lib/themes/nord.js
|
||||||
|
ReactNativeClient/lib/themes/oledDark.js
|
||||||
|
ReactNativeClient/lib/themes/solarizedDark.js
|
||||||
|
ReactNativeClient/lib/themes/solarizedLight.js
|
||||||
|
ReactNativeClient/lib/themes/type.js
|
||||||
|
ReactNativeClient/lib/uuid.js
|
||||||
|
ReactNativeClient/lib/versionInfo.js
|
||||||
|
ReactNativeClient/PluginAssetsLoader.js
|
||||||
|
ReactNativeClient/setUpQuickActions.js
|
||||||
|
# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD
|
@@ -9,6 +9,7 @@ rvm: 2.3.3
|
|||||||
branches:
|
branches:
|
||||||
only:
|
only:
|
||||||
- master
|
- master
|
||||||
|
- dev
|
||||||
- /^v\d+\.\d+(\.\d+)?(-\S*)?$/
|
- /^v\d+\.\d+(\.\d+)?(-\S*)?$/
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
@@ -69,7 +70,7 @@ script:
|
|||||||
# and that would break the desktop release.
|
# and that would break the desktop release.
|
||||||
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
|
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
|
||||||
cd CliClient
|
cd CliClient
|
||||||
npm run test
|
npm run test-ci
|
||||||
testResult=$?
|
testResult=$?
|
||||||
if [ $testResult -ne 0 ]; then
|
if [ $testResult -ne 0 ]; then
|
||||||
exit $testResult
|
exit $testResult
|
||||||
|
11
BUILD.md
11
BUILD.md
@@ -11,6 +11,7 @@ Note that all the applications share the same library, which, for historical rea
|
|||||||
- macOS, Linux: Install rsync - https://nodejs.org/en/
|
- macOS, Linux: Install rsync - https://nodejs.org/en/
|
||||||
- macOS: Install Cocoapods - `brew install cocoapods`
|
- macOS: Install Cocoapods - `brew install cocoapods`
|
||||||
- Windows: Install Windows Build Tools - `npm install -g windows-build-tools`
|
- Windows: Install Windows Build Tools - `npm install -g windows-build-tools`
|
||||||
|
- Linux: Install dependencies - `sudo apt install libnss3 libsecret-1-dev`
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
@@ -25,6 +26,8 @@ Then you can test the various applications:
|
|||||||
cd ElectronClient
|
cd ElectronClient
|
||||||
npm start
|
npm start
|
||||||
|
|
||||||
|
You can also run it under WSL 2. To do so, [follow these instructions](https://www.beekeeperstudio.io/blog/building-electron-windows-ubuntu-wsl2) to setup your environment.
|
||||||
|
|
||||||
## Testing the Terminal application
|
## Testing the Terminal application
|
||||||
|
|
||||||
cd CliClient
|
cd CliClient
|
||||||
@@ -70,6 +73,8 @@ You can specify additional parameters when running the desktop or CLI applicatio
|
|||||||
|
|
||||||
Most of the application is written in JavaScript, however new classes and files should generally be written in [TypeScript](https://www.typescriptlang.org/). All TypeScript files are generated next to the .ts or .tsx file. So for example, if there's a file "lib/MyClass.ts", there will be a generated "lib/MyClass.js" next to it. It is implemented that way as it requires minimal changes to integrate TypeScript in the existing JavaScript code base.
|
Most of the application is written in JavaScript, however new classes and files should generally be written in [TypeScript](https://www.typescriptlang.org/). All TypeScript files are generated next to the .ts or .tsx file. So for example, if there's a file "lib/MyClass.ts", there will be a generated "lib/MyClass.js" next to it. It is implemented that way as it requires minimal changes to integrate TypeScript in the existing JavaScript code base.
|
||||||
|
|
||||||
|
In the current setup, `tsc` is executed from the root of the project, and will compile everything in CliClient, ElectronClient, etc. This is more convenient to have just one place to compile everything, and it also means there's only one watch command to run. However, one drawback is that TypeScript doesn't find types defined in node_modules folders in sub-directories. For example, if you install `immer` in ElectronClient, then try to use the package, TypeScript will report that it cannot find this module. In theory using `typeRoots`, it should be possible to make it find the right modules but it doesn't seem to work in this case. Currently the workaround is to install any such package at the root of the project. By doing so, TypeScript will find the type definitions and compilation will work. It's not ideal since the module is installed at the root even though it's not used, but for now that will work.
|
||||||
|
|
||||||
## Hot reload
|
## Hot reload
|
||||||
|
|
||||||
If you'd like to auto-reload the desktop app on changes rather than having to quit and restart it manually each time, you can use [watchman-make](https://facebook.github.io/watchman/docs/watchman-make.html):
|
If you'd like to auto-reload the desktop app on changes rather than having to quit and restart it manually each time, you can use [watchman-make](https://facebook.github.io/watchman/docs/watchman-make.html):
|
||||||
@@ -85,6 +90,10 @@ It still requires you to quit the application each time you want it to rebuild,
|
|||||||
2. Switch to the Electron app and <kbd>cmd</kbd>+<kbd>Q</kbd> to quit it.
|
2. Switch to the Electron app and <kbd>cmd</kbd>+<kbd>Q</kbd> to quit it.
|
||||||
3. `watchman` immediately restarts the app for you (whereas usually you'd have to switch back to the terminal, type `"npm start"`, and hit enter).
|
3. `watchman` immediately restarts the app for you (whereas usually you'd have to switch back to the terminal, type `"npm start"`, and hit enter).
|
||||||
|
|
||||||
|
# Updating Markdown renderer packages
|
||||||
|
|
||||||
|
The Markdown renderer is located under ReactNativeClient/lib/joplin-renderer. Whenever updating one of its dependencies, such as Mermaid or Katex, please run `npm run buildAssets` to make sure all assets such as fonts or CSS files are deployed correctly.
|
||||||
|
|
||||||
# Troubleshooting
|
# Troubleshooting
|
||||||
|
|
||||||
Please read for the [Build Troubleshooting Document](https://github.com/laurent22/joplin/blob/master/readme/build_troubleshooting.md) for various tips on how to get the build working.
|
Please read for the [Build Troubleshooting Document](https://github.com/laurent22/joplin/blob/dev/readme/build_troubleshooting.md) for various tips on how to get the build working.
|
@@ -36,8 +36,9 @@ If you want to start contributing to the project's code, please follow these gui
|
|||||||
- Before adding a new feature, ask about it in the [Github Issue Tracker](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue) or the [Joplin Forum](https://discourse.joplinapp.org/), or check if existing discussions exist to make sure the new functionality is desired.
|
- Before adding a new feature, ask about it in the [Github Issue Tracker](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue) or the [Joplin Forum](https://discourse.joplinapp.org/), or check if existing discussions exist to make sure the new functionality is desired.
|
||||||
- **Changes that will consist in more than 50 lines of code should be discussed the [Joplin Forum](https://discourse.joplinapp.org/)**, so that you don't spend too much time implementing something that might not be accepted.
|
- **Changes that will consist in more than 50 lines of code should be discussed the [Joplin Forum](https://discourse.joplinapp.org/)**, so that you don't spend too much time implementing something that might not be accepted.
|
||||||
- All the applications share the same backend (database, synchronisation, settings, models, business logic, etc.) so if you change something in the backend in one app, makes sure it still work in the other apps. Usually it does, but keep this in mind.
|
- All the applications share the same backend (database, synchronisation, settings, models, business logic, etc.) so if you change something in the backend in one app, makes sure it still work in the other apps. Usually it does, but keep this in mind.
|
||||||
|
- Pull requests that make many changes using an automated tool, like for spell fixing, styling, etc. will not be accepted. An exception would be if the changes have been discussed in the forum and someone has agreed to review **and test** the pull request.
|
||||||
|
|
||||||
Building the apps is relatively easy - please [see the build instructions](https://github.com/laurent22/joplin/blob/master/BUILD.md) for more details.
|
Building the apps is relatively easy - please [see the build instructions](https://github.com/laurent22/joplin/blob/dev/BUILD.md) for more details.
|
||||||
|
|
||||||
## Coding style
|
## Coding style
|
||||||
|
|
||||||
|
@@ -1,13 +1,13 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
"overrides": [
|
'overrides': [
|
||||||
{
|
{
|
||||||
"files": ["tests/**/*.js"],
|
'files': ['tests/**/*.js'],
|
||||||
'rules': {
|
'rules': {
|
||||||
// Ignore all unused function arguments, because in some
|
// Ignore all unused function arguments, because in some
|
||||||
// case they are kept to indicate the function signature.
|
// case they are kept to indicate the function signature.
|
||||||
"no-unused-vars": ["error", { "argsIgnorePattern": ".*" }],
|
'no-unused-vars': ['error', { 'argsIgnorePattern': '.*' }],
|
||||||
"@typescript-eslint/no-unused-vars": 0,
|
'@typescript-eslint/no-unused-vars': 0,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
5
CliClient/.gitignore
vendored
5
CliClient/.gitignore
vendored
@@ -20,4 +20,7 @@ out.txt
|
|||||||
linkToLocal.sh
|
linkToLocal.sh
|
||||||
yarn-error.log
|
yarn-error.log
|
||||||
tests/support/dropbox-auth.txt
|
tests/support/dropbox-auth.txt
|
||||||
build/
|
tests/support/nextcloud-auth.json
|
||||||
|
tests/support/onedrive-auth.txt
|
||||||
|
build/
|
||||||
|
patches/
|
134
CliClient/app/LinkSelector.ts
Normal file
134
CliClient/app/LinkSelector.ts
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
const open = require('open');
|
||||||
|
interface LinkStoreEntry {
|
||||||
|
link: string;
|
||||||
|
noteX: number;
|
||||||
|
noteY: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
class LinkSelector {
|
||||||
|
noteId_: string;
|
||||||
|
scrollTop_: number;
|
||||||
|
renderedText_: string;
|
||||||
|
currentLinkIndex_: number;
|
||||||
|
linkStore_: LinkStoreEntry[];
|
||||||
|
linkRegex_: RegExp;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this.noteId_ = null;
|
||||||
|
this.scrollTop_ = null; // used so 'o' won't open unhighlighted link after scrolling
|
||||||
|
this.renderedText_ = null;
|
||||||
|
this.currentLinkIndex_ = null;
|
||||||
|
this.linkStore_ = null;
|
||||||
|
this.linkRegex_ = /http:\/\/[0-9.]+:[0-9]+\/[0-9]+/g;
|
||||||
|
}
|
||||||
|
|
||||||
|
get link(): string | null {
|
||||||
|
if (this.currentLinkIndex_ === null) return null;
|
||||||
|
return this.linkStore_[this.currentLinkIndex_].link;
|
||||||
|
}
|
||||||
|
|
||||||
|
get noteX(): number | null {
|
||||||
|
if (this.currentLinkIndex_ === null) return null;
|
||||||
|
return this.linkStore_[this.currentLinkIndex_].noteX;
|
||||||
|
}
|
||||||
|
|
||||||
|
get noteY(): number | null {
|
||||||
|
if (this.currentLinkIndex_ === null) return null;
|
||||||
|
return this.linkStore_[this.currentLinkIndex_].noteY;
|
||||||
|
}
|
||||||
|
|
||||||
|
findLinks(renderedText: string): LinkStoreEntry[] {
|
||||||
|
const newLinkStore: LinkStoreEntry[] = [];
|
||||||
|
const lines: string[] = renderedText.split('\n');
|
||||||
|
for (let i = 0; i < lines.length; i++) {
|
||||||
|
const matches = [...lines[i].matchAll(this.linkRegex_)];
|
||||||
|
matches.forEach((_e, n) => {
|
||||||
|
newLinkStore.push(
|
||||||
|
{
|
||||||
|
link: matches[n][0],
|
||||||
|
noteX: matches[n].index,
|
||||||
|
noteY: i,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return newLinkStore;
|
||||||
|
}
|
||||||
|
|
||||||
|
updateText(renderedText: string): void {
|
||||||
|
this.currentLinkIndex_ = null;
|
||||||
|
this.renderedText_ = renderedText;
|
||||||
|
this.linkStore_ = this.findLinks(this.renderedText_);
|
||||||
|
}
|
||||||
|
|
||||||
|
updateNote(textWidget: any): void {
|
||||||
|
this.noteId_ = textWidget.noteId;
|
||||||
|
this.scrollTop_ = textWidget.scrollTop_;
|
||||||
|
this.updateText(textWidget.renderedText_);
|
||||||
|
}
|
||||||
|
|
||||||
|
scrollWidget(textWidget: any): void {
|
||||||
|
if (this.currentLinkIndex_ === null) return;
|
||||||
|
|
||||||
|
const noteY = this.linkStore_[this.currentLinkIndex_].noteY;
|
||||||
|
|
||||||
|
let viewBoxMin = textWidget.scrollTop_ + 1;
|
||||||
|
let viewBoxMax = viewBoxMin + textWidget.innerHeight - 2;
|
||||||
|
|
||||||
|
if (noteY < viewBoxMin) {
|
||||||
|
for (; noteY < viewBoxMin; textWidget.pageUp()) {
|
||||||
|
viewBoxMin = textWidget.scrollTop_;
|
||||||
|
viewBoxMax = viewBoxMin + textWidget.innerHeight;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
} else if (noteY > viewBoxMax) {
|
||||||
|
for (; noteY > viewBoxMax; textWidget.pageDown()) {
|
||||||
|
viewBoxMin = textWidget.scrollTop_;
|
||||||
|
viewBoxMax = viewBoxMin + textWidget.innerHeight;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
changeLink(textWidget: any, offset: number): void | null {
|
||||||
|
if (textWidget.noteId !== this.noteId_) {
|
||||||
|
this.updateNote(textWidget);
|
||||||
|
this.changeLink(textWidget, offset);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (textWidget.renderedText_ !== this.renderedText_) {
|
||||||
|
this.updateText(textWidget.renderedText_);
|
||||||
|
this.changeLink(textWidget, offset);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (textWidget.scrollTop_ !== this.scrollTop_) this.scrollTop_ = textWidget.scrollTop_;
|
||||||
|
|
||||||
|
if (!this.linkStore_.length) return null;
|
||||||
|
|
||||||
|
let offsetMod = (offset + this.currentLinkIndex_) % this.linkStore_.length;
|
||||||
|
|
||||||
|
if (this.currentLinkIndex_ === null) {
|
||||||
|
if (offsetMod < 0) this.currentLinkIndex_ = this.linkStore_.length + offsetMod;
|
||||||
|
else if (!offsetMod) this.currentLinkIndex_ = 0;
|
||||||
|
else this.currentLinkIndex_ = offsetMod - 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (offsetMod < 0) offsetMod = this.linkStore_.length + offsetMod;
|
||||||
|
|
||||||
|
this.currentLinkIndex_ = offsetMod;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
openLink(textWidget: any): void {
|
||||||
|
if (textWidget.noteId !== this.noteId_) return;
|
||||||
|
if (textWidget.renderedText_ !== this.renderedText_) return;
|
||||||
|
if (textWidget.scrollTop_ !== this.scrollTop_) return;
|
||||||
|
open(this.linkStore_[this.currentLinkIndex_].link);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default LinkSelector;
|
||||||
|
|
@@ -1,4 +1,4 @@
|
|||||||
const { Logger } = require('lib/logger.js');
|
const Logger = require('lib/Logger').default;
|
||||||
const { netUtils } = require('lib/net-utils.js');
|
const { netUtils } = require('lib/net-utils.js');
|
||||||
|
|
||||||
const http = require('http');
|
const http = require('http');
|
||||||
|
@@ -1,15 +1,17 @@
|
|||||||
const { Logger } = require('lib/logger.js');
|
const Logger = require('lib/Logger').default;
|
||||||
const Folder = require('lib/models/Folder.js');
|
const Folder = require('lib/models/Folder.js');
|
||||||
const BaseItem = require('lib/models/BaseItem.js');
|
const BaseItem = require('lib/models/BaseItem.js');
|
||||||
const Tag = require('lib/models/Tag.js');
|
const Tag = require('lib/models/Tag.js');
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
const Note = require('lib/models/Note.js');
|
const Note = require('lib/models/Note.js');
|
||||||
const Resource = require('lib/models/Resource.js');
|
const Resource = require('lib/models/Resource.js');
|
||||||
const Setting = require('lib/models/Setting.js');
|
const Setting = require('lib/models/Setting').default;
|
||||||
const { reducer, defaultState } = require('lib/reducer.js');
|
const reducer = require('lib/reducer').default;
|
||||||
|
const { defaultState } = require('lib/reducer');
|
||||||
const { splitCommandString } = require('lib/string-utils.js');
|
const { splitCommandString } = require('lib/string-utils.js');
|
||||||
const { reg } = require('lib/registry.js');
|
const { reg } = require('lib/registry.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
|
const shim = require('lib/shim').default;
|
||||||
const Entities = require('html-entities').AllHtmlEntities;
|
const Entities = require('html-entities').AllHtmlEntities;
|
||||||
const htmlentities = new Entities().encode;
|
const htmlentities = new Entities().encode;
|
||||||
|
|
||||||
@@ -33,6 +35,8 @@ const FolderListWidget = require('./gui/FolderListWidget.js');
|
|||||||
const NoteListWidget = require('./gui/NoteListWidget.js');
|
const NoteListWidget = require('./gui/NoteListWidget.js');
|
||||||
const StatusBarWidget = require('./gui/StatusBarWidget.js');
|
const StatusBarWidget = require('./gui/StatusBarWidget.js');
|
||||||
const ConsoleWidget = require('./gui/ConsoleWidget.js');
|
const ConsoleWidget = require('./gui/ConsoleWidget.js');
|
||||||
|
const LinkSelector = require('./LinkSelector.js').default;
|
||||||
|
|
||||||
|
|
||||||
class AppGui {
|
class AppGui {
|
||||||
constructor(app, store, keymap) {
|
constructor(app, store, keymap) {
|
||||||
@@ -74,6 +78,8 @@ class AppGui {
|
|||||||
this.currentShortcutKeys_ = [];
|
this.currentShortcutKeys_ = [];
|
||||||
this.lastShortcutKeyTime_ = 0;
|
this.lastShortcutKeyTime_ = 0;
|
||||||
|
|
||||||
|
this.linkSelector_ = new LinkSelector();
|
||||||
|
|
||||||
// Recurrent sync is setup only when the GUI is started. In
|
// Recurrent sync is setup only when the GUI is started. In
|
||||||
// a regular command it's not necessary since the process
|
// a regular command it's not necessary since the process
|
||||||
// exits right away.
|
// exits right away.
|
||||||
@@ -455,6 +461,30 @@ class AppGui {
|
|||||||
} else {
|
} else {
|
||||||
this.stdout(_('Please select the note or notebook to be deleted first.'));
|
this.stdout(_('Please select the note or notebook to be deleted first.'));
|
||||||
}
|
}
|
||||||
|
} else if (cmd === 'next_link' || cmd === 'previous_link') {
|
||||||
|
const noteText = this.widget('noteText');
|
||||||
|
|
||||||
|
noteText.render();
|
||||||
|
|
||||||
|
if (cmd === 'next_link') this.linkSelector_.changeLink(noteText, 1);
|
||||||
|
else this.linkSelector_.changeLink(noteText, -1);
|
||||||
|
|
||||||
|
this.linkSelector_.scrollWidget(noteText);
|
||||||
|
|
||||||
|
const cursorOffsetX = this.widget('mainWindow').width - noteText.innerWidth - 8;
|
||||||
|
const cursorOffsetY = 1 - noteText.scrollTop_;
|
||||||
|
|
||||||
|
if (this.linkSelector_.link) {
|
||||||
|
this.term_.moveTo(
|
||||||
|
this.linkSelector_.noteX + cursorOffsetX,
|
||||||
|
this.linkSelector_.noteY + cursorOffsetY
|
||||||
|
);
|
||||||
|
shim.setTimeout(() => this.term_.term().inverse(this.linkSelector_.link), 50);
|
||||||
|
}
|
||||||
|
} else if (cmd === 'open_link') {
|
||||||
|
if (this.widget('noteText').hasFocus) {
|
||||||
|
this.linkSelector_.openLink(this.widget('noteText'));
|
||||||
|
}
|
||||||
} else if (cmd === 'toggle_console') {
|
} else if (cmd === 'toggle_console') {
|
||||||
if (!this.consoleIsShown()) {
|
if (!this.consoleIsShown()) {
|
||||||
this.showConsole();
|
this.showConsole();
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
const { BaseApplication } = require('lib/BaseApplication');
|
const BaseApplication = require('lib/BaseApplication').default;
|
||||||
const { FoldersScreenUtils } = require('lib/folders-screen-utils.js');
|
const { FoldersScreenUtils } = require('lib/folders-screen-utils.js');
|
||||||
const ResourceService = require('lib/services/ResourceService');
|
const ResourceService = require('lib/services/ResourceService');
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
@@ -6,14 +6,15 @@ const Folder = require('lib/models/Folder.js');
|
|||||||
const BaseItem = require('lib/models/BaseItem.js');
|
const BaseItem = require('lib/models/BaseItem.js');
|
||||||
const Note = require('lib/models/Note.js');
|
const Note = require('lib/models/Note.js');
|
||||||
const Tag = require('lib/models/Tag.js');
|
const Tag = require('lib/models/Tag.js');
|
||||||
const Setting = require('lib/models/Setting.js');
|
const Setting = require('lib/models/Setting').default;
|
||||||
const { reg } = require('lib/registry.js');
|
const { reg } = require('lib/registry.js');
|
||||||
const { fileExtension } = require('lib/path-utils.js');
|
const { fileExtension } = require('lib/path-utils');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const { cliUtils } = require('./cli-utils.js');
|
const { cliUtils } = require('./cli-utils.js');
|
||||||
const Cache = require('lib/Cache');
|
const Cache = require('lib/Cache');
|
||||||
const RevisionService = require('lib/services/RevisionService');
|
const RevisionService = require('lib/services/RevisionService');
|
||||||
|
const shim = require('lib/shim').default;
|
||||||
|
|
||||||
class Application extends BaseApplication {
|
class Application extends BaseApplication {
|
||||||
constructor() {
|
constructor() {
|
||||||
@@ -161,7 +162,7 @@ class Application extends BaseApplication {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Give it a few seconds to cancel otherwise exit anyway
|
// Give it a few seconds to cancel otherwise exit anyway
|
||||||
setTimeout(async () => {
|
shim.setTimeout(async () => {
|
||||||
await doExit();
|
await doExit();
|
||||||
}, 5000);
|
}, 5000);
|
||||||
|
|
||||||
@@ -324,6 +325,9 @@ class Application extends BaseApplication {
|
|||||||
{ keys: ['PAGE_DOWN'], type: 'function', command: 'page_down' },
|
{ keys: ['PAGE_DOWN'], type: 'function', command: 'page_down' },
|
||||||
{ keys: ['ENTER'], type: 'function', command: 'activate' },
|
{ keys: ['ENTER'], type: 'function', command: 'activate' },
|
||||||
{ keys: ['DELETE', 'BACKSPACE'], type: 'function', command: 'delete' },
|
{ keys: ['DELETE', 'BACKSPACE'], type: 'function', command: 'delete' },
|
||||||
|
{ keys: ['n'], type: 'function', command: 'next_link' },
|
||||||
|
{ keys: ['b'], type: 'function', command: 'previous_link' },
|
||||||
|
{ keys: ['o'], type: 'function', command: 'open_link' },
|
||||||
{ keys: [' '], command: 'todo toggle $n' },
|
{ keys: [' '], command: 'todo toggle $n' },
|
||||||
{ keys: ['tc'], type: 'function', command: 'toggle_console' },
|
{ keys: ['tc'], type: 'function', command: 'toggle_console' },
|
||||||
{ keys: ['tm'], type: 'function', command: 'toggle_metadata' },
|
{ keys: ['tm'], type: 'function', command: 'toggle_metadata' },
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const { reg } = require('lib/registry.js');
|
const { reg } = require('lib/registry.js');
|
||||||
|
|
||||||
class BaseCommand {
|
class BaseCommand {
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const { fileExtension, dirname } = require('lib/path-utils.js');
|
const { fileExtension, dirname } = require('lib/path-utils');
|
||||||
const wrap_ = require('word-wrap');
|
const wrap_ = require('word-wrap');
|
||||||
const { languageCode } = require('lib/locale.js');
|
const { languageCode } = require('lib/locale');
|
||||||
|
|
||||||
const rootDir = dirname(dirname(__dirname));
|
const rootDir = dirname(dirname(__dirname));
|
||||||
const MAX_WIDTH = 78;
|
const MAX_WIDTH = 78;
|
||||||
|
@@ -1,14 +1,14 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const { Logger } = require('lib/logger.js');
|
const Logger = require('lib/Logger').default;
|
||||||
const { dirname } = require('lib/path-utils.js');
|
const { dirname } = require('lib/path-utils');
|
||||||
const { DatabaseDriverNode } = require('lib/database-driver-node.js');
|
const { DatabaseDriverNode } = require('lib/database-driver-node.js');
|
||||||
const { JoplinDatabase } = require('lib/joplin-database.js');
|
const { JoplinDatabase } = require('lib/joplin-database.js');
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
const Folder = require('lib/models/Folder.js');
|
const Folder = require('lib/models/Folder.js');
|
||||||
const Note = require('lib/models/Note.js');
|
const Note = require('lib/models/Note.js');
|
||||||
const Setting = require('lib/models/Setting.js');
|
const Setting = require('lib/models/Setting').default;
|
||||||
const { sprintf } = require('sprintf-js');
|
const { sprintf } = require('sprintf-js');
|
||||||
const exec = require('child_process').exec;
|
const exec = require('child_process').exec;
|
||||||
|
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
const yargParser = require('yargs-parser');
|
const yargParser = require('yargs-parser');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const { time } = require('lib/time-utils.js');
|
const { time } = require('lib/time-utils.js');
|
||||||
const stringPadding = require('string-padding');
|
const stringPadding = require('string-padding');
|
||||||
|
const Logger = require('lib/Logger').default;
|
||||||
|
|
||||||
const cliUtils = {};
|
const cliUtils = {};
|
||||||
|
|
||||||
@@ -245,4 +246,17 @@ cliUtils.redrawDone = function() {
|
|||||||
redrawStarted_ = false;
|
redrawStarted_ = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
cliUtils.stdoutLogger = function(stdout) {
|
||||||
|
const stdoutFn = (...s) => stdout(s.join(' '));
|
||||||
|
|
||||||
|
const logger = new Logger();
|
||||||
|
logger.addTarget('console', { console: {
|
||||||
|
info: stdoutFn,
|
||||||
|
warn: stdoutFn,
|
||||||
|
error: stdoutFn,
|
||||||
|
} });
|
||||||
|
|
||||||
|
return logger;
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = { cliUtils };
|
module.exports = { cliUtils };
|
||||||
|
@@ -3,7 +3,7 @@ const BaseItem = require('lib/models/BaseItem');
|
|||||||
const BaseModel = require('lib/BaseModel');
|
const BaseModel = require('lib/BaseModel');
|
||||||
const { toTitleCase } = require('lib/string-utils.js');
|
const { toTitleCase } = require('lib/string-utils.js');
|
||||||
const { reg } = require('lib/registry.js');
|
const { reg } = require('lib/registry.js');
|
||||||
const markdownUtils = require('lib/markdownUtils');
|
const markdownUtils = require('lib/markdownUtils').default;
|
||||||
const { Database } = require('lib/database.js');
|
const { Database } = require('lib/database.js');
|
||||||
|
|
||||||
class Command extends BaseCommand {
|
class Command extends BaseCommand {
|
||||||
@@ -53,9 +53,9 @@ class Command extends BaseCommand {
|
|||||||
|
|
||||||
const lines = [];
|
const lines = [];
|
||||||
|
|
||||||
lines.push('# Joplin API');
|
lines.push('# Joplin Data API');
|
||||||
lines.push('');
|
lines.push('');
|
||||||
|
lines.push('This API is available when the clipper server is running. It provides access to the notes, notebooks, tags and other Joplin object via a REST API. Plugins can also access this API even when the clipper server is not running.');
|
||||||
lines.push('');
|
lines.push('');
|
||||||
lines.push('In order to use it, you\'ll first need to find on which port the service is running. To do so, open the Web Clipper Options in Joplin and if the service is running it should tell you on which port. Normally it runs on port **41184**. If you want to find it programmatically, you may follow this kind of algorithm:');
|
lines.push('In order to use it, you\'ll first need to find on which port the service is running. To do so, open the Web Clipper Options in Joplin and if the service is running it should tell you on which port. Normally it runs on port **41184**. If you want to find it programmatically, you may follow this kind of algorithm:');
|
||||||
lines.push('');
|
lines.push('');
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
const { shim } = require('lib/shim.js');
|
const shim = require('lib/shim').default;
|
||||||
|
|
||||||
class Command extends BaseCommand {
|
class Command extends BaseCommand {
|
||||||
usage() {
|
usage() {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
const BaseItem = require('lib/models/BaseItem.js');
|
const BaseItem = require('lib/models/BaseItem.js');
|
||||||
const Note = require('lib/models/Note.js');
|
const Note = require('lib/models/Note.js');
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { _, setLocale } = require('lib/locale.js');
|
const { _, setLocale } = require('lib/locale');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const Setting = require('lib/models/Setting.js');
|
const Setting = require('lib/models/Setting').default;
|
||||||
|
|
||||||
class Command extends BaseCommand {
|
class Command extends BaseCommand {
|
||||||
usage() {
|
usage() {
|
||||||
@@ -124,7 +124,6 @@ class Command extends BaseCommand {
|
|||||||
|
|
||||||
if (args.name == 'locale') {
|
if (args.name == 'locale') {
|
||||||
setLocale(Setting.value('locale'));
|
setLocale(Setting.value('locale'));
|
||||||
app().onLocaleChanged();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await Setting.saveAll();
|
await Setting.saveAll();
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
const Note = require('lib/models/Note.js');
|
const Note = require('lib/models/Note.js');
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
const Note = require('lib/models/Note.js');
|
const Note = require('lib/models/Note.js');
|
||||||
const { time } = require('lib/time-utils.js');
|
const { time } = require('lib/time-utils.js');
|
||||||
|
@@ -1,11 +1,11 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const EncryptionService = require('lib/services/EncryptionService');
|
const EncryptionService = require('lib/services/EncryptionService');
|
||||||
const DecryptionWorker = require('lib/services/DecryptionWorker');
|
const DecryptionWorker = require('lib/services/DecryptionWorker');
|
||||||
const BaseItem = require('lib/models/BaseItem');
|
const BaseItem = require('lib/models/BaseItem');
|
||||||
const Setting = require('lib/models/Setting.js');
|
const Setting = require('lib/models/Setting').default;
|
||||||
const { shim } = require('lib/shim');
|
const shim = require('lib/shim').default;
|
||||||
const pathUtils = require('lib/path-utils.js');
|
const pathUtils = require('lib/path-utils');
|
||||||
const imageType = require('image-type');
|
const imageType = require('image-type');
|
||||||
const readChunk = require('read-chunk');
|
const readChunk = require('read-chunk');
|
||||||
|
|
||||||
@@ -38,7 +38,7 @@ class Command extends BaseCommand {
|
|||||||
this.stdout(_('Operation cancelled'));
|
this.stdout(_('Operation cancelled'));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Setting.setObjectKey('encryption.passwordCache', masterKeyId, password);
|
Setting.setObjectValue('encryption.passwordCache', masterKeyId, password);
|
||||||
await EncryptionService.instance().loadMasterKeysFromSettings();
|
await EncryptionService.instance().loadMasterKeysFromSettings();
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
@@ -1,11 +1,11 @@
|
|||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { splitCommandString } = require('lib/string-utils.js');
|
const { splitCommandString } = require('lib/string-utils.js');
|
||||||
const { uuid } = require('lib/uuid.js');
|
const uuid = require('lib/uuid').default;
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const Note = require('lib/models/Note.js');
|
const Note = require('lib/models/Note.js');
|
||||||
const Setting = require('lib/models/Setting.js');
|
const Setting = require('lib/models/Setting').default;
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
|
|
||||||
class Command extends BaseCommand {
|
class Command extends BaseCommand {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
|
|
||||||
class Command extends BaseCommand {
|
class Command extends BaseCommand {
|
||||||
usage() {
|
usage() {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const Setting = require('lib/models/Setting.js');
|
const Setting = require('lib/models/Setting').default;
|
||||||
const { ReportService } = require('lib/services/report.js');
|
const { ReportService } = require('lib/services/report.js');
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
|
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const InteropService = require('lib/services/InteropService.js');
|
const InteropService = require('lib/services/interop/InteropService').default;
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
|
|
||||||
class Command extends BaseCommand {
|
class Command extends BaseCommand {
|
||||||
usage() {
|
usage() {
|
||||||
@@ -14,7 +14,7 @@ class Command extends BaseCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
options() {
|
options() {
|
||||||
const service = new InteropService();
|
const service = InteropService.instance();
|
||||||
const formats = service
|
const formats = service
|
||||||
.modules()
|
.modules()
|
||||||
.filter(m => m.type === 'exporter' && m.format !== 'html')
|
.filter(m => m.type === 'exporter' && m.format !== 'html')
|
||||||
@@ -41,7 +41,7 @@ class Command extends BaseCommand {
|
|||||||
exportOptions.sourceFolderIds = folders.map(n => n.id);
|
exportOptions.sourceFolderIds = folders.map(n => n.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
const service = new InteropService();
|
const service = InteropService.instance();
|
||||||
const result = await service.export(exportOptions);
|
const result = await service.export(exportOptions);
|
||||||
|
|
||||||
result.warnings.map(w => this.stdout(w));
|
result.warnings.map(w => this.stdout(w));
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
const Note = require('lib/models/Note.js');
|
const Note = require('lib/models/Note.js');
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { renderCommandHelp } = require('./help-utils.js');
|
const { renderCommandHelp } = require('./help-utils.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const { cliUtils } = require('./cli-utils.js');
|
const { cliUtils } = require('./cli-utils.js');
|
||||||
|
|
||||||
class Command extends BaseCommand {
|
class Command extends BaseCommand {
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const InteropService = require('lib/services/InteropService.js');
|
const InteropService = require('lib/services/interop/InteropService').default;
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
const { cliUtils } = require('./cli-utils.js');
|
const { cliUtils } = require('./cli-utils.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
|
|
||||||
class Command extends BaseCommand {
|
class Command extends BaseCommand {
|
||||||
usage() {
|
usage() {
|
||||||
@@ -15,13 +15,17 @@ class Command extends BaseCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
options() {
|
options() {
|
||||||
const service = new InteropService();
|
const service = InteropService.instance();
|
||||||
const formats = service
|
const formats = service
|
||||||
.modules()
|
.modules()
|
||||||
.filter(m => m.type === 'importer')
|
.filter(m => m.type === 'importer')
|
||||||
.map(m => m.format);
|
.map(m => m.format);
|
||||||
|
|
||||||
return [['--format <format>', _('Source format: %s', ['auto'].concat(formats).join(', '))], ['-f, --force', _('Do not ask for confirmation.')]];
|
return [
|
||||||
|
['--format <format>', _('Source format: %s', ['auto'].concat(formats).join(', '))],
|
||||||
|
['-f, --force', _('Do not ask for confirmation.')],
|
||||||
|
['--output-format <output-format>', _('Output format: %s', 'md, html')],
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
async action(args) {
|
async action(args) {
|
||||||
@@ -55,11 +59,11 @@ class Command extends BaseCommand {
|
|||||||
this.stdout(s);
|
this.stdout(s);
|
||||||
};
|
};
|
||||||
|
|
||||||
app()
|
if (args.options.outputFormat) importOptions.outputFormat = args.options.outputFormat;
|
||||||
.gui()
|
|
||||||
.showConsole();
|
app().gui().showConsole();
|
||||||
this.stdout(_('Importing notes...'));
|
this.stdout(_('Importing notes...'));
|
||||||
const service = new InteropService();
|
const service = InteropService.instance();
|
||||||
const result = await service.import(importOptions);
|
const result = await service.import(importOptions);
|
||||||
result.warnings.map(w => this.stdout(w));
|
result.warnings.map(w => this.stdout(w));
|
||||||
cliUtils.redrawDone();
|
cliUtils.redrawDone();
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
const Folder = require('lib/models/Folder.js');
|
const Folder = require('lib/models/Folder.js');
|
||||||
const Setting = require('lib/models/Setting.js');
|
const Setting = require('lib/models/Setting').default;
|
||||||
const Note = require('lib/models/Note.js');
|
const Note = require('lib/models/Note.js');
|
||||||
const { sprintf } = require('sprintf-js');
|
const { sprintf } = require('sprintf-js');
|
||||||
const { time } = require('lib/time-utils.js');
|
const { time } = require('lib/time-utils.js');
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const Folder = require('lib/models/Folder.js');
|
const Folder = require('lib/models/Folder.js');
|
||||||
|
|
||||||
class Command extends BaseCommand {
|
class Command extends BaseCommand {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const Note = require('lib/models/Note.js');
|
const Note = require('lib/models/Note.js');
|
||||||
|
|
||||||
class Command extends BaseCommand {
|
class Command extends BaseCommand {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const Note = require('lib/models/Note.js');
|
const Note = require('lib/models/Note.js');
|
||||||
|
|
||||||
class Command extends BaseCommand {
|
class Command extends BaseCommand {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
const Folder = require('lib/models/Folder.js');
|
const Folder = require('lib/models/Folder.js');
|
||||||
const Note = require('lib/models/Note.js');
|
const Note = require('lib/models/Note.js');
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
const Folder = require('lib/models/Folder.js');
|
const Folder = require('lib/models/Folder.js');
|
||||||
const Note = require('lib/models/Note.js');
|
const Note = require('lib/models/Note.js');
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const Folder = require('lib/models/Folder.js');
|
const Folder = require('lib/models/Folder.js');
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const Note = require('lib/models/Note.js');
|
const Note = require('lib/models/Note.js');
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
|
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
const Folder = require('lib/models/Folder.js');
|
const Folder = require('lib/models/Folder.js');
|
||||||
const { uuid } = require('lib/uuid.js');
|
const uuid = require('lib/uuid').default;
|
||||||
|
|
||||||
class Command extends BaseCommand {
|
class Command extends BaseCommand {
|
||||||
usage() {
|
usage() {
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const Setting = require('lib/models/Setting.js');
|
const Setting = require('lib/models/Setting').default;
|
||||||
const { Logger } = require('lib/logger.js');
|
const Logger = require('lib/Logger').default;
|
||||||
const { shim } = require('lib/shim');
|
const shim = require('lib/shim').default;
|
||||||
|
|
||||||
class Command extends BaseCommand {
|
class Command extends BaseCommand {
|
||||||
|
|
||||||
@@ -18,7 +18,8 @@ class Command extends BaseCommand {
|
|||||||
const command = args.command;
|
const command = args.command;
|
||||||
|
|
||||||
const ClipperServer = require('lib/ClipperServer');
|
const ClipperServer = require('lib/ClipperServer');
|
||||||
const stdoutFn = (s) => this.stdout(s);
|
ClipperServer.instance().initialize();
|
||||||
|
const stdoutFn = (...s) => this.stdout(s.join(' '));
|
||||||
const clipperLogger = new Logger();
|
const clipperLogger = new Logger();
|
||||||
clipperLogger.addTarget('file', { path: `${Setting.value('profileDir')}/log-clipper.txt` });
|
clipperLogger.addTarget('file', { path: `${Setting.value('profileDir')}/log-clipper.txt` });
|
||||||
clipperLogger.addTarget('console', { console: {
|
clipperLogger.addTarget('console', { console: {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
const { Database } = require('lib/database.js');
|
const { Database } = require('lib/database.js');
|
||||||
const Note = require('lib/models/Note.js');
|
const Note = require('lib/models/Note.js');
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const Setting = require('lib/models/Setting.js');
|
const Setting = require('lib/models/Setting').default;
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const { ReportService } = require('lib/services/report.js');
|
const { ReportService } = require('lib/services/report.js');
|
||||||
|
|
||||||
class Command extends BaseCommand {
|
class Command extends BaseCommand {
|
||||||
|
@@ -1,16 +1,17 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const { OneDriveApiNodeUtils } = require('lib/onedrive-api-node-utils.js');
|
const { OneDriveApiNodeUtils } = require('lib/onedrive-api-node-utils.js');
|
||||||
const Setting = require('lib/models/Setting.js');
|
const Setting = require('lib/models/Setting').default;
|
||||||
const ResourceFetcher = require('lib/services/ResourceFetcher');
|
const ResourceFetcher = require('lib/services/ResourceFetcher');
|
||||||
const { Synchronizer } = require('lib/synchronizer.js');
|
const Synchronizer = require('lib/Synchronizer').default;
|
||||||
const { reg } = require('lib/registry.js');
|
const { reg } = require('lib/registry.js');
|
||||||
const { cliUtils } = require('./cli-utils.js');
|
const { cliUtils } = require('./cli-utils.js');
|
||||||
const md5 = require('md5');
|
const md5 = require('md5');
|
||||||
const locker = require('proper-lockfile');
|
const locker = require('proper-lockfile');
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const SyncTargetRegistry = require('lib/SyncTargetRegistry');
|
const SyncTargetRegistry = require('lib/SyncTargetRegistry');
|
||||||
|
const MigrationHandler = require('lib/services/synchronizer/MigrationHandler').default;
|
||||||
|
|
||||||
class Command extends BaseCommand {
|
class Command extends BaseCommand {
|
||||||
constructor() {
|
constructor() {
|
||||||
@@ -29,7 +30,10 @@ class Command extends BaseCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
options() {
|
options() {
|
||||||
return [['--target <target>', _('Sync to provided target (defaults to sync.target config value)')]];
|
return [
|
||||||
|
['--target <target>', _('Sync to provided target (defaults to sync.target config value)')],
|
||||||
|
['--upgrade', _('Upgrade the sync target to the latest version.')],
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
static lockFile(filePath) {
|
static lockFile(filePath) {
|
||||||
@@ -148,12 +152,8 @@ class Command extends BaseCommand {
|
|||||||
const syncTarget = reg.syncTarget(this.syncTargetId_);
|
const syncTarget = reg.syncTarget(this.syncTargetId_);
|
||||||
|
|
||||||
if (!(await syncTarget.isAuthenticated())) {
|
if (!(await syncTarget.isAuthenticated())) {
|
||||||
app()
|
app().gui().showConsole();
|
||||||
.gui()
|
app().gui().maximizeConsole();
|
||||||
.showConsole();
|
|
||||||
app()
|
|
||||||
.gui()
|
|
||||||
.maximizeConsole();
|
|
||||||
|
|
||||||
const authDone = await this.doAuth();
|
const authDone = await this.doAuth();
|
||||||
if (!authDone) return cleanUp();
|
if (!authDone) return cleanUp();
|
||||||
@@ -174,7 +174,35 @@ class Command extends BaseCommand {
|
|||||||
|
|
||||||
this.stdout(_('Synchronisation target: %s (%s)', Setting.enumOptionLabel('sync.target', this.syncTargetId_), this.syncTargetId_));
|
this.stdout(_('Synchronisation target: %s (%s)', Setting.enumOptionLabel('sync.target', this.syncTargetId_), this.syncTargetId_));
|
||||||
|
|
||||||
if (!sync) throw new Error(_('Cannot initialize synchroniser.'));
|
if (!sync) throw new Error(_('Cannot initialise synchroniser.'));
|
||||||
|
|
||||||
|
if (args.options.upgrade) {
|
||||||
|
let migrationError = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const migrationHandler = new MigrationHandler(
|
||||||
|
sync.api(),
|
||||||
|
sync.lockHandler(),
|
||||||
|
Setting.value('appType'),
|
||||||
|
Setting.value('clientId')
|
||||||
|
);
|
||||||
|
|
||||||
|
migrationHandler.setLogger(cliUtils.stdoutLogger(this.stdout.bind(this)));
|
||||||
|
|
||||||
|
await migrationHandler.upgrade();
|
||||||
|
} catch (error) {
|
||||||
|
migrationError = error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!migrationError) {
|
||||||
|
Setting.setValue('sync.upgradeState', Setting.SYNC_UPGRADE_STATE_IDLE);
|
||||||
|
await Setting.saveAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (migrationError) throw migrationError;
|
||||||
|
|
||||||
|
return cleanUp();
|
||||||
|
}
|
||||||
|
|
||||||
this.stdout(_('Starting synchronisation...'));
|
this.stdout(_('Starting synchronisation...'));
|
||||||
|
|
||||||
@@ -210,6 +238,12 @@ class Command extends BaseCommand {
|
|||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Setting.value('sync.upgradeState') > Setting.SYNC_UPGRADE_STATE_IDLE) {
|
||||||
|
this.stdout(`/!\\ ${_('Sync target must be upgraded! Run `%s` to proceed.', 'sync --upgrade')}`);
|
||||||
|
app().gui().showConsole();
|
||||||
|
app().gui().maximizeConsole();
|
||||||
|
}
|
||||||
|
|
||||||
cleanUp();
|
cleanUp();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const Tag = require('lib/models/Tag.js');
|
const Tag = require('lib/models/Tag.js');
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
const { time } = require('lib/time-utils.js');
|
const { time } = require('lib/time-utils.js');
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
const Note = require('lib/models/Note.js');
|
const Note = require('lib/models/Note.js');
|
||||||
const { time } = require('lib/time-utils.js');
|
const { time } = require('lib/time-utils.js');
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
|
|
||||||
const CommandDone = require('./command-done.js');
|
const CommandDone = require('./command-done.js');
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const { app } = require('./app.js');
|
const { app } = require('./app.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
|
|
||||||
class Command extends BaseCommand {
|
class Command extends BaseCommand {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const { BaseCommand } = require('./base-command.js');
|
const { BaseCommand } = require('./base-command.js');
|
||||||
const Setting = require('lib/models/Setting.js');
|
const Setting = require('lib/models/Setting').default;
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
|
|
||||||
class Command extends BaseCommand {
|
class Command extends BaseCommand {
|
||||||
usage() {
|
usage() {
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const { time } = require('lib/time-utils.js');
|
const { time } = require('lib/time-utils.js');
|
||||||
const { Logger } = require('lib/logger.js');
|
const Logger = require('lib/Logger').default;
|
||||||
const Resource = require('lib/models/Resource.js');
|
const Resource = require('lib/models/Resource.js');
|
||||||
const { dirname } = require('lib/path-utils.js');
|
const { dirname } = require('lib/path-utils');
|
||||||
const { FsDriverNode } = require('./fs-driver-node.js');
|
const FsDriverNode = require('lib/fs-driver-node').default;
|
||||||
const lodash = require('lodash');
|
const lodash = require('lodash');
|
||||||
const exec = require('child_process').exec;
|
const exec = require('child_process').exec;
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
|
@@ -2,7 +2,7 @@ const Folder = require('lib/models/Folder.js');
|
|||||||
const Tag = require('lib/models/Tag.js');
|
const Tag = require('lib/models/Tag.js');
|
||||||
const BaseModel = require('lib/BaseModel.js');
|
const BaseModel = require('lib/BaseModel.js');
|
||||||
const ListWidget = require('tkwidgets/ListWidget.js');
|
const ListWidget = require('tkwidgets/ListWidget.js');
|
||||||
const _ = require('lib/locale.js')._;
|
const _ = require('lib/locale')._;
|
||||||
|
|
||||||
class FolderListWidget extends ListWidget {
|
class FolderListWidget extends ListWidget {
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const Note = require('lib/models/Note.js');
|
const Note = require('lib/models/Note.js');
|
||||||
const TextWidget = require('tkwidgets/TextWidget.js');
|
const TextWidget = require('tkwidgets/TextWidget.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
|
|
||||||
class NoteWidget extends TextWidget {
|
class NoteWidget extends TextWidget {
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
const { wrap } = require('lib/string-utils.js');
|
const { wrap } = require('lib/string-utils.js');
|
||||||
const Setting = require('lib/models/Setting.js');
|
const Setting = require('lib/models/Setting').default;
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
|
|
||||||
const MAX_WIDTH = 78;
|
const MAX_WIDTH = 78;
|
||||||
const INDENT = ' ';
|
const INDENT = ' ';
|
||||||
|
@@ -21,12 +21,12 @@ const Note = require('lib/models/Note.js');
|
|||||||
const Tag = require('lib/models/Tag.js');
|
const Tag = require('lib/models/Tag.js');
|
||||||
const NoteTag = require('lib/models/NoteTag.js');
|
const NoteTag = require('lib/models/NoteTag.js');
|
||||||
const MasterKey = require('lib/models/MasterKey');
|
const MasterKey = require('lib/models/MasterKey');
|
||||||
const Setting = require('lib/models/Setting.js');
|
const Setting = require('lib/models/Setting').default;
|
||||||
const Revision = require('lib/models/Revision.js');
|
const Revision = require('lib/models/Revision.js');
|
||||||
const { Logger } = require('lib/logger.js');
|
const Logger = require('lib/Logger').default;
|
||||||
const { FsDriverNode } = require('lib/fs-driver-node.js');
|
const FsDriverNode = require('lib/fs-driver-node').default;
|
||||||
const { shimInit } = require('lib/shim-init-node.js');
|
const { shimInit } = require('lib/shim-init-node.js');
|
||||||
const { _ } = require('lib/locale.js');
|
const { _ } = require('lib/locale');
|
||||||
const { FileApiDriverLocal } = require('lib/file-api-driver-local.js');
|
const { FileApiDriverLocal } = require('lib/file-api-driver-local.js');
|
||||||
const EncryptionService = require('lib/services/EncryptionService');
|
const EncryptionService = require('lib/services/EncryptionService');
|
||||||
const envFromArgs = require('lib/envFromArgs');
|
const envFromArgs = require('lib/envFromArgs');
|
||||||
@@ -52,8 +52,6 @@ BaseItem.loadClass('Revision', Revision);
|
|||||||
Setting.setConstant('appId', `net.cozic.joplin${env === 'dev' ? 'dev' : ''}-cli`);
|
Setting.setConstant('appId', `net.cozic.joplin${env === 'dev' ? 'dev' : ''}-cli`);
|
||||||
Setting.setConstant('appType', 'cli');
|
Setting.setConstant('appType', 'cli');
|
||||||
|
|
||||||
console.info(Setting.value('appId'));
|
|
||||||
|
|
||||||
shimInit();
|
shimInit();
|
||||||
|
|
||||||
const application = app();
|
const application = app();
|
||||||
|
78
CliClient/app/services/plugins/PluginRunner.ts
Normal file
78
CliClient/app/services/plugins/PluginRunner.ts
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
import * as vm from 'vm';
|
||||||
|
import Plugin from 'lib/services/plugins/Plugin';
|
||||||
|
import sandboxProxy from 'lib/services/plugins/sandboxProxy';
|
||||||
|
import BasePluginRunner from 'lib/services/plugins/BasePluginRunner';
|
||||||
|
import executeSandboxCall from 'lib/services/plugins/utils/executeSandboxCall';
|
||||||
|
import Global from 'lib/services/plugins/api/Global';
|
||||||
|
import mapEventHandlersToIds, { EventHandlers } from 'lib/services/plugins/utils/mapEventHandlersToIds';
|
||||||
|
|
||||||
|
function createConsoleWrapper(pluginId:string) {
|
||||||
|
const wrapper:any = {};
|
||||||
|
|
||||||
|
for (const n in console) {
|
||||||
|
if (!console.hasOwnProperty(n)) continue;
|
||||||
|
wrapper[n] = (...args:any[]) => {
|
||||||
|
const newArgs = args.slice();
|
||||||
|
newArgs.splice(0, 0, `Plugin "${pluginId}":`);
|
||||||
|
return (console as any)[n](...newArgs);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return wrapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The CLI plugin runner is more complex than it needs to be because it more or less emulates
|
||||||
|
// how it would work in a multi-process architecture, as in the desktop app (and probably how
|
||||||
|
// it would work in the mobile app too). This is mainly to allow doing integration testing.
|
||||||
|
//
|
||||||
|
// For example, all plugin calls go through a proxy, however they could made directly since
|
||||||
|
// the plugin script is running within the same process as the main app.
|
||||||
|
|
||||||
|
export default class PluginRunner extends BasePluginRunner {
|
||||||
|
|
||||||
|
private eventHandlers_:EventHandlers = {};
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
|
||||||
|
this.eventHandler = this.eventHandler.bind(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async eventHandler(eventHandlerId:string, args:any[]) {
|
||||||
|
const cb = this.eventHandlers_[eventHandlerId];
|
||||||
|
return cb(...args);
|
||||||
|
}
|
||||||
|
|
||||||
|
private newSandboxProxy(pluginId:string, sandbox:Global) {
|
||||||
|
const target = async (path:string, args:any[]) => {
|
||||||
|
return executeSandboxCall(pluginId, sandbox, `joplin.${path}`, mapEventHandlersToIds(args, this.eventHandlers_), this.eventHandler);
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
joplin: sandboxProxy(target),
|
||||||
|
console: createConsoleWrapper(pluginId),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async run(plugin:Plugin, sandbox:Global):Promise<void> {
|
||||||
|
return new Promise((resolve:Function, reject:Function) => {
|
||||||
|
const onStarted = () => {
|
||||||
|
plugin.off('started', onStarted);
|
||||||
|
resolve();
|
||||||
|
};
|
||||||
|
|
||||||
|
plugin.on('started', onStarted);
|
||||||
|
|
||||||
|
const vmSandbox = vm.createContext(this.newSandboxProxy(plugin.id, sandbox));
|
||||||
|
|
||||||
|
try {
|
||||||
|
vm.runInContext(plugin.scriptText, vmSandbox);
|
||||||
|
} catch (error) {
|
||||||
|
reject(error);
|
||||||
|
// this.logger().error(`In plugin ${plugin.id}:`, error);
|
||||||
|
// return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -2,23 +2,38 @@ const gulp = require('gulp');
|
|||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const utils = require('../Tools/gulp/utils');
|
const utils = require('../Tools/gulp/utils');
|
||||||
const tasks = {
|
const tasks = {
|
||||||
|
compileExtensions: {
|
||||||
|
fn: require('../Tools/gulp/tasks/compileExtensions.js'),
|
||||||
|
},
|
||||||
copyLib: require('../Tools/gulp/tasks/copyLib'),
|
copyLib: require('../Tools/gulp/tasks/copyLib'),
|
||||||
tsc: require('../Tools/gulp/tasks/tsc'),
|
tsc: require('../Tools/gulp/tasks/tsc'),
|
||||||
|
updateIgnoredTypeScriptBuild: require('../Tools/gulp/tasks/updateIgnoredTypeScriptBuild'),
|
||||||
};
|
};
|
||||||
|
|
||||||
tasks.build = {
|
tasks.prepareBuild = {
|
||||||
fn: async () => {
|
fn: async () => {
|
||||||
const buildDir = `${__dirname}/build`;
|
const buildDir = `${__dirname}/build`;
|
||||||
await utils.copyDir(`${__dirname}/app`, buildDir, {
|
await utils.copyDir(`${__dirname}/app`, buildDir, {
|
||||||
excluded: ['node_modules'],
|
excluded: ['node_modules'],
|
||||||
});
|
});
|
||||||
await utils.copyDir(`${__dirname}/locales-build`, `${buildDir}/locales`);
|
await utils.copyDir(`${__dirname}/locales-build`, `${buildDir}/locales`);
|
||||||
await utils.copyDir(`${__dirname}/../patches`, `${buildDir}/patches`);
|
|
||||||
await tasks.copyLib.fn();
|
await tasks.copyLib.fn();
|
||||||
await utils.copyFile(`${__dirname}/package.json`, `${buildDir}/package.json`);
|
await utils.copyFile(`${__dirname}/package.json`, `${buildDir}/package.json`);
|
||||||
await utils.copyFile(`${__dirname}/package-lock.json`, `${buildDir}/package-lock.json`);
|
await utils.copyFile(`${__dirname}/package-lock.json`, `${buildDir}/package-lock.json`);
|
||||||
await utils.copyFile(`${__dirname}/gulpfile.js`, `${buildDir}/gulpfile.js`);
|
await utils.copyFile(`${__dirname}/gulpfile.js`, `${buildDir}/gulpfile.js`);
|
||||||
|
|
||||||
|
// Import all the patches inside the CliClient directory
|
||||||
|
// and build file. Needs to be in CliClient dir for when running
|
||||||
|
// in dev mode, and in build dir for production.
|
||||||
|
const localPatchDir = `${buildDir}/patches`;
|
||||||
|
await fs.remove(localPatchDir);
|
||||||
|
await fs.mkdirp(localPatchDir);
|
||||||
|
await utils.copyDir(`${__dirname}/../patches/shared`, `${localPatchDir}`, { delete: false });
|
||||||
|
await utils.copyDir(`${__dirname}/../patches/node`, `${localPatchDir}`, { delete: false });
|
||||||
|
|
||||||
|
await fs.remove(`${__dirname}/patches`);
|
||||||
|
await utils.copyDir(`${localPatchDir}`, `${__dirname}/patches`);
|
||||||
|
|
||||||
const packageRaw = await fs.readFile(`${buildDir}/package.json`);
|
const packageRaw = await fs.readFile(`${buildDir}/package.json`);
|
||||||
const package = JSON.parse(packageRaw.toString());
|
const package = JSON.parse(packageRaw.toString());
|
||||||
package.scripts.postinstall = 'patch-package';
|
package.scripts.postinstall = 'patch-package';
|
||||||
@@ -28,7 +43,7 @@ tasks.build = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
tasks.buildTests = {
|
tasks.prepareTestBuild = {
|
||||||
fn: async () => {
|
fn: async () => {
|
||||||
const testBuildDir = `${__dirname}/tests-build`;
|
const testBuildDir = `${__dirname}/tests-build`;
|
||||||
|
|
||||||
@@ -37,25 +52,33 @@ tasks.buildTests = {
|
|||||||
'lib/',
|
'lib/',
|
||||||
'locales/',
|
'locales/',
|
||||||
'node_modules/',
|
'node_modules/',
|
||||||
|
'*.ts',
|
||||||
|
'*.tsx',
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
await utils.copyDir(`${__dirname}/../ReactNativeClient/lib`, `${testBuildDir}/lib`);
|
const rootDir = utils.rootDir();
|
||||||
await utils.copyDir(`${__dirname}/../ReactNativeClient/locales`, `${testBuildDir}/locales`);
|
|
||||||
|
await utils.copyDir(`${rootDir}/ReactNativeClient/lib`, `${testBuildDir}/lib`, {
|
||||||
|
excluded: [
|
||||||
|
`${rootDir}/ReactNativeClient/lib/joplin-renderer/node_modules`,
|
||||||
|
],
|
||||||
|
});
|
||||||
|
await utils.copyDir(`${rootDir}/ReactNativeClient/locales`, `${testBuildDir}/locales`);
|
||||||
await fs.mkdirp(`${testBuildDir}/data`);
|
await fs.mkdirp(`${testBuildDir}/data`);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const buildTestSeries = [
|
utils.registerGulpTasks(gulp, tasks);
|
||||||
tasks.buildTests.fn,
|
|
||||||
];
|
|
||||||
|
|
||||||
if (require('os').platform() === 'win32') {
|
gulp.task('build', gulp.series([
|
||||||
gulp.task('copyLib', tasks.copyLib.fn);
|
'prepareBuild',
|
||||||
gulp.task('tsc', tasks.tsc.fn);
|
'compileExtensions',
|
||||||
buildTestSeries.push('copyLib');
|
'copyLib',
|
||||||
buildTestSeries.push('tsc');
|
]));
|
||||||
}
|
|
||||||
|
|
||||||
gulp.task('build', tasks.build.fn);
|
gulp.task('buildTests', gulp.series([
|
||||||
gulp.task('buildTests', gulp.series(...buildTestSeries));
|
'prepareTestBuild',
|
||||||
|
'compileExtensions',
|
||||||
|
'copyLib',
|
||||||
|
]));
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -38,42 +38,42 @@ locales['tr_TR'] = require('./tr_TR.json');
|
|||||||
locales['vi'] = require('./vi.json');
|
locales['vi'] = require('./vi.json');
|
||||||
locales['zh_CN'] = require('./zh_CN.json');
|
locales['zh_CN'] = require('./zh_CN.json');
|
||||||
locales['zh_TW'] = require('./zh_TW.json');
|
locales['zh_TW'] = require('./zh_TW.json');
|
||||||
stats['ar'] = {"percentDone":85};
|
stats['ar'] = {"percentDone":79};
|
||||||
stats['eu'] = {"percentDone":36};
|
stats['eu'] = {"percentDone":33};
|
||||||
stats['bs_BA'] = {"percentDone":79};
|
stats['bs_BA'] = {"percentDone":82};
|
||||||
stats['bg_BG'] = {"percentDone":71};
|
stats['bg_BG'] = {"percentDone":65};
|
||||||
stats['ca'] = {"percentDone":56};
|
stats['ca'] = {"percentDone":95};
|
||||||
stats['hr_HR'] = {"percentDone":30};
|
stats['hr_HR'] = {"percentDone":27};
|
||||||
stats['cs_CZ'] = {"percentDone":88};
|
stats['cs_CZ'] = {"percentDone":99};
|
||||||
stats['da_DK'] = {"percentDone":79};
|
stats['da_DK'] = {"percentDone":73};
|
||||||
stats['de_DE'] = {"percentDone":96};
|
stats['de_DE'] = {"percentDone":97};
|
||||||
stats['et_EE'] = {"percentDone":70};
|
stats['et_EE'] = {"percentDone":65};
|
||||||
stats['en_GB'] = {"percentDone":100};
|
stats['en_GB'] = {"percentDone":100};
|
||||||
stats['en_US'] = {"percentDone":100};
|
stats['en_US'] = {"percentDone":100};
|
||||||
stats['es_ES'] = {"percentDone":95};
|
stats['es_ES'] = {"percentDone":99};
|
||||||
stats['eo'] = {"percentDone":40};
|
stats['eo'] = {"percentDone":37};
|
||||||
stats['fr_FR'] = {"percentDone":100};
|
stats['fr_FR'] = {"percentDone":98};
|
||||||
stats['gl_ES'] = {"percentDone":46};
|
stats['gl_ES'] = {"percentDone":42};
|
||||||
stats['id_ID'] = {"percentDone":98};
|
stats['id_ID'] = {"percentDone":92};
|
||||||
stats['it_IT'] = {"percentDone":95};
|
stats['it_IT'] = {"percentDone":98};
|
||||||
stats['nl_BE'] = {"percentDone":36};
|
stats['nl_BE'] = {"percentDone":33};
|
||||||
stats['nl_NL'] = {"percentDone":90};
|
stats['nl_NL'] = {"percentDone":94};
|
||||||
stats['nb_NO'] = {"percentDone":93};
|
stats['nb_NO'] = {"percentDone":87};
|
||||||
stats['fa'] = {"percentDone":35};
|
stats['fa'] = {"percentDone":82};
|
||||||
stats['pl_PL'] = {"percentDone":89};
|
stats['pl_PL'] = {"percentDone":97};
|
||||||
stats['pt_PT'] = {"percentDone":94};
|
stats['pt_PT'] = {"percentDone":98};
|
||||||
stats['pt_BR'] = {"percentDone":95};
|
stats['pt_BR'] = {"percentDone":95};
|
||||||
stats['ro'] = {"percentDone":36};
|
stats['ro'] = {"percentDone":77};
|
||||||
stats['sl_SI'] = {"percentDone":45};
|
stats['sl_SI'] = {"percentDone":42};
|
||||||
stats['sv'] = {"percentDone":75};
|
stats['sv'] = {"percentDone":70};
|
||||||
stats['th_TH'] = {"percentDone":56};
|
stats['th_TH'] = {"percentDone":52};
|
||||||
stats['vi'] = {"percentDone":91};
|
stats['vi'] = {"percentDone":84};
|
||||||
stats['tr_TR'] = {"percentDone":95};
|
stats['tr_TR'] = {"percentDone":97};
|
||||||
stats['el_GR'] = {"percentDone":95};
|
stats['el_GR'] = {"percentDone":95};
|
||||||
stats['ru_RU'] = {"percentDone":93};
|
stats['ru_RU'] = {"percentDone":94};
|
||||||
stats['sr_RS'] = {"percentDone":76};
|
stats['sr_RS'] = {"percentDone":70};
|
||||||
stats['zh_CN'] = {"percentDone":93};
|
stats['zh_CN'] = {"percentDone":95};
|
||||||
stats['zh_TW'] = {"percentDone":94};
|
stats['zh_TW'] = {"percentDone":94};
|
||||||
stats['ja_JP'] = {"percentDone":98};
|
stats['ja_JP'] = {"percentDone":97};
|
||||||
stats['ko'] = {"percentDone":92};
|
stats['ko'] = {"percentDone":99};
|
||||||
module.exports = { locales: locales, stats: stats };
|
module.exports = { locales: locales, stats: stats };
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user