Compare commits
2049 Commits
note_link_
...
v2.13.1
Author | SHA1 | Date | |
---|---|---|---|
|
cfea26d6d0 | ||
|
612223164e | ||
|
45b8bf7207 | ||
|
2ab4e891ef | ||
|
fec021aa5d | ||
|
b9f36705ff | ||
|
efd7cc7a6b | ||
|
ae9a09ff65 | ||
|
839e87de81 | ||
|
e943b84d91 | ||
|
5e1031a482 | ||
|
047c6ae61c | ||
|
2067889a01 | ||
|
175a1b7a64 | ||
|
d5a60ba2d7 | ||
|
14957b1a0d | ||
|
9666ea6648 | ||
|
a07985da98 | ||
|
cb21e8655e | ||
|
78ffc0bc23 | ||
|
7f720ce4f8 | ||
|
e041169300 | ||
|
c824f25262 | ||
|
5a5a8526c3 | ||
|
217fd20985 | ||
|
00e6801803 | ||
|
39bc15111a | ||
|
1bb38e10c6 | ||
|
0d32d19539 | ||
|
d4a9e5ce65 | ||
|
41c2a6ba68 | ||
|
41dc96b441 | ||
|
d1042c409d | ||
|
2b01392c52 | ||
|
63127ef213 | ||
|
0c6f498da4 | ||
|
bc6a0765c5 | ||
|
f82302c38d | ||
|
e444f9947a | ||
|
706c3dbed1 | ||
|
67569b9fcf | ||
|
1a579f724f | ||
|
63ad154e61 | ||
|
ed8ce6b27c | ||
|
d461d89a27 | ||
|
fad643d916 | ||
|
bac1009492 | ||
|
fb9d0b10a9 | ||
|
96dc5724a6 | ||
|
75e6ae135b | ||
|
e46812830a | ||
|
7a8b69fa79 | ||
|
66bc6a77ca | ||
|
427b66ea6c | ||
|
6c5bfb0141 | ||
|
2c242deeaa | ||
|
41b4d2e53f | ||
|
6970641c56 | ||
|
76818ef98a | ||
|
988ce8db74 | ||
|
60b89e7c52 | ||
|
28fc4d09d1 | ||
|
58f7b987eb | ||
|
27e4c05982 | ||
|
8af2f3d203 | ||
|
f56cac9d64 | ||
|
d448b8bd4e | ||
|
b7f813f387 | ||
|
a3f454b62e | ||
|
10ea9b7568 | ||
|
302ebf4488 | ||
|
73f6bd1295 | ||
|
c7e47ed578 | ||
|
138f804580 | ||
|
5dbeb684d9 | ||
|
dd767dd479 | ||
|
b8d1ad60ff | ||
|
a7053157d8 | ||
|
ddc74af3d1 | ||
|
9430dccb61 | ||
|
832e9454c7 | ||
|
e4cb871c11 | ||
|
591324b7bf | ||
|
f74732a03d | ||
|
dd789fbde7 | ||
|
9d73ff0ead | ||
|
a3a7ab2cf0 | ||
|
2d26332770 | ||
|
406365f0e0 | ||
|
4e25377122 | ||
|
dcd3def942 | ||
|
a14674aaa8 | ||
|
a03401a692 | ||
|
ea4d54aea6 | ||
|
315baacba7 | ||
|
7ab197a92b | ||
|
bf41ed1b13 | ||
|
ea60087788 | ||
|
97938ec272 | ||
|
13b7e3657b | ||
|
d590bd7720 | ||
|
8696ae1bb6 | ||
|
b452a0a870 | ||
|
77df474b46 | ||
|
5a8032050d | ||
|
73eedd3ec3 | ||
|
3577b245f6 | ||
|
e126a2d8bf | ||
|
21929157b5 | ||
|
5da3780197 | ||
|
cea07b94fb | ||
|
59f8b43c21 | ||
|
5c63eb0913 | ||
|
5855748e06 | ||
|
4e2d36648e | ||
|
6aec75806e | ||
|
2e9f93ad9a | ||
|
26a967e53c | ||
|
2fda252a5e | ||
|
831b1ae035 | ||
|
f807a0179d | ||
|
b3801b333d | ||
|
808e175f7f | ||
|
03f1d86531 | ||
|
b92cb7deb7 | ||
|
0edc66da49 | ||
|
e96ad7ccfa | ||
|
817ef7bbed | ||
|
5bd0c9b3a0 | ||
|
46d9cd34a8 | ||
|
c3e08237fd | ||
|
b406f05241 | ||
|
973680ea27 | ||
|
2cbee6d8af | ||
|
3778f190fb | ||
|
c859ad48c1 | ||
|
1141b1c2a1 | ||
|
39c118be90 | ||
|
f9ac4e112b | ||
|
f0c1042a71 | ||
|
87e51aa8e6 | ||
|
41fdc0d44d | ||
|
a754a8d772 | ||
|
41d0363fd0 | ||
|
2a4c7a334e | ||
|
df1b0a96f4 | ||
|
0030681cb4 | ||
|
e7014492c5 | ||
|
4804c1c0c3 | ||
|
270d96ad07 | ||
|
5ed3d94faa | ||
|
d0e943630d | ||
|
406e933407 | ||
|
7108a4243d | ||
|
135e2e4a21 | ||
|
c68c0bf501 | ||
|
cf3d86698d | ||
|
3251c4c40e | ||
|
bd5e0fd42a | ||
|
7d0b7122f0 | ||
|
c50052ac04 | ||
|
357c23b588 | ||
|
eca1afb6d5 | ||
|
85eddbfe22 | ||
|
c6c2733726 | ||
|
5d87b4ca3e | ||
|
89f550ca48 | ||
|
9e55d90736 | ||
|
8d0d9b58de | ||
|
ac5e484d4e | ||
|
bce18a1614 | ||
|
950b16370f | ||
|
4337e2b79a | ||
|
90d75ce80e | ||
|
72d34788dc | ||
|
6a2e6173ab | ||
|
65bb9fa3c4 | ||
|
90e1502e73 | ||
|
3cc990e1a2 | ||
|
10fd8454f7 | ||
|
56d7030222 | ||
|
8696052e27 | ||
|
5f7e130ff9 | ||
|
434c890686 | ||
|
5ab1b0bfd0 | ||
|
b9f632b634 | ||
|
ae8f32e6b4 | ||
|
ce8470ee7c | ||
|
3b1a726a23 | ||
|
3d4740203f | ||
|
7a74271e6a | ||
|
2cfae43fce | ||
|
a143b980ee | ||
|
329c385358 | ||
|
1543c651aa | ||
|
9cdaff4f1e | ||
|
8e3247221a | ||
|
ad975a473f | ||
|
9a8c0e9813 | ||
|
9d16dd22be | ||
|
c0501fc4e0 | ||
|
1acbb5dc9a | ||
|
2f6e146841 | ||
|
ba2bfa5b5c | ||
|
95ca89bf5b | ||
|
16d8a78d8a | ||
|
f116504e88 | ||
|
4d0b6ae382 | ||
|
13c4eba3af | ||
|
9756f64c11 | ||
|
807384cfac | ||
|
2329e321ec | ||
|
6c2e0d9262 | ||
|
887c271853 | ||
|
ea7c7f6447 | ||
|
29931c05ad | ||
|
17c227024e | ||
|
406a1496db | ||
|
c8180b91e0 | ||
|
1978929114 | ||
|
3e7debbcc5 | ||
|
a138b92b1b | ||
|
28619f1786 | ||
|
e8f30b708b | ||
|
39bc7ed397 | ||
|
59852e252b | ||
|
51764cc933 | ||
|
cb754604f1 | ||
|
2633bcef69 | ||
|
772c8abdcf | ||
|
ac098759ea | ||
|
349dda30b8 | ||
|
cbbd9b9a61 | ||
|
14ef0d725b | ||
|
40b89f61bd | ||
|
23c4020eea | ||
|
5ba374c03b | ||
|
f76ae86204 | ||
|
46ccd94514 | ||
|
7140675181 | ||
|
31f8e725dd | ||
|
5edbdb2466 | ||
|
83cf5eb617 | ||
|
5b0c332477 | ||
|
21a5feb322 | ||
|
16c87c36da | ||
|
a0ec928fca | ||
|
b9659bb9c1 | ||
|
35f375d756 | ||
|
04c80fe00e | ||
|
06732d8b8a | ||
|
8fc1e71fb3 | ||
|
aebfa6e96d | ||
|
3453abb670 | ||
|
637a0eac7f | ||
|
abe479d03f | ||
|
d1558d84b1 | ||
|
36e9e0a33c | ||
|
d78ab16021 | ||
|
c718706f9c | ||
|
f6586239c4 | ||
|
287d8fee73 | ||
|
5357b2b0dc | ||
|
0c4513838a | ||
|
d8a54da496 | ||
|
672ef1fd7c | ||
|
c50181f0a6 | ||
|
778f317f9f | ||
|
0394694a91 | ||
|
fec853735b | ||
|
087b206982 | ||
|
3bd04aeaf4 | ||
|
74e81eb6f3 | ||
|
3cb8fd035f | ||
|
0a96c3d56b | ||
|
2d16151fa8 | ||
|
93c5f6c9d3 | ||
|
e47985c101 | ||
|
1c1d20f82c | ||
|
880304c2fb | ||
|
bd3d5f213e | ||
|
0d6f4c9361 | ||
|
c49b53cb4b | ||
|
da177d3025 | ||
|
6d184fb47c | ||
|
3691662da2 | ||
|
776b6d8f12 | ||
|
82c33c4f0c | ||
|
ab77f0e0f4 | ||
|
df3c60e43f | ||
|
9aafdd2d10 | ||
|
1fe01dc0ce | ||
|
f0b5ec3e3a | ||
|
955f724d36 | ||
|
6cf0ed6166 | ||
|
1bcaf9d167 | ||
|
06b2ba9d75 | ||
|
85079ad213 | ||
|
b9225d1daa | ||
|
c88b6b608a | ||
|
56cd782175 | ||
|
6ce8865719 | ||
|
ac66332a4e | ||
|
c70afe3478 | ||
|
3c2f193714 | ||
|
bb9e970f8f | ||
|
9c8fbe831f | ||
|
4e1ee87269 | ||
|
9a32472522 | ||
|
1ecd6883d5 | ||
|
f89c6523e4 | ||
|
5c7b48fce1 | ||
|
1e2e8ed099 | ||
|
4d7399973e | ||
|
2f8275be8c | ||
|
58e5b83648 | ||
|
49e3f01a0a | ||
|
f64305e858 | ||
|
0470a3168c | ||
|
77482a0c95 | ||
|
b5193e1174 | ||
|
1d709a3b5c | ||
|
cc4e69bf92 | ||
|
4cf6d12704 | ||
|
7c52c3e9a8 | ||
|
68ffdc5c0f | ||
|
8d32cc794e | ||
|
8d3f60ed1f | ||
|
05395781cc | ||
|
33ba934937 | ||
|
f4019dbcd3 | ||
|
ffc40b2797 | ||
|
7a780e3087 | ||
|
712efe357e | ||
|
49638774f0 | ||
|
04f8e96297 | ||
|
4116f3d55b | ||
|
99d99b9d85 | ||
|
16b7969f78 | ||
|
15ae42be1d | ||
|
0f1412fb46 | ||
|
450f18dfbf | ||
|
e703c70b70 | ||
|
ee4b79129f | ||
|
42e4c9ff89 | ||
|
a354feb626 | ||
|
c0fe29ec82 | ||
|
7c4b12200b | ||
|
1abfb1cb0e | ||
|
9ae4401564 | ||
|
d95d6733a1 | ||
|
93e4004033 | ||
|
baabd1cbbd | ||
|
dbb7df138e | ||
|
0690f7354f | ||
|
004d2a1d9e | ||
|
733c2dc878 | ||
|
0071a05a6c | ||
|
7e53a41a30 | ||
|
32db9c814b | ||
|
0d44234452 | ||
|
d55caad8d6 | ||
|
1691180790 | ||
|
7ef591f3a8 | ||
|
383e9d4e46 | ||
|
d2b64f9af0 | ||
|
da192e718e | ||
|
cc4e65cee4 | ||
|
4c5837b85b | ||
|
ecd79ef7e4 | ||
|
a6f22bb7a9 | ||
|
cde7b4d4f6 | ||
|
dabcd3d946 | ||
|
a547ff1ca5 | ||
|
f12984b38e | ||
|
6962db7b2f | ||
|
050d9fa794 | ||
|
9c71523546 | ||
|
10eebad566 | ||
|
5405b05792 | ||
|
bb47b1ec8d | ||
|
32043caabf | ||
|
a58d1d040c | ||
|
2e7996152e | ||
|
d5e583aba3 | ||
|
f27b21cc68 | ||
|
244d204332 | ||
|
b15c81fef8 | ||
|
28923a69b2 | ||
|
e21a5c1b80 | ||
|
e278a26dc8 | ||
|
2eac0078cd | ||
|
3fa6ce4583 | ||
|
7d218ca5b2 | ||
|
721a37a377 | ||
|
5600c498d8 | ||
|
8eba798cdd | ||
|
0c76b731e7 | ||
|
2289e3297a | ||
|
51fbb38f66 | ||
|
86aaa7f478 | ||
|
c5c9d3a2ef | ||
|
1118fef164 | ||
|
e0ea76c9f1 | ||
|
2aab85f073 | ||
|
dfbe628944 | ||
|
bc35649dda | ||
|
09c6c81992 | ||
|
cf98f6a450 | ||
|
9e56bc72a3 | ||
|
85b9fe06e4 | ||
|
e91e38c4e6 | ||
|
fbf2fef17c | ||
|
3080575a17 | ||
|
10b9df7b9f | ||
|
dd6eec6a03 | ||
|
48ef6db4a5 | ||
|
7591a1182e | ||
|
0c4ba592f6 | ||
|
c6a15b3186 | ||
|
e89b59be8e | ||
|
315f071337 | ||
|
667bb19765 | ||
|
21d09e44c4 | ||
|
d36c3069c3 | ||
|
ab0747693d | ||
|
e322699829 | ||
|
220803d478 | ||
|
78d558f72e | ||
|
3c7dc9f11c | ||
|
a8a8452d21 | ||
|
9f5924984c | ||
|
6db5723a50 | ||
|
1d0bcc435b | ||
|
700158d83c | ||
|
df4e8c9f47 | ||
|
ce6baccd82 | ||
|
0caf1fdd7b | ||
|
adf1c5496e | ||
|
51b294e66b | ||
|
893accf59c | ||
|
2a10cd3333 | ||
|
3ec257abc3 | ||
|
295756a528 | ||
|
5603900fc2 | ||
|
e1195f7370 | ||
|
5625b15cb5 | ||
|
af4147ed58 | ||
|
9e10261e0b | ||
|
487fecb16e | ||
|
e0ce301c3f | ||
|
bb474287e5 | ||
|
583ae0385b | ||
|
35a4eef87b | ||
|
e46ecdcb2b | ||
|
6036420bc6 | ||
|
cd73661200 | ||
|
5dbadbbff6 | ||
|
2dc02fe0f2 | ||
|
a474b403f9 | ||
|
e9a8475ecf | ||
|
0f9bdf1ca0 | ||
|
a7781f2a6b | ||
|
71144bb675 | ||
|
6886f6fd39 | ||
|
83610c01c0 | ||
|
5b18edc8be | ||
|
671fa542b4 | ||
|
4e4685b039 | ||
|
e4023a349f | ||
|
e7c37d17c1 | ||
|
d6c2b64a43 | ||
|
10e49d8cd3 | ||
|
95d83a8ced | ||
|
6b00c4e6ce | ||
|
dc2def403c | ||
|
89e2603f02 | ||
|
35e03e2ad9 | ||
|
12e853b871 | ||
|
5841596acb | ||
|
377e35b1af | ||
|
a3181d4458 | ||
|
e057c7beea | ||
|
60c25f88cf | ||
|
d532b9dffc | ||
|
5a2310ff4d | ||
|
472120d5ec | ||
|
9de83bf922 | ||
|
96bd76e45e | ||
|
5564e2178a | ||
|
9eb643f8f7 | ||
|
c2bdaddcec | ||
|
17888a2da0 | ||
|
eda18c3860 | ||
|
878bf13a0e | ||
|
a8c21b2477 | ||
|
b85bd8d296 | ||
|
eb6d5690aa | ||
|
ebe00ea58b | ||
|
e14a0b54f5 | ||
|
2f0f63e2b1 | ||
|
048100ebb3 | ||
|
7880d07868 | ||
|
9ba42b7919 | ||
|
fcc7ed3ed4 | ||
|
c000d4f4b3 | ||
|
6e0c484441 | ||
|
753a25a5e1 | ||
|
57b4198d2c | ||
|
2078fa4e40 | ||
|
69826610a2 | ||
|
0f9727144f | ||
|
11355bfdc5 | ||
|
4d08d7385f | ||
|
ce7da882ee | ||
|
92c68882e2 | ||
|
6424832984 | ||
|
3c0331eb6e | ||
|
1eeb5ab471 | ||
|
c77a0b4709 | ||
|
1b64688042 | ||
|
c082505f61 | ||
|
f555e528ba | ||
|
96ff76fd1d | ||
|
9ceb7b9c88 | ||
|
6dc8ad2ba6 | ||
|
152e354d87 | ||
|
dbef391855 | ||
|
78f3f1c01a | ||
|
e7409145b6 | ||
|
bf8e34a0be | ||
|
4aaea3fe71 | ||
|
e5b4332f17 | ||
|
72a0adb434 | ||
|
37b745c69e | ||
|
3338164f43 | ||
|
98440beffa | ||
|
0c6f779aab | ||
|
fb27ae991c | ||
|
a41c9b6819 | ||
|
625812f7e6 | ||
|
e8cee2907c | ||
|
da25d10900 | ||
|
9f01258341 | ||
|
8608032243 | ||
|
bdbb362644 | ||
|
30671e7a20 | ||
|
8b578c5dde | ||
|
3792a5fb94 | ||
|
fb28268582 | ||
|
be3c15c37c | ||
|
b34342f01e | ||
|
19992ffcf9 | ||
|
6c15940005 | ||
|
7f0f745af3 | ||
|
1d62003486 | ||
|
fd373baeae | ||
|
f880e12a26 | ||
|
e81332e6b9 | ||
|
bda8766564 | ||
|
6d7b856d1d | ||
|
90a8d704c1 | ||
|
8dfcec249f | ||
|
659f602a12 | ||
|
45877f8b26 | ||
|
77505e3c75 | ||
|
dde7acc70f | ||
|
531402cede | ||
|
56ca9d4125 | ||
|
60b3921808 | ||
|
3a1759aabc | ||
|
ac732f4d1d | ||
|
7779879c6d | ||
|
c6a9837f1f | ||
|
6e49440b95 | ||
|
12746c5ff9 | ||
|
7bd4a999a0 | ||
|
e48d55c3e5 | ||
|
54efc9f2f5 | ||
|
963eeccf7b | ||
|
c89edd7b22 | ||
|
804d674d37 | ||
|
514091eb41 | ||
|
cd506bd3f1 | ||
|
e2d47d7d0d | ||
|
7a9afd4aff | ||
|
e647775608 | ||
|
577aa519e0 | ||
|
03cfef6a8d | ||
|
1219a30dff | ||
|
801719e3ba | ||
|
02098dbd79 | ||
|
e149e4b5fd | ||
|
b19f1a1023 | ||
|
192bfb5555 | ||
|
fd578d1c36 | ||
|
230e7f6914 | ||
|
12bba9da29 | ||
|
03424f76ea | ||
|
745849023d | ||
|
3e3b1764b7 | ||
|
902f0c3bf7 | ||
|
0f51249a76 | ||
|
3621e252d1 | ||
|
5669b1f04f | ||
|
91c99960ba | ||
|
b309504ffb | ||
|
22ab4b7473 | ||
|
04ea9343b0 | ||
|
b93f91078b | ||
|
b82e4be5c5 | ||
|
77a6e6f617 | ||
|
959ae59af0 | ||
|
98dd926cb9 | ||
|
8197c7aa7a | ||
|
1687adf015 | ||
|
7542ca907c | ||
|
1652b06e8c | ||
|
1a835ef094 | ||
|
575f55b22c | ||
|
d105387ece | ||
|
587eceb7c0 | ||
|
c90d7756c0 | ||
|
9e90d9016d | ||
|
ccec93eaa3 | ||
|
7bf823e0df | ||
|
b533d8d164 | ||
|
97477bb751 | ||
|
9cf863979b | ||
|
9ffe990c0b | ||
|
2c57e949b9 | ||
|
a7e185eb11 | ||
|
091eff9bc2 | ||
|
a04be2b28a | ||
|
caf66068bf | ||
|
8deba24d7d | ||
|
84b130e0cb | ||
|
e6209f449e | ||
|
faa4c5b9fc | ||
|
df9bfc7635 | ||
|
a46648f1ee | ||
|
215434bb4f | ||
|
40e0037d50 | ||
|
6afd839ae8 | ||
|
63595d2469 | ||
|
d715e1ba6b | ||
|
fb8a0c9ea9 | ||
|
ad20eba65e | ||
|
ea73e20115 | ||
|
1b8e9271a6 | ||
|
3a8a7a592d | ||
|
9d5c63de4f | ||
|
e37c95b9e5 | ||
|
201c7d893e | ||
|
c12108d1ac | ||
|
6ffd1046bd | ||
|
d4f49d6a02 | ||
|
cff24af099 | ||
|
b99ba85acd | ||
|
a0b707cbda | ||
|
1d7ffe358e | ||
|
9160f0e2a2 | ||
|
92272533e5 | ||
|
648e091523 | ||
|
b023f58497 | ||
|
c639791d4f | ||
|
6d52288e28 | ||
|
3e2f4b163b | ||
|
e0dbd198d8 | ||
|
a76c5c8746 | ||
|
20b43ce56e | ||
|
8215ce14c6 | ||
|
3fead0a8a7 | ||
|
c8bf3e8583 | ||
|
42dee6c275 | ||
|
6f3f866f78 | ||
|
adf2e7322d | ||
|
0df170926a | ||
|
20a26732a9 | ||
|
0da3e91a29 | ||
|
9ad56dc373 | ||
|
29dab26dce | ||
|
10e8fbcdab | ||
|
6c4f566765 | ||
|
78df302e86 | ||
|
f52dd4f098 | ||
|
dbab786c7b | ||
|
3eb44d27b2 | ||
|
52bea115ac | ||
|
19bdda25c6 | ||
|
b26bc9ed5f | ||
|
865cedc24f | ||
|
33f0811ad2 | ||
|
8cedf27fea | ||
|
052a829167 | ||
|
5371c97ccd | ||
|
c53b957293 | ||
|
e6f8dc96df | ||
|
21648b1b1b | ||
|
83db6f6596 | ||
|
3adfa574c0 | ||
|
4d0ffc5beb | ||
|
69f9b160dd | ||
|
c17b02cfb5 | ||
|
6dd57b63a6 | ||
|
248c8014c8 | ||
|
5fe2766a6b | ||
|
000e0ad517 | ||
|
c047375143 | ||
|
bd9e62cbd2 | ||
|
5ecae17538 | ||
|
35037e2dc9 | ||
|
059202be09 | ||
|
6672f63981 | ||
|
f390eca4de | ||
|
edc5e33559 | ||
|
a4b81edb5a | ||
|
fc5f338e16 | ||
|
767e380144 | ||
|
60aff6ae77 | ||
|
345d9da7f2 | ||
|
98d45b1b81 | ||
|
2cbf12bf0b | ||
|
968529f7e8 | ||
|
b1b7c3903f | ||
|
530a620d68 | ||
|
1f2ecd08eb | ||
|
d5eeb12ce7 | ||
|
e9e9986978 | ||
|
d44f212b95 | ||
|
47be6bcde3 | ||
|
ef256a82ab | ||
|
b4d56f42f7 | ||
|
c1598c1a59 | ||
|
3b6decfaf6 | ||
|
5494e8c3dc | ||
|
39059ae6bf | ||
|
5773f63664 | ||
|
5698c30d1a | ||
|
218d69cf38 | ||
|
00369fd613 | ||
|
ef86e01cd6 | ||
|
efd9f740ca | ||
|
36c121523a | ||
|
991c12025b | ||
|
f1d6945cd5 | ||
|
2ebebd1dfa | ||
|
d955ed464e | ||
|
b7695115da | ||
|
f274678ad7 | ||
|
5ff0309586 | ||
|
ffb6c25ce7 | ||
|
7237ae319a | ||
|
cdd5a911a9 | ||
|
66b53f013d | ||
|
4d9ffffe56 | ||
|
c08f7de6bb | ||
|
77789c0b17 | ||
|
be7056ff59 | ||
|
274a55a31f | ||
|
32977c4e3f | ||
|
075b1626bd | ||
|
fd6538fdc7 | ||
|
b897191cc8 | ||
|
31897581d3 | ||
|
6c1820edc0 | ||
|
cfe4c8c6f4 | ||
|
b83165f9e5 | ||
|
7706f9058b | ||
|
03222ba1b2 | ||
|
d4f49db342 | ||
|
40e1b0559e | ||
|
738f1decbb | ||
|
e5a364d052 | ||
|
357a3e2e7b | ||
|
af91fd99cc | ||
|
3855f60a0d | ||
|
079b379e7a | ||
|
e23e036677 | ||
|
b824ff5457 | ||
|
3669a1b5d6 | ||
|
b93f9aaf01 | ||
|
8679290206 | ||
|
4acec5c6c7 | ||
|
f1b03453a4 | ||
|
7972dd5556 | ||
|
4842500f0a | ||
|
84c7f28ec5 | ||
|
f3eea43d24 | ||
|
8babaddbcb | ||
|
13cdaabb17 | ||
|
a94aa21088 | ||
|
6116bed4e3 | ||
|
fabd0b4dda | ||
|
6b72f86e7b | ||
|
02cf546124 | ||
|
eecb012d64 | ||
|
04e9b40769 | ||
|
efdbaeb397 | ||
|
46425b920c | ||
|
f5be43c2ac | ||
|
080541a2fe | ||
|
7dc638edf4 | ||
|
3b686194d8 | ||
|
5c2640f88f | ||
|
eca0f92dff | ||
|
260fa6c038 | ||
|
8ec6bc9138 | ||
|
93fa92369b | ||
|
bc6c5ab7a7 | ||
|
1826625e4f | ||
|
20b8fb2719 | ||
|
f813e71b29 | ||
|
02422a6e31 | ||
|
69a34e87f3 | ||
|
cbeaa16b61 | ||
|
05917ac142 | ||
|
0c8de68b80 | ||
|
44d93d52d3 | ||
|
073bec9e8c | ||
|
e6a8c2bea5 | ||
|
81c316cd2c | ||
|
659c851960 | ||
|
572701d9a0 | ||
|
66ef37bd4e | ||
|
9ddf75604d | ||
|
3ed7e1d7e8 | ||
|
b2b412105a | ||
|
60a3c4f65e | ||
|
9645414c17 | ||
|
af0136ef39 | ||
|
b76586c4fd | ||
|
376e4ebde0 | ||
|
1439b8787f | ||
|
b8854a99be | ||
|
6cf02173dc | ||
|
4d8a53d8c9 | ||
|
7f43718e1d | ||
|
690ce637b1 | ||
|
4d023e679e | ||
|
6e220a978f | ||
|
39757cd90e | ||
|
5ccbbea757 | ||
|
309222c082 | ||
|
50f5fe2c91 | ||
|
eacae83182 | ||
|
403d770b1d | ||
|
a481bf1b53 | ||
|
0d32570c9e | ||
|
f017e99b02 | ||
|
a89d64d435 | ||
|
3a27086534 | ||
|
413c1e41b5 | ||
|
8b879464b8 | ||
|
97c9bbc1fe | ||
|
e5bebef7b2 | ||
|
73752c4b3f | ||
|
dcf7c9838d | ||
|
f325e7694b | ||
|
75d204c9ca | ||
|
cf4008951d | ||
|
d67818d096 | ||
|
6aaea8ad4f | ||
|
de41278096 | ||
|
f01ab70907 | ||
|
bbdb221a67 | ||
|
7d053f8c79 | ||
|
fcad0bf3ca | ||
|
58f929f6b5 | ||
|
943198c56e | ||
|
2112ad4004 | ||
|
5995dc81f3 | ||
|
104e752634 | ||
|
fc335cd15d | ||
|
45923ba0d3 | ||
|
8fefa99d81 | ||
|
85d652cd67 | ||
|
88e41e9c7d | ||
|
26750488d0 | ||
|
a0f582b2b9 | ||
|
917b53bec2 | ||
|
e44a93422a | ||
|
e115ef4259 | ||
|
bcec699124 | ||
|
d23c728a1a | ||
|
0a2d507dec | ||
|
0c08617606 | ||
|
29fba45c33 | ||
|
1071a455b6 | ||
|
57e4b36fd7 | ||
|
f08fa92294 | ||
|
3a8d87d292 | ||
|
53302c9e90 | ||
|
28a24d8c03 | ||
|
3e52411bc4 | ||
|
1548ea18e1 | ||
|
f8cd1ba8e5 | ||
|
d18a4be31f | ||
|
c56f270ed6 | ||
|
2bca3d1032 | ||
|
9f81d69c5e | ||
|
815419260d | ||
|
6729a3d51f | ||
|
6d8ce280dd | ||
|
9e5b455065 | ||
|
09cbac3019 | ||
|
5354ad3934 | ||
|
7754048b80 | ||
|
ffeeff260f | ||
|
71ea74d273 | ||
|
3a744c79ae | ||
|
d9ba27a1ec | ||
|
0a3540049c | ||
|
ab50ca9bbd | ||
|
0bee793ab8 | ||
|
89fc5e19d9 | ||
|
6a3bf51084 | ||
|
df1e298c84 | ||
|
b9c706324b | ||
|
ab7e2de1d9 | ||
|
7ef8753b94 | ||
|
d48a5efa03 | ||
|
0804b62ffb | ||
|
37995b9ec7 | ||
|
7a3e6fde7f | ||
|
bd4291462e | ||
|
489d6778db | ||
|
538a1413d9 | ||
|
3c9b755045 | ||
|
fd7b345efa | ||
|
c96468149a | ||
|
d6d4897e1c | ||
|
e07e248fea | ||
|
b561460307 | ||
|
f6d1a27f51 | ||
|
80a1500634 | ||
|
bcb578c933 | ||
|
75ad454971 | ||
|
e90b7f2d81 | ||
|
ffca11ca8a | ||
|
bd98951d32 | ||
|
9106fb82f3 | ||
|
5c6e17bc89 | ||
|
538e9e9b4e | ||
|
d871b3c7d6 | ||
|
99c6c9b411 | ||
|
3eca4ada5a | ||
|
19431abc73 | ||
|
3e299f1ab9 | ||
|
42873d3829 | ||
|
4983327f90 | ||
|
fddbe6cf6c | ||
|
57f00c612d | ||
|
235288e903 | ||
|
38be744c3e | ||
|
2384ec8792 | ||
|
85f7caa0eb | ||
|
ad0f0414c4 | ||
|
437320f90c | ||
|
c1db7182ac | ||
|
aa4af69afc | ||
|
21a39af97b | ||
|
0812cc5944 | ||
|
1fb5d2c6c5 | ||
|
1b9901d232 | ||
|
f15d2793cc | ||
|
ad4d71dbe1 | ||
|
4bee6ffc90 | ||
|
01f63b3d97 | ||
|
b19b590efc | ||
|
6b7577f94d | ||
|
4d09b14522 | ||
|
9f1e95324d | ||
|
f98314346d | ||
|
fa659b615a | ||
|
e4aafa7edb | ||
|
811c40b074 | ||
|
405c528ef0 | ||
|
a176216374 | ||
|
8d0b090f66 | ||
|
337c5ed61c | ||
|
b32d39860b | ||
|
a091608f72 | ||
|
9686ee7833 | ||
|
3b55dcac65 | ||
|
d524d11d8a | ||
|
9c080ec631 | ||
|
da11476fd7 | ||
|
d157b9cfc7 | ||
|
bc8c61748a | ||
|
3ad727889b | ||
|
8df128bb7a | ||
|
5a4568f4db | ||
|
170295919a | ||
|
2262cbfdfd | ||
|
43e40bcf5a | ||
|
e60595f0de | ||
|
527a7c115d | ||
|
c22f910500 | ||
|
667b7969ff | ||
|
1bbf065142 | ||
|
606cad3c3a | ||
|
c9612dc8b8 | ||
|
6ee30e22a6 | ||
|
a6536e1ef9 | ||
|
92cf5abd08 | ||
|
d1e545ac2c | ||
|
ec6567c68d | ||
|
3b236307f7 | ||
|
14ac54bf3d | ||
|
e53b796523 | ||
|
9d189b2b34 | ||
|
84545cf26d | ||
|
c427a6d0a5 | ||
|
42dc6e1ea6 | ||
|
431b95ff7b | ||
|
041fb731a6 | ||
|
5289f80394 | ||
|
6c12ce0e04 | ||
|
46982c7d64 | ||
|
359448eb69 | ||
|
32bb256cca | ||
|
219585bbcf | ||
|
1a9dbcbd1d | ||
|
6a9848ebe7 | ||
|
9e73d3590b | ||
|
08c9a25182 | ||
|
5b9a45dc1d | ||
|
9dd2fb9674 | ||
|
234b5c8363 | ||
|
1dc7ec3701 | ||
|
72773caf58 | ||
|
094249d074 | ||
|
c324f17453 | ||
|
25a31b0689 | ||
|
f2995dd196 | ||
|
ca575162f7 | ||
|
f0ade02435 | ||
|
b13c02017a | ||
|
716c8c1ce4 | ||
|
30a49b84ad | ||
|
b8e4150bfd | ||
|
ed0edcb36c | ||
|
e93046e8e2 | ||
|
18a0ca0881 | ||
|
21dbc800d5 | ||
|
5c1eda3392 | ||
|
1139317788 | ||
|
a24ccb8da9 | ||
|
0aaa396315 | ||
|
f9dc19e1c4 | ||
|
1839724d7c | ||
|
a5aeb3a2f8 | ||
|
d5d57aa360 | ||
|
9aa5df7790 | ||
|
a7697465a8 | ||
|
aeb7e5ce47 | ||
|
42cef1e918 | ||
|
b832930512 | ||
|
057ac550bd | ||
|
3a14b76a61 | ||
|
e1a8c76598 | ||
|
b62e6552cd | ||
|
ca6e50e80c | ||
|
ad8947a85d | ||
|
fb562210b2 | ||
|
34940d1c4f | ||
|
7fa1459dc3 | ||
|
625689dbb1 | ||
|
dc976047d2 | ||
|
a014e830e7 | ||
|
1e828bfdca | ||
|
60309ec6a3 | ||
|
aabba090b1 | ||
|
6ae903ef4d | ||
|
dd86940c6b | ||
|
7d7b7ed6f3 | ||
|
8de904cd3c | ||
|
c706b8dd2f | ||
|
d55d4d42e5 | ||
|
bbfeffec69 | ||
|
3c471dc120 | ||
|
be0fa69b3b | ||
|
bf1bdf0951 | ||
|
a1a10a6c55 | ||
|
02e8307093 | ||
|
285a3a211e | ||
|
80cb1471fc | ||
|
a7a194f835 | ||
|
41a0b3359a | ||
|
1f70357d37 | ||
|
107f2e128e | ||
|
e1cd8d9b85 | ||
|
293f621e46 | ||
|
c5b551bbcb | ||
|
ac776eabc1 | ||
|
05c17fbfac | ||
|
6b9de394ca | ||
|
bef9a29581 | ||
|
1546aad7e9 | ||
|
fe47fef261 | ||
|
288f4ab43b | ||
|
294cbaea4d | ||
|
f5fc1f2f22 | ||
|
c90865c4d2 | ||
|
322641ccd6 | ||
|
2656666ed8 | ||
|
2d673902a4 | ||
|
631c41a1ff | ||
|
7841c99c02 | ||
|
ac75d8f6ac | ||
|
200ff617dc | ||
|
bbdc18f371 | ||
|
0d35b64f9a | ||
|
765c4482d6 | ||
|
0a0e31a37c | ||
|
0c1f4031b4 | ||
|
9ed022458b | ||
|
ba5f0bc6e3 | ||
|
793e8f6c0f | ||
|
6182ce521d | ||
|
544c50663a | ||
|
53aa9e2b42 | ||
|
884260189c | ||
|
2f9464f21f | ||
|
c6e993b04a | ||
|
89eb012b25 | ||
|
1e2aa4e2b5 | ||
|
0019bb8d6b | ||
|
e629a4d325 | ||
|
049c769d37 | ||
|
47aed8742a | ||
|
8aad67ccfe | ||
|
af7cbcbca7 | ||
|
88a91314af | ||
|
9873c2d756 | ||
|
46b68cf461 | ||
|
6b96b1f355 | ||
|
dc819700bb | ||
|
1d1d5fea06 | ||
|
c3afc0ede7 | ||
|
2092110a6e | ||
|
fc940e9a7c | ||
|
8718310dd0 | ||
|
1b527f2bbe | ||
|
4da217bc2f | ||
|
d3abd4ebf2 | ||
|
38851edf86 | ||
|
05efb765d6 | ||
|
28dc4a6abd | ||
|
2f7b56f96f | ||
|
fdaa3735fb | ||
|
7dfaea12f7 | ||
|
18199b27d9 | ||
|
a7c52082bb | ||
|
3b5357e0c1 | ||
|
10dd4e45ed | ||
|
1963835309 | ||
|
46ec0c1381 | ||
|
bb84ae4d68 | ||
|
b3ff53c0da | ||
|
acd7bfd9f5 | ||
|
1dff50d080 | ||
|
af40970d09 | ||
|
07535a494e | ||
|
907422cefa | ||
|
f643baea25 | ||
|
55a4f33982 | ||
|
df6700959a | ||
|
fde8235f3e | ||
|
f6ba56d966 | ||
|
4a5312823b | ||
|
31a27b0e1c | ||
|
984ad868e8 | ||
|
9b657eeda2 | ||
|
6f3ad4b3b0 | ||
|
56f06fae3c | ||
|
c22d884357 | ||
|
35dc22197d | ||
|
70d56ca0be | ||
|
bca09b9476 | ||
|
b82bf16505 | ||
|
2f254d81cd | ||
|
b14ce03e5b | ||
|
90b04cbd37 | ||
|
5ae866ea85 | ||
|
b450ab9f5a | ||
|
138bc8144b | ||
|
c9831833c4 | ||
|
2813f93c18 | ||
|
27bec674a0 | ||
|
ff79ca8781 | ||
|
34a1342db6 | ||
|
e252986b98 | ||
|
3537c3e5f9 | ||
|
fdc86f94c4 | ||
|
dc5dc94ed5 | ||
|
f7682d3da3 | ||
|
8e2975d23d | ||
|
ce85489166 | ||
|
13f5738090 | ||
|
cce2ae7401 | ||
|
c9b49a50c8 | ||
|
c419c43622 | ||
|
cc5ecfba2b | ||
|
a98d5feff6 | ||
|
7aa4feffd4 | ||
|
0b46a744f1 | ||
|
4d5efff2af | ||
|
4b2aaa6836 | ||
|
4e27600f9c | ||
|
6d4394a88d | ||
|
aad9c803ba | ||
|
5418cc82ca | ||
|
79eb33a7f4 | ||
|
cdef433f38 | ||
|
b29b50df0b | ||
|
91c3986f88 | ||
|
29e4a335fb | ||
|
4e942afba6 | ||
|
3bee0a142b | ||
|
9a9fdef512 | ||
|
4888b4bd14 | ||
|
bba3af17b7 | ||
|
b695acf4ed | ||
|
3367b52b53 | ||
|
c31622f286 | ||
|
488e469e33 | ||
|
fa7d48a3bd | ||
|
0cd2fd660d | ||
|
6bb52d5ad6 | ||
|
c2d5fc13d7 | ||
|
b1e5896d4c | ||
|
cc42b7bc38 | ||
|
4bdb3d0b7e | ||
|
6601547b81 | ||
|
7e29804e68 | ||
|
257a24166e | ||
|
8b3c9e81a7 | ||
|
c65e051e1f | ||
|
a91c8ffbf3 | ||
|
0530c74924 | ||
|
2feed88c51 | ||
|
2017e9d7e9 | ||
|
afe6cb9454 | ||
|
690e22b39a | ||
|
8a0aa40707 | ||
|
1f40a14084 | ||
|
6b9a270225 | ||
|
0bc55bff7f | ||
|
d9215b044f | ||
|
2f9384f891 | ||
|
a172b1380e | ||
|
0d4c074e84 | ||
|
9eff7e6060 | ||
|
1edb345e85 | ||
|
54ed374af6 | ||
|
9866e5912c | ||
|
4058f624f4 | ||
|
0bc15f40b3 | ||
|
7a55a08fec | ||
|
4efb6003dc | ||
|
f4f96cfe89 | ||
|
a43ce33adf | ||
|
f95ccd6700 | ||
|
07184301d1 | ||
|
0678dad2d6 | ||
|
b2d59002bb | ||
|
7557791230 | ||
|
f10d9f75b0 | ||
|
5a05cc5797 | ||
|
488394ff47 | ||
|
b2ba0ee849 | ||
|
6c108bbf6c | ||
|
275c80ade5 | ||
|
00bc25ed5c | ||
|
f5ef318f70 | ||
|
ff355b9f4d | ||
|
9a9d51caaf | ||
|
3e6e75c27b | ||
|
a8689816bf | ||
|
27d1a0ee7c | ||
|
8e12ace3ed | ||
|
d5c6690606 | ||
|
f6741cf342 | ||
|
44fad32ee5 | ||
|
bae7ff0ca5 | ||
|
074d02da56 | ||
|
70b01b70c6 | ||
|
d29e4c434c | ||
|
423191bda9 | ||
|
7a0af66c63 | ||
|
49e444e73b | ||
|
0db0a565b7 | ||
|
5fb01b5c7a | ||
|
854f1163cd | ||
|
d55f6aeb2a | ||
|
ea30a6bd38 | ||
|
e09b26b99b | ||
|
e7386e6fe3 | ||
|
767213cdc1 | ||
|
a189b2eff0 | ||
|
655ea6945d | ||
|
5106ccee91 | ||
|
1ee515454a | ||
|
fc46c87ef7 | ||
|
422b81ae24 | ||
|
17124e86d1 | ||
|
d2aab6536c | ||
|
ed71f68e1d | ||
|
01d451f72a | ||
|
5b3f07f3c5 | ||
|
edf7cab1ef | ||
|
caaac5c1a2 | ||
|
5a28a6bc90 | ||
|
f9f7c86915 | ||
|
e2d59ee1fa | ||
|
d81802e7d2 | ||
|
73bb79b558 | ||
|
c41ebe8d9d | ||
|
8e2e7eccd9 | ||
|
527a7da2ff | ||
|
40399cf3e1 | ||
|
873808a66a | ||
|
cf300bc842 | ||
|
9a06824fde | ||
|
186316bb8b | ||
|
5c8861cbd1 | ||
|
c710cfd273 | ||
|
3ef41016b5 | ||
|
85423fd835 | ||
|
d690146f9f | ||
|
944e0ef304 | ||
|
409dcea0c6 | ||
|
6c20cdefd4 | ||
|
300f1590ba | ||
|
f6c2013df8 | ||
|
e3dc77357c | ||
|
a739636ce6 | ||
|
7620c2b0b7 | ||
|
60c4045000 | ||
|
39fb40dc37 | ||
|
145cb6c41e | ||
|
de9f9985d1 | ||
|
23277aaf85 | ||
|
e9e7a1d0df | ||
|
3453240833 | ||
|
1882aac628 | ||
|
6868e7086b | ||
|
b35eeb6626 | ||
|
98c56818bb | ||
|
722a0df681 | ||
|
115cf116a2 | ||
|
f34e048fad | ||
|
a754659ab9 | ||
|
0517d1e5d6 | ||
|
31795f6c78 | ||
|
5ac9178f79 | ||
|
faf0a4ec8d | ||
|
be70cdf75b | ||
|
5284989a08 | ||
|
739449bde4 | ||
|
1e9cbc9606 | ||
|
0527dbbdc2 | ||
|
80f061a2ca | ||
|
d687abd7ef | ||
|
c16a92081d | ||
|
1289be1d90 | ||
|
fdfabe8f92 | ||
|
db4e45ba61 | ||
|
28621f7e89 | ||
|
ad2b6ef2fa | ||
|
f6ca396e6e | ||
|
2f46a175ab | ||
|
79c84150a0 | ||
|
318a61e7c5 | ||
|
31c66ae3cd | ||
|
c50fdde5da | ||
|
a7f5a2089d | ||
|
10252228ae | ||
|
573222762a | ||
|
a2be4fc535 | ||
|
e555eafb33 | ||
|
fa7eb0ff9d | ||
|
733b38250b | ||
|
50177bd997 | ||
|
37ad911659 | ||
|
538d6f3d47 | ||
|
1c7ad612a7 | ||
|
789b2005b8 | ||
|
83038de321 | ||
|
871190b7ee | ||
|
0a65d538c5 | ||
|
5edf10c398 | ||
|
60db566c2d | ||
|
36381a098f | ||
|
e6b54efe1b | ||
|
ecde67c25f | ||
|
46d0100bb7 | ||
|
957b311872 | ||
|
7051459c47 | ||
|
69038e2d84 | ||
|
652a72aba7 | ||
|
9a1adff5fe | ||
|
c8f7772f1b | ||
|
7829c1e272 | ||
|
66f1bd9c11 | ||
|
e2e9a7fef2 | ||
|
46a499b211 | ||
|
680ebca853 | ||
|
39ef8433bb | ||
|
76889aba4b | ||
|
e2627ab26f | ||
|
0f51b97494 | ||
|
5a5e5b3bfc | ||
|
e530f5246e | ||
|
274da67131 | ||
|
aeae45fb93 | ||
|
6b3868f23b | ||
|
423a75e7d8 | ||
|
97bb76c027 | ||
|
0697406c55 | ||
|
8356adb00a | ||
|
f712e1bdbb | ||
|
1b78486fba | ||
|
16e88bca30 | ||
|
2d01792604 | ||
|
d64e263572 | ||
|
84a3e77e63 | ||
|
af48240f71 | ||
|
5cac8a9fcd | ||
|
15ba608207 | ||
|
04dffb002f | ||
|
b0eb588de8 | ||
|
dd350fe126 | ||
|
c42e4ac7c5 | ||
|
943a0fdbbf | ||
|
4860253bff | ||
|
da01dc882b | ||
|
33038e621b | ||
|
4332644d8a | ||
|
beb4f66767 | ||
|
ca2602a979 | ||
|
64f35d035e | ||
|
0f2c0e68e1 | ||
|
0eb956c73c | ||
|
6b9307a8d8 | ||
|
1145443916 | ||
|
e209663939 | ||
|
022531e879 | ||
|
56ee31a0c8 | ||
|
4cc41ccd2e | ||
|
67bd5a0f18 | ||
|
3e538d9df5 | ||
|
d73657fa0d | ||
|
8f9895eaf9 | ||
|
649b0e1547 | ||
|
2f44bef71b | ||
|
7f7bf44779 | ||
|
bcc767578f | ||
|
f0ba2b43c5 | ||
|
ae3931b5de | ||
|
b22b5e9113 | ||
|
501a42b2fa | ||
|
39c669a36a | ||
|
d996637259 | ||
|
cbd532d4f0 | ||
|
cf32366689 | ||
|
d31632f71b | ||
|
df28bad7eb | ||
|
c29a2694a2 | ||
|
aec1860662 | ||
|
efa6cb8d61 | ||
|
973328b6d1 | ||
|
4775b60887 | ||
|
96ed2786df | ||
|
ccdedfa92e | ||
|
eeef68482c | ||
|
044f35d4b5 | ||
|
b9aae5b4cf | ||
|
20e18a149c | ||
|
e765e9eb39 | ||
|
181f88fd99 | ||
|
4e0aad8abe | ||
|
59303087dc | ||
|
58da15432f | ||
|
4fd4360c18 | ||
|
09fbf6428c | ||
|
6ece7f4c1b | ||
|
fab2271c9f | ||
|
43618c774a | ||
|
d6b3b4c404 | ||
|
8371e2ece6 | ||
|
0c6a966c58 | ||
|
fc813715d7 | ||
|
cb563f7e60 | ||
|
1e788305c3 | ||
|
7d7f6b251c | ||
|
576fb1a828 | ||
|
1c40f31f49 | ||
|
5cb23813f5 | ||
|
32017a80f2 | ||
|
750b6fc1c7 | ||
|
e8b1e1410e | ||
|
6a30ca967d | ||
|
466d79e5d0 | ||
|
d886436d75 | ||
|
9438f58bac | ||
|
d3fcf4cb76 | ||
|
e2c6a865ec | ||
|
0682ea28c8 | ||
|
a9dee1ba12 | ||
|
8f5d3edaa5 | ||
|
3654943258 | ||
|
2762ce2bb8 | ||
|
0e8ee78d62 | ||
|
ef5ec3632c | ||
|
c990e81def | ||
|
07fc6aa647 | ||
|
65e1460bca | ||
|
e957269416 | ||
|
5072a5b891 | ||
|
6070a931c4 | ||
|
5efa227e70 | ||
|
276f066b7b | ||
|
5b0a9b9b56 | ||
|
11d31ad488 | ||
|
ceb6a0b003 | ||
|
5dcb896770 | ||
|
9595e2a226 | ||
|
dbd480913d | ||
|
09ac21e99e | ||
|
457cb05162 | ||
|
d1e064532d | ||
|
3477ee68ac | ||
|
adc7d8e2f1 | ||
|
cd7dd12d3c | ||
|
c0541950a7 | ||
|
67f7e2e7ff | ||
|
beec324677 | ||
|
fda62a97b5 | ||
|
ae49199f36 | ||
|
5778d7a3b3 | ||
|
7d749d6b1e | ||
|
dc73899bde | ||
|
a91b5f4bb6 | ||
|
55cb547664 | ||
|
33bdaaf385 | ||
|
1d9b0233aa | ||
|
855d6f62a3 | ||
|
3ae1ebb2f4 | ||
|
089b53e514 | ||
|
d93a210de6 | ||
|
4544144f66 | ||
|
e5d3792335 | ||
|
c53d4fd757 | ||
|
83110bce76 | ||
|
0cfa07b1b0 | ||
|
341c9029c4 | ||
|
060e78577d | ||
|
ceb1db5379 | ||
|
9921f4eb00 | ||
|
b1f840622d | ||
|
64199704c2 | ||
|
33b96b4c65 | ||
|
81299384af | ||
|
1554e9dea5 | ||
|
5c430a3b0e | ||
|
9c74d18abf | ||
|
a40a5ef3bf | ||
|
fce571f38c | ||
|
f079fa3bdd | ||
|
b44b733090 | ||
|
d1089f9284 | ||
|
d2457a0079 | ||
|
7e407af638 | ||
|
3cee7b0858 | ||
|
ceb8e70dc7 | ||
|
a84a8e7710 | ||
|
6e0c3c076d | ||
|
b83aadbb7b | ||
|
3a8e2632a7 | ||
|
cf78ec2e22 | ||
|
35903572e1 | ||
|
e4254d6195 | ||
|
de4f8c75e5 | ||
|
1322e8cbcc | ||
|
03a111eebb | ||
|
fe8e5adbee | ||
|
7b94901129 | ||
|
4f4f18bc0e | ||
|
018591d1fa | ||
|
7364e82c21 | ||
|
f008f080f1 | ||
|
275851091a | ||
|
5d49fcfe4e | ||
|
8eef7c75e4 | ||
|
762b4e88f8 | ||
|
a2de167b95 | ||
|
a7213453c7 | ||
|
673653a141 | ||
|
7d135730bf | ||
|
456a20b8f8 | ||
|
48074c254d | ||
|
50f587cf02 | ||
|
79a627c14f | ||
|
a873898422 | ||
|
859b950106 | ||
|
7f13042c44 | ||
|
7e6a43de91 | ||
|
a3c88b6ec7 | ||
|
71efa09737 | ||
|
c19f7f814f | ||
|
97e88d7983 | ||
|
cc5ead7474 | ||
|
b823c729e7 | ||
|
4eac85bec6 | ||
|
7bfb6c0ee9 | ||
|
b879538da9 | ||
|
502b26e0b4 | ||
|
8d58ad7d86 | ||
|
c490aa8d90 | ||
|
9c95bc987e | ||
|
5e649bdc01 | ||
|
f653824874 | ||
|
ca5ec025c9 | ||
|
db8a231aa3 | ||
|
6f68c91c75 | ||
|
a038704b2a | ||
|
ab730e84e0 | ||
|
9e78e48370 | ||
|
c09567ef16 | ||
|
cf4f059a20 | ||
|
5325e85b9d | ||
|
1510b8fa0e | ||
|
c135361f70 | ||
|
e7be0f5d00 | ||
|
de9ce973b4 | ||
|
4d7ffdd8e0 | ||
|
6af18a0cfc | ||
|
d53c3f9f2d | ||
|
790a756f74 | ||
|
c00b71b5b1 | ||
|
a1051145bc | ||
|
a0c87d6d4b | ||
|
42cbd4fac8 | ||
|
3a19fe6879 | ||
|
290388b679 | ||
|
20518112e3 | ||
|
c31fce4e33 | ||
|
3ce548b005 | ||
|
c0903ad61b | ||
|
01062d4577 | ||
|
d0498b6274 | ||
|
26e5bd5550 | ||
|
7ccf38fdd6 | ||
|
38a24c4bd9 | ||
|
a05dbcd17b | ||
|
9ced656ede | ||
|
ac5854bf94 | ||
|
3823362eed | ||
|
6ce0b46748 | ||
|
e0bfa87522 | ||
|
f9460d4a14 | ||
|
2100940019 | ||
|
af100c1c4b | ||
|
2e52bb4c12 | ||
|
1b41a22487 | ||
|
c88b031b0a | ||
|
94b83ac28b | ||
|
67596d60e9 | ||
|
9d10c64ec6 | ||
|
94e7ed9a5f | ||
|
30513e7b59 | ||
|
b9c3442e9f | ||
|
9282dfed5a | ||
|
3b53a33cd5 | ||
|
6f1e8e2983 | ||
|
739c5dbea5 | ||
|
5629a020ee | ||
|
e447e154bc | ||
|
a84589e3bb | ||
|
d21d198325 | ||
|
4f6ddfad43 | ||
|
42d1f9e2f7 | ||
|
f0c3f29ece | ||
|
ffe5721c44 | ||
|
07807d0a26 | ||
|
10d616b2c8 | ||
|
8d0525af1b | ||
|
8ffc2efa4f | ||
|
04bce0cbda | ||
|
e4a8a62ead | ||
|
2fffaec76e | ||
|
f746824494 | ||
|
50068dc80f | ||
|
d456ace317 | ||
|
ab37305625 | ||
|
e9f3ce5404 | ||
|
7268b2b758 | ||
|
1a060ad066 | ||
|
17502e3370 | ||
|
138e956d6c | ||
|
573db70d1a | ||
|
daea4021d7 | ||
|
53ce917db4 | ||
|
a22caf1440 | ||
|
2b1f4d7dab | ||
|
deacdb3d67 | ||
|
0075aa3d34 | ||
|
15886839a9 | ||
|
f61722dda6 | ||
|
38e34adb0d | ||
|
5aeaeee87e | ||
|
8ed4b7c5b7 | ||
|
d0befcc8f4 | ||
|
338f1d3aaa | ||
|
df5637889b | ||
|
6328829875 | ||
|
e15ab8edab | ||
|
ec6cb92622 | ||
|
9dd68c2ff8 | ||
|
44513bdc68 | ||
|
5e20ec1bd2 | ||
|
18976da8b9 | ||
|
f3d301766f | ||
|
7defd590ad | ||
|
dade64148d | ||
|
9607b016c0 | ||
|
db77057b46 | ||
|
6a594a5065 | ||
|
fb8c62fcaf | ||
|
032dd984fe | ||
|
94e8eb3132 | ||
|
e8cf5ae3f7 | ||
|
326c3ab297 | ||
|
e134908117 | ||
|
86ef8b9f98 | ||
|
4a4c257a88 | ||
|
c2c9121cf5 | ||
|
d1699fcf4d | ||
|
47839c38d6 | ||
|
f11651b503 | ||
|
97b1e35f2f | ||
|
061f5f22c4 | ||
|
9cb525e298 | ||
|
2b92fa5efb | ||
|
334fe4d437 | ||
|
70297b6a2a | ||
|
22ce3d4f7e | ||
|
5f0550ae51 | ||
|
644de0016f | ||
|
952cfa5689 | ||
|
47f62004b6 | ||
|
fc6c299198 | ||
|
ec93c7013a | ||
|
c188dafec4 | ||
|
f9c5792791 | ||
|
dfdee74242 | ||
|
5f0144cc23 | ||
|
fed35668ff | ||
|
058377da40 | ||
|
e4db0240e4 | ||
|
ba117ed430 | ||
|
086fb5c94d | ||
|
0907895e13 | ||
|
d30a8b3a9e | ||
|
16397893c1 | ||
|
a1ad28bcaf | ||
|
7be5462a34 | ||
|
2eb9e727e7 | ||
|
1771f721b7 | ||
|
2d730e1693 | ||
|
3c4c948fbd | ||
|
1f11b833b0 | ||
|
3bccdca9d6 | ||
|
3fd03e84ed | ||
|
8243d31836 | ||
|
faacf12bf3 | ||
|
22d7f57618 | ||
|
cb77adab3b | ||
|
12531a63f9 | ||
|
faab2ca998 | ||
|
9633ece009 | ||
|
683807d501 | ||
|
3a09945ad0 | ||
|
65c1fe1cdc | ||
|
0ebaf3b0ce | ||
|
85ab378ce6 | ||
|
3e60d285e9 | ||
|
c4577715bc | ||
|
a9d2af5631 | ||
|
917b60aee4 | ||
|
2c4f0290dc | ||
|
81209956c0 | ||
|
e43bae5133 | ||
|
bbed72b564 | ||
|
950f94654c | ||
|
327d4827d9 | ||
|
3c4953fdd9 | ||
|
39a5299293 | ||
|
50e4ca2149 | ||
|
49d500cbf1 | ||
|
76773831ba | ||
|
9e73946a31 | ||
|
b1110f768d | ||
|
439289ce24 | ||
|
8fc92886ee | ||
|
640721939c | ||
|
ccf5d204f0 | ||
|
21883b4e6b | ||
|
bbc4228ed9 | ||
|
e51d9c5621 | ||
|
119e457d5e | ||
|
7291ab876e | ||
|
e10bc33c3b | ||
|
f2f6f8ec78 | ||
|
f34078bd96 | ||
|
a8ed365bcf | ||
|
c8e8c3b20c | ||
|
dea15e749b | ||
|
1ab836961a | ||
|
ef0286bcc1 | ||
|
578d938a37 | ||
|
dc92546ac5 | ||
|
ec26d65311 | ||
|
eef81b2b86 | ||
|
99655f998a | ||
|
5456554dd1 | ||
|
91f9c6b7be | ||
|
1f24cc24c0 | ||
|
0e810092a4 | ||
|
750734129c | ||
|
a1157110ec | ||
|
c87b055528 | ||
|
0ffc5c526a | ||
|
ef40e945af | ||
|
ecef31ab5b | ||
|
24caa553e3 | ||
|
d151ca09b8 | ||
|
6536dde488 | ||
|
120ba40d21 | ||
|
db0cdea539 | ||
|
8b176ff207 | ||
|
9d137d94ac | ||
|
acd1b2f522 | ||
|
f81891d320 | ||
|
07b8e66122 | ||
|
f4e6948065 | ||
|
cb6cf88471 | ||
|
7992fe5b63 | ||
|
3dd008ae9a | ||
|
99a61f1283 | ||
|
1cf121b52c | ||
|
3a7d6cd520 | ||
|
54085a960f | ||
|
3e8707d9ca | ||
|
83a1a42f92 | ||
|
996c98f0b3 | ||
|
56229d640b | ||
|
33b262cd22 | ||
|
fd445773ce | ||
|
3c24c4cd0b | ||
|
20c62e0353 | ||
|
3b9a730985 | ||
|
7183f79b28 | ||
|
8cb006cfd9 | ||
|
ae178016ab | ||
|
4779891154 | ||
|
db4c6eaa6d | ||
|
5b80fbc543 | ||
|
ea6b7caaf3 | ||
|
5d31c087b0 | ||
|
63afbb7346 | ||
|
f330e08a35 | ||
|
42a713288a | ||
|
a228f7ac58 | ||
|
6c647144e2 | ||
|
0c30198e8c | ||
|
150f0485c0 | ||
|
5324f39561 | ||
|
7129c0c14e | ||
|
1379c9c706 | ||
|
cb4cf92206 | ||
|
35ce87303f | ||
|
bf92ee7c44 | ||
|
1cfbefb76a | ||
|
8ac8d537c8 | ||
|
8ea6d89d49 | ||
|
59a7dd6673 | ||
|
c9ff0a3cd1 | ||
|
5cf83f5641 | ||
|
9bccf787a5 | ||
|
fa67b7193c | ||
|
0fe34d5178 | ||
|
bec97d6a42 | ||
|
1fe6910089 | ||
|
0d5f96f5bb | ||
|
5fd5be1e09 | ||
|
d3fa806d64 | ||
|
633c9acd49 | ||
|
c13c19b78c | ||
|
116e2fc92e | ||
|
713c00053e | ||
|
6a0700e335 | ||
|
7961acd06f | ||
|
e9f7f106f1 | ||
|
5e944df595 | ||
|
6f6f427356 | ||
|
cac10c4e29 | ||
|
9b348fdc29 | ||
|
ec97dd8c60 | ||
|
f28c1bc6ba | ||
|
e660fafb7a | ||
|
2c49270f38 | ||
|
13c1ae3d39 | ||
|
29550ade49 | ||
|
1b9f74f674 | ||
|
0b69ae371c | ||
|
37ebd21cb3 | ||
|
c996ddaf9d | ||
|
cea1aeac4b | ||
|
13ee1c89ea | ||
|
f01ec941b7 | ||
|
0853521bc9 | ||
|
e484671a08 | ||
|
50253d00e7 | ||
|
5364965a69 | ||
|
50baad3c04 | ||
|
cf219762c9 | ||
|
9e27b0881f | ||
|
44a96f347a | ||
|
cc6620a7e1 | ||
|
29f1abb666 | ||
|
9781a33419 | ||
|
0954794195 | ||
|
a996375b88 | ||
|
129ac1829d | ||
|
44e60bdda9 | ||
|
afc34b44c8 | ||
|
e08c74ae08 | ||
|
e5c669dc7a | ||
|
f4a7f5914e | ||
|
62eee4df56 | ||
|
c16445bc2f | ||
|
e05c5598a0 | ||
|
66c9ee0a1a | ||
|
d07788607c | ||
|
907dc7601b | ||
|
4b9adcde04 | ||
|
9f3a4e0d99 | ||
|
ea14488dc3 | ||
|
f59d29f1c5 | ||
|
0a9e919ac7 | ||
|
f11b6e8fa9 | ||
|
167560ff6f | ||
|
4b4e316bf0 | ||
|
7809228bd3 | ||
|
540fbbc22c | ||
|
2983d4f1a3 | ||
|
f6a8bf9ea2 | ||
|
e3ba02281b | ||
|
295b310079 | ||
|
62346575f8 | ||
|
0a590b7de9 | ||
|
dfd95f8385 | ||
|
6efe8c171a | ||
|
a7cdcaf25f | ||
|
6277958d6a | ||
|
25bd91bed1 | ||
|
7974df98ff | ||
|
e37d980453 | ||
|
597569745c | ||
|
6e6275b1b7 | ||
|
cfba73e938 | ||
|
7e1c34b769 | ||
|
b5b281c276 | ||
|
80906cbdb3 | ||
|
1504cb71ae | ||
|
eb7083d788 | ||
|
e40d733176 | ||
|
170c669e37 | ||
|
24b4b879f2 | ||
|
3942029c90 | ||
|
01f4bb0591 | ||
|
86fbf82d36 | ||
|
1069d7d6fb | ||
|
8d67aefcd5 | ||
|
ff90166b6e | ||
|
6beaaf75bb | ||
|
ebf9a9375c | ||
|
de94c35c0b | ||
|
6a4eb33093 | ||
|
8b91427056 | ||
|
b174fcf17b | ||
|
c6b91cdc5d | ||
|
e784e8c947 | ||
|
6498f94c36 | ||
|
ae300de42f | ||
|
40e682faae | ||
|
92c24c2129 | ||
|
3ec3a37603 | ||
|
ed2a328616 | ||
|
58dc4feee7 | ||
|
0356cbbfab | ||
|
8b06cbf04e | ||
|
fd82758e74 | ||
|
c705ec682c | ||
|
a5e6491cda | ||
|
8ef9804cab | ||
|
09ec77f904 | ||
|
36871d9cb0 | ||
|
b4ece67092 | ||
|
7e8a6dfb54 | ||
|
549095f0e5 | ||
|
313c05732b | ||
|
641b0fa9a2 | ||
|
96982849ce | ||
|
4b8745c875 | ||
|
78f72f33e6 | ||
|
b4aa418276 | ||
|
8d66322c94 | ||
|
6969341745 | ||
|
488f19e3c4 | ||
|
79889facea | ||
|
74f513b082 | ||
|
ab540edacc | ||
|
9dedd88989 | ||
|
be8ebd9fc5 | ||
|
6d41814455 | ||
|
2807a32e64 | ||
|
e6b0e20f08 | ||
|
0dc92c17f5 | ||
|
308c7b11c2 | ||
|
75be518d8a | ||
|
9f97a2e910 | ||
|
03c3188a4a | ||
|
bd5ce114a1 | ||
|
d326700d32 | ||
|
5bf949fcb3 | ||
|
9d6d2f770a | ||
|
3e12313f85 | ||
|
358178f83d | ||
|
6ea40c9895 | ||
|
0191de8bb4 | ||
|
a114e1b5f7 | ||
|
cf22ec0c8b | ||
|
e074f099c4 | ||
|
c5ad2975d6 |
1723
.eslintignore
68
.eslintrc.js
@@ -42,6 +42,8 @@ module.exports = {
|
||||
'zxcvbn': 'readonly',
|
||||
|
||||
'tinymce': 'readonly',
|
||||
|
||||
'JSX': 'readonly',
|
||||
},
|
||||
'parserOptions': {
|
||||
'ecmaVersion': 2018,
|
||||
@@ -77,17 +79,28 @@ module.exports = {
|
||||
'no-array-constructor': ['error'],
|
||||
'radix': ['error'],
|
||||
'eqeqeq': ['error', 'always'],
|
||||
'no-console': ['error', { 'allow': ['warn', '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
|
||||
'react-hooks/rules-of-hooks': 'error',
|
||||
'@seiyab/react-hooks/rules-of-hooks': 'error',
|
||||
'@seiyab/react-hooks/exhaustive-deps': ['error', { 'ignoreThisDependency': 'props' }],
|
||||
|
||||
// Checks effect dependencies
|
||||
// Disable because of this: https://github.com/facebook/react/issues/16265
|
||||
// "react-hooks/exhaustive-deps": "warn",
|
||||
|
||||
'jest/require-top-level-describe': ['error', { 'maxNumberOfTopLevelDescribes': 1 }],
|
||||
'jest/no-identical-title': ['error'],
|
||||
'jest/prefer-lowercase-title': ['error', { 'ignoreTopLevelDescribe': true }],
|
||||
|
||||
'promise/prefer-await-to-then': 'error',
|
||||
'no-unneeded-ternary': 'error',
|
||||
'github/array-foreach': ['error'],
|
||||
|
||||
// -------------------------------
|
||||
// Formatting
|
||||
// -------------------------------
|
||||
@@ -97,14 +110,18 @@ module.exports = {
|
||||
'semi': ['error', 'always'],
|
||||
'eol-last': ['error', 'always'],
|
||||
'quotes': ['error', 'single'],
|
||||
|
||||
// Note that "indent" only applies to JavaScript files. See
|
||||
// https://github.com/laurent22/joplin/issues/8360
|
||||
'indent': ['error', 'tab'],
|
||||
'comma-dangle': ['error', {
|
||||
'arrays': 'always-multiline',
|
||||
'objects': 'always-multiline',
|
||||
'imports': 'always-multiline',
|
||||
'exports': 'always-multiline',
|
||||
'functions': 'never',
|
||||
'functions': 'always-multiline',
|
||||
}],
|
||||
'comma-spacing': ['error', { 'before': false, 'after': true }],
|
||||
'no-trailing-spaces': 'error',
|
||||
'linebreak-style': ['error', 'unix'],
|
||||
'prefer-template': ['error'],
|
||||
@@ -125,19 +142,45 @@ module.exports = {
|
||||
'named': 'never',
|
||||
'asyncArrow': 'always',
|
||||
}],
|
||||
'multiline-comment-style': ['error', 'separate-lines'],
|
||||
'multiline-comment-style': ['error', 'separate-lines', { checkJSDoc: true }],
|
||||
'space-before-blocks': 'error',
|
||||
'spaced-comment': ['error', 'always'],
|
||||
'keyword-spacing': ['error', { 'before': true, 'after': true }],
|
||||
'no-multi-spaces': ['error'],
|
||||
'prefer-object-spread': ['error'],
|
||||
'prefer-regex-literals': ['error', { disallowRedundantWrapping: true }],
|
||||
|
||||
// Regarding the keyword blacklist:
|
||||
// - err: We generally avoid using too many abbreviations, so it should
|
||||
// be "error", not "err"
|
||||
// - notebook: In code, it should always be "folder" (not "notebook").
|
||||
// In user-facing text, it should be "notebook".
|
||||
'id-denylist': ['error', 'err', 'notebook', 'notebooks'],
|
||||
'prefer-arrow-callback': ['error'],
|
||||
},
|
||||
'plugins': [
|
||||
'react',
|
||||
'@typescript-eslint',
|
||||
'react-hooks',
|
||||
// Need to use a fork of the official rules of hooks because of this bug:
|
||||
// https://github.com/facebook/react/issues/16265
|
||||
'@seiyab/eslint-plugin-react-hooks',
|
||||
// 'react-hooks',
|
||||
'import',
|
||||
'promise',
|
||||
'jest',
|
||||
'github',
|
||||
],
|
||||
'overrides': [
|
||||
{
|
||||
'files': [
|
||||
'packages/tools/**',
|
||||
'packages/app-mobile/tools/**',
|
||||
'packages/app-desktop/tools/**',
|
||||
],
|
||||
'rules': {
|
||||
'no-console': 'off',
|
||||
},
|
||||
},
|
||||
{
|
||||
// enable the rule specifically for TypeScript files
|
||||
'files': ['*.ts', '*.tsx'],
|
||||
@@ -146,10 +189,18 @@ module.exports = {
|
||||
'project': './tsconfig.eslint.json',
|
||||
},
|
||||
'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'],
|
||||
'@typescript-eslint/indent': ['error', 'tab', {
|
||||
'ignoredNodes': [
|
||||
// See https://github.com/typescript-eslint/typescript-eslint/issues/1824
|
||||
'TSUnionType',
|
||||
],
|
||||
}],
|
||||
'@typescript-eslint/ban-ts-comment': ['error'],
|
||||
'@typescript-eslint/ban-types': 'error',
|
||||
'@typescript-eslint/explicit-member-accessibility': ['error'],
|
||||
'@typescript-eslint/type-annotation-spacing': ['error', { 'before': false, 'after': true }],
|
||||
'@typescript-eslint/array-type': 'error',
|
||||
'@typescript-eslint/no-inferrable-types': ['error'],
|
||||
'@typescript-eslint/comma-dangle': ['error', {
|
||||
'arrays': 'always-multiline',
|
||||
'objects': 'always-multiline',
|
||||
@@ -158,8 +209,9 @@ module.exports = {
|
||||
'enums': 'always-multiline',
|
||||
'generics': 'always-multiline',
|
||||
'tuples': 'always-multiline',
|
||||
'functions': 'never',
|
||||
'functions': 'always-multiline',
|
||||
}],
|
||||
'@typescript-eslint/object-curly-spacing': ['error', 'always'],
|
||||
'@typescript-eslint/semi': ['error', 'always'],
|
||||
'@typescript-eslint/member-delimiter-style': ['error', {
|
||||
'multiline': {
|
||||
|
89
.github/scripts/run_ci.sh
vendored
@@ -57,6 +57,11 @@ echo "Yarn $( yarn -v )"
|
||||
|
||||
cd "$ROOT_DIR"
|
||||
yarn install
|
||||
testResult=$?
|
||||
if [ $testResult -ne 0 ]; then
|
||||
echo "Yarn installation failed. Search for 'exit code 1' in the log for more information."
|
||||
exit $testResult
|
||||
fi
|
||||
|
||||
# =============================================================================
|
||||
# Run test units. Only do it for pull requests and dev branch because we don't
|
||||
@@ -102,6 +107,12 @@ if [ "$IS_PULL_REQUEST" == "1" ] || [ "$IS_DEV_BRANCH" = "1" ]; then
|
||||
if [ $testResult -ne 0 ]; then
|
||||
exit $testResult
|
||||
fi
|
||||
|
||||
yarn run packageJsonLint
|
||||
testResult=$?
|
||||
if [ $testResult -ne 0 ]; then
|
||||
exit $testResult
|
||||
fi
|
||||
fi
|
||||
|
||||
# =============================================================================
|
||||
@@ -125,12 +136,11 @@ fi
|
||||
# =============================================================================
|
||||
# Check that we didn't lose any string due to gettext not being able to parse
|
||||
# newly modified or added scripts. This is convenient to quickly view on GitHub
|
||||
# what commit may have broken translation building. We run this on macOS because
|
||||
# we need the latest version of gettext (and stable Ubuntu doesn't have it).
|
||||
# what commit may have broken translation building.
|
||||
# =============================================================================
|
||||
|
||||
if [ "$IS_PULL_REQUEST" == "1" ] || [ "$IS_DEV_BRANCH" = "1" ]; then
|
||||
if [ "$IS_MACOS" == "1" ]; then
|
||||
if [ "$IS_LINUX" == "1" ]; then
|
||||
echo "Step: Checking for lost translation strings..."
|
||||
|
||||
xgettext --version
|
||||
@@ -143,6 +153,39 @@ if [ "$IS_PULL_REQUEST" == "1" ] || [ "$IS_DEV_BRANCH" = "1" ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
# =============================================================================
|
||||
# Check .gitignore and .eslintignore files - they should be updated when
|
||||
# new TypeScript files are added by running `yarn run updateIgnored`.
|
||||
# See coding_style.md
|
||||
# =============================================================================
|
||||
|
||||
if [ "$IS_PULL_REQUEST" == "1" ]; then
|
||||
if [ "$IS_LINUX" == "1" ]; then
|
||||
echo "Step: Checking for files that should have been ignored..."
|
||||
|
||||
node packages/tools/checkIgnoredFiles.js
|
||||
testResult=$?
|
||||
if [ $testResult -ne 0 ]; then
|
||||
exit $testResult
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# =============================================================================
|
||||
# Check that the website still builds
|
||||
# =============================================================================
|
||||
|
||||
if [ "$IS_PULL_REQUEST" == "1" ] || [ "$IS_DEV_BRANCH" = "1" ]; then
|
||||
echo "Step: Check that the website still builds..."
|
||||
|
||||
mkdir -p ../joplin-website/docs
|
||||
SKIP_SPONSOR_PROCESSING=1 yarn run buildWebsite
|
||||
testResult=$?
|
||||
if [ $testResult -ne 0 ]; then
|
||||
exit $testResult
|
||||
fi
|
||||
fi
|
||||
|
||||
# =============================================================================
|
||||
# Find out if we should run the build or not. Electron-builder gets stuck when
|
||||
# building PRs so we disable it in this case. The Linux build should provide
|
||||
@@ -170,12 +213,48 @@ cd "$ROOT_DIR/packages/app-desktop"
|
||||
|
||||
if [[ $GIT_TAG_NAME = v* ]]; then
|
||||
echo "Step: Building and publishing desktop application..."
|
||||
USE_HARD_LINKS=false yarn run dist
|
||||
# cd "$ROOT_DIR/packages/tools"
|
||||
# node bundleDefaultPlugins.js
|
||||
cd "$ROOT_DIR/packages/app-desktop"
|
||||
|
||||
if [ "$IS_MACOS" == "1" ]; then
|
||||
# This is to fix this error:
|
||||
#
|
||||
# Exit code: ENOENT. spawn /usr/bin/python ENOENT
|
||||
#
|
||||
# Ref: https://github.com/electron-userland/electron-builder/issues/6767#issuecomment-1096589528
|
||||
#
|
||||
# It can be removed once we upgrade to electron-builder@23, however we
|
||||
# cannot currently do this due to this error:
|
||||
# https://github.com/laurent22/joplin/issues/8149
|
||||
#
|
||||
# electron-builder@24, however, still expects the python binary to be named
|
||||
# "python" and seems to no longer respect the PYTHON_PATH environment variable.
|
||||
# We work around this by aliasing python.
|
||||
alias python=$(which python3)
|
||||
USE_HARD_LINKS=false yarn run dist
|
||||
else
|
||||
USE_HARD_LINKS=false yarn run dist
|
||||
fi
|
||||
elif [[ $IS_LINUX = 1 ]] && [[ $GIT_TAG_NAME = $SERVER_TAG_PREFIX-* ]]; then
|
||||
echo "Step: Building Docker Image..."
|
||||
cd "$ROOT_DIR"
|
||||
yarn run buildServerDocker --tag-name $GIT_TAG_NAME --push-images --repository $SERVER_REPOSITORY
|
||||
else
|
||||
echo "Step: Building but *not* publishing desktop application..."
|
||||
USE_HARD_LINKS=false yarn run dist --publish=never
|
||||
|
||||
if [ "$IS_MACOS" == "1" ]; then
|
||||
# See above why we need to specify Python
|
||||
alias python=$(which python3)
|
||||
|
||||
# We also want to disable signing the app in this case, because
|
||||
# it randomly fails and we don't even need it
|
||||
# https://www.electron.build/code-signing#how-to-disable-code-signing-during-the-build-process-on-macos
|
||||
export CSC_IDENTITY_AUTO_DISCOVERY=false
|
||||
npm pkg set 'build.mac.identity'=null --json
|
||||
|
||||
USE_HARD_LINKS=false yarn run dist --publish=never
|
||||
else
|
||||
USE_HARD_LINKS=false yarn run dist --publish=never
|
||||
fi
|
||||
fi
|
||||
|
46
.github/workflows/build-android.yml
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
# The goal of this action is to compile the Android debug build. That should
|
||||
# tell us automatically if something got broken when a dependency was changed.
|
||||
|
||||
name: react-native-android-build-apk
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
pre_job:
|
||||
if: github.repository == 'laurent22/joplin'
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
should_skip: ${{ steps.skip_check.outputs.should_skip }}
|
||||
steps:
|
||||
- id: skip_check
|
||||
uses: fkirc/skip-duplicate-actions@v5
|
||||
with:
|
||||
concurrent_skipping: 'same_content_newer'
|
||||
|
||||
BuildAndroidDebug:
|
||||
needs: pre_job
|
||||
if: github.repository == 'laurent22/joplin' && needs.pre_job.outputs.should_skip != 'true'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Install Linux dependencies
|
||||
run: |
|
||||
sudo apt-get update || true
|
||||
sudo apt-get install -y libsecret-1-dev
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: '18'
|
||||
cache: 'yarn'
|
||||
|
||||
- name: Install Yarn
|
||||
run: |
|
||||
corepack enable
|
||||
|
||||
- name: Install
|
||||
run: yarn install
|
||||
|
||||
- name: Build Android Release
|
||||
run: |
|
||||
cd packages/app-mobile/android && ./gradlew assembleDebug
|
||||
|
73
.github/workflows/build-macos-m1.yml
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
name: Build macOS M1
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
pre_job:
|
||||
if: github.repository == 'laurent22/joplin'
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
should_skip: ${{ steps.skip_check.outputs.should_skip }}
|
||||
steps:
|
||||
- id: skip_check
|
||||
uses: fkirc/skip-duplicate-actions@v5
|
||||
with:
|
||||
concurrent_skipping: 'same_content_newer'
|
||||
|
||||
Main:
|
||||
needs: pre_job
|
||||
# We always process desktop release tags, because they also publish the release
|
||||
if: github.repository == 'laurent22/joplin' && (needs.pre_job.outputs.should_skip != 'true' || startsWith(github.ref, 'refs/tags/v'))
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
- uses: olegtarasov/get-tag@v2.1
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
# We need to pin the version to 18.15, because 18.16+ fails with this error:
|
||||
# https://github.com/facebook/react-native/issues/36440
|
||||
node-version: '18.15.0'
|
||||
cache: 'yarn'
|
||||
|
||||
- name: Install Yarn
|
||||
run: |
|
||||
# https://yarnpkg.com/getting-started/install
|
||||
corepack enable
|
||||
|
||||
- name: Build macOS M1 app
|
||||
env:
|
||||
APPLE_ASC_PROVIDER: ${{ secrets.APPLE_ASC_PROVIDER }}
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
|
||||
CSC_KEY_PASSWORD: ${{ secrets.APPLE_CSC_KEY_PASSWORD }}
|
||||
CSC_LINK: ${{ secrets.APPLE_CSC_LINK }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GH_REPO: ${{ github.repository }}
|
||||
IS_CONTINUOUS_INTEGRATION: 1
|
||||
BUILD_SEQUENCIAL: 1
|
||||
run: |
|
||||
export npm_config_arch=arm64
|
||||
export npm_config_target_arch=arm64
|
||||
yarn install
|
||||
cd packages/app-desktop
|
||||
npm pkg set 'build.mac.artifactName'='${productName}-${version}-${arch}.${ext}'
|
||||
npm pkg set 'build.mac.target.target'='dmg'
|
||||
npm pkg set 'build.mac.target.arch[0]'='arm64'
|
||||
|
||||
if [[ $GIT_TAG_NAME = v* ]]; then
|
||||
echo "Building and publishing desktop application..."
|
||||
PYTHON_PATH=$(which python) USE_HARD_LINKS=false yarn run dist --mac --arm64
|
||||
|
||||
yarn renameReleaseAssets --repo="$GH_REPO" --tag="$GIT_TAG_NAME" --token="$GITHUB_TOKEN"
|
||||
else
|
||||
echo "Building but *not* publishing desktop application..."
|
||||
|
||||
# We also want to disable signing the app in this case, because
|
||||
# it doesn't work and we don't need it.
|
||||
# https://www.electron.build/code-signing#how-to-disable-code-signing-during-the-build-process-on-macos
|
||||
|
||||
export CSC_IDENTITY_AUTO_DISCOVERY=false
|
||||
npm pkg set 'build.mac.identity'=null --json
|
||||
|
||||
PYTHON_PATH=$(which python) USE_HARD_LINKS=false yarn run dist --publish=never
|
||||
fi
|
37
.github/workflows/cla.yml
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
name: "CLA Assistant"
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
pull_request_target:
|
||||
types: [opened,closed,synchronize]
|
||||
|
||||
jobs:
|
||||
CLAAssistant:
|
||||
if: github.repository == 'laurent22/joplin'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "CLA Assistant"
|
||||
if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
|
||||
# Beta Release
|
||||
uses: contributor-assistant/github-action@v2.3.0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
# the below token should have repo scope and must be manually added by you in the repository's secret
|
||||
PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
|
||||
with:
|
||||
path-to-signatures: 'readme/cla_signatures.json'
|
||||
path-to-document: 'https://github.com/laurent22/joplin/blob/dev/readme/cla.md' # e.g. a CLA or a DCO document
|
||||
# branch should not be protected
|
||||
branch: 'dev'
|
||||
allowlist: joplinbot,renovate[bot]
|
||||
|
||||
# the followings are the optional inputs - If the optional inputs are not given, then default values will be taken
|
||||
#remote-organization-name: enter the remote organization name where the signatures should be stored (Default is storing the signatures in the same repository)
|
||||
#remote-repository-name: enter the remote repository name where the signatures should be stored (Default is storing the signatures in the same repository)
|
||||
#create-file-commit-message: 'For example: Creating file for storing CLA Signatures'
|
||||
#signed-commit-message: 'For example: $contributorName has signed the CLA in #$pullRequestNo'
|
||||
#custom-notsigned-prcomment: 'pull request comment with Introductory message to ask new contributors to sign'
|
||||
#custom-pr-sign-comment: 'The signature to be committed in order to sign the CLA'
|
||||
#custom-allsigned-prcomment: 'pull request comment when all contributors has signed, defaults to **CLA Assistant Lite bot** All Contributors have signed the CLA.'
|
||||
lock-pullrequest-aftermerge: false
|
||||
#use-dco-flag: true - If you are using DCO instead of CLA
|
1
.github/workflows/close-stale-issues.yml
vendored
@@ -6,6 +6,7 @@ permissions:
|
||||
issues: write
|
||||
jobs:
|
||||
ProcessStaleIssues:
|
||||
if: github.repository == 'laurent22/joplin'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v4
|
||||
|
91
.github/workflows/github-actions-main.yml
vendored
@@ -1,14 +1,43 @@
|
||||
name: Joplin Continuous Integration
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
pre_job:
|
||||
if: github.repository == 'laurent22/joplin'
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
should_skip: ${{ steps.skip_check.outputs.should_skip }}
|
||||
steps:
|
||||
- id: skip_check
|
||||
uses: fkirc/skip-duplicate-actions@v5
|
||||
with:
|
||||
concurrent_skipping: 'same_content_newer'
|
||||
|
||||
Main:
|
||||
needs: pre_job
|
||||
# We always process server or desktop release tags, because they also publish the release
|
||||
if: github.repository == 'laurent22/joplin' && (needs.pre_job.outputs.should_skip != 'true' || startsWith(github.ref, 'refs/tags/server-v') || startsWith(github.ref, 'refs/tags/v'))
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
# Removed windows-2016 for now - discontinued by GitHub
|
||||
os: [macos-latest, ubuntu-latest, windows-2019]
|
||||
steps:
|
||||
|
||||
# Trying to fix random networking issues on Windows
|
||||
# https://github.com/actions/runner-images/issues/1187#issuecomment-686735760
|
||||
- name: Disable TCP/UDP offload on Windows
|
||||
if: runner.os == 'Windows'
|
||||
run: Disable-NetAdapterChecksumOffload -Name * -TcpIPv4 -UdpIPv4 -TcpIPv6 -UdpIPv6
|
||||
|
||||
- name: Disable TCP/UDP offload on Linux
|
||||
if: runner.os == 'Linux'
|
||||
run: sudo ethtool -K eth0 tx off rx off
|
||||
|
||||
- name: Disable TCP/UDP offload on macOS
|
||||
if: runner.os == 'macOS'
|
||||
run: |
|
||||
sudo sysctl -w net.link.generic.system.hwcksum_tx=0
|
||||
sudo sysctl -w net.link.generic.system.hwcksum_rx=0
|
||||
|
||||
# Silence apt-get update errors (for example when a module doesn't
|
||||
# exist) since otherwise it will make the whole build fails, even though
|
||||
# it might work without update. libsecret-1-dev is required for keytar -
|
||||
@@ -21,13 +50,7 @@ jobs:
|
||||
sudo apt-get install -y gettext
|
||||
sudo apt-get install -y libsecret-1-dev
|
||||
sudo apt-get install -y translate-toolkit
|
||||
|
||||
- name: Install macOS dependencies
|
||||
if: runner.os == 'macOS'
|
||||
run: |
|
||||
brew update
|
||||
brew install gettext
|
||||
brew install translate-toolkit
|
||||
sudo apt-get install -y rsync
|
||||
|
||||
- name: Install Docker Engine
|
||||
# if: runner.os == 'Linux' && startsWith(github.ref, 'refs/tags/server-v')
|
||||
@@ -49,7 +72,10 @@ jobs:
|
||||
- uses: olegtarasov/get-tag@v2.1
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: '16'
|
||||
# We need to pin the version to 18.15, because 18.16+ fails with this error:
|
||||
# https://github.com/facebook/react-native/issues/36440
|
||||
node-version: '18.15.0'
|
||||
cache: 'yarn'
|
||||
|
||||
- name: Install Yarn
|
||||
run: |
|
||||
@@ -59,7 +85,7 @@ jobs:
|
||||
# Login to Docker only if we're on a server release tag. If we run this on
|
||||
# a pull request it will fail because the PR doesn't have access to
|
||||
# secrets
|
||||
- uses: docker/login-action@v1
|
||||
- uses: docker/login-action@v2
|
||||
if: runner.os == 'Linux' && startsWith(github.ref, 'refs/tags/server-v')
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
@@ -71,11 +97,14 @@ jobs:
|
||||
APPLE_ASC_PROVIDER: ${{ secrets.APPLE_ASC_PROVIDER }}
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
|
||||
CSC_KEY_PASSWORD: ${{ secrets.APPLE_CSC_KEY_PASSWORD }}
|
||||
CSC_LINK: ${{ secrets.APPLE_CSC_LINK }}
|
||||
GH_TOKEN: ${{ secrets.GH_TOKEN }}
|
||||
IS_CONTINUOUS_INTEGRATION: 1
|
||||
BUILD_SEQUENCIAL: 1
|
||||
SERVER_REPOSITORY: joplin/server
|
||||
SERVER_TAG_PREFIX: server
|
||||
run: |
|
||||
"${GITHUB_WORKSPACE}/.github/scripts/run_ci.sh"
|
||||
|
||||
@@ -105,6 +134,8 @@ jobs:
|
||||
yarn install && cd packages/app-desktop && yarn run dist --publish=never
|
||||
|
||||
ServerDockerImage:
|
||||
needs: pre_job
|
||||
if: github.repository == 'laurent22/joplin' && needs.pre_job.outputs.should_skip != 'true'
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -129,7 +160,8 @@ jobs:
|
||||
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: '16'
|
||||
node-version: '18'
|
||||
cache: 'yarn'
|
||||
|
||||
- name: Install Yarn
|
||||
run: |
|
||||
@@ -142,4 +174,39 @@ jobs:
|
||||
run: |
|
||||
yarn install
|
||||
yarn run buildServerDocker --tag-name server-v0.0.0 --repository joplin/server
|
||||
|
||||
|
||||
# Basic test to ensure that the created build is valid. It should exit with
|
||||
# code 0 if it works.
|
||||
docker run joplin/server:0.0.0-beta node dist/app.js migrate list
|
||||
|
||||
- name: Check HTTP request
|
||||
run: |
|
||||
# Need to pass environment variables:
|
||||
docker run -p 22300:22300 joplin/server:0.0.0-beta node dist/app.js --env dev &
|
||||
|
||||
# Wait for server to start
|
||||
sleep 30
|
||||
|
||||
# Check if status code is correct
|
||||
# if the actual_status DOES NOT include the expected_status
|
||||
# it exits the process with code 1
|
||||
|
||||
expected_status="HTTP/1.1 200 OK"
|
||||
actual_status=$(curl -I -X GET http://localhost:22300/api/ping | head -n 1)
|
||||
if [[ ! "$actual_status" =~ "$expected_status" ]]; then
|
||||
echo 'Failed while checking the status code after request to /api/ping'
|
||||
echo 'expected: ' $expected_status
|
||||
echo 'actual: ' $actual_status
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
# Check if the body response is correct
|
||||
# if the actual_body is different of expected_body exit with code 1
|
||||
expected_body='{"status":"ok","message":"Joplin Server is running"}'
|
||||
actual_body=$(curl http://localhost:22300/api/ping)
|
||||
|
||||
if [[ "$actual_body" != "$expected_body" ]]; then
|
||||
echo 'Failed while checking the body response after request to /api/ping'
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
|
1720
.gitignore
vendored
2
.npmpackagejsonlintignore
Normal file
@@ -0,0 +1,2 @@
|
||||
packages/app-clipper/popup/
|
||||
packages/app-cli/tests/support/plugins/
|
24
.npmpackagejsonlintrc.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"rules": {
|
||||
"prefer-absolute-version-dependencies": ["error",
|
||||
{
|
||||
"exceptions": [
|
||||
"@joplin/lib",
|
||||
"@joplin/renderer",
|
||||
"@joplin/pdf-viewer",
|
||||
"@joplin/fork-htmlparser2",
|
||||
"@joplin/fork-sax",
|
||||
"@joplin/fork-uslug",
|
||||
"@joplin/htmlpack",
|
||||
"@joplin/turndown",
|
||||
"@joplin/turndown-plugin-gfm",
|
||||
"@joplin/tools",
|
||||
"@joplin/react-native-saf-x",
|
||||
"@joplin/react-native-alarm-notification",
|
||||
"@joplin/utils"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
13
.yarn/patches/app-builder-lib-npm-24.4.0-05322ff057.patch
Normal file
@@ -0,0 +1,13 @@
|
||||
diff --git a/templates/nsis/include/allowOnlyOneInstallerInstance.nsh b/templates/nsis/include/allowOnlyOneInstallerInstance.nsh
|
||||
index a1fd1875d852ff69c087a3103eff827c20d37ca5..5222614ddad3276876857e7a9dde4017a6b9fc85 100644
|
||||
--- a/templates/nsis/include/allowOnlyOneInstallerInstance.nsh
|
||||
+++ b/templates/nsis/include/allowOnlyOneInstallerInstance.nsh
|
||||
@@ -42,7 +42,7 @@
|
||||
${nsProcess::FindProcess} "${_FILE}" ${_ERR}
|
||||
!else
|
||||
# find process owned by current user
|
||||
- nsExec::Exec `cmd /c tasklist /FI "USERNAME eq %USERNAME%" /FI "IMAGENAME eq ${_FILE}" | %SYSTEMROOT%\System32\find.exe "${_FILE}"`
|
||||
+ nsExec::Exec `cmd /c tasklist /FI "USERNAME eq %USERNAME%" /FI "PID ne $pid" /FI "IMAGENAME eq ${_FILE}" | %SYSTEMROOT%\System32\find.exe "${_FILE}"`
|
||||
Pop ${_ERR}
|
||||
!endif
|
||||
!macroend
|
15
.yarn/patches/eslint-npm-8.39.0-d92bace04d.patch
Normal file
@@ -0,0 +1,15 @@
|
||||
diff --git a/lib/rules/multiline-comment-style.js b/lib/rules/multiline-comment-style.js
|
||||
index 9cb7f3473e5a124e2eedb12685650f047afa84b6..124e062955e1b51cbdddd0920c22446dc97dd261 100644
|
||||
--- a/lib/rules/multiline-comment-style.js
|
||||
+++ b/lib/rules/multiline-comment-style.js
|
||||
@@ -377,6 +377,10 @@ module.exports = {
|
||||
commentLines = commentLines.slice(1, commentLines.length - 1);
|
||||
}
|
||||
|
||||
+ // We have to allow this because it's always a top comment and
|
||||
+ // it has to be in a jsdoc block
|
||||
+ if (commentLines.join('').trim().startsWith('@jest-environment')) return;
|
||||
+
|
||||
const tokenAfter = sourceCode.getTokenAfter(firstComment, { includeComments: true });
|
||||
|
||||
if (tokenAfter && firstComment.loc.end.line === tokenAfter.loc.start.line) {
|
@@ -0,0 +1,25 @@
|
||||
diff --git a/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java b/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java
|
||||
index 0f52b73c61625db2a3081c0950b6bdd2b06e3d40..b0fc3de4be0b3a26b638683613c63c783c2739bb 100644
|
||||
--- a/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java
|
||||
+++ b/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java
|
||||
@@ -38,7 +38,7 @@ import com.facebook.react.uimanager.common.ViewUtil;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
-import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
+import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
/**
|
||||
@@ -151,7 +151,10 @@ public class NativeAnimatedModule extends NativeAnimatedModuleSpec
|
||||
}
|
||||
|
||||
private class ConcurrentOperationQueue {
|
||||
- private final Queue<UIThreadOperation> mQueue = new ConcurrentLinkedQueue<>();
|
||||
+ // Patch: Use LinkedBlockingQueue instead of ConcurrentLinkedQueue.
|
||||
+ // In some versions of Android, ConcurrentLinkedQueue is known to drop
|
||||
+ // items, causing crashing. See https://github.com/laurent22/joplin/issues/8425
|
||||
+ private final Queue<UIThreadOperation> mQueue = new LinkedBlockingQueue<>();
|
||||
@Nullable private UIThreadOperation mPeekedOperation = null;
|
||||
|
||||
@AnyThread
|
20
.yarn/patches/react-native-camera-npm-4.2.1-24b2600a7e.patch
Normal file
@@ -0,0 +1,20 @@
|
||||
diff --git a/src/RNCamera.js b/src/RNCamera.js
|
||||
index b7a271ad64771c0f654dbd5fe3c0d9e0d2e2c4ef..1182a40ace081a32fbaefe2bc4a499b79c2e7dac 100644
|
||||
--- a/src/RNCamera.js
|
||||
+++ b/src/RNCamera.js
|
||||
@@ -5,7 +5,6 @@ import {
|
||||
findNodeHandle,
|
||||
Platform,
|
||||
NativeModules,
|
||||
- ViewPropTypes,
|
||||
requireNativeComponent,
|
||||
View,
|
||||
ActivityIndicator,
|
||||
@@ -14,6 +13,7 @@ import {
|
||||
PermissionsAndroid,
|
||||
} from 'react-native';
|
||||
|
||||
+import ViewPropTypes from 'deprecated-react-native-prop-types';
|
||||
import type { FaceFeature } from './FaceDetector';
|
||||
|
||||
const Rationale = PropTypes.shape({
|
209
.yarn/patches/react-native-vosk-npm-0.1.12-76b1caaae8.patch
Normal file
@@ -0,0 +1,209 @@
|
||||
diff --git a/android/build.gradle b/android/build.gradle
|
||||
index 6afcbbf0cc8ca2d69dd78077d61e59a90b2136bb..9f8d72b4ec5b2b3d290975d6a255917c95300854 100644
|
||||
--- a/android/build.gradle
|
||||
+++ b/android/build.gradle
|
||||
@@ -67,19 +67,19 @@ repositories {
|
||||
}
|
||||
|
||||
// Generate UUIDs for each models contained in android/src/main/assets/
|
||||
-tasks.register('genUUID') {
|
||||
- doLast {
|
||||
- fileTree(dir: "$rootDir/app/src/main/assets", exclude: ['*/*']).visit { fileDetails ->
|
||||
- if (fileDetails.directory) {
|
||||
- def odir = file("$rootDir/app/src/main/assets/$fileDetails.relativePath")
|
||||
- def ofile = file("$odir/uuid")
|
||||
- mkdir odir
|
||||
- ofile.text = UUID.randomUUID().toString()
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
-}
|
||||
-preBuild.dependsOn genUUID
|
||||
+// tasks.register('genUUID') {
|
||||
+// doLast {
|
||||
+// fileTree(dir: "$rootDir/app/src/main/assets", exclude: ['*/*']).visit { fileDetails ->
|
||||
+// if (fileDetails.directory) {
|
||||
+// def odir = file("$rootDir/app/src/main/assets/$fileDetails.relativePath")
|
||||
+// def ofile = file("$odir/uuid")
|
||||
+// mkdir odir
|
||||
+// ofile.text = UUID.randomUUID().toString()
|
||||
+// }
|
||||
+// }
|
||||
+// }
|
||||
+// }
|
||||
+// preBuild.dependsOn genUUID
|
||||
|
||||
def kotlin_version = getExtOrDefault('kotlinVersion')
|
||||
|
||||
diff --git a/android/src/main/java/com/reactnativevosk/VoskModule.kt b/android/src/main/java/com/reactnativevosk/VoskModule.kt
|
||||
index 0e2b6595b1b2cf1ee01c6c64239c4b0ea37fce19..5a8539b9cce8951967640dba755e29a4e3ff404a 100644
|
||||
--- a/android/src/main/java/com/reactnativevosk/VoskModule.kt
|
||||
+++ b/android/src/main/java/com/reactnativevosk/VoskModule.kt
|
||||
@@ -19,13 +19,25 @@ class VoskModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMo
|
||||
return "Vosk"
|
||||
}
|
||||
|
||||
+ @ReactMethod
|
||||
+ fun addListener(type: String?) {
|
||||
+ // Keep: Required for RN built in Event Emitter Calls.
|
||||
+ }
|
||||
+
|
||||
+ @ReactMethod
|
||||
+ fun removeListeners(type: Int?) {
|
||||
+ // Keep: Required for RN built in Event Emitter Calls.
|
||||
+ }
|
||||
+
|
||||
override fun onResult(hypothesis: String) {
|
||||
// Get text data from string object
|
||||
val text = getHypothesisText(hypothesis)
|
||||
|
||||
// Stop recording if data found
|
||||
if (text != null && text.isNotEmpty()) {
|
||||
- cleanRecognizer();
|
||||
+ // Don't auto-stop the recogniser - we want to do that when the user
|
||||
+ // presses on "stop" only.
|
||||
+ // cleanRecognizer();
|
||||
sendEvent("onResult", text)
|
||||
}
|
||||
}
|
||||
@@ -93,12 +105,11 @@ class VoskModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMo
|
||||
@ReactMethod
|
||||
fun loadModel(path: String, promise: Promise) {
|
||||
cleanModel();
|
||||
- StorageService.unpack(context, path, "models",
|
||||
- { model: Model? ->
|
||||
- this.model = model
|
||||
- promise.resolve("Model successfully loaded")
|
||||
- }
|
||||
- ) { e: IOException ->
|
||||
+
|
||||
+ try {
|
||||
+ this.model = Model(path);
|
||||
+ promise.resolve("Model successfully loaded")
|
||||
+ } catch (e: IOException) {
|
||||
this.model = null
|
||||
promise.reject(e)
|
||||
}
|
||||
@@ -153,6 +164,25 @@ class VoskModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMo
|
||||
cleanRecognizer();
|
||||
}
|
||||
|
||||
+ @ReactMethod
|
||||
+ fun stopOnly() {
|
||||
+ if (speechService != null) {
|
||||
+ speechService!!.stop()
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ @ReactMethod
|
||||
+ fun cleanup() {
|
||||
+ if (speechService != null) {
|
||||
+ speechService!!.shutdown();
|
||||
+ speechService = null
|
||||
+ }
|
||||
+ if (recognizer != null) {
|
||||
+ recognizer!!.close();
|
||||
+ recognizer = null;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
@ReactMethod
|
||||
fun unload() {
|
||||
cleanRecognizer();
|
||||
diff --git a/lib/typescript/index.d.ts b/lib/typescript/index.d.ts
|
||||
index 441e41cc402cca3a60b34978ef4fea976076259c..a173acebb4b314402550442ad471e0f7c706e3c4 100644
|
||||
--- a/lib/typescript/index.d.ts
|
||||
+++ b/lib/typescript/index.d.ts
|
||||
@@ -10,6 +10,8 @@ export default class Vosk {
|
||||
currentRegisteredEvents: EmitterSubscription[];
|
||||
start: (grammar?: string[] | null) => Promise<String>;
|
||||
stop: () => void;
|
||||
+ stopOnly: () => void;
|
||||
+ cleanup: () => void;
|
||||
unload: () => void;
|
||||
onResult: (onResult: (e: VoskEvent) => void) => EventSubscription;
|
||||
onFinalResult: (onFinalResult: (e: VoskEvent) => void) => EventSubscription;
|
||||
diff --git a/package.json b/package.json
|
||||
index 707eddb8d68007f93071ac659c5b087c935c5f01..90ebe20f224eeec472c377df1fef9b15f2ff8200 100644
|
||||
--- a/package.json
|
||||
+++ b/package.json
|
||||
@@ -11,12 +11,9 @@
|
||||
"src",
|
||||
"lib",
|
||||
"android",
|
||||
- "ios",
|
||||
"cpp",
|
||||
- "react-native-vosk.podspec",
|
||||
"!lib/typescript/example",
|
||||
"!android/build",
|
||||
- "!ios/build",
|
||||
"!**/__tests__",
|
||||
"!**/__fixtures__",
|
||||
"!**/__mocks__"
|
||||
diff --git a/react-native-vosk.podspec b/react-native-vosk.podspec
|
||||
deleted file mode 100644
|
||||
index e3d41b90c5eef890c7a5108aaf16ac07d34a698b..0000000000000000000000000000000000000000
|
||||
--- a/react-native-vosk.podspec
|
||||
+++ /dev/null
|
||||
@@ -1,41 +0,0 @@
|
||||
-require "json"
|
||||
-
|
||||
-package = JSON.parse(File.read(File.join(__dir__, "package.json")))
|
||||
-folly_version = '2021.06.28.00-v2'
|
||||
-folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
|
||||
-
|
||||
-Pod::Spec.new do |s|
|
||||
- s.name = "react-native-vosk"
|
||||
- s.version = package["version"]
|
||||
- s.summary = package["description"]
|
||||
- s.homepage = package["homepage"]
|
||||
- s.license = package["license"]
|
||||
- s.authors = package["author"]
|
||||
-
|
||||
- s.platforms = { :ios => "10.0" }
|
||||
- s.source = { :git => "https://github.com/riderodd/react-native-vosk.git", :tag => "#{s.version}" }
|
||||
-
|
||||
- s.source_files = "ios/**/*.{h,m,mm,swift}"
|
||||
- s.resource_bundles = { 'Vosk' => ['ios/Vosk/*'] }
|
||||
-
|
||||
- s.dependency "React-Core"
|
||||
- s.frameworks = "Accelerate"
|
||||
- s.library = "c++"
|
||||
- s.vendored_frameworks = "ios/libvosk.xcframework"
|
||||
- s.requires_arc = true
|
||||
-
|
||||
- # Don't install the dependencies when we run `pod install` in the old architecture.
|
||||
- if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then
|
||||
- s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1"
|
||||
- s.pod_target_xcconfig = {
|
||||
- "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"",
|
||||
- "CLANG_CXX_LANGUAGE_STANDARD" => "c++17"
|
||||
- }
|
||||
-
|
||||
- s.dependency "React-Codegen"
|
||||
- s.dependency "RCT-Folly", folly_version
|
||||
- s.dependency "RCTRequired"
|
||||
- s.dependency "RCTTypeSafety"
|
||||
- s.dependency "ReactCommon/turbomodule/core"
|
||||
- end
|
||||
-end
|
||||
diff --git a/src/index.tsx b/src/index.tsx
|
||||
index d9f90c921d89b1b4d85e145443ed3376546a368a..29e4068dbd7500828a73145bd25497a52c9bf638 100644
|
||||
--- a/src/index.tsx
|
||||
+++ b/src/index.tsx
|
||||
@@ -69,6 +69,15 @@ export default class Vosk {
|
||||
VoskModule.stop();
|
||||
};
|
||||
|
||||
+ stopOnly = () => {
|
||||
+ VoskModule.stopOnly();
|
||||
+ };
|
||||
+
|
||||
+ cleanup = () => {
|
||||
+ this.cleanListeners();
|
||||
+ VoskModule.cleanup();
|
||||
+ };
|
||||
+
|
||||
unload = () => {
|
||||
this.cleanListeners();
|
||||
VoskModule.unload();
|
768
.yarn/releases/yarn-3.1.1.cjs
vendored
874
.yarn/releases/yarn-3.6.3.cjs
vendored
Executable file
25
.yarnrc.yml
@@ -6,4 +6,27 @@ plugins:
|
||||
- path: .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs
|
||||
spec: "@yarnpkg/plugin-workspace-tools"
|
||||
|
||||
yarnPath: .yarn/releases/yarn-3.1.1.cjs
|
||||
yarnPath: .yarn/releases/yarn-3.6.3.cjs
|
||||
|
||||
logFilters:
|
||||
|
||||
# Disable useless non-actionable warnings.
|
||||
# https://github.com/yarnpkg/yarn/issues/4064
|
||||
|
||||
# eg "@joplin/app-desktop@workspace:packages/app-desktop provides react (p87edd) with version 18.2.0, which doesn't satisfy what @testing-library/react-hooks and some of its descendants request"
|
||||
- code: YN0060
|
||||
level: discard
|
||||
|
||||
# eg "@joplin/app-desktop@workspace:packages/app-desktop doesn't provide react-is (p570cf), requested by styled-components"
|
||||
- code: YN0002
|
||||
level: discard
|
||||
|
||||
# eg "string.prototype.matchall@npm:4.0.8 can't be found in the cache and will be fetched from the remote registry"
|
||||
- code: YN0013
|
||||
level: discard
|
||||
|
||||
# To avoid the error "The remote archive doesn't match the expected checksum".
|
||||
# Yarn offers no way to understand what the issue is when it happens, or what
|
||||
# needs to be done so it's just security theater that we have no choice but to
|
||||
# disable.
|
||||
checksumBehavior: update
|
||||
|
2
Assets/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
*~
|
||||
WebsiteAssets/locales/*.mo
|
BIN
Assets/Aide.png
Normal file
After Width: | Height: | Size: 13 KiB |
136
Assets/ImageSources/DocSources/Application.drawio
Normal file
@@ -0,0 +1,136 @@
|
||||
<mxfile host="Electron" modified="2023-04-29T09:42:39.598Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.2.1 Chrome/112.0.5615.87 Electron/24.1.2 Safari/537.36" etag="apmX4QvXCQymGu7gtKJn" version="21.2.1" type="device">
|
||||
<diagram name="Page-1" id="5f0bae14-7c28-e335-631c-24af17079c00">
|
||||
<mxGraphModel dx="1244" dy="759" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" background="none" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-1" value="Front end" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="465" y="120" width="170" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-4" value="Service" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="320" y="280" width="120" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-5" value="Service" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="490" y="280" width="120" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-6" value="Service" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="670" y="280" width="120" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-10" value="Model" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="320" y="430" width="120" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-11" value="Model" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="490" y="430" width="120" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-12" value="Model" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="670" y="430" width="120" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-14" value="SQLite database" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="1">
|
||||
<mxGeometry x="490" y="580" width="122.5" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-19" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="93vzSs2z7RmF_nCAYhdf-10" target="93vzSs2z7RmF_nCAYhdf-4">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="700" y="440" as="sourcePoint" />
|
||||
<mxPoint x="750" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-20" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="93vzSs2z7RmF_nCAYhdf-11" target="93vzSs2z7RmF_nCAYhdf-4">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="700" y="440" as="sourcePoint" />
|
||||
<mxPoint x="750" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-21" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="93vzSs2z7RmF_nCAYhdf-12" target="93vzSs2z7RmF_nCAYhdf-4">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="700" y="440" as="sourcePoint" />
|
||||
<mxPoint x="750" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-22" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="93vzSs2z7RmF_nCAYhdf-10" target="93vzSs2z7RmF_nCAYhdf-5">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="700" y="440" as="sourcePoint" />
|
||||
<mxPoint x="750" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-23" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="93vzSs2z7RmF_nCAYhdf-11" target="93vzSs2z7RmF_nCAYhdf-5">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="700" y="440" as="sourcePoint" />
|
||||
<mxPoint x="750" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-24" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="93vzSs2z7RmF_nCAYhdf-12" target="93vzSs2z7RmF_nCAYhdf-5">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="700" y="440" as="sourcePoint" />
|
||||
<mxPoint x="750" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-25" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="93vzSs2z7RmF_nCAYhdf-10" target="93vzSs2z7RmF_nCAYhdf-6">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="700" y="440" as="sourcePoint" />
|
||||
<mxPoint x="750" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-26" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="93vzSs2z7RmF_nCAYhdf-11" target="93vzSs2z7RmF_nCAYhdf-6">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="700" y="440" as="sourcePoint" />
|
||||
<mxPoint x="750" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-27" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="93vzSs2z7RmF_nCAYhdf-12" target="93vzSs2z7RmF_nCAYhdf-6">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="700" y="440" as="sourcePoint" />
|
||||
<mxPoint x="750" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-28" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="93vzSs2z7RmF_nCAYhdf-10" target="93vzSs2z7RmF_nCAYhdf-14">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="700" y="440" as="sourcePoint" />
|
||||
<mxPoint x="750" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-29" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="93vzSs2z7RmF_nCAYhdf-14" target="93vzSs2z7RmF_nCAYhdf-11">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="700" y="440" as="sourcePoint" />
|
||||
<mxPoint x="750" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-30" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="93vzSs2z7RmF_nCAYhdf-14" target="93vzSs2z7RmF_nCAYhdf-12">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="700" y="440" as="sourcePoint" />
|
||||
<mxPoint x="750" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-31" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="93vzSs2z7RmF_nCAYhdf-4" target="93vzSs2z7RmF_nCAYhdf-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="620" y="440" as="sourcePoint" />
|
||||
<mxPoint x="670" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-32" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="93vzSs2z7RmF_nCAYhdf-5" target="93vzSs2z7RmF_nCAYhdf-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="620" y="440" as="sourcePoint" />
|
||||
<mxPoint x="670" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-33" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="93vzSs2z7RmF_nCAYhdf-6" target="93vzSs2z7RmF_nCAYhdf-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="620" y="440" as="sourcePoint" />
|
||||
<mxPoint x="670" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-37" value="BACKEND" style="swimlane;whiteSpace=wrap;html=1;swimlaneFillColor=none;shadow=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="230" width="560" height="480" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-38" value="JSON config file" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;" vertex="1" parent="1">
|
||||
<mxGeometry x="910" y="420" width="80" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="93vzSs2z7RmF_nCAYhdf-39" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="93vzSs2z7RmF_nCAYhdf-37" target="93vzSs2z7RmF_nCAYhdf-38">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="830" y="480" as="sourcePoint" />
|
||||
<mxPoint x="800" y="580" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
70
Assets/ImageSources/DocSources/JoplinServer.drawio
Normal file
@@ -0,0 +1,70 @@
|
||||
<mxfile host="Electron" modified="2023-04-29T10:24:42.580Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.2.1 Chrome/112.0.5615.87 Electron/24.1.2 Safari/537.36" etag="kcPEKHJGaBvNGFhEOF2g" version="21.2.1" type="device">
|
||||
<diagram name="Page-1" id="5f0bae14-7c28-e335-631c-24af17079c00">
|
||||
<mxGraphModel dx="1306" dy="797" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" background="none" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="t8PL5avYcYxuv0YEq-6K-7" value="Joplin Server" style="swimlane;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="320" y="40" width="630" height="465" as="geometry">
|
||||
<mxRectangle x="350" y="300" width="120" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t8PL5avYcYxuv0YEq-6K-2" value="Server application" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="t8PL5avYcYxuv0YEq-6K-7">
|
||||
<mxGeometry x="270" y="92.5" width="170" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="t8PL5avYcYxuv0YEq-6K-3" value="PostgreSQL" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="t8PL5avYcYxuv0YEq-6K-7">
|
||||
<mxGeometry x="190" y="262.5" width="140" height="110" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="t8PL5avYcYxuv0YEq-6K-5" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="t8PL5avYcYxuv0YEq-6K-7" source="t8PL5avYcYxuv0YEq-6K-3" target="t8PL5avYcYxuv0YEq-6K-2">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="280" y="232.5" as="sourcePoint" />
|
||||
<mxPoint x="330" y="182.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t8PL5avYcYxuv0YEq-6K-11" value="Note metadata,<br>user accounts, etc." style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="t8PL5avYcYxuv0YEq-6K-5">
|
||||
<mxGeometry x="0.0586" y="1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t8PL5avYcYxuv0YEq-6K-4" value="AWS S3" style="shape=cube;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;darkOpacity=0.05;darkOpacity2=0.1;" vertex="1" parent="t8PL5avYcYxuv0YEq-6K-7">
|
||||
<mxGeometry x="430" y="277.5" width="120" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="t8PL5avYcYxuv0YEq-6K-6" value="Note and attachment<br>content" style="endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=0;exitY=0;exitDx=50;exitDy=0;exitPerimeter=0;" edge="1" parent="t8PL5avYcYxuv0YEq-6K-7" source="t8PL5avYcYxuv0YEq-6K-4" target="t8PL5avYcYxuv0YEq-6K-2">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="390" y="242.5" as="sourcePoint" />
|
||||
<mxPoint x="440" y="192.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t8PL5avYcYxuv0YEq-6K-12" value="Reverse proxy" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="t8PL5avYcYxuv0YEq-6K-7">
|
||||
<mxGeometry x="70" y="97.5" width="75" height="75" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="t8PL5avYcYxuv0YEq-6K-13" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="t8PL5avYcYxuv0YEq-6K-7" source="t8PL5avYcYxuv0YEq-6K-12" target="t8PL5avYcYxuv0YEq-6K-2">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="180" y="160" as="sourcePoint" />
|
||||
<mxPoint x="230" y="110" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t8PL5avYcYxuv0YEq-6K-18" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="t8PL5avYcYxuv0YEq-6K-7" source="t8PL5avYcYxuv0YEq-6K-14" target="t8PL5avYcYxuv0YEq-6K-2">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="t8PL5avYcYxuv0YEq-6K-14" value="Env file (config)" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;" vertex="1" parent="t8PL5avYcYxuv0YEq-6K-7">
|
||||
<mxGeometry x="540" y="90" width="60" height="85" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="t8PL5avYcYxuv0YEq-6K-8" value="Joplin Application (mobile, desktop, ...)" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="110" width="130" height="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="t8PL5avYcYxuv0YEq-6K-9" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="t8PL5avYcYxuv0YEq-6K-8" target="t8PL5avYcYxuv0YEq-6K-12">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="130" y="270" as="sourcePoint" />
|
||||
<mxPoint x="310" y="230" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t8PL5avYcYxuv0YEq-6K-10" value="HTTP REST requests" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="t8PL5avYcYxuv0YEq-6K-9">
|
||||
<mxGeometry x="0.0435" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
BIN
Assets/ImageSources/WebsiteTopImageCn.png
Normal file
After Width: | Height: | Size: 1.7 MiB |
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 135 KiB |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 697 B After Width: | Height: | Size: 828 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 7.4 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 9.7 KiB |
@@ -10,9 +10,9 @@
|
||||
"license": "ISC",
|
||||
"devDependencies": {
|
||||
"@ephox/oxide-icons-tools": "^2.1.1",
|
||||
"gulp": "^4.0.2",
|
||||
"gulp": "4.0.2",
|
||||
"gulp-clean": "^0.4.0",
|
||||
"prompts": "^2.2.1"
|
||||
},
|
||||
"iconPackName": "Joplin"
|
||||
}
|
||||
}
|
@@ -42,7 +42,7 @@ export function addJoplinChecklistCommands(editor, ToggleList) {
|
||||
});
|
||||
|
||||
editor.addCommand('InsertJoplinChecklist', function (ui, detail) {
|
||||
detail = Object.assign({}, detail, { listType: 'joplinChecklist' });
|
||||
detail = { ...detail, listType: 'joplinChecklist' };
|
||||
ToggleList.toggleList(editor, 'UL', detail);
|
||||
});
|
||||
}
|
821
Assets/WebsiteAssets/css/brand.css
Normal file
@@ -0,0 +1,821 @@
|
||||
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */button,hr,input{overflow:visible}progress,sub,sup{vertical-align:baseline}[type=checkbox],[type=radio],legend{box-sizing:border-box;padding:0}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}details,main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:ButtonText dotted 1px}fieldset{padding:.35em .75em .625em}legend{color:inherit;display:table;max-width:100%;white-space:normal}textarea{overflow:auto}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}[hidden],template{display:none}
|
||||
|
||||
|
||||
/* Global */
|
||||
:root {
|
||||
--primary-DarkBlue: #043873;
|
||||
--primary-White: #ffffff;
|
||||
--primary-DarkGray: #32363f;
|
||||
--accent-LightBlue: #4f9cf9;
|
||||
--accent-Yellow: #ffe492;
|
||||
--variationPrimary-VaraintDark: #072445;
|
||||
--variationPrimary-VaraintWhite: #f8f9fa;
|
||||
--variationPrimary-VaraintDarkGray: #212529;
|
||||
--variationAccent-VaraintLightBlue: #F7FBFF;
|
||||
}
|
||||
* {
|
||||
font-family: "Montserrat", sans-serif;
|
||||
}
|
||||
|
||||
h2 {
|
||||
border-bottom: none;
|
||||
margin-bottom: 0;
|
||||
margin-top: 0.7em;
|
||||
}
|
||||
|
||||
#mobile_icon_logo{
|
||||
display: none;
|
||||
}
|
||||
.joplin__para {
|
||||
font-weight: 400;
|
||||
font-size: 20.8px;
|
||||
line-height: 1.5;
|
||||
color: var(--primary-DarkGray);
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
@media screen and (max-width: 767px) {
|
||||
.joplin__para {
|
||||
/* text-align: center; */
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 425px) {
|
||||
.joplin__para {
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
.joplin__tagline1 {
|
||||
font-weight: 700;
|
||||
font-size: 32px;
|
||||
line-height: 1.5;
|
||||
color: var(--variationPrimary-VaraintDarkGray);
|
||||
}
|
||||
@media screen and (max-width: 425px) {
|
||||
.joplin__tagline1 {
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
@media (min-width: 576px) {
|
||||
.container {
|
||||
max-width: 540px;
|
||||
}
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
.container {
|
||||
max-width: 720px;
|
||||
}
|
||||
}
|
||||
@media (min-width: 992px) {
|
||||
.container {
|
||||
max-width: 960px;
|
||||
}
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.container {
|
||||
max-width: 1140px;
|
||||
}
|
||||
}
|
||||
@media (min-width: 1400px) {
|
||||
.container {
|
||||
max-width: 1220px;
|
||||
}
|
||||
}
|
||||
@media (min-width: 768px) and (max-width: 991px) {
|
||||
.justify-content-tablet-end {
|
||||
justify-content: flex-end;
|
||||
}
|
||||
}
|
||||
/* Global */
|
||||
|
||||
/* Header */
|
||||
header {
|
||||
background-image: url("../images/brand/background\ blue\ motif\ 1.png");
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
border-radius: 5px;
|
||||
padding: 36px 0;
|
||||
}
|
||||
header .container nav {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
@media screen and (max-width: 425px) {
|
||||
header .container nav {
|
||||
align-items: flex-start;
|
||||
}
|
||||
}
|
||||
h1.main-logo {
|
||||
|
||||
font-weight: 600;
|
||||
font-size: 48px;
|
||||
color: var(--primary-DarkBlue);
|
||||
margin: 0;
|
||||
border-bottom: 1px solid #ddd;
|
||||
line-height: 1.3em;
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
@media screen and (max-width: 992px) {
|
||||
header .container nav img {
|
||||
max-width: 200px;
|
||||
}
|
||||
#brand_guidelines{
|
||||
margin-top: 50px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@media screen and (max-width: 767px) {
|
||||
header .container nav img {
|
||||
max-width: 150px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 576px) {
|
||||
#main_lockup {
|
||||
display: none;
|
||||
}
|
||||
#mobile_icon_logo{
|
||||
display: block;
|
||||
max-width: 80px;
|
||||
margin-top: 20px;
|
||||
|
||||
}
|
||||
#brand_guidelines{
|
||||
text-align: left;
|
||||
padding-left: 20px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@media screen and (max-width: 375px) {
|
||||
header .container nav h1.main-logo {
|
||||
font-size: 40px;
|
||||
}
|
||||
#main_lockup{
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
#mobile_icon_logo{
|
||||
display: block;
|
||||
max-width: 80px;
|
||||
margin-top: 20px;
|
||||
|
||||
}
|
||||
#brand_guidelines{
|
||||
text-align: left;
|
||||
padding-left: 30px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*header .container nav .logo {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
gap: 30px;
|
||||
flex-wrap: nowrap;
|
||||
}*/
|
||||
|
||||
@media (min-width: 768px) and (max-width: 991px) {
|
||||
header .container nav .logo {
|
||||
align-items: flex-start;
|
||||
}
|
||||
}
|
||||
header .container nav .logo h3 {
|
||||
font-weight: 600;
|
||||
font-size: 48px;
|
||||
color: #ffffff;
|
||||
letter-spacing: 1px;
|
||||
margin: 0;
|
||||
}
|
||||
@media screen and (max-width: 560px) {
|
||||
header .container nav .logo h3 {
|
||||
display: none;
|
||||
}
|
||||
|
||||
}
|
||||
/* Header */
|
||||
/* joplin Logos */
|
||||
.joplin__logos {
|
||||
padding-top: 0px;
|
||||
padding-bottom: 43px;
|
||||
}
|
||||
.joplin__logos h2.main-logo {
|
||||
font-weight: 700;
|
||||
font-size: 40px;
|
||||
color: var(--primary-DarkBlue);
|
||||
/* margin-bottom: 45px; */
|
||||
}
|
||||
@media screen and (max-width: 767px) {
|
||||
.joplin__logos h2.main-logo {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 767px) {
|
||||
.joplin__logos h2.main-logo {
|
||||
font-size: 33px;
|
||||
}
|
||||
}
|
||||
.joplin__logos .container > p {
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
.joplin__logos > .wrapper {
|
||||
padding: 40px 0 45px 0;
|
||||
margin: 40px 45px;
|
||||
/* width: calc(100% - 6.5vw); */
|
||||
border: 1px solid var(--variationPrimary-VaraintDarkGray);
|
||||
border-radius: 5px;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
@media screen and (max-width: 1440px) {
|
||||
.joplin__logos > .wrapper {
|
||||
padding: 40px 0 45px 0;
|
||||
margin: 40px auto;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
.joplin__logos .wrapper .para-1 {
|
||||
margin-bottom: 19px;
|
||||
}
|
||||
.joplin__logos .wrapper .logo-wrapper {
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
gap: 27px;
|
||||
}
|
||||
.joplin__logos .wrapper .logo-wrapper:last-child {
|
||||
gap: 24px;
|
||||
}
|
||||
@media screen and (max-width: 320px) {
|
||||
.joplin__logos .wrapper .logo-wrapper img {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
}
|
||||
}
|
||||
.joplin__logos .wrapper .logo-wrapper h4 {
|
||||
font-size: 38px;
|
||||
font-weight: 600;
|
||||
}
|
||||
@media screen and (max-width: 320px) {
|
||||
.joplin__logos .wrapper .logo-wrapper h4 {
|
||||
font-size: 32px;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
.joplin__logos .wrapper .logo-wrapper .blue-header {
|
||||
color: var(--accent-LightBlue);
|
||||
margin: 0;
|
||||
}
|
||||
.joplin__logos .wrapper .logo-wrapper .white-header {
|
||||
color: var(--primary-White);
|
||||
margin: 0;
|
||||
}
|
||||
.joplin__logos .wrapper .para-1 .blue-text {
|
||||
font-weight: bold;
|
||||
color: var(--accent-LightBlue);
|
||||
}
|
||||
|
||||
@media screen and (max-width: 767px) {
|
||||
.joplin__logos .wrapper .box:nth-child(1) {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
.joplin__logos .wrapper .box:nth-child(1) > p {
|
||||
width: 80%;
|
||||
}
|
||||
@media screen and (max-width: 1024px) {
|
||||
.joplin__logos .wrapper .box:nth-child(1) > p {
|
||||
width: 90%;
|
||||
}
|
||||
}
|
||||
|
||||
.para-1 {
|
||||
width: 100%;
|
||||
}
|
||||
.joplin__logos .wrapper-2 .our-para {
|
||||
width: 100% !important;
|
||||
}
|
||||
@media screen and (min-width: 1400px) {
|
||||
.joplin__logos .wrapper .box2 {
|
||||
/* padding-left: 50px;
|
||||
margin-right: -130px; */
|
||||
}
|
||||
}
|
||||
.joplin__logos .wrapper .colored-box {
|
||||
background-color: var(--primary-DarkBlue);
|
||||
padding: 17px 15px 15px 24px;
|
||||
/* width: 320px; */
|
||||
/* height: 189px; */
|
||||
}
|
||||
@media (min-width: 768px) and (max-width: 991px) {
|
||||
.joplin__logos .wrapper .colored-box {
|
||||
transform: translateX(-35px);
|
||||
}
|
||||
}
|
||||
.joplin__logos .wrapper .colored-box p {
|
||||
font-weight: normal;
|
||||
color: var(--primary-White);
|
||||
margin-bottom: 20px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
@media screen and (max-width: 767px) {
|
||||
.joplin__logos .wrapper .colored-box {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.joplin__logos .wrapper .box-wrapper {
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
align-items: flex-start;
|
||||
gap: 14px;
|
||||
}
|
||||
@media screen and (max-width: 767px) {
|
||||
.joplin__logos .wrapper .box-wrapper {
|
||||
flex-direction: column-reverse;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.joplin__logos .wrapper h2 {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.joplin__logos .wrapper .box-wrapper img {
|
||||
margin-top: 7px;
|
||||
max-width: 100%;
|
||||
}
|
||||
.joplin__logos .wrapper .box-wrapper p {
|
||||
width: 70%;
|
||||
}
|
||||
.joplin__logos .wrapper-2 {
|
||||
position: relative;
|
||||
padding: 42px 0 35px 0;
|
||||
}
|
||||
@media screen and (max-width: 425px) {
|
||||
.joplin__logos .wrapper-2 {
|
||||
padding: 42px 0 35px 0;
|
||||
}
|
||||
}
|
||||
.joplin__logos .wrapper-2 .pipeline {
|
||||
width: 1px;
|
||||
height: 94%;
|
||||
background-color: var(--variationPrimary-VaraintDarkGray);
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 47%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
@media screen and (max-width: 1200px) {
|
||||
.joplin__logos .wrapper-2 .pipeline {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 1366px) {
|
||||
.joplin__logos .wrapper-2 .pipeline {
|
||||
left: 49%;
|
||||
}
|
||||
}
|
||||
.joplin__logos .wrapper-2 .joplin__tagline1 {
|
||||
margin-bottom: 34px;
|
||||
}
|
||||
.joplin__logos .wrapper-2 .our-para {
|
||||
margin-top: 19px;
|
||||
}
|
||||
.joplin__logos .wrapper-2 img {
|
||||
max-width: 100%;
|
||||
}
|
||||
@media screen and (max-width: 425px) {
|
||||
.joplin__logos .wrapper-2 .box-wrapper {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
@media (min-width: 1400px) and (max-width: 2100px) {
|
||||
.joplin__logos .wrapper-2 .special-box {
|
||||
margin-left: 150px;
|
||||
}
|
||||
.joplin__logos .wrapper-2 .special-box p {
|
||||
width: 100%;
|
||||
}
|
||||
.joplin__logos .wrapper-2 .pipeline {
|
||||
left: 53%;
|
||||
}
|
||||
}
|
||||
/* @media (min-width: 1441px) and (max-width: 1750px) {
|
||||
.joplin__logos .p-row {
|
||||
padding: 0 5rem;
|
||||
}
|
||||
} */
|
||||
/* joplin Logos */
|
||||
|
||||
/* joplin__Colours */
|
||||
.joplin__colours {
|
||||
padding: 5px 0;
|
||||
background-image: url("../images/brand/background\ blue\ motif\ 2.png");
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
}
|
||||
.joplin__colours h2 {
|
||||
color: var(--primary-White);
|
||||
font-size: 40px;
|
||||
margin-bottom: 28px;
|
||||
font-weight: 700;
|
||||
}
|
||||
@media screen and (max-width: 767px) {
|
||||
.joplin__colours h2 {
|
||||
font-size: 33px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 767px) {
|
||||
.joplin__colours h2 {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.joplin__colours p {
|
||||
color: var(--primary-White);
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
.joplin__colours .custom-row {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: 45px;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
@media screen and (max-width: 1400px) {
|
||||
.joplin__colours .custom-row {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
}
|
||||
|
||||
.joplin__colours .custom-row .chartjs-wrapper canvas {
|
||||
width: 535px;
|
||||
}
|
||||
@media screen and (max-width: 575px) {
|
||||
.joplin__colours .custom-row .chartjs-wrapper canvas {
|
||||
width: 270px;
|
||||
}
|
||||
}
|
||||
/* joplin__Colours */
|
||||
/* joplin__Pallet */
|
||||
.joplin__pallet {
|
||||
padding: 45px 0 92px 0;
|
||||
}
|
||||
.joplin__pallet h3 {
|
||||
font-weight: 600;
|
||||
font-size: 32px;
|
||||
margin-bottom: 50px;
|
||||
}
|
||||
@media screen and (max-width: 767px) {
|
||||
.joplin__pallet h3 {
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 1200px) {
|
||||
.joplin__pallet h3 {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.joplin__pallet .sigma-wrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
gap: 35px;
|
||||
}
|
||||
@media screen and (max-width: 555px) {
|
||||
.joplin__pallet .sigma-wrapper {
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
.joplin__pallet .sigma-wrapper .circle-wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
align-items: flex-start;
|
||||
}
|
||||
@media screen and (max-width: 992px) {
|
||||
.joplin__pallet .sigma-wrapper .circle-wrapper {
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 1200px) {
|
||||
.joplin__pallet .sigma-wrapper {
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
.joplin__pallet .sigma-wrapper .circle-wrapper .circle {
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
border-radius: 50%;
|
||||
border: 1px solid #000;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
.joplin__pallet .row-space {
|
||||
padding: 50px 0;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
}
|
||||
.joplin__pallet .row-space div {
|
||||
width: 97%;
|
||||
height: 1px;
|
||||
background-color: var(--primary-DarkGray);
|
||||
}
|
||||
.joplin__pallet .dark-blue {
|
||||
background-color: var(--primary-DarkBlue);
|
||||
}
|
||||
.joplin__pallet .white {
|
||||
background-color: var(--primary-White);
|
||||
}
|
||||
.joplin__pallet .dark-gray {
|
||||
background-color: var(--primary-DarkGray);
|
||||
}
|
||||
.joplin__pallet .light-blue {
|
||||
background-color: var(--accent-LightBlue);
|
||||
}
|
||||
.joplin__pallet .yellow {
|
||||
background-color: var(--accent-Yellow);
|
||||
}
|
||||
.joplin__pallet .variant-dark {
|
||||
background-color: var(--variationPrimary-VaraintDark);
|
||||
}
|
||||
.joplin__pallet .variant-white {
|
||||
background-color: var(--variationPrimary-VaraintWhite);
|
||||
}
|
||||
.joplin__pallet .variant-dark-gray {
|
||||
background-color: var(--variationPrimary-VaraintDarkGray);
|
||||
}
|
||||
.joplin__pallet .variant-light-blue {
|
||||
background-color: var(--variationAccent-VaraintLightBlue);
|
||||
}
|
||||
/* joplin__Pallet */
|
||||
/* joplin__State */
|
||||
.joplin__state {
|
||||
background-color: var(--primary-DarkBlue);
|
||||
background-image: url("../images/brand/Rectangle\ 16.png");
|
||||
background-position: bottom center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
padding: 65px 0 78px 0;
|
||||
position: relative;
|
||||
}
|
||||
.joplin__state::before {
|
||||
content: "";
|
||||
width: 1px;
|
||||
height: 98%;
|
||||
background-color: var(--variationPrimary-VaraintDarkGray);
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
overflow: hidden;
|
||||
}
|
||||
@media screen and (max-width: 992px) {
|
||||
.joplin__state::before {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
.joplin__state .image {
|
||||
transform: translateY(25px);
|
||||
}
|
||||
.joplin__state .wrapper > div {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
.joplin__state .wrapper > div .box h2 {
|
||||
color: var(--primary-White);
|
||||
font-size: 40px;
|
||||
margin-bottom: 28px;
|
||||
font-weight: 700;
|
||||
}
|
||||
/* @media screen and (min-width: 1400px) {
|
||||
.joplin__state .wrapper > div .box h2 {
|
||||
text-wrap: nowrap;
|
||||
}
|
||||
} */
|
||||
@media screen and (max-width: 767px) {
|
||||
.joplin__state .wrapper > div .box h2 {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 500px) {
|
||||
.joplin__state .wrapper > div .box h2 {
|
||||
font-size: 38px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 767px) {
|
||||
.joplin__state .wrapper > div .box h2 {
|
||||
font-size: 33px;
|
||||
}
|
||||
}
|
||||
|
||||
.joplin__state .wrapper > div .box p {
|
||||
color: var(--primary-White);
|
||||
width: 85%;
|
||||
}
|
||||
@media screen and (max-width: 500px) {
|
||||
.joplin__state .wrapper > div .box p {
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
.joplin__state .wrapper > div .box img {
|
||||
max-width: 100%;
|
||||
}
|
||||
.joplin__highlighter {
|
||||
padding: 74px 0;
|
||||
background-image: url("../images/brand/Rectangle\ 16.png");
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
}
|
||||
.joplin__highlighter h2 {
|
||||
color: var(--primary-White);
|
||||
font-size: 40px;
|
||||
margin-bottom: 28px;
|
||||
font-weight: 700;
|
||||
}
|
||||
@media screen and (max-width: 767px) {
|
||||
.joplin__highlighter h2 {
|
||||
font-size: 33px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 767px) {
|
||||
.joplin__highlighter h2 {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.joplin__highlighter p {
|
||||
color: var(--primary-White);
|
||||
}
|
||||
@media screen and (max-width: 500px) {
|
||||
.joplin__highlighter p {
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
.joplin__highlighter .wrapper {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-top: 22px;
|
||||
}
|
||||
@media screen and (max-width: 767px) {
|
||||
.joplin__highlighter .wrapper {
|
||||
flex-wrap: wrap;
|
||||
row-gap: 25px;
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
.joplin__highlighter .wrapper div {
|
||||
padding: 32px 62px;
|
||||
border-radius: 5px;
|
||||
position: relative;
|
||||
}
|
||||
.joplin__highlighter .wrapper div:first-child img {
|
||||
position: absolute;
|
||||
top: 57%;
|
||||
max-width: 100%;
|
||||
}
|
||||
.joplin__highlighter .wrapper div:last-child img {
|
||||
position: absolute;
|
||||
top: 59%;
|
||||
max-width: 100%;
|
||||
}
|
||||
@media screen and (max-width: 1200px) {
|
||||
.joplin__highlighter .wrapper div:first-child img {
|
||||
top: 43%;
|
||||
}
|
||||
.joplin__highlighter .wrapper div:last-child img {
|
||||
top: 44%;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 767px) {
|
||||
.joplin__highlighter .wrapper div:first-child img {
|
||||
top: 59%;
|
||||
}
|
||||
.joplin__highlighter .wrapper div:last-child img {
|
||||
top: 59%;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 490px) {
|
||||
.joplin__highlighter .wrapper div:first-child img {
|
||||
top: 43%;
|
||||
}
|
||||
.joplin__highlighter .wrapper div:last-child img {
|
||||
top: 43%;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 320px) {
|
||||
.joplin__highlighter .wrapper div:last-child img {
|
||||
top: 36%;
|
||||
}
|
||||
}
|
||||
.joplin__highlighter .wrapper div.yellow {
|
||||
background-color: var(--primary-White);
|
||||
}
|
||||
.joplin__highlighter .wrapper div.blue {
|
||||
background-color: var(--primary-DarkBlue);
|
||||
}
|
||||
.joplin__highlighter .wrapper div h4 {
|
||||
color: var(--variationPrimary-VaraintDarkGray);
|
||||
margin: 0;
|
||||
font-weight: 700;
|
||||
font-size: 20.8px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.joplin__highlighter .wrapper div.blue h4 {
|
||||
color: var(--primary-White);
|
||||
}
|
||||
|
||||
/* joplin__State */
|
||||
/* joplin__Voice */
|
||||
.joplin__voice {
|
||||
padding: 78px 0;
|
||||
}
|
||||
.joplin__voice .container h2 {
|
||||
font-weight: 700;
|
||||
font-size: 40px;
|
||||
line-height: 1.5;
|
||||
color: var(--variationPrimary-VaraintDarkGray);
|
||||
}
|
||||
|
||||
@media screen and (max-width: 500px) {
|
||||
.joplin__voice .container h2 {
|
||||
font-size: 38px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 767px) {
|
||||
.joplin__voice .container h2 {
|
||||
font-size: 33px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.joplin__voice .container .wrapper {
|
||||
margin-top: 57px;
|
||||
}
|
||||
.joplin__voice .container .wrapper .box {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: flex-start;
|
||||
gap: 20px;
|
||||
}
|
||||
@media screen and (max-width: 767px) {
|
||||
.joplin__voice .container .wrapper .box {
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
.joplin__voice .container .wrapper .box div:first-child {
|
||||
flex: 1;
|
||||
}
|
||||
.joplin__voice .container .wrapper .box div:last-child {
|
||||
flex: 2;
|
||||
}
|
||||
.joplin__voice .container .wrapper .box div h3 {
|
||||
font-weight: 700;
|
||||
font-size: 32px;
|
||||
line-height: 1.7;
|
||||
color: var(--primary-DarkGray);
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.joplin__voice .container .wrapper .box div h3 {
|
||||
text-align: center;
|
||||
font-size:28px;
|
||||
}
|
||||
.joplin__voice .container .wrapper .box {
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
.joplin__voice .container .wrapper .box div p {
|
||||
margin-bottom: 36px;
|
||||
}
|
||||
@media screen and (max-width: 500px) {
|
||||
.joplin__voice .container .wrapper .box div p {
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
/* joplin__Voice */
|
||||
.chartjs-wrapper {
|
||||
background-color: #d9d9d9;
|
||||
padding: 10px 20px;
|
||||
max-width: 45%;
|
||||
}
|
||||
|
@@ -399,12 +399,12 @@ div.navbar-mobile-content a.sponsor-button {
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
#top-section-img {
|
||||
.top-section-img {
|
||||
margin-bottom: -280px;
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
#top-section-img img {
|
||||
.top-section-img img {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@@ -657,6 +657,16 @@ footer .bottom-links-row p {
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
.language-switcher {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.language-switcher > button {
|
||||
border: none;
|
||||
background-color: transparent;
|
||||
color: #0557ba;
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
WHAT'S NEW PAGE
|
||||
*****************************************************************/
|
||||
@@ -728,6 +738,16 @@ footer .bottom-links-row p {
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
LARGE VIEW
|
||||
*****************************************************************/
|
||||
|
||||
@media (max-width: 1200px) {
|
||||
#nav-section a {
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
MEDIUM VIEW
|
||||
- Make menu bar elements smaller and closer to each others
|
||||
@@ -769,7 +789,8 @@ footer .bottom-links-row p {
|
||||
}
|
||||
|
||||
#menu-mobile .social-links .social-link-mastodon,
|
||||
#menu-mobile .social-links .social-link-reddit,
|
||||
#menu-mobile .social-links .social-link-lemmy,
|
||||
#menu-mobile .social-links .social-link-linkedin,
|
||||
#menu-mobile .social-links .social-link-patreon {
|
||||
display: none;
|
||||
}
|
||||
@@ -910,7 +931,7 @@ footer .bottom-links-row p {
|
||||
padding-top: 80px;
|
||||
}
|
||||
|
||||
#top-section-img {
|
||||
.top-section-img {
|
||||
margin-bottom: -90px;
|
||||
margin-top: 50px;
|
||||
}
|
||||
@@ -937,6 +958,41 @@ footer .bottom-links-row p {
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
MORE NARROW VIEW
|
||||
eg for Galaxy S9
|
||||
*****************************************************************/
|
||||
|
||||
@media (max-width: 580px) {
|
||||
|
||||
#nav-section .plans-button {
|
||||
display: none;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
MORE NARROW VIEW
|
||||
eg for Galaxy S9
|
||||
*****************************************************************/
|
||||
|
||||
@media (max-width: 400px) {
|
||||
|
||||
#nav-section .navbar-mobile-content a.sponsor-button .sponsor-button-label {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
#nav-section .navbar-mobile-content a.sponsor-button {
|
||||
padding: 2px 6px;
|
||||
margin-right: 0.2em;
|
||||
}
|
||||
|
||||
#nav-section a {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
VERY NARROW VIEW
|
||||
eg for Galaxy Fold
|
||||
@@ -954,6 +1010,19 @@ footer .bottom-links-row p {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#nav-section a {
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
div.navbar-mobile-content a.sponsor-button {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
#nav-section .button-link {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
@@ -1154,7 +1223,7 @@ footer .bottom-links-row p {
|
||||
background-position: bottom;
|
||||
padding-bottom: 160px;
|
||||
}
|
||||
#top-section-img {
|
||||
.top-section-img {
|
||||
margin-bottom: -240px;
|
||||
margin-top: 130px;
|
||||
}
|
||||
@@ -1182,3 +1251,29 @@ footer .bottom-links-row p {
|
||||
margin-top: -15p;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
ENGLISH VERSION
|
||||
*****************************************************************/
|
||||
|
||||
:lang(en-gb) #made-in-france-section {
|
||||
display: none;
|
||||
}
|
||||
|
||||
:lang(en-gb) .top-section-img-cn {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
CHINESE VERSION
|
||||
*****************************************************************/
|
||||
|
||||
:lang(zh-cn) #in-the-press-section,
|
||||
:lang(zh-cn) #sponsors-section,
|
||||
:lang(zh-cn) .top-section-img-en {
|
||||
display: none;
|
||||
}
|
||||
|
||||
:lang(zh-cn) #plans-section .faq {
|
||||
display: none;
|
||||
}
|
BIN
Assets/WebsiteAssets/images/architecture/Application.png
Normal file
After Width: | Height: | Size: 138 KiB |
BIN
Assets/WebsiteAssets/images/architecture/JoplinServer.png
Normal file
After Width: | Height: | Size: 110 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 195 KiB |
After Width: | Height: | Size: 10 KiB |
BIN
Assets/WebsiteAssets/images/brand/Rectangle 16.png
Normal file
After Width: | Height: | Size: 63 KiB |
BIN
Assets/WebsiteAssets/images/brand/Rectangle 18.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
Assets/WebsiteAssets/images/brand/Vector.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
Assets/WebsiteAssets/images/brand/Vector2.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
Assets/WebsiteAssets/images/brand/Vector3.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 27 KiB |
BIN
Assets/WebsiteAssets/images/brand/background blue motif 1.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
Assets/WebsiteAssets/images/brand/background blue motif 2.png
Normal file
After Width: | Height: | Size: 64 KiB |
BIN
Assets/WebsiteAssets/images/brand/customise-it-img 1.png
Normal file
After Width: | Height: | Size: 53 KiB |
BIN
Assets/WebsiteAssets/images/brand/frame-blue 1.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
Assets/WebsiteAssets/images/brand/frame-yellow 1.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
Assets/WebsiteAssets/images/brand/logo-text 1.png
Normal file
After Width: | Height: | Size: 6.0 KiB |
BIN
Assets/WebsiteAssets/images/brand/logo-text 2.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
Assets/WebsiteAssets/images/brand/logo-text-blue 1.png
Normal file
After Width: | Height: | Size: 4.7 KiB |
BIN
Assets/WebsiteAssets/images/brand/tagline 1.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
Assets/WebsiteAssets/images/email_to_note/desktop.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
Assets/WebsiteAssets/images/email_to_note/mobile.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
Assets/WebsiteAssets/images/email_to_note/website.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
Assets/WebsiteAssets/images/home-top-img-cn-2x.png
Normal file
After Width: | Height: | Size: 2.1 MiB |
BIN
Assets/WebsiteAssets/images/home-top-img-cn-2x.webp
Normal file
After Width: | Height: | Size: 149 KiB |
BIN
Assets/WebsiteAssets/images/home-top-img-cn-4x.webp
Normal file
After Width: | Height: | Size: 320 KiB |
BIN
Assets/WebsiteAssets/images/home-top-img-cn.png
Normal file
After Width: | Height: | Size: 582 KiB |
BIN
Assets/WebsiteAssets/images/home-top-img-cn.webp
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
Assets/WebsiteAssets/images/made-in-france.png
Normal file
After Width: | Height: | Size: 167 KiB |
BIN
Assets/WebsiteAssets/images/news/20221216-mobile-beta-editor.png
Normal file
After Width: | Height: | Size: 135 KiB |
BIN
Assets/WebsiteAssets/images/news/20221216-notebook-icons.png
Normal file
After Width: | Height: | Size: 53 KiB |
BIN
Assets/WebsiteAssets/images/news/20221216-proxy-support.png
Normal file
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 10 KiB |
BIN
Assets/WebsiteAssets/images/news/20230116-ga-raw-log-colored.png
Normal file
After Width: | Height: | Size: 963 KiB |
BIN
Assets/WebsiteAssets/images/news/20230116-ga-raw-log.png
Normal file
After Width: | Height: | Size: 295 KiB |
BIN
Assets/WebsiteAssets/images/news/20230202-jdll.jpg
Normal file
After Width: | Height: | Size: 238 KiB |
BIN
Assets/WebsiteAssets/images/news/20230508-biometrics-1.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
Assets/WebsiteAssets/images/news/20230508-biometrics-2.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
Assets/WebsiteAssets/images/news/20230508-biometrics-3.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
Assets/WebsiteAssets/images/news/20230508-new-note-1.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
Assets/WebsiteAssets/images/news/20230508-new-note-2.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
Assets/WebsiteAssets/images/news/20230711-mermaid-export.png
Normal file
After Width: | Height: | Size: 94 KiB |
BIN
Assets/WebsiteAssets/images/news/20230711-voice-typing-1.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
Assets/WebsiteAssets/images/news/20230711-voice-typing-2.png
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
Assets/WebsiteAssets/images/news/20230711-voice-typing-3.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
Assets/WebsiteAssets/images/news/20230825-resize-note.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
Assets/WebsiteAssets/images/news/20230825-share-permissions.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
Assets/WebsiteAssets/images/sponsors/CitricSheep.png
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
Assets/WebsiteAssets/images/sponsors/Grundstueckspreise.png
Normal file
After Width: | Height: | Size: 9.9 KiB |
BIN
Assets/WebsiteAssets/images/sponsors/TranioOverseasProperty.jpg
Normal file
After Width: | Height: | Size: 6.1 KiB |
7
Assets/WebsiteAssets/js/bootstrap5.0.2.bundle.min.js
vendored
Normal file
5016
Assets/WebsiteAssets/js/bootstrap5.0.2.js
vendored
0
Assets/WebsiteAssets/js/brand.js
Normal file
@@ -9,7 +9,9 @@ function getOs() {
|
||||
function getFilename(path) {
|
||||
if (!path) return '';
|
||||
const s = path.split('/');
|
||||
return s.pop();
|
||||
const urlWithParams = s.pop();
|
||||
const s2 = urlWithParams.split('?');
|
||||
return s2[0];
|
||||
}
|
||||
|
||||
function getMobileOs() {
|
||||
|
28
Assets/WebsiteAssets/locales/fr_FR.po
Normal file
@@ -0,0 +1,28 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: fr_FR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 3.0.1\n"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:63
|
||||
msgid "Download the app"
|
||||
msgstr "Télécharger l'application"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:54
|
||||
msgid "Free your <span class=\"frame-bg frame-bg-blue\">notes</span>"
|
||||
msgstr "Libérez vos <span class=\"frame-bg frame-bg-blue\">notes</span>"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:57
|
||||
msgid "Joplin is an open source note-taking app. Capture your thoughts and securely access them from any device."
|
||||
msgstr "Joplin est une application libre de prise de notes. Capturez vos pensées et accédez-y de façon sécurisé depuis n'importe quel appareil."
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:65
|
||||
msgid "Sign up with Joplin Cloud"
|
||||
msgstr "S'inscrire sur Joplin Cloud"
|
202
Assets/WebsiteAssets/locales/zh_CN.po
Normal file
@@ -0,0 +1,202 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: zh_CN\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 3.0.1\n"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/partials/plan.mustache:13
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/partials/plan.mustache:9
|
||||
msgid "/month"
|
||||
msgstr "/月"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/partials/plan.mustache:19
|
||||
msgid "/year"
|
||||
msgstr "/年"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/plans.mustache:8
|
||||
msgid ""
|
||||
"<a href=\"https://joplincloud.com\">Joplin Cloud</a> allows you to "
|
||||
"synchronise your notes across devices. It also lets you publish notes, and "
|
||||
"collaborate on notebooks with your friends, family or colleagues."
|
||||
msgstr ""
|
||||
"<a href=\"https://joplincloud.com\">Joplin Cloud</a> 允许您在不同的设备上同步"
|
||||
"您的笔记。它还可以让您发布笔记,并与您的朋友、家人或同事在笔记本上进行协作。"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:205
|
||||
msgid "<span class=\"frame-bg frame-bg-yellow-lg\">Customise</span> it"
|
||||
msgstr "<span class=\"frame-bg frame-bg-yellow-lg\">定制</span>它 根据您的需要"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:104
|
||||
msgid "<span class=\"frame-bg frame-bg-yellow\">Multimedia</span> notes"
|
||||
msgstr "<span class=\"frame-bg frame-bg-yellow\">多媒体</span>说明"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:256
|
||||
msgid "100% <span class=\"frame-bg frame-bg-yellow-lg\">your data</span>"
|
||||
msgstr "百分之百<span class=\"frame-bg frame-bg-yellow-lg\">你的数据</span>"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:298
|
||||
msgid "A <span class=\"frame-bg frame-bg-yellow-lg\">French</span> Alternative"
|
||||
msgstr "一个<span class=\"frame-bg frame-bg-yellow-lg\">法国</span>的替代方案"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:236
|
||||
msgid ""
|
||||
"Access your notes from your computer, phone or tablet by synchronising with "
|
||||
"various services, including Joplin Cloud, Dropbox and OneDrive. The app is "
|
||||
"available on Windows, macOS, Linux, Android and iOS. A terminal app is also "
|
||||
"available!"
|
||||
msgstr ""
|
||||
"通过与各种服务同步,包括Joplin Cloud、Dropbox和OneDrive,从你的电脑、手机或平"
|
||||
"板电脑访问你的笔记。该应用程序可在Windows、macOS、Linux、Android和iOS上使用。"
|
||||
"终端应用也可使用!"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/plans.mustache:49
|
||||
msgid ""
|
||||
"Already have a Joplin Cloud account? <a href=\"https://joplincloud.com"
|
||||
"\">Login now</a>"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:208
|
||||
msgid ""
|
||||
"Customise the app with plugins, custom themes and multiple text editors "
|
||||
"(Rich Text or Markdown). Or create your own scripts and plugins using the "
|
||||
"Extension API."
|
||||
msgstr ""
|
||||
"用插件、自定义主题和多个文本编辑器(富文本或马克顿)来定制该应用程序。或者使"
|
||||
"用扩展API创建你自己的脚本和插件。"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:242
|
||||
msgid "Download it now"
|
||||
msgstr "下载该应用程序"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:112
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:63
|
||||
msgid "Download the app"
|
||||
msgstr "下载该应用程序"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:213
|
||||
msgid "Find out more"
|
||||
msgstr "了解更多"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:54
|
||||
msgid "Free your <span class=\"frame-bg frame-bg-blue\">notes</span>"
|
||||
msgstr "释放你的<span class=\"frame-bg frame-bg-blue\">笔记</span>"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:175
|
||||
msgid "Get the clipper"
|
||||
msgstr "获取剪子"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:107
|
||||
msgid ""
|
||||
"Images, videos, PDFs and audio files are supported. Create math expressions "
|
||||
"and diagrams directly from the app. Take photos with the mobile app and save "
|
||||
"them to a note."
|
||||
msgstr ""
|
||||
"Joplin,由于其起源和设计,适应并尊重中国的标准和规则。这保证了您的使用不受限"
|
||||
"制,以及您的使用数据的完全透明和安全。"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:327
|
||||
msgid "In the <span class=\"frame-bg frame-bg-yellow\">Press</span>"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/plans.mustache:5
|
||||
msgid "Joplin Cloud <span class=\"frame-bg frame-bg-yellow\">plans</span>"
|
||||
msgstr "乔普林云<span class=\"frame-bg frame-bg-yellow\">计划</span>"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:301
|
||||
msgid ""
|
||||
"Joplin Cloud is based in France. This means your data is protected by strict "
|
||||
"European Union privacy laws. In addition, Joplin Cloud implements strong end-"
|
||||
"to-end encryption so that not even us can have access to your data."
|
||||
msgstr ""
|
||||
"Joplin Cloud 位于法国。 这意味着您的数据受到严格的欧盟隐私法的保护。 此外,"
|
||||
"Joplin Cloud 实施了强大的端到端加密,因此即使是我们也无法访问您的数据。"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:57
|
||||
msgid ""
|
||||
"Joplin is an open source note-taking app. Capture your thoughts and securely "
|
||||
"access them from any device."
|
||||
msgstr ""
|
||||
"Joplin是一个开源的记事本应用程序。捕捉你的想法并从任何设备上安全地访问它们。"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:262
|
||||
msgid "More about E2EE"
|
||||
msgstr "关于E2EE的更多信息"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:391
|
||||
msgid "Our <span class=\"frame-bg frame-bg-blue-lg\">sponsors</span>"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/plans.mustache:23
|
||||
msgid "Pay Monthly"
|
||||
msgstr "月度"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/plans.mustache:30
|
||||
msgid "Pay Yearly"
|
||||
msgstr "每年一次"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:167
|
||||
msgid ""
|
||||
"Save <span class=\"frame-bg frame-bg-blue\">web pages</span> <br>as notes"
|
||||
msgstr "保存<span class=\"frame-bg frame-bg-blue\">网页</span> <br>作为笔记"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:65
|
||||
msgid "Sign up with Joplin Cloud"
|
||||
msgstr "与乔布林云签约"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:394
|
||||
msgid "Thank you for your support!"
|
||||
msgstr ""
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:257
|
||||
msgid ""
|
||||
"The app is open source and your notes are saved to an open format, so you'll "
|
||||
"always have access to them. Uses End-To-End Encryption (E2EE) to secure your "
|
||||
"notes and ensure no-one but yourself can access them."
|
||||
msgstr ""
|
||||
"该应用程序是开源的,你的笔记被保存为开放的格式,所以你将永远可以访问它们。使"
|
||||
"用端对端加密(E2EE)来保护你的笔记,确保除了你自己之外没有人可以访问它们。"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:144
|
||||
msgid "Try it now"
|
||||
msgstr "现在就试试吧"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:170
|
||||
msgid ""
|
||||
"Use the web clipper extension, available on Chrome and Firefox, to save web "
|
||||
"pages or take screenshots as notes."
|
||||
msgstr "使用Chrome和Firefox上的web clipper扩展,可以保存网页或截图作为笔记。"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:138
|
||||
msgid ""
|
||||
"With Joplin Cloud, share your notes with your friends, family or colleagues "
|
||||
"and collaborate on them."
|
||||
msgstr "通过乔普林云,与你的朋友、家人或同事分享你的笔记,并进行合作。"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:137
|
||||
msgid "Work <span class=\"frame-bg frame-bg-yellow\">together</span>"
|
||||
msgstr "<span class=\"frame-bg frame-bg-yellow\">一起</span>工作"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:141
|
||||
msgid ""
|
||||
"You can also publish a note to the internet and share the URL with others."
|
||||
msgstr "您还可以将笔记发布到 Internet 并与其他人共享 URL。"
|
||||
|
||||
#: /Users/laurent/src/joplin/Assets/WebsiteAssets/templates/front.mustache:233
|
||||
msgid ""
|
||||
"Your notes, <span class=\"frame-bg frame-bg-blue-lg\">everywhere</span> you "
|
||||
"are"
|
||||
msgstr ""
|
||||
"你的笔记<span class=\"frame-bg frame-bg-blue-lg\">你在哪里都可以</span>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Joplin, due to its origin and design, adapts and respects Chinese "
|
||||
#~ "standards and rules. This guarantees your unrestricted use and complete "
|
||||
#~ "transparency and security of your usage data."
|
||||
#~ msgstr ""
|
||||
#~ "Joplin,由于其起源和设计,适应并尊重中国的标准和规则。这保证了您的使用不受"
|
||||
#~ "限制,以及您的使用数据的完全透明和安全。"
|
@@ -1,4 +1,202 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Joplin]]></title><description><![CDATA[Joplin, the open source note-taking application]]></description><link>https://joplinapp.org</link><generator>RSS for Node</generator><lastBuildDate>Mon, 06 Jun 2022 00:00:00 GMT</lastBuildDate><atom:link href="https://joplinapp.org/rss.xml" rel="self" type="application/rss+xml"/><pubDate>Mon, 06 Jun 2022 00:00:00 GMT</pubDate><item><title><![CDATA[Joplin 2.8 is available!]]></title><description><![CDATA[<p>As always a lot of changes and new features in this new version available on both desktop and mobile.</p>
|
||||
<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Joplin]]></title><description><![CDATA[Joplin, the open source note-taking application]]></description><link>https://joplinapp.org</link><generator>RSS for Node</generator><lastBuildDate>Mon, 08 May 2023 00:00:00 GMT</lastBuildDate><atom:link href="https://joplinapp.org/rss.xml" rel="self" type="application/rss+xml"/><pubDate>Mon, 08 May 2023 00:00:00 GMT</pubDate><item><title><![CDATA[What's new in Joplin 2.12]]></title><description><![CDATA[<h1>Desktop<a name="desktop" href="#desktop" class="heading-anchor">🔗</a></h1>
|
||||
<h2>Support for Apple Silicon<a name="support-for-apple-silicon" href="#support-for-apple-silicon" class="heading-anchor">🔗</a></h2>
|
||||
<p>A new release is now available for Apple Silicon, which provides improve performances on this architecture.</p>
|
||||
<h2>Rich Text editor<a name="rich-text-editor" href="#rich-text-editor" class="heading-anchor">🔗</a></h2>
|
||||
<p>In this release, we've undertaken numerous enhancements and addressed various bugs in the Rich Text editor. Notably, we've introduced support for plugin toolbar icons. Additionally, we've refined the editor's ability to manage text that's copied from applications like Word, Office, and LibreOffice, thereby enhancing cross-application compatibility. Among the minor yet impactful improvements, we've fine-tuned the handling of newlines and paragraphs—a highly requested feature. Another notable update is the improved automatic switching between light and dark modes.</p>
|
||||
<p>Altogether, this release encompasses around 12 significant changes for the Rich Text editor, and rest assured, there's more to come in the future!</p>
|
||||
<h2>Share permissions<a name="share-permissions" href="#share-permissions" class="heading-anchor">🔗</a></h2>
|
||||
<p>Using Joplin Cloud Pro and Teams, you now have the ability to customize the read and write permissions for the notebooks you share. You have the option to grant other users permission to edit the notes or share them as read-only. This ensures that you can confidently share a notebook without worrying about unintentional modifications by your friends or colleagues.</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20230825-share-permissions.png" alt=""></p>
|
||||
<h2>Email to Note<a name="email-to-note" href="#email-to-note" class="heading-anchor">🔗</a></h2>
|
||||
<p>Joplin Cloud Pro and Teams also now include the Email to Note feature, allowing you to conveniently store your emails within Joplin Cloud. By simply forwarding your emails to your Joplin Cloud address, you can transform them into notes. The email's subject will serve as the note title, while the body of the email will be the note's content. These notes will be organized within a notebook named "Inbox."</p>
|
||||
<p>More information in the <a href="https://joplinapp.org/email%5C_to%5C_note/">Email to Note documentation</a>.</p>
|
||||
<h2>Choose to resize an image or not<a name="choose-to-resize-an-image-or-not" href="#choose-to-resize-an-image-or-not" class="heading-anchor">🔗</a></h2>
|
||||
<p>By default, when you add a large image, Joplin will ask you if you would like to shrink it down or not. With this new release, you now have the option to always ask, to always resize, or to never resize the image, giving you more flexibility and reducing the number of prompts in the app.</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20230825-resize-note.png" alt=""></p>
|
||||
<h2>Rotating log<a name="rotating-log" href="#rotating-log" class="heading-anchor">🔗</a></h2>
|
||||
<p>Up until now, the logs could grow to become very large, and if you wanted to shrink them down you would have to manually delete them. With this new release, we now automatically handle logs by rotating them - once the log becomes large enough it is moved to an archive. And once the archive is older than a number of days, it is deleted.</p>
|
||||
<h2>Mobile<a name="mobile" href="#mobile" class="heading-anchor">🔗</a></h2>
|
||||
<p>Like the desktop app, the mobile apps benefits from the Share Permissions update, as well as the Email to Note feature for Joplin Cloud. There are also plenty of other improvements - all in all there's 23 bug fixes, enhancements and security fixes in this release.</p>
|
||||
<h1>Full changelog<a name="full-changelog" href="#full-changelog" class="heading-anchor">🔗</a></h1>
|
||||
<p>This is just an overview of the main features. The full changelog is available there:</p>
|
||||
<ul>
|
||||
<li>Desktop: <a href="https://joplinapp.org/changelog">https://joplinapp.org/changelog</a></li>
|
||||
<li>Android: <a href="https://joplinapp.org/changelog_android">https://joplinapp.org/changelog_android</a></li>
|
||||
<li>iOS: <a href="https://joplinapp.org/changelog_ios">https://joplinapp.org/changelog_ios</a></li>
|
||||
</ul>
|
||||
]]></description><link>https://joplinapp.org/news/20230508-release-2-12/</link><guid isPermaLink="false">20230508-release-2-12</guid><pubDate>Mon, 08 May 2023 00:00:00 GMT</pubDate><twitter-text>What's new in Joplin 2.12</twitter-text></item><item><title><![CDATA[What's new in Joplin 2.11]]></title><description><![CDATA[<h2>Desktop<a name="desktop" href="#desktop" class="heading-anchor">🔗</a></h2>
|
||||
<h3>Add support for plugin user data<a name="add-support-for-plugin-user-data" href="#add-support-for-plugin-user-data" class="heading-anchor">🔗</a></h3>
|
||||
<p>Developers of plugins now have the ability to associate additional information with notes, notebooks, and tags. This data is then synchronized across multiple devices. For instance, it is possible to envision attaching OCR data to an image or incorporating plugin-specific parameters to a note, which can subsequently be synchronized across all devices.</p>
|
||||
<h3>Improved end-to-end encryption<a name="improved-end-to-end-encryption" href="#improved-end-to-end-encryption" class="heading-anchor">🔗</a></h3>
|
||||
<p>End-to-end encryption (E2EE) plays a vital role in safeguarding your data privacy. Our aim is to make it effortlessly user-friendly, seamlessly integrated, and possibly enabled by default.</p>
|
||||
<p>To achieve this objective, we have implemented several enhancements in this version. These improvements encompass more streamlined management of encryption keys and simplified setup processes for both new and existing devices utilising end-to-end encryption.</p>
|
||||
<p>Moreover, we have upgraded the encryption algorithm from AES-128 to AES-256, ensuring heightened security for your data in the long run.</p>
|
||||
<h3>Export a Mermaid graph<a name="export-a-mermaid-graph" href="#export-a-mermaid-graph" class="heading-anchor">🔗</a></h3>
|
||||
<p>There is now a context menu on Mermaid graphs which you can use to export your graph as PNG, SVG, or by copying the vector data to the clipboard.</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20230711-mermaid-export.png" alt=""></p>
|
||||
<h3>Auto-detect language on startup<a name="auto-detect-language-on-startup" href="#auto-detect-language-on-startup" class="heading-anchor">🔗</a></h3>
|
||||
<p>A small but useful change - the application language is now automatically detected startup. Of course, if needed you can later change it in the configuration screen.</p>
|
||||
<h2>Android<a name="android" href="#android" class="heading-anchor">🔗</a></h2>
|
||||
<p>As always most of these changes also apply to the mobile applications, such as the improved end-to-end encryption support, language auto-detection, and various bug fixes and improvements. But besides those, we also have several mobile-specific updates:</p>
|
||||
<h3>Support for offline voice typing<a name="support-for-offline-voice-typing" href="#support-for-offline-voice-typing" class="heading-anchor">🔗</a></h3>
|
||||
<p>The Android mobile app now support offline voice typing - it means your voice recording does not need to be uploaded to Google or Samsung server - it all takes place on your device for added security. To make use of it, open any note, tap on the three dots menu, then "Voice typing".</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20230711-voice-typing-1.png" alt=""></p>
|
||||
<p>The first time, the app will need to download the language files to your device:</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20230711-voice-typing-2.png" alt=""></p>
|
||||
<p>Once they are there, simply record your message and it will appear in the note:</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20230711-voice-typing-3.png" alt=""></p>
|
||||
<h3>Create and move sub-notebooks<a name="create-and-move-sub-notebooks" href="#create-and-move-sub-notebooks" class="heading-anchor">🔗</a></h3>
|
||||
<p>@jcgurango implemented support for creating sub-notebooks, and moving notebooks around in the mobile app. To do so, long press on any notebook and press "Edit". You can now choose to move it under any other notebook using the provided dropdown list.</p>
|
||||
<h2>Full changelog<a name="full-changelog" href="#full-changelog" class="heading-anchor">🔗</a></h2>
|
||||
<p>This is just an overview of the main features. The full changelog is available there:</p>
|
||||
<ul>
|
||||
<li>Desktop: <a href="https://joplinapp.org/changelog">https://joplinapp.org/changelog</a></li>
|
||||
<li>Android: <a href="https://joplinapp.org/changelog_android">https://joplinapp.org/changelog_android</a></li>
|
||||
<li>iOS: <a href="https://joplinapp.org/changelog_ios">https://joplinapp.org/changelog_ios</a></li>
|
||||
</ul>
|
||||
]]></description><link>https://joplinapp.org/news/20230508-release-2-11/</link><guid isPermaLink="false">20230508-release-2-11</guid><pubDate>Mon, 08 May 2023 00:00:00 GMT</pubDate><twitter-text>What's new in Joplin 2.11</twitter-text></item><item><title><![CDATA[What's new in Joplin 2.10]]></title><description><![CDATA[<p>Great news! Joplin 2.10 is here and we've made some amazing improvements and bug fixes, with a focus on the mobile app.</p>
|
||||
<h1>New design for "New note" and "New to-do" buttons<a name="new-design-for-new-note-and-new-to-do-buttons" href="#new-design-for-new-note-and-new-to-do-buttons" class="heading-anchor">🔗</a></h1>
|
||||
<p>We're excited to announce that we've made it even easier to create new notes and to-do lists with new designs for the "New note" and "New to-do" buttons.</p>
|
||||
<p>If there is enough space, the button labels will be shown in full:</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20230508-new-note-1.png" alt=""></p>
|
||||
<p>While for those who prefer a more narrow note list, only the button icons will be shown:</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20230508-new-note-2.png" alt=""></p>
|
||||
<p>It's a small improvement, but we're confident it will make the app even more intuitive for new users.</p>
|
||||
<h1>Fixes and improvements<a name="fixes-and-improvements" href="#fixes-and-improvements" class="heading-anchor">🔗</a></h1>
|
||||
<p>This version includes 30 bug fixes and 16 general improvements. Let's dive into some of the highlights:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Self Not Found and Pedro have been working tirelessly on improving the pasting of plain text in the application, and we're happy to say that there is now a brand new "Paste as text" option in the Edit menu.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>For our amazing plugin developers out there, we have added a few new APIs and fixed a bug that was preventing certain plugins from starting. You can now get even more creative with your plugins!</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Tao Klerks, has been hard at work fixing and improving the custom sort order of the note list. No more notes in the wrong position when you drop them! Plus, custom sort order is now synchronised too.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>We've also fixed a few bugs with our Web Clipper, including an issue where certain pages wouldn't import their images. A new Web Clipper has also been released, so you can clip to your heart's content!</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Last but not least, we have modernised both the desktop and mobile application modules, just <a href="https://joplinapp.org/news/20221115-renovate/">as we previously announced</a>. Although these changes may not be visible to you, they required a lot of work! But the result is that our applications are now more stable and secure, and it will be easier to maintain them in the long run. We're using a tool called <a href="https://www.mend.io/free-developer-tools/renovate/">Renovate</a>, which will automatically propose package updates that we will review. In total, we've updated a whopping 633 packages so far!</p>
|
||||
<h1>Android app is available in the Play Store<a name="android-app-is-available-in-the-play-store" href="#android-app-is-available-in-the-play-store" class="heading-anchor">🔗</a></h1>
|
||||
<p>Our latest version, 2.10, is now back in the Play Store and ready for download! Although we had to skip 2.9 due to some of Google's requirements, we worked hard to ensure that our app complies with their standards, and we are excited to announce that we are back and better than ever! Our iOS version is also available, so you can continue to enjoy the app regardless of the platform you use.</p>
|
||||
<h2>Biometrics support<a name="biometrics-support" href="#biometrics-support" class="heading-anchor">🔗</a></h2>
|
||||
<p>To make your experience even more secure, our Android and iOS apps now support biometric unlock! With just a quick scan of your fingerprint or Face ID, you can unlock your app in no time. To enable this beta feature, just head over to the settings and click on "Use biometrics to secure access to the app".</p>
|
||||
<p>We've tested this feature thoroughly during prerelease, and have already fixed all known issues. However we still consider it as a beta feature for now, so if you run into any issues please let us know.</p>
|
||||
<h2>Support for multiple profile<a name="support-for-multiple-profile" href="#support-for-multiple-profile" class="heading-anchor">🔗</a></h2>
|
||||
<p>We're thrilled to announce that multiple profiles are now supported in our mobile app! To create a new profile, simply go to the Configuration screen and click on "Manage profiles" under the Tools section.</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20230508-biometrics-1.png" alt=""></p>
|
||||
<p>From there, you can easily add or remove profiles as needed.</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20230508-biometrics-2.png" alt=""></p>
|
||||
<p>Once multiple profiles are setup, you will see a new option in the sidebar to quickly toggle from one profile to another:</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20230508-biometrics-3.png" alt=""></p>
|
||||
<p>Once you've set up multiple profiles, you can easily toggle between them using the new option in the sidebar. This feature is perfect for separating your personal and work notes into independent collections.</p>
|
||||
<h2>Support for realtime search<a name="support-for-realtime-search" href="#support-for-realtime-search" class="heading-anchor">🔗</a></h2>
|
||||
<p>Our mobile app now has an improved search function that performs text searches in real time! No more waiting for the search results to load, they'll appear instantly as you type.</p>
|
||||
<h2>Improved filesystem sync performance<a name="improved-filesystem-sync-performance" href="#improved-filesystem-sync-performance" class="heading-anchor">🔗</a></h2>
|
||||
<p>Thanks to the hard work of jd1378, the sync no longer freezes during filesystem synchronisation. We know how frustrating that can be, and we're thrilled to have solved this issue. Getting filesystem sync to work on Android is never easy due to the restrictions put in place by Google, especially since they frequently change, but we're committed to delivering the best possible experience for our Android users.</p>
|
||||
]]></description><link>https://joplinapp.org/news/20230508-release-2-10/</link><guid isPermaLink="false">20230508-release-2-10</guid><pubDate>Mon, 08 May 2023 00:00:00 GMT</pubDate><twitter-text>What's new in Joplin 2.10</twitter-text></item><item><title><![CDATA[Joplin will participate in JdLL 2023!]]></title><description><![CDATA[<p>On 1 and 2 April 2023, we will have a stand for Joplin at the <a href="https://www.jdll.org/">Journées du Logiciel Libre</a> in Lyon, France. The JdLL has been taking place in Lyon for 24 years and is a popular open source conference in France. We had a stand in 2020 and 2021 but that was cancelled due to Covid, so this year is a first for Joplin!</p>
|
||||
<p>Admission is free, so don't hesitate to come and meet us, exchange ideas and learn more about Joplin!</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20230202-jdll.jpg" alt="Joplin at JdLL 2023"></p>
|
||||
]]></description><link>https://joplinapp.org/news/20230302-jdll-2023/</link><guid isPermaLink="false">20230302-jdll-2023</guid><pubDate>Thu, 02 Mar 2023 00:00:00 GMT</pubDate><twitter-text></twitter-text></item><item><title><![CDATA[Introducing the "GitHub Actions Raw Log Viewer" extension for Chrome]]></title><description><![CDATA[<p>If you've ever used GitHub Actions, you will find that they provide by default a nice coloured output for the log. It looks good and it's even interactive! (You can click to collapse/expand blocks of text) But unfortunately it doesn't scale to large workflows, like we have for Joplin - the log can freeze and it will take forever to search for something. Indeed searching is done in "real time"... which mostly means it will freeze for a minute or two for each letter you type in the search box. Not great.</p>
|
||||
<p>Thankfully GitHub provides an alternative access: the raw logs. This is much better because they will open as plain text, without any styling or JS magic, which means you can use the browser native search and it will be fast.</p>
|
||||
<p>But now the problem is that raw logs look like this:</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20230116-ga-raw-log.png" alt="Raw log without extension"></p>
|
||||
<p>While it's not impossible to read, all colours that would display nicely in a terminal are gone and replaced by <a href="https://en.wikipedia.org/wiki/ANSI_escape_code">ANSI codes</a>. You can find what you need in there but it's not particularly easy.</p>
|
||||
<p>This is where the new <strong>GitHub Action Raw Log Viewer</strong> extension for Chrome can help. It will parse your raw log and convert the ANSI codes to proper colours. This results in a much more readable rendering:</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20230116-ga-raw-log-colored.png" alt="Raw log with extension"></p>
|
||||
<p>The extension is fast even for very large logs and it's of course easy to search for text since it simply works with your browser built-in search.</p>
|
||||
<p>The extension is open source, with the code available here: <a href="https://github.com/laurent22/github-actions-logs-extension">https://github.com/laurent22/github-actions-logs-extension</a></p>
|
||||
<p>And to install it, follow this link:</p>
|
||||
<p><a href="https://chrome.google.com/webstore/detail/github-action-raw-log-vie/lgejlnoopmcdglhfjblaeldbcfnmjddf"><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20230116-extension-get-it-now.png" alt="Download GitHub Action Raw Log Viewer extension"></a></p>
|
||||
]]></description><link>https://joplinapp.org/news/20230116-github-actions-log-viewer/</link><guid isPermaLink="false">20230116-github-actions-log-viewer</guid><pubDate>Mon, 16 Jan 2023 00:00:00 GMT</pubDate><twitter-text>Introducing the "GitHub Action Raw Log Viewer" extension for Chrome</twitter-text></item><item><title><![CDATA[Joplin is switching to the GNU Affero General Public License v3 (AGPL-3.0)]]></title><description><![CDATA[<p>As was <a href="https://discourse.joplinapp.org/t/rfc-switch-to-agpl-license-for-joplin-server/16529">discussed last year</a>, Joplin is switching to the GNU Affero General Public License v3 (AGPL-3.0) for the desktop, mobile and CLI applications, as well as the web clipper.</p>
|
||||
<p>Any open source or commercial fork of Joplin will have to license any changes they make under AGPL, and share these changes back with the community. This is the main reason we switch to this license. It allows us to continue releasing the project as open source while ensuring that those who benefit commercially (or not) from it share back their changes.</p>
|
||||
<h2>What is the GPL license?<a name="what-is-the-gpl-license" href="#what-is-the-gpl-license" class="heading-anchor">🔗</a></h2>
|
||||
<p>The AGPL license is based on the GPL license. This is what tldr;Legal has to say about the GPL license:</p>
|
||||
<blockquote>
|
||||
<p>You may copy, distribute and modify the software as long as you track changes/dates in source files. Any modifications to or software including (via compiler) GPL-licensed code must also be made available under the GPL along with build & install instructions. (<a href="https://tldrlegal.com/license/gnu-general-public-license-v3-(gpl-3)">source</a>)</p>
|
||||
</blockquote>
|
||||
<h2>What is the AGPL license?<a name="what-is-the-agpl-license" href="#what-is-the-agpl-license" class="heading-anchor">🔗</a></h2>
|
||||
<p>This is the license we'll use for Joplin from now on:</p>
|
||||
<blockquote>
|
||||
<p>The AGPL license differs from the other GNU licenses in that it was built for network software. You can distribute modified versions if you keep track of the changes and the date you made them. As per usual with GNU licenses, you must license derivatives under AGPL. It provides the same restrictions and freedoms as the GPLv3 but with an additional clause which makes it so that source code must be distributed along with web publication. Since web sites and services are never distributed in the traditional sense, the AGPL is the GPL of the web. (<a href="https://tldrlegal.com/license/gnu-affero-general-public-license-v3-(agpl-3.0)">source</a>)</p>
|
||||
</blockquote>
|
||||
<h2>What does it change for users?<a name="what-does-it-change-for-users" href="#what-does-it-change-for-users" class="heading-anchor">🔗</a></h2>
|
||||
<p>There is no changes for users of Joplin - the apps remain open sources and you can still use them freely.</p>
|
||||
<h2>What does it change for developers?<a name="what-does-it-change-for-developers" href="#what-does-it-change-for-developers" class="heading-anchor">🔗</a></h2>
|
||||
<p>Any code you develop for Joplin will also remain open source. The only difference is that we'll ask to sign an Individual Contributor License Agreement (CLA) to ensure that the copyright of the entire codebase remains with the Joplin organisation. This is necessary so that if we ever want to change the license again we are able to do so without having to get the agreement of each individual contributor afterwards (which would be nearly impossible).</p>
|
||||
<p>This is a bit of an extra constraint but it is hard to avoid. Contributor License Agreements are very common for GPL or AGPL projects. For example Apache, Canonical or Python all require their contributors to sign a CLA.</p>
|
||||
<h2>Questions?<a name="questions" href="#questions" class="heading-anchor">🔗</a></h2>
|
||||
<p>If you have any questions please let us know. Overall we believe this is a positive improvements for Joplin as it means any work derives from it will also benefit the project.</p>
|
||||
]]></description><link>https://joplinapp.org/news/20221221-agpl/</link><guid isPermaLink="false">20221221-agpl</guid><pubDate>Wed, 21 Dec 2022 00:00:00 GMT</pubDate><twitter-text>Joplin is switching to the GNU Affero General Public License v3 (AGPL-3.0)</twitter-text></item><item><title><![CDATA[What's new in Joplin 2.9]]></title><description><![CDATA[<h2>Proxy support<a name="proxy-support" href="#proxy-support" class="heading-anchor">🔗</a></h2>
|
||||
<p>Both the desktop and mobile application now support proxies thanks to the work of Jason Williams. This will allow you to use the apps in particular when you are behind a company proxy.</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20221216-proxy-support.png" alt=""></p>
|
||||
<h2>New PDF viewer<a name="new-pdf-viewer" href="#new-pdf-viewer" class="heading-anchor">🔗</a></h2>
|
||||
<p>The desktop application now features a new PDF viewer thanks to the work of Asrient during GSoC.</p>
|
||||
<p>The main advantage for now is that this viewer preserves the last PDF page that was read. In the next version, the viewer will also include a way to annotate PDF files.</p>
|
||||
<h2>Multi-language spell checking<a name="multi-language-spell-checking" href="#multi-language-spell-checking" class="heading-anchor">🔗</a></h2>
|
||||
<p>The desktop app include a multi-language spell checking features, which allows you, for example, to spell-check notes in your native language and in English.</p>
|
||||
<h2>New mobile text editor<a name="new-mobile-text-editor" href="#new-mobile-text-editor" class="heading-anchor">🔗</a></h2>
|
||||
<p>Writing formatted notes on mobile has always been cumbersome due to the need to enter special format characters like <code>*</code> or <code>[</code>, etc.</p>
|
||||
<p>Thanks to the work of Henry Heino during GSoC, writing notes on the go is now easier thanks to an improved Markdown editor.</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20221216-mobile-beta-editor.png" alt=""></p>
|
||||
<p>The most visible feature is the addition of a toolbar, which helps input those special characters, like on desktop.</p>
|
||||
<p>Moreover Henry made a lot of subtle but useful improvements to the editor, for example to improve the note appearance, to improve list continuation, etc. Search within a note is now also supported as well as spell-checking.</p>
|
||||
<p>At a more technical level, Henry also added many test units to ensure that the editor remains robust and reliable.</p>
|
||||
<p>To enable the feature, go to the configuration screen and selected "Opt-in to the editor beta". It is already very stable so we will probably promote it to be the main editor from the next version.</p>
|
||||
<h2>Improved alignment of notebook icons<a name="improved-alignment-of-notebook-icons" href="#improved-alignment-of-notebook-icons" class="heading-anchor">🔗</a></h2>
|
||||
<p>Previously, when you would assign an icon to a notebook, it would shift the title to the right, but notebook without an icon would not. It means that notebooks with and without an icon would not be vertically aligned.</p>
|
||||
<p>To tidy things up, this new version adds a default icons to notebooks without an explicitly assigned icon. This result in the notebook titles being correctly vertically aligned.</p>
|
||||
<p>Note that this feature is only enabled if you use custom icons - otherwise it will simply display the notebook titles without any default icons, as before.</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20221216-notebook-icons.png" alt=""></p>
|
||||
<h2>Improved handling of file attachments<a name="improved-handling-of-file-attachments" href="#improved-handling-of-file-attachments" class="heading-anchor">🔗</a></h2>
|
||||
<p>Self Not Found made a number of small but useful improvements to attachment handling, including increasing the maximum size to 200MB, adding support for attaching multiple files, and fixing issues with synchronising attachments via proxy.</p>
|
||||
<h2>Fixed filesystem sync on mobile<a name="fixed-filesystem-sync-on-mobile" href="#fixed-filesystem-sync-on-mobile" class="heading-anchor">🔗</a></h2>
|
||||
<p>This was a long and complex change due to the need to support new Android APIs but hopefully that should now be working again, thanks to the work of jd1378.</p>
|
||||
<p>So you can now sync again your notes with Syncthing and other file-based synchronisation systems.</p>
|
||||
<h2>And more...<a name="and-more" href="#and-more" class="heading-anchor">🔗</a></h2>
|
||||
<p>In total this new desktop version includes 36 improvements, bug fixes, and security fixes.</p>
|
||||
<p>As always, a lot of work went into the Android and iOS app too, which include 37 improvements, bug fixes, and security fixes.</p>
|
||||
<p>See here for the changelogs:</p>
|
||||
<ul>
|
||||
<li><a href="https://joplinapp.org/changelog/">Desktop app changelog</a></li>
|
||||
<li><a href="https://joplinapp.org/changelog_android/">Android app changelog</a></li>
|
||||
</ul>
|
||||
<h2>About the Android version<a name="about-the-android-version" href="#about-the-android-version" class="heading-anchor">🔗</a></h2>
|
||||
<p>Unfortunately we cannot publish the Android version because it is based on a framework version that Google does not accept. To upgrade the app a lot of changes are needed and another round of pre-releases, and therefore there will not be a 2.9 version for Google Play. You may however download the official APK directly from there: <a href="https://github.com/laurent22/joplin-android/releases/tag/android-v2.9.8">Android 2.9 Official Release</a></p>
|
||||
<p>This is the reality of app stores in general - small developers being imposed never ending new requirements by all-powerful companies, and by the time a version is finally ready we can't even publish it because yet more requirements are in place.</p>
|
||||
<p>For the record the current 2.9 app works perfectly fine. It targets Android 11, which is only 2 years old and is still supported (and installed on millions of phones). Google requires us to target Android 12 which only came out last year.</p>
|
||||
]]></description><link>https://joplinapp.org/news/20221216-release-2-9/</link><guid isPermaLink="false">20221216-release-2-9</guid><pubDate>Fri, 16 Dec 2022 00:00:00 GMT</pubDate><twitter-text>What's new in Joplin 2.9</twitter-text></item><item><title><![CDATA[Joplin is hiring!]]></title><description><![CDATA[<p>Joplin is an open source note-taking app. Capture your thoughts and securely access them from any device.</p>
|
||||
<p>We are looking to hire two JavaScript software developers to work on the desktop, mobile, and server applications. All those are built using modern technologies, including React, React Native and Electron with a strong focus on test units.</p>
|
||||
<p>You need to demonstrate some experience with at least some of these technologies, and willing to learn more and touch various different projects.</p>
|
||||
<p>You will be part of a small team, so you will have an opportunity for a high-impact role, targeting hundreds of thousands of users.</p>
|
||||
<p>If you're interested please contact us at job-AT-joplin.cloud</p>
|
||||
<p>No agencies please.</p>
|
||||
]]></description><link>https://joplinapp.org/news/20221209-job/</link><guid isPermaLink="false">20221209-job</guid><pubDate>Fri, 09 Dec 2022 00:00:00 GMT</pubDate><twitter-text>Joplin is hiring!</twitter-text></item><item><title><![CDATA[Modernising and securing Joplin, one package at a time]]></title><description><![CDATA[<p>If you watch the <a href="https://github.com/laurent22/joplin">Joplin source code repository</a>, you may have noticed a lot of Renovate pull requests lately. This <a href="https://www.mend.io/free-developer-tools/renovate/">Renovate tool</a> is a way to manage dependencies - it automatically finds what needs to be updated, then upgrade it to the latest version, and create a pull request. If all tests pass, we can then merge this pull request. So far we have merged 267 of these pull requests.</p>
|
||||
<p>Updating Joplin packages was long due. It is necessary so that we don't fall behind and end up using unsupported or deprecated packages. We also benefit from bug fixes and performance improvements. It is also important in terms of security, since recent package versions usually include various security fixes.</p>
|
||||
<p>We used to rely on a tool called "npm audit" to do this, however it no longer works on the Joplin codebase, and it was always risky to use it since it would update multiple packages in one command - so if something went wrong it was difficult to find the culprit.</p>
|
||||
<p>Renovate on the other hand upgrades packages one at a time, and run our test units to ensure everything is still working as expected. It also upgrades multiple instances of the same package across the monorepo, which is convenient to keep our code consistent. It also has a number of options to make our life easier, such as the ability to automatically merge a pull request for patch releases since this is usually safe (when a package is, for example upgraded from 1.0.1 to 1.0.3).</p>
|
||||
<p>Although Renovate automates the package upgrades it doesn't mean all upgrades are straightforward - our tests won't catch all issues, so the apps might end up being broken or cannot be compiled anymore. So there's manual work involved to get everything working after certain upgrades - for the most part this has been done and the apps appear to be stable so far.</p>
|
||||
<p>This will however be an important part of pre-release 2.10 (or should it be 3.0?) - we hope that everything works but we may need your support to try this version and report any glitch you may have found. As always pre-release regressions have the highest priority so we aim to fix them as quickly as possible.</p>
|
||||
]]></description><link>https://joplinapp.org/news/20221115-renovate/</link><guid isPermaLink="false">20221115-renovate</guid><pubDate>Tue, 15 Nov 2022 00:00:00 GMT</pubDate><twitter-text>Modernising and securing Joplin, one package at a time</twitter-text></item><item><title><![CDATA[Joplin Cloud is now part of the Joplin company]]></title><description><![CDATA[<p>As some of you may know Joplin Cloud so far has been operating under my own single-person limited company in the UK. This was mostly for convenience since it meant I could get things going quickly without having to setup a special structure for it.</p>
|
||||
<p>Now that Joplin Cloud is becoming more mature however a proper company, simply called Joplin, has been created. This company will be based in France, and will be used mainly to handle the commercial part of the project, which currently is mostly Joplin Cloud. I'm still heading the company so there won't be any major change to the way the project is managed.</p>
|
||||
<h2>What does it mean for Joplin Cloud?<a name="what-does-it-mean-for-joplin-cloud" href="#what-does-it-mean-for-joplin-cloud" class="heading-anchor">🔗</a></h2>
|
||||
<p>There will be no significant change - the website ownership simply moves from one company in the UK to one in France. The new company is still owned by myself so I will keep following the same roadmap.</p>
|
||||
<h2>What does it mean for the open source apps?<a name="what-does-it-mean-for-the-open-source-apps" href="#what-does-it-mean-for-the-open-source-apps" class="heading-anchor">🔗</a></h2>
|
||||
<p>On the short term, the only visible change will be moving the non-open source assets, such as logo or trademark from the UK company to the French one. So expect a few changes in copyright notices here and there.</p>
|
||||
<p>In the medium to long term, I would like to hire one or two software developers to help me with the Joplin Cloud development, because we reached a point where managing the whole project is difficult for a single person, so some help is needed. Some of their work might also touch the open source apps since both are quite related - but of course that work will remain open source too.</p>
|
||||
<p>As a general rule, there will be a permanent commitment to keep the apps open source and to derive value from Joplin Cloud/Server.</p>
|
||||
<p>Longer term I would like to create a non-profit organisation to handle the open source applications and to make decisions about the project, as well as to decide how to allocate any funding we receive (for example from GSoC).</p>
|
||||
<h2>Looking forward<a name="looking-forward" href="#looking-forward" class="heading-anchor">🔗</a></h2>
|
||||
<p>Those past 6 years of developing Joplin have been an exciting and rewarding experience, thank you to all of you of the friendly and vibrant Joplin community for your contribution toward making Joplin the software it is today, and looking forward to continuing the journey together!</p>
|
||||
]]></description><link>https://joplinapp.org/news/20221012-Joplin-Company/</link><guid isPermaLink="false">20221012-Joplin-Company</guid><pubDate>Wed, 12 Oct 2022 00:00:00 GMT</pubDate><twitter-text>Joplin Cloud is now operated by the Joplin company! More info on the announcement post.</twitter-text></item><item><title><![CDATA[Joplin interview on Website Planet]]></title><description><![CDATA[<p>Website Planet has recently conducted an interview about Joplin - it may give you some insight on the current status of the project, our priorities, and future plans! More on the article page - <a href="https://www.websiteplanet.com/blog/interview-joplin/">Organise Your Thoughts with Open Source Note-Taking App, Joplin</a></p>
|
||||
]]></description><link>https://joplinapp.org/news/20220906-interview-websiteplanet/</link><guid isPermaLink="false">20220906-interview-websiteplanet</guid><pubDate>Tue, 06 Sep 2022 00:00:00 GMT</pubDate><twitter-text></twitter-text></item><item><title><![CDATA[Joplin first meetup on 30 August!]]></title><description><![CDATA[<p>We are glad to announce <a href="https://www.meetup.com/joplin/events/287611873/">the first Joplin Meetup</a> that will take place on 30 August 2022 in London!</p>
|
||||
<p>This is an opportunity to meet other Joplin users as well as some of the main contributors, to discuss the apps, or to ask questions and exchange tips and tricks on how to use the app, develop plugins or contribute to the application. Everybody, technical or not, is welcome!</p>
|
||||
<p>We will meet at the Old Thameside Inn next to London Bridge. If the weather allows we will be on the terrace outside, if not inside.</p>
|
||||
<p>More information on the official Meetup page:</p>
|
||||
<p><a href="https://www.meetup.com/joplin/events/287611873/">https://www.meetup.com/joplin/events/287611873/</a></p>
|
||||
]]></description><link>https://joplinapp.org/news/20220808-first-meetup/</link><guid isPermaLink="false">20220808-first-meetup</guid><pubDate>Mon, 08 Aug 2022 00:00:00 GMT</pubDate><twitter-text>Joplin will have its first Meetup on 30 August! Come and join us at the Old Thameside Inn next to London Bridge! https://www.meetup.com/joplin/events/287611873/</twitter-text></item><item><title><![CDATA[Joplin 2.8 is available!]]></title><description><![CDATA[<p>As always a lot of changes and new features in this new version available on both desktop and mobile.</p>
|
||||
<h1>Multiple profile support<a name="multiple-profile-support" href="#multiple-profile-support" class="heading-anchor">🔗</a></h1>
|
||||
<p>Perhaps the most visible change in this version is the support for multiple profiles. You can now create as many application profile as you wish, each with their own settings, and easily switch from one to another. The main use case is to support for example a "work" profile and a "personal" profile, to allow you to keep things independent, and each profile can sync with a different sync target.</p>
|
||||
<p>To create a new profile, open <strong>File > Switch profile</strong> and select <strong>Create new profile</strong>, enter the profile name and press OK. The app will automatically switch to this new profile, which you can now configure.</p>
|
||||
@@ -134,128 +332,4 @@
|
||||
<li>Or, just delete the data directly in the database. You'll want to delete the corresponding item_id from the user_items table too.</li>
|
||||
</ul>
|
||||
<p>But really in most cases you should be fine. Especially if you don't have that many notes it's unlikely you have duplicates.</p>
|
||||
]]></description><link>https://joplinapp.org/news/20211102-150403/</link><guid isPermaLink="false">20211102-150403</guid><pubDate>Tue, 02 Nov 2021 15:04:03 GMT</pubDate><twitter-text></twitter-text></item><item><title><![CDATA[Joplin v2.5 is available for desktop and mobile!]]></title><description><![CDATA[<p><a href="https://joplinapp.org/download/">Joplin v2.5</a> is now available for desktop, mobile and CLI! Here's an overview of the changes:</p>
|
||||
<h3>Support for Markdown + Front Matter<a name="support-for-markdown-front-matter" href="#support-for-markdown-front-matter" class="heading-anchor">🔗</a></h3>
|
||||
<p>Markdown + Front Matter is a format that allows attaching metadata, such as tags, creation date, or geolocation to a Markdown file. This is done by adding a block of YAML code (a "front matter") at the top of the file.</p>
|
||||
<p>Thansk to Caleb John's efforts the Joplin desktop and CLI applications now support importing and exporting these files. When exporting, we try to preserve as much metadata as possible, while still keeping it the formatting user friendly.</p>
|
||||
<p>Here's an example, with the Front Matter at the top, delimited by "---", and the text below.</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20211031-115215_0.png" alt=""></p>
|
||||
<p>Markdown + Front Matter is an excellent way to share notes with someone who doesn't have Joplin, to backup notes in a durable format (since no third-party application is needed to read it), and also to export notes to other applications, or to import them.</p>
|
||||
<p>As with the regular Markdown exporter, the images and attachments are also exported.</p>
|
||||
<h3>Add support for callback URLs<a name="add-support-for-callback-urls" href="#add-support-for-callback-urls" class="heading-anchor">🔗</a></h3>
|
||||
<p>Callback URLs is a semi-standard that defines how certain resources in an application can be accessed via URLs. Either to view the resource, or to perform certain actions, such as deletion, creation, etc.</p>
|
||||
<p>Joplin now support callback URLs to open notes, notebooks and folders. To do so, right click on a note and select "Copy external link":</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20211031-115215_1.png" alt=""></p>
|
||||
<p>That would give you a URL such as this:</p>
|
||||
<blockquote>
|
||||
<p>joplin://x-callback-url/openNote?id=b7a7b93281f54d928612eea550f33a7f</p>
|
||||
</blockquote>
|
||||
<p>Then if you click it from outside the app, the app will open and select this particular note. In practice such a feature allows third-party application to interact with Joplin by creating links that can be opened from outside. For example, you may use a different application for project planning, then link to the individual notes for more details about each task.</p>
|
||||
<p>Many thanks to Roman Musin for adding the feature!</p>
|
||||
<h3>Improved end-to-end encryption support<a name="improved-end-to-end-encryption-support" href="#improved-end-to-end-encryption-support" class="heading-anchor">🔗</a></h3>
|
||||
<p>The series of quiet but major changes to the end-to-end encryption support continue in this new verison. One goal is still to allow sharing notebooks while encryption is enabled.</p>
|
||||
<p>To that end, v2.5 includes support for RSA public-private key pairs. If you have encryption enabled, they will be automatically generated when you synchronise by the mobile, desktop or CLI applications. Later on, these keys will be used to allow sharing encrypted notebooks.</p>
|
||||
<p>The second goal of these E2EE changes is to simplify the system enough that it can be enabled by default. To that end, the master password dialog and encryption screen have been improved. An option to reset the master password is now also available.</p>
|
||||
<h3>Various other improvements and bug fixes<a name="various-other-improvements-and-bug-fixes" href="#various-other-improvements-and-bug-fixes" class="heading-anchor">🔗</a></h3>
|
||||
<p>In total this release includes about 11 other bug fixes and improvements. There was in particular several improvements to the share features. It is now also possible for a share recipient to leave the shared notebook.</p>
|
||||
<h3>Mobile app update<a name="mobile-app-update" href="#mobile-app-update" class="heading-anchor">🔗</a></h3>
|
||||
<p>As always the mobile apps (to be released soon) benefit from several of the above changes since they share the same codebase as the desktop app.</p>
|
||||
<p>Specific to the mobile version 2.5 are some improvements to the beta editor - in particular the layout has been cleaned up, and the first word of sentences is now automatically capitalised, which makes typing notes easier. If you haven't tried the beta editor yet, you can enable it from the Configuration screen.</p>
|
||||
<p>The full changelog is available there: <a href="https://joplinapp.org/changelog/">https://joplinapp.org/changelog/</a></p>
|
||||
]]></description><link>https://joplinapp.org/news/20211031-115215/</link><guid isPermaLink="false">20211031-115215</guid><pubDate>Sun, 31 Oct 2021 11:52:15 GMT</pubDate><twitter-text></twitter-text></item><item><title><![CDATA["Certificate has expired" error with Joplin Cloud, and workaround]]></title><description><![CDATA[<p>Some of you might be experiencing an error "Certificate has expired" when synchronising with Joplin Cloud (and possibly other services) when using the desktop application.</p>
|
||||
<p>This is due to Let's Encrypt root certificate that expired on 30 September, and the new method they are using is not compatible with the Joplin desktop application.</p>
|
||||
<p>This actually affects thousands of applications, not just Joplin, so various solutions are being considered right now and hopefully a fix will be available relatively soon.</p>
|
||||
<p>For now, as a workaround, you can simply check "<strong>Ignore TLS certificate errors</strong>" in <strong>Configuration > Synchronisation > Advanced Options</strong></p>
|
||||
<p>I will let you know as soon as a fix is available so that you can clear that option.</p>
|
||||
<p>More info:</p>
|
||||
<p>- <a href="https://community.letsencrypt.org/t/issues-with-electron-and-expired-root/160991">Issue with Electron and expired root</a> on Let's Encrypt</p>
|
||||
<p>- <a href="https://github.com/electron/electron/issues/31212">Let's Encrypt root CA isn't working properly</a> on Electron GitHub repository</p>
|
||||
<p><strong>Update:</strong> I have implemented a temporary fix on Joplin Cloud which should solve the issue for now. If you're still having some issues please let me know. An updated desktop app will be available later on with a more permanent fix.</p>
|
||||
]]></description><link>https://joplinapp.org/news/20210930-163458/</link><guid isPermaLink="false">20210930-163458</guid><pubDate>Thu, 30 Sep 2021 16:34:58 GMT</pubDate><twitter-text></twitter-text></item><item><title><![CDATA[Joplin 2.4 is available!]]></title><description><![CDATA[<p>Joplin 2.4 is now available on desktop, mobile and CLI. Here's what's new in this release:</p>
|
||||
<h3>Sync Wizard Dialog<a name="sync-wizard-dialog" href="#sync-wizard-dialog" class="heading-anchor">🔗</a></h3>
|
||||
<p>A new Sync Wizard Dialog has been added to simplify setting up sync on new clients.</p>
|
||||
<p>The dialog shows the main sync targets, their differences, and makes it easy to choose one and start synchronising. This is mostly aimed at new users or those perhaps less technical. Those who are self hosting or using complex setups will still easily find what they need from a link on that dialog (or in Config > Synchronisation like before).</p>
|
||||
<p>Sync setup on mobile has been slightly improved too - now on a new client, instead of asking you to sync with Dropbox directly (which may not be what you want), it jumps to the Config > Synchronisation section where you can select the sync target</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20210929-144036_0.png" alt=""></p>
|
||||
<h3>Disable synchronisation<a name="disable-synchronisation" href="#disable-synchronisation" class="heading-anchor">🔗</a></h3>
|
||||
<p>It's a small change but something that's been asked many time - it's now possible to disable synchronisation entirely by selecting "None" as a sync target. Previously that could be done in a hacky way, by selecting a non-configured sync target. Now it's clearer and easier to do.</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20210929-144036_1.png" alt=""></p>
|
||||
<h3>Add back support for deprecated plugins<a name="add-back-support-for-deprecated-plugins" href="#add-back-support-for-deprecated-plugins" class="heading-anchor">🔗</a></h3>
|
||||
<p>Recently some plugins stopped working because deprecated plugin APIs had been removed. It had been planned for a long time but I suspect the warnings weren't visible enough so plugin developers didn't act on them, and as a result many plugins stopped working.</p>
|
||||
<p>This is now fixed in the latest version. A selected number of plugins will have access to these old deprecated APIs, which means they will start working again. This was mainly affecting ambrt's plugins such as "Convert Text To New Note" or the popular "Embed Search" plugin.</p>
|
||||
<h3>Add support for recommended plugins<a name="add-support-for-recommended-plugins" href="#add-support-for-recommended-plugins" class="heading-anchor">🔗</a></h3>
|
||||
<p>As mentioned in an earlier post, we now support <a href="https://www.patreon.com/posts/introducing-in-55618802">recommended plugins</a>. These recommended plugins appear on top when searching and are identified by a small crown.</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20210929-144036_2.png" alt=""></p>
|
||||
<h3>End to End Encryption improvements<a name="end-to-end-encryption-improvements" href="#end-to-end-encryption-improvements" class="heading-anchor">🔗</a></h3>
|
||||
<p>Like most recent releases, v2.4 includes a few improvement to the End to End Encryption (E2EE) system. The goal is to make it easier to use, to make it more reliable and to support the future use case of sharing encrypted notebooks or notes.</p>
|
||||
<p>One important change is the support for a master password. This single password will be responsible to encrypt various keys, including some that will be automatically generated. Thanks to this, it won't be necessary to ask to enter a new password every time a key needs to be encrypted, since the master password can be used. It will also be easier to manage since you'll only have one password to remember instead of a different one for each notebook you might have shared.</p>
|
||||
<p>Finally, it's now possible to disable a master key. What it means is that it will no longer show up in the list of master keys, and will also no longer generate a warning asking you to enter the password. In some case you might have forgotten it and no longer need it key, so you can now disable it.</p>
|
||||
<h3>Custom CSS<a name="custom-css" href="#custom-css" class="heading-anchor">🔗</a></h3>
|
||||
<p>This version also introduces a few internal change to better support custom CSS. In particular the colours now come from a CSS file, which could potentially be overridden, and new UI elements are styled using stylesheets, which likewise could be overridden.</p>
|
||||
<p>Those are just first steps, but eventually these changes will make it easier to style the UI and create new themes.</p>
|
||||
<h3>Bug fixes<a name="bug-fixes" href="#bug-fixes" class="heading-anchor">🔗</a></h3>
|
||||
<p>This release also includes about 30 various bug fixes and improvements.</p>
|
||||
<p>A notable one is a fix for GotoAnything, which recently wasn't working on first try.</p>
|
||||
<p>The plugin screen has also been improved so that search works even when GitHub is down or blocked, as it is in China in particular.</p>
|
||||
]]></description><link>https://joplinapp.org/news/20210929-144036/</link><guid isPermaLink="false">20210929-144036</guid><pubDate>Wed, 29 Sep 2021 14:40:36 GMT</pubDate><twitter-text></twitter-text></item><item><title><![CDATA[Introducing recommended plugins in the next Joplin version]]></title><description><![CDATA[<p>A common request from new users is how to know which plugin is safe to install or not. In fact probably all of them are safe but as a new user that's not necessarily easy to know. So to help with this, the next version of Joplin will support recommended plugins - those will be plugins that meet our standards of quality and performance, and they will be indicated by a small crown tag inside the plugin box. Recommended plugins will also appear on top when searching.</p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20210901-113415_0.png" alt=""></p>
|
||||
<p>For now, since we don't have a review process, the recommended plugins are those developed by the Joplin team and frequent contributors, because we know those are safe to use.</p>
|
||||
<p>Later we might have a review process and add more recommended plugins. That being said, in the meantime even if a plugin is not marked as recommended, there's a good chance it is still safe and have good performance too. Often you can search for it on the forum and if it's active with many users commenting, you're most likely good to go.</p>
|
||||
<p>But if there's any doubt, the recommended tag is a good way to be sure.</p>
|
||||
]]></description><link>https://joplinapp.org/news/20210901-113415/</link><guid isPermaLink="false">20210901-113415</guid><pubDate>Wed, 01 Sep 2021 11:34:15 GMT</pubDate><twitter-text></twitter-text></item><item><title><![CDATA[Joplin Cloud is officially production ready!]]></title><description><![CDATA[<p><a href="https://joplinapp.org/plans/">Joplin Cloud</a> has been out of beta for a few weeks now and since then it has been quietly running without any troubles. There is no known bugs and the service is running smoothly so it's now safe to say that it is production ready!</p>
|
||||
<p>As a reminder, Joplin Cloud is meant to provide a more seamless Joplin experience - if you want to quickly get started, it's as easy as downloading the app and getting a Joplin Cloud account. Besides improved sync performance, that will give you the ability to collaborate on notebooks with others, as well as publishing and sharing notes.</p>
|
||||
<p>Of course Joplin still supports other sync options such as Nextcloud, Dropbox and OneDrive or AWS S3. You can also self host using Joplin Server. The advantage of Joplin Cloud being that you don't need to maintain a server yourself - for a small fee you'll get that taken care of.</p>
|
||||
<p>Additionally, subscribing to Joplin Cloud is a great way to support the project as a whole, including the open source applications. Such support is needed in the long term to provide bug and security fixes, add new features, and provide support.</p>
|
||||
<p>At some level it is also an experiment, to see if such a service is financially viable and can allow me to work full time on the project. This is certainly something I would like, and perhaps Joplin Cloud combined with your donations will allow that.</p>
|
||||
]]></description><link>https://joplinapp.org/news/20210831-154354/</link><guid isPermaLink="false">20210831-154354</guid><pubDate>Tue, 31 Aug 2021 15:43:54 GMT</pubDate><twitter-text></twitter-text></item><item><title><![CDATA[How to start your subscription if you have a free Joplin Cloud Beta account]]></title><description><![CDATA[<p>For anyone with a beta account, if you would like to keep using it after the end of the trial period, there is now a button to do this from the Joplin Cloud home page:</p>
|
||||
<img height="222" src="https://aws1.discourse-cdn.com/standard14/uploads/cozic/optimized/2X/e/e2b54352d0e401e692a75817f6faa0432322c405_2_517x222.png" width="517">
|
||||
<p>If you click on it you will be sent to the Plans page via a special link. Then once you click on "Buy now" you will be sent to the Stripe page where you can start the subscription.</p>
|
||||
<p>As mentioned in the message, the process takes into account your remaining beta trial days. So for example, if your beta account expires in 60 days, the subscription will have a free 60 days trial period. This is so you don't lose any of the beta trial days no matter when you start the subscription.</p>
|
||||
<p>If you have any question about it, please let me know.</p>
|
||||
]]></description><link>https://joplinapp.org/news/20210804-085003/</link><guid isPermaLink="false">20210804-085003</guid><pubDate>Wed, 04 Aug 2021 08:50:03 GMT</pubDate><twitter-text></twitter-text></item><item><title><![CDATA[New beta editor for the mobile app]]></title><description><![CDATA[<p>The <a href="https://github.com/laurent22/joplin-android/releases">latest Android pre-release 24</a> features an improved beta editor, which I hope could become a replacement for the very basic editor we have at the moment.</p>
|
||||
<p>It's still experimental because it's based on the equally experimental CodeMirror 6, however for simple editing tasks it seems to work fine. At the moment the improvements are:</p>
|
||||
<p>- Syntax highlighting for various tags such as bold, italic and headings.</p>
|
||||
<p>- List continuation for ordered and unordered lists (I didn't try checklists but I assume it doesn't work)</p>
|
||||
<p>- Improved undo/redo</p>
|
||||
<p>- Maybe better handling of large documents? CodeMirror 6 has a demo that loads a document with millions of lines, so maybe that will solve the performance issues that some users were having</p>
|
||||
<p>If everything works well, later on we should be able to add things like a toolbar, spellchecking and other features that are impossible with the current editor.</p>
|
||||
<p>If you find any bug, feel free to report here. Also make sure you backup your notes regularly in case there's an issue!</p>
|
||||
]]></description><link>https://joplinapp.org/news/20210729-103234/</link><guid isPermaLink="false">20210729-103234</guid><pubDate>Thu, 29 Jul 2021 10:32:34 GMT</pubDate><twitter-text></twitter-text></item><item><title><![CDATA[The Jopin Cloud beta is now closed]]></title><description><![CDATA[<p>The beta program helped narrow down a few issues and should make Joplin Cloud (and Joplin Server) more reliable. More precisely:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>About 7 bugs have been fixed, including two major ones regarding sharing, and one security issue.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>About a dozen improvements, new features and optimisations have been added following your feedback.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>As promised if you have a beta account you can keep using it and it will remain free for the three months after the account was created. After that, you will receive a link to start the Stripe subscription if you wish to keep using the account.</p>
|
||||
<p>If you have sent me an email before the end of the beta and I didn't reply yet, I will do so soon, and will send you the confirmation email.</p>
|
||||
<p>Thanks everyone for participating!</p>
|
||||
]]></description><link>https://joplinapp.org/news/20210718-103538/</link><guid isPermaLink="false">20210718-103538</guid><pubDate>Sun, 18 Jul 2021 10:35:38 GMT</pubDate><twitter-text></twitter-text></item><item><title><![CDATA[New website is ready!]]></title><description><![CDATA[<p>The new website is finally ready at <a href="https://joplinapp.org">https://joplinapp.org</a></p>
|
||||
<p><img src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/news/20210711-095626_0.png" alt=""></p>
|
||||
<p>The previous website had been built organically over the past few years. It had a lot of useful content but finding your way was tricky and, for new users, it wasn't clear what Joplin was about. Finding out how to install the app wasn't obvious since the download buttons were lost in the clutter of information.</p>
|
||||
<p>So the new website includes a front page with clear goals:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Allows people to easily download the app - for that there's a large Download button at the top and bottom of the page. It redirects to a page that automatically picks the version based on your operating system.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Showcase the application key features. The <a href="https://discourse.joplinapp.org/t/what-are-the-key-features-of-joplin/5837">key features post</a> on the forum helped narrow down what Joplin is about, so there are sections about the web clipper, the open source nature of the app, encryption, synchronisation, customisation and the ability to create multimedia notes.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The top screenshots have also been updated (the previous one was showing a dev version from 2016, before the app was even released). As a nod to Scott Joplin, the screenshot shows an imaginary plan to open a vintage piano store, with various tasks, tables, documents and images attached, to showcase Joplin features.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally there's a Press section, which includes extracts from some cool articles that have been written about the app.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Also many thanks to everyone who voted and contributed to the tagline discussion! It helped narrow down what the tagline should be, along with the equally important description below. If you have any question or notice any issue with the website let me know!</p>
|
||||
]]></description><link>https://joplinapp.org/news/20210711-095626/</link><guid isPermaLink="false">20210711-095626</guid><pubDate>Sun, 11 Jul 2021 09:56:26 GMT</pubDate><twitter-text></twitter-text></item><item><title><![CDATA[Poll: What should Joplin tagline be?]]></title><description><![CDATA[<p>Thanks everyone for your tagline suggestions - there were lots of good ideas in there. I've compiled a few of them and create a poll in the forum, so please cast your vote! And if you have any other suggestions on what would make a good tagline, feel free to post over there or here.</p>
|
||||
<p><a href="https://discourse.joplinapp.org/t/poll-what-should-joplin-tagline-be/18487">https://discourse.joplinapp.org/t/poll-what-should-joplin-tagline-be/18487</a></p>
|
||||
]]></description><link>https://joplinapp.org/news/20210706-140228/</link><guid isPermaLink="false">20210706-140228</guid><pubDate>Tue, 06 Jul 2021 14:02:28 GMT</pubDate><twitter-text></twitter-text></item><item><title><![CDATA[Any ideas for a Joplin tagline?]]></title><description><![CDATA[<p>I'm going to update the website front page to better showcase the application. I have most of the sections right, but the part I'm still not sure about is the top tagline, so I'm wondering if anyone had any suggestion about it?</p>
|
||||
<p>From what I can see on Google Keep or Evernote for example it should be something like "Use our app to get X or Y benefit", it should be a sentence that directly speaks to the user essentially.</p>
|
||||
<p>So far I have "Your notes, anywhere you are" but I'm not certain that's particularly inspiring. Any other idea about what tagline could be used?</p>
|
||||
]]></description><link>https://joplinapp.org/news/20210705-094247/</link><guid isPermaLink="false">20210705-094247</guid><pubDate>Mon, 05 Jul 2021 09:42:47 GMT</pubDate><twitter-text></twitter-text></item><item><title><![CDATA[Poll: What's the size of your note collection?]]></title><description><![CDATA[<p>Poll is on the forum:</p>
|
||||
<p><a href="https://discourse.joplinapp.org/t/poll-whats-the-size-of-your-note-collection/18191">https://discourse.joplinapp.org/t/poll-whats-the-size-of-your-note-collection/18191</a></p>
|
||||
]]></description><link>https://joplinapp.org/news/20210624-171844/</link><guid isPermaLink="false">20210624-171844</guid><pubDate>Thu, 24 Jun 2021 17:18:44 GMT</pubDate><twitter-text></twitter-text></item></channel></rss>
|
||||
]]></description><link>https://joplinapp.org/news/20211102-150403/</link><guid isPermaLink="false">20211102-150403</guid><pubDate>Tue, 02 Nov 2021 15:04:03 GMT</pubDate><twitter-text></twitter-text></item></channel></rss>
|
396
Assets/WebsiteAssets/templates/brand.mustache
Normal file
@@ -0,0 +1,396 @@
|
||||
<!-- Logos Section -->
|
||||
<section class="joplin__logos">
|
||||
<div class="container">
|
||||
<h1 class="main-logo">Joplin brand guidelines</h1>
|
||||
<h2 class="main-logo">Logos</h2>
|
||||
<p class="joplin__para">
|
||||
All the variations of Joplin logo are all front facing. <br />
|
||||
To ensure a clarity and legibility of design, the logo should always
|
||||
be surrounded by a clear space.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="wrapper">
|
||||
<div class="container">
|
||||
<div class="row align-items-center justify-content-tablet-end gy-5 p-row">
|
||||
<div class="col-xxl-4 col-xl-4 col-lg-6 col-md-6 col-sm-12">
|
||||
<div class="box">
|
||||
<h3 class="joplin__tagline1">Lockup logo</h3>
|
||||
<p class="joplin__para">
|
||||
Joplin lockup is the main logo. It is used for
|
||||
products and marketing communications. To ensure
|
||||
sufficient contrast and readability, two following versions of
|
||||
the lockup are provided.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xxl-4 col-xl-4 col-lg-6 col-md-6 col-sm-12">
|
||||
<div class="box box2">
|
||||
<p class="joplin__para para-1">
|
||||
<span class="blue-text">Blue text</span> version to be used on
|
||||
bright background.
|
||||
</p>
|
||||
<div class="logo-wrapper">
|
||||
<img src="{{imageBaseUrl}}/brand/Vector.png" alt="" />
|
||||
<h4 class="blue-header">Joplin</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xxl-4 col-xl-4 col-lg-6 col-md-6 col-sm-12">
|
||||
<div class="colored-box">
|
||||
<p class="joplin__para">
|
||||
White text version to be used <br />
|
||||
on dark background.
|
||||
</p>
|
||||
<div class="logo-wrapper">
|
||||
<img src="{{imageBaseUrl}}/brand/Vector2.png" alt="" />
|
||||
<h4 class="white-header">Joplin</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="wrapper wrapper-2">
|
||||
<div class="container">
|
||||
<div class="pipeline"></div>
|
||||
<div class="row align-items-center gy-5 p-row justify-between">
|
||||
<div class="col-xxl-6 col-xl-6 col-lg-12 col-md-12 col-sm-12">
|
||||
<div class="box">
|
||||
<h3 class="joplin__tagline1">Brandmark logo</h3>
|
||||
<div class="box-wrapper">
|
||||
<img
|
||||
src="{{imageBaseUrl}}/brand/J logo transparent background 1.png"
|
||||
alt=""
|
||||
/>
|
||||
<p class="joplin__para">
|
||||
The classic brandmark icon is often used on a bright
|
||||
background to help increase the contrast. It is a reduced
|
||||
version of a logo which should be used in limited spacing or
|
||||
when using a full name is not necessary.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xxl-6 col-xl-6 col-lg-12 col-md-12 col-sm-12">
|
||||
<div class="box special-box">
|
||||
<h3 class="joplin__tagline1">Joplin tagline</h3>
|
||||
<img src="{{imageBaseUrl}}/brand/tagline 1.png" alt="" />
|
||||
<p class="joplin__para our-para">
|
||||
Our tagline is an invitation to capture your thoughts and
|
||||
securely access them from any device.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
<section class="joplin__colours">
|
||||
<div class="container">
|
||||
<h2>Colours</h2>
|
||||
<p class="joplin__para">
|
||||
Two core colour palettes can be used while representing the brand. The
|
||||
accent colours are used to highlight <br />
|
||||
important elements and support the colours of the core palettes.
|
||||
</p>
|
||||
<div class="custom-row gy-4">
|
||||
<div
|
||||
class="chartjs-wrapper"
|
||||
>
|
||||
<canvas id="chart1" ></canvas>
|
||||
</div>
|
||||
<div
|
||||
class="chartjs-wrapper"
|
||||
>
|
||||
<canvas id="chart2" ></canvas>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- Colours Section -->
|
||||
<!-- Pallet Section -->
|
||||
<section class="joplin__pallet">
|
||||
<div class="container">
|
||||
<div class="row gy-5">
|
||||
<div class="col-xxl-6 col-xl-6 col-lg-12 col-md-12 col-sm-12">
|
||||
<h3>Primary colours</h3>
|
||||
<div class="sigma-wrapper">
|
||||
<div class="circle-wrapper">
|
||||
<div class="circle dark-blue"></div>
|
||||
<div class="info">
|
||||
<p class="joplin__para">Dark blue</p>
|
||||
<p class="joplin__para">HEX - 043873</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="circle-wrapper">
|
||||
<div class="circle white"></div>
|
||||
<div class="info">
|
||||
<p class="joplin__para">White</p>
|
||||
<p class="joplin__para">HEX - FFFFFF</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="circle-wrapper">
|
||||
<div class="circle dark-gray"></div>
|
||||
<div class="info">
|
||||
<p class="joplin__para">Dark gray</p>
|
||||
<p class="joplin__para">HEX - 32363F</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-1"></div>
|
||||
<div class="col-xxl-5 col-xl-5 col-lg-12 col-md-12 col-sm-12">
|
||||
<h3>Accent colours</h3>
|
||||
<div class="sigma-wrapper">
|
||||
<div class="circle-wrapper">
|
||||
<div class="circle light-blue"></div>
|
||||
<div class="info">
|
||||
<p class="joplin__para">Light blue</p>
|
||||
<p class="joplin__para">HEX - 4F9CF9</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="circle-wrapper">
|
||||
<div class="circle yellow"></div>
|
||||
<div class="info">
|
||||
<p class="joplin__para">Yellow</p>
|
||||
<p class="joplin__para">HEX - FFE492</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row row-space">
|
||||
<div></div>
|
||||
</div>
|
||||
<div class="row gy-5">
|
||||
<div class="col-xxl-6 col-xl-6 col-lg-12 col-md-12 col-sm-12">
|
||||
<h3>
|
||||
Allowed variations of <br />
|
||||
primary colours
|
||||
</h3>
|
||||
<div class="sigma-wrapper">
|
||||
<div class="circle-wrapper">
|
||||
<div class="circle variant-dark"></div>
|
||||
<div class="info">
|
||||
<p class="joplin__para">Variant dark</p>
|
||||
<p class="joplin__para">HEX - 072445</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="circle-wrapper">
|
||||
<div class="circle variant-white"></div>
|
||||
<div class="info">
|
||||
<p class="joplin__para">Variant white</p>
|
||||
<p class="joplin__para">HEX - F8F9FA</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="circle-wrapper">
|
||||
<div class="circle variant-dark-gray"></div>
|
||||
<div class="info">
|
||||
<p class="joplin__para">Variant dark gray</p>
|
||||
<p class="joplin__para">HEX - 212529</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-1"></div>
|
||||
<div class="col-xxl-5 col-xl-5 col-lg-12 col-md-12 col-sm-12">
|
||||
<h3>
|
||||
Allowed variations of <br />
|
||||
accent colours
|
||||
</h3>
|
||||
<div class="sigma-wrapper">
|
||||
<div class="circle-wrapper">
|
||||
<div class="circle variant-light-blue"></div>
|
||||
<div class="info">
|
||||
<p class="joplin__para">Variant light blue</p>
|
||||
<p class="joplin__para">HEX - F7FBFF</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- Pallet Section -->
|
||||
<!-- State Section -->
|
||||
<section class="joplin__state">
|
||||
<div class="container">
|
||||
<div class="wrapper row justify-content-between gy-5">
|
||||
<div class="col-12 col-lg-5">
|
||||
<div class="box pb-3">
|
||||
<h2>Typography</h2>
|
||||
<p class="joplin__para">
|
||||
<b>Font-family: Montserrat</b> <br />
|
||||
Montserrat is a typeface chosen for its great readability. It is
|
||||
used as a default font. Sans-serif font should be used when
|
||||
Montserrat is not available.
|
||||
</p>
|
||||
</div>
|
||||
<div class="box">
|
||||
<h2>Connector element</h2>
|
||||
<p class="joplin__para">
|
||||
The graphic element that represents the connection between the
|
||||
components, files and data. It's Joplin's signature element
|
||||
present in application's website as well as in marketing
|
||||
communications.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-5">
|
||||
<div class="box">
|
||||
<h2>Imagery</h2>
|
||||
<p class="joplin__para">
|
||||
We uses vector art illustration . It ensures high
|
||||
quality images in any scale, large or small. All the
|
||||
illustrations come from storyset.com and are personalised to
|
||||
match the Joplin's colours.
|
||||
</p>
|
||||
</div>
|
||||
<div class="box">
|
||||
<img src="{{imageBaseUrl}}/brand/customise-it-img 1.png" alt="" class="image" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="joplin__highlighter">
|
||||
<div class="container">
|
||||
<h2>Highlighter</h2>
|
||||
<p class="joplin__para">
|
||||
It is a reference to process of note taking on paper. It is used to
|
||||
emphasize words in the titles. There are two <br />
|
||||
variations of the element:
|
||||
</p>
|
||||
<div class="wrapper">
|
||||
<div class="yellow">
|
||||
<h4>Yellow version under dark text</h4>
|
||||
<img src="{{imageBaseUrl}}/brand/frame-yellow 1.png" alt="" />
|
||||
</div>
|
||||
<div class="blue">
|
||||
<h4>Light blue version under white text</h4>
|
||||
<img src="{{imageBaseUrl}}/brand/frame-blue 1.png" alt="" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="joplin__voice">
|
||||
<div class="container">
|
||||
<h2>Tone of voice</h2>
|
||||
<div class="wrapper">
|
||||
<div class="box">
|
||||
<div>
|
||||
<h3>
|
||||
Professional, <br />
|
||||
Friendly, <br />
|
||||
Welcoming, <br />
|
||||
Trustworthy, <br />
|
||||
Open-minded, <br />
|
||||
Genuine
|
||||
</h3>
|
||||
</div>
|
||||
<div>
|
||||
<p class="joplin__para">
|
||||
We believe that transparency is key to honest and successful
|
||||
communication. We remain <b>trustworthy</b> and
|
||||
<b>genuine</b> in engaging with our users and Joplin community.
|
||||
</p>
|
||||
<p class="joplin__para">
|
||||
As an open-source project we stay
|
||||
<b>open-minded</b> and <b>enthusiastic</b> about new ideas and
|
||||
solutions. At the same time we continue to be
|
||||
<b>professional</b> to honour the trust the users place in us.
|
||||
</p>
|
||||
<p class="joplin__para">
|
||||
We appreciate the value the users bring to our product and
|
||||
therefore we keep our tone <b>friendly</b> and <b>welcoming</b>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- State Section -->
|
||||
<!-- Chart.Js Lib -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js"></script>
|
||||
<script>
|
||||
const ctx = document.getElementById("chart1");
|
||||
const myChart = new Chart(ctx, {
|
||||
type: "pie",
|
||||
data: {
|
||||
labels: ["Dark blue 40%", "Gray 20%", "White 20%", "Light blue 10%", "Yellow 7%", "Dark gray 3%"],
|
||||
datasets: [
|
||||
{
|
||||
label: "# of Votes",
|
||||
data: [40, 20, 20, 10, 7, 3],
|
||||
backgroundColor: [
|
||||
"#043873",
|
||||
"#f7fbff",
|
||||
"#ffffff",
|
||||
"#4f9cf9",
|
||||
"#ffe492",
|
||||
"#212529",
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
options: {
|
||||
layout: {},
|
||||
elements: {
|
||||
arc: {
|
||||
borderColor: '#cccccc',
|
||||
}
|
||||
},
|
||||
plugins: {
|
||||
title: {
|
||||
display: true,
|
||||
text: "Blue colour palette",
|
||||
font: {
|
||||
size: 21,
|
||||
align: "left",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
const ctx2 = document.getElementById("chart2");
|
||||
const myChart2 = new Chart(ctx2, {
|
||||
type: "pie",
|
||||
data: {
|
||||
labels: ["White 40%", "Gray 20%", "Dark blue 20%", "Light blue 10%", "Dark gray 7%", "Yellow 3%"],
|
||||
datasets: [
|
||||
{
|
||||
label: "# of Votes",
|
||||
data: [40, 20, 20, 10, 7, 3],
|
||||
backgroundColor: [
|
||||
"#ffffff",
|
||||
"#f7fbff",
|
||||
"#043873",
|
||||
"#4f9cf9",
|
||||
"#212529",
|
||||
"#ffe492",
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
options: {
|
||||
layout: {},
|
||||
elements: {
|
||||
arc: {
|
||||
borderColor: '#cccccc',
|
||||
}
|
||||
},
|
||||
plugins: {
|
||||
title: {
|
||||
display: true,
|
||||
text: "White colour palette",
|
||||
font: {
|
||||
size: 21,
|
||||
align: "left",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
</script>
|
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<html lang="en-gb">
|
||||
<head>
|
||||
{{> gtmHead}}
|
||||
{{> gaOptimize}}
|
||||
@@ -51,22 +51,22 @@
|
||||
Running in {{env}} mode!
|
||||
</div>
|
||||
|
||||
<h1 class="text-center">
|
||||
<h1 translate class="text-center">
|
||||
Free your <span class="frame-bg frame-bg-blue">notes</span>
|
||||
</h1>
|
||||
<p class="text-center" id="top-section-text">
|
||||
<p translate class="text-center" id="top-section-text">
|
||||
Joplin is an open source note-taking app. Capture your thoughts and securely access them from any device.
|
||||
</p>
|
||||
<br />
|
||||
<br />
|
||||
<p class="text-center">
|
||||
<a href="{{baseUrl}}/download/" class="button-link btn-blue download-button">Download the app</a>
|
||||
<a translate href="{{baseUrl}}/download/" class="button-link btn-blue download-button">Download the app</a>
|
||||
{{#showJoplinCloudLinks}}
|
||||
<a href="{{baseUrl}}/plans/" class="button-link btn-trans plans-button">Sign up with Joplin Cloud</a>
|
||||
<a translate href="{{baseUrl}}/plans/" class="button-link btn-trans plans-button">Sign up with Joplin Cloud</a>
|
||||
{{/showJoplinCloudLinks}}
|
||||
</p>
|
||||
|
||||
<picture class="img-fluid img-center" id="top-section-img">
|
||||
<picture class="img-fluid img-center top-section-img top-section-img-en">
|
||||
<source type="image/webp" srcset="
|
||||
{{imageBaseUrl}}/home-top-img-4x.webp 4820w,
|
||||
{{imageBaseUrl}}/home-top-img-2x.webp 2388w,
|
||||
@@ -76,7 +76,20 @@
|
||||
{{imageBaseUrl}}/home-top-img-2x.png 2388w,
|
||||
{{imageBaseUrl}}/home-top-img.png 1205w
|
||||
">
|
||||
<img id="top-section-img-img" src="{{imageBaseUrl}}/home-top-img-2x.png">
|
||||
<img src="{{imageBaseUrl}}/home-top-img-2x.png">
|
||||
</picture>
|
||||
|
||||
<picture class="img-fluid img-center top-section-img top-section-img-cn">
|
||||
<source type="image/webp" srcset="
|
||||
{{imageBaseUrl}}/home-top-img-cn-4x.webp 4820w,
|
||||
{{imageBaseUrl}}/home-top-img-cn-2x.webp 2388w,
|
||||
{{imageBaseUrl}}/home-top-img-cn.webp 1205w
|
||||
">
|
||||
<source type="image/png" srcset="
|
||||
{{imageBaseUrl}}/home-top-img-cn-2x.png 2388w,
|
||||
{{imageBaseUrl}}/home-top-img-cn.png 1205w
|
||||
">
|
||||
<img src="{{imageBaseUrl}}/home-top-img-cn-2x.png">
|
||||
</picture>
|
||||
</div>
|
||||
</div>
|
||||
@@ -88,17 +101,15 @@
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-5 col-xxl-6">
|
||||
<div class="ml-30 ml-mobile-0">
|
||||
<h2 id="multimedia-title">
|
||||
<h2 translate id="multimedia-title">
|
||||
<span class="frame-bg frame-bg-yellow">Multimedia</span> notes
|
||||
</h2>
|
||||
<p id="multimedia-text">
|
||||
Images, videos, PDFs and audio files are supported. Create
|
||||
math expressions and diagrams directly from the app. Take
|
||||
photos with the mobile app and save them to a note.
|
||||
<p translate id="multimedia-text">
|
||||
Images, videos, PDFs and audio files are supported. Create math expressions and diagrams directly from the app. Take photos with the mobile app and save them to a note.
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<a href="{{baseUrl}}/download/" class="button-link btn-blue">Download the app</a>
|
||||
<a translate href="{{baseUrl}}/download/" class="button-link btn-blue">Download the app</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -123,15 +134,14 @@
|
||||
<div class="col-6 d-none d-md-block"></div>
|
||||
<div class="col-12 col-md-6">
|
||||
<div class="ml-30 ml-mobile-0">
|
||||
<h2>Work <span class="frame-bg frame-bg-yellow">together</span></h2>
|
||||
<p>
|
||||
With Joplin Cloud, share your notes with your friends, family
|
||||
or colleagues and collaborate on them.
|
||||
<h2 translate>Work <span class="frame-bg frame-bg-yellow">together</span></h2>
|
||||
<p translate>
|
||||
With Joplin Cloud, share your notes with your friends, family or colleagues and collaborate on them.
|
||||
</p>
|
||||
<p>You can also publish a note to the internet and share the URL with others.</p>
|
||||
<p translate>You can also publish a note to the internet and share the URL with others.</p>
|
||||
<br/>
|
||||
<p>
|
||||
<a href="{{baseUrl}}/plans/" class="button-link btn-blue">Try it now</a>
|
||||
<a translate href="{{baseUrl}}/plans/" class="button-link btn-blue">Try it now</a>
|
||||
</p>
|
||||
<br class="d-block d-md-none" />
|
||||
<br class="d-block d-md-none" />
|
||||
@@ -154,16 +164,15 @@
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-6">
|
||||
<div class="ml-30 ml-mobile-0">
|
||||
<h2 id="save-web-title">
|
||||
<h2 translate id="save-web-title">
|
||||
Save <span class="frame-bg frame-bg-blue">web pages</span> <br />as notes
|
||||
</h2>
|
||||
<p>
|
||||
Use the web clipper extension, available on Chrome and
|
||||
Firefox, to save web pages or take screenshots as notes.
|
||||
<p translate>
|
||||
Use the web clipper extension, available on Chrome and Firefox, to save web pages or take screenshots as notes.
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<a href="{{baseUrl}}/clipper/" class="button-link btn-blue">Get the clipper</a>
|
||||
<a translate href="{{baseUrl}}/clipper/" class="button-link btn-blue">Get the clipper</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -193,19 +202,15 @@
|
||||
</div>
|
||||
<div class="col-12 col-md-6">
|
||||
<div class="ml-30 ml-mobile-0">
|
||||
<h2 id="customise-it-title">
|
||||
<h2 translate id="customise-it-title">
|
||||
<span class="frame-bg frame-bg-yellow-lg">Customise</span> it
|
||||
<br />
|
||||
to your needs
|
||||
</h2>
|
||||
<p>
|
||||
Customise the app with plugins, custom themes and multiple
|
||||
text editors (Rich Text or Markdown). Or create your own
|
||||
scripts and plugins using the Extension API.
|
||||
<p translate>
|
||||
Customise the app with plugins, custom themes and multiple text editors (Rich Text or Markdown). Or create your own scripts and plugins using the Extension API.
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<a href="{{baseUrl}}/help/#plugins" class="button-link btn-blue">Find out more</a>
|
||||
<a translate href="{{baseUrl}}/help/#plugins" class="button-link btn-blue">Find out more</a>
|
||||
</p>
|
||||
|
||||
<br class="d-block d-lg-none" />
|
||||
@@ -225,16 +230,16 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<h2 class="text-center">
|
||||
<h2 translate class="text-center">
|
||||
Your notes, <span class="frame-bg frame-bg-blue-lg">everywhere</span> you are
|
||||
</h2>
|
||||
<p class="text-center" id="your-note-text">
|
||||
<p translate class="text-center" id="your-note-text">
|
||||
Access your notes from your computer, phone or tablet by synchronising with various services, including Joplin Cloud, Dropbox and OneDrive. The app is available on Windows, macOS, Linux, Android and iOS. A terminal app is also available!
|
||||
</p>
|
||||
<br />
|
||||
<br />
|
||||
<p class="text-center">
|
||||
<a href="{{baseUrl}}/download/" class="button-link btn-blue">Download it now</a>
|
||||
<a translate href="{{baseUrl}}/download/" class="button-link btn-blue">Download it now</a>
|
||||
</p>
|
||||
<br />
|
||||
</div>
|
||||
@@ -248,15 +253,13 @@
|
||||
<div class="col-12 col-md-6">
|
||||
<br class="d-block d-md-none" />
|
||||
<div class="ml-30 ml-mobile-0">
|
||||
<h2>100% <span class="frame-bg frame-bg-yellow-lg">your data</span></h2>
|
||||
<p>
|
||||
The app is open source and your notes are saved to an open
|
||||
format, so you'll always have access to them. Uses End-To-End Encryption (E2EE) to secure your notes and ensure no-one but
|
||||
yourself can access them.
|
||||
<h2 translate>100% <span class="frame-bg frame-bg-yellow-lg">your data</span></h2>
|
||||
<p translate>
|
||||
The app is open source and your notes are saved to an open format, so you'll always have access to them. Uses End-To-End Encryption (E2EE) to secure your notes and ensure no-one but yourself can access them.
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<a href="{{baseUrl}}/e2ee/" class="button-link btn-blue">More about E2EE</a>
|
||||
<a translate href="{{baseUrl}}/e2ee/" class="button-link btn-blue">More about E2EE</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -274,12 +277,54 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="made-in-france-section" class="blue-bg">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="d-none d-md-block col-md-6">
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<img
|
||||
src="{{imageBaseUrl}}/made-in-france.png"
|
||||
alt=""
|
||||
class="img-fluid"
|
||||
/>
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
</div>
|
||||
<div class="col-12 col-md-6">
|
||||
<div class="ml-30 ml-mobile-0">
|
||||
<h2 translate id="customise-it-title">
|
||||
A <span class="frame-bg frame-bg-yellow-lg">French</span> Alternative
|
||||
</h2>
|
||||
<p translate>
|
||||
Joplin Cloud is based in France. This means your data is protected by strict European Union privacy laws. In addition, Joplin Cloud implements strong end-to-end encryption so that not even us can have access to your data.
|
||||
</p>
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<br class="d-block d-lg-none" />
|
||||
<br class="d-block d-lg-none" />
|
||||
<img
|
||||
src="{{imageBaseUrl}}/made-in-france.png"
|
||||
alt=""
|
||||
class="img-fluid d-block d-md-none"
|
||||
/>
|
||||
<br />
|
||||
<br />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="in-the-press-section">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<br />
|
||||
<h2 class="text-center">
|
||||
<h2 translate class="text-center">
|
||||
In the <span class="frame-bg frame-bg-yellow">Press</span>
|
||||
</h2>
|
||||
<br />
|
||||
@@ -343,10 +388,10 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<h2 class="text-center">
|
||||
<h2 translate class="text-center">
|
||||
Our <span class="frame-bg frame-bg-blue-lg">sponsors</span>
|
||||
</h2>
|
||||
<p class="text-center" id="your-note-text">
|
||||
<p translate class="text-center" id="your-note-text">
|
||||
Thank you for your support!
|
||||
</p>
|
||||
<br />
|
||||
@@ -376,7 +421,7 @@
|
||||
</div>
|
||||
|
||||
<script
|
||||
src="{{jsBaseUrl}}/bootstrap5.0.2.min.js"
|
||||
src="{{jsBaseUrl}}/bootstrap5.0.2.bundle.min.js"
|
||||
rel="preload"
|
||||
as="script"
|
||||
></script>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<html lang="en-gb">
|
||||
|
||||
<!--
|
||||
|
||||
@@ -40,6 +40,7 @@ https://github.com/laurent22/joplin/blob/dev/{{{sourceMarkdownFile}}}
|
||||
onload="this.media='all'; this.onload = null"
|
||||
/>
|
||||
<link rel="stylesheet" href="{{{assetUrls.css.site}}}" as="style" />
|
||||
{{#assetUrls.css.brand}}<link rel="stylesheet" href="{{{assetUrls.css.brand}}}" as="style" />{{/assetUrls.css.brand}}
|
||||
<title>{{pageTitle}}</title>
|
||||
|
||||
<script
|
||||
@@ -85,6 +86,11 @@ https://github.com/laurent22/joplin/blob/dev/{{{sourceMarkdownFile}}}
|
||||
{{> footer}}
|
||||
</div>
|
||||
|
||||
<script
|
||||
src="{{jsBaseUrl}}/bootstrap5.0.2.bundle.min.js"
|
||||
rel="preload"
|
||||
as="script"
|
||||
></script>
|
||||
<script src="{{{assetUrls.js.script}}}"></script>
|
||||
|
||||
{{> analytics}}
|
||||
|