Compare commits
1060 Commits
plugins_cu
...
server-v2.
Author | SHA1 | Date | |
---|---|---|---|
|
952b2b3427 | ||
|
426915c75d | ||
|
f78ffc5e79 | ||
|
ff8f230555 | ||
|
1808367d78 | ||
|
89f4ca14e8 | ||
|
a4255bb8fe | ||
|
f761bad6bb | ||
|
018381dad3 | ||
|
62b619865a | ||
|
240cb35756 | ||
|
f6f68e9413 | ||
|
f8d2c26c8e | ||
|
09a943e8c9 | ||
|
67a000add9 | ||
|
f0c3a7313c | ||
|
54130bb4af | ||
|
ca01eb35aa | ||
|
576a5074ab | ||
|
e3db3871b6 | ||
|
d411d14818 | ||
|
5214da0a44 | ||
|
a73b749ddd | ||
|
aa4f1146ca | ||
|
5a27d4dc31 | ||
|
bc97bb242a | ||
|
47b283a367 | ||
|
41f01dcc34 | ||
|
3f21a6d9ab | ||
|
afe573dc86 | ||
|
ed7face070 | ||
|
6f836b372d | ||
|
6cfd868b44 | ||
|
3430f0bcae | ||
|
4ae5108717 | ||
|
cf89a06eb2 | ||
|
a8bc9d2a63 | ||
|
bfc8c1e3c1 | ||
|
af15b8359b | ||
|
6c1a6b0a61 | ||
|
5ee4e2bf8e | ||
|
f3359158b9 | ||
|
e210926340 | ||
|
492c5851e3 | ||
|
238cc86590 | ||
|
2dfb33442c | ||
|
51d5e57b9f | ||
|
264f36f257 | ||
|
082c8ffecb | ||
|
c420ad4392 | ||
|
8883df24df | ||
|
d99c34f1dd | ||
|
34a0b2abb7 | ||
|
ab8dbcc73d | ||
|
5258cc335a | ||
|
7d9a222fbb | ||
|
0bc892e40e | ||
|
125af75b93 | ||
|
3d18514c3c | ||
|
7447793e77 | ||
|
427218b1f4 | ||
|
b507fbf837 | ||
|
b0e9b0e042 | ||
|
a53a6e6f15 | ||
|
cebec1a992 | ||
|
e08a909bdb | ||
|
bfa7ea7871 | ||
|
94ea177b76 | ||
|
07ea79bb46 | ||
|
f792fbb5fc | ||
|
8e789ee2ee | ||
|
d34a92d581 | ||
|
37ff926181 | ||
|
5ee2ffe174 | ||
|
1209cc6872 | ||
|
ac800af9f8 | ||
|
7ed1a453e5 | ||
|
55248ed08b | ||
|
d5becfa0ae | ||
|
1476cdf467 | ||
|
6a5629391b | ||
|
b77f9388b0 | ||
|
c3f4f22a2c | ||
|
c9f7d6483f | ||
|
de9d7f747f | ||
|
705432d9e8 | ||
|
a04e7b7d8d | ||
|
00b39e4671 | ||
|
04c4015c85 | ||
|
3d03321328 | ||
|
78f001eb9d | ||
|
269ec34c83 | ||
|
8e35841d79 | ||
|
94ba8549b7 | ||
|
8cbcb78ad1 | ||
|
5047cf1027 | ||
|
5ecac211ae | ||
|
65d87220de | ||
|
f86879778b | ||
|
5390e100e6 | ||
|
51f3c0016e | ||
|
752d118e5d | ||
|
c2cd1733cc | ||
|
fe83491eab | ||
|
6cbdad0690 | ||
|
96931877cf | ||
|
b92ab2b8cc | ||
|
e9f5ca817b | ||
|
dc9bb26c1a | ||
|
0019bd147a | ||
|
118a2f9f25 | ||
|
46868e6b25 | ||
|
67d9977489 | ||
|
638b3236cf | ||
|
8e712eacf5 | ||
|
7c92015fe6 | ||
|
0e757ad562 | ||
|
0c12c7f811 | ||
|
5ecb870ffd | ||
|
e58e2a3421 | ||
|
2e7e1948f8 | ||
|
caabdbd815 | ||
|
65e9268e83 | ||
|
4eec54cd48 | ||
|
5ef5888bfb | ||
|
12aae48ce6 | ||
|
5bb68ba65d | ||
|
112157e33f | ||
|
d129744138 | ||
|
975951ccbc | ||
|
efb6aaf8cc | ||
|
9323caf2f1 | ||
|
d13b1f96ba | ||
|
8e55fe31ee | ||
|
50ecdc2ff1 | ||
|
8a2ca0535d | ||
|
097e49d797 | ||
|
11ffbe7d66 | ||
|
e79f965e5d | ||
|
8cc103a062 | ||
|
7f05efb789 | ||
|
5b368e39ca | ||
|
b88bbc74a2 | ||
|
fc132216cb | ||
|
1dc49c7673 | ||
|
ab9bbcbff2 | ||
|
b7b12f9369 | ||
|
d8752ab889 | ||
|
372495afd3 | ||
|
2320934853 | ||
|
326fef486c | ||
|
7aff6d271d | ||
|
a86a80b21c | ||
|
4dc1210eb5 | ||
|
0222c0f0a6 | ||
|
63f7349c17 | ||
|
3b9c02e92d | ||
|
cef5834d73 | ||
|
b341caf287 | ||
|
fc063fe68e | ||
|
d73eab6f82 | ||
|
d698ea0c12 | ||
|
e04133cfc6 | ||
|
525ab01b9b | ||
|
0d33955fcd | ||
|
7f0b3fd718 | ||
|
65c3d01cc6 | ||
|
ac03c08f33 | ||
|
ea1d614f82 | ||
|
c682c8879c | ||
|
e8532441bc | ||
|
1c597883ef | ||
|
15ce5cdd6e | ||
|
a38958ab7b | ||
|
232e0c937a | ||
|
479237d16f | ||
|
6ae0e84a1a | ||
|
71d567669b | ||
|
db39db45c5 | ||
|
6916b53c2e | ||
|
578550e824 | ||
|
240a624abd | ||
|
981b1d845c | ||
|
313c8bbe8c | ||
|
8c56cf98be | ||
|
18965494d9 | ||
|
ecd1602658 | ||
|
3c181906c2 | ||
|
9e1e144311 | ||
|
757c125bd3 | ||
|
2867b66cf1 | ||
|
5c6fd93753 | ||
|
ea65313bdb | ||
|
1711f7ec88 | ||
|
e0b5ef6630 | ||
|
4bbb3d1d58 | ||
|
fd769945b1 | ||
|
6e91d2784f | ||
|
881b2f17b1 | ||
|
e83cc58ea6 | ||
|
77def9f782 | ||
|
b23cc5d30a | ||
|
d8119bcf07 | ||
|
8bce259dc9 | ||
|
8a00eef901 | ||
|
31121c86d5 | ||
|
a4a156c7a5 | ||
|
c5b0529968 | ||
|
ba322b1f9b | ||
|
6f27eae7dd | ||
|
85cc08c0d4 | ||
|
ba38bf3490 | ||
|
2cf70675dc | ||
|
58f8d7e1b4 | ||
|
b55b35e53f | ||
|
c7194bf243 | ||
|
48abe2316e | ||
|
7aca380cfa | ||
|
551033f8ba | ||
|
3b6a66a016 | ||
|
5d7d1be363 | ||
|
2af3bf61ea | ||
|
6803f1c6a7 | ||
|
1aa70dd6b4 | ||
|
feaecf7653 | ||
|
af9f3eedd3 | ||
|
815800827b | ||
|
8f1e3ba43c | ||
|
8459b46cd0 | ||
|
c5c38a323f | ||
|
01e6ca4616 | ||
|
24a586c537 | ||
|
5d233a7387 | ||
|
054e5428d5 | ||
|
0120df7bdb | ||
|
a36b13dcb4 | ||
|
b81c300907 | ||
|
1ded589eeb | ||
|
315216132f | ||
|
2eaa821272 | ||
|
7c93e268e4 | ||
|
d0c4de92e2 | ||
|
91ce465535 | ||
|
4098c01e7c | ||
|
e617e6fab3 | ||
|
5fd6571bf1 | ||
|
00dc1d881b | ||
|
c37eb56ed7 | ||
|
b2b6ad479a | ||
|
0e4c545e14 | ||
|
bbae1aef28 | ||
|
cf86ffc36e | ||
|
9d80a79cda | ||
|
ca487ade9a | ||
|
75b66a9fff | ||
|
56fdf97693 | ||
|
ce02a30441 | ||
|
a058e09183 | ||
|
594084e274 | ||
|
5614eb9442 | ||
|
7a3a2084db | ||
|
95d7ccccea | ||
|
f7a7009b3c | ||
|
de7579a14e | ||
|
c8d7ecbf6c | ||
|
3c41b45e8e | ||
|
62a371b9f3 | ||
|
5528ab7cc8 | ||
|
824afd4809 | ||
|
8ed1330d68 | ||
|
fec5d4b335 | ||
|
e7b9103bfc | ||
|
dd1c9e3c2a | ||
|
7c45b95f6f | ||
|
a7e67952b8 | ||
|
1b7d40387d | ||
|
7921e70c4f | ||
|
8afac643ba | ||
|
23cfbc2367 | ||
|
de45740129 | ||
|
a04d8ef441 | ||
|
db7b802803 | ||
|
75d79f373a | ||
|
e8a02c26d0 | ||
|
147b6b13ab | ||
|
a496a3d90d | ||
|
69a8ada2ec | ||
|
87257870f4 | ||
|
21ea3253db | ||
|
770af6a53b | ||
|
c88e4f6628 | ||
|
2f79492192 | ||
|
69aa749205 | ||
|
87a5f18c7b | ||
|
1d2a3a97d2 | ||
|
42891e37a1 | ||
|
fe802b8ebc | ||
|
3cb6d4568c | ||
|
a9f0a75d9d | ||
|
07d30eb5d2 | ||
|
8f6a47536c | ||
|
d8d83b236e | ||
|
a355600e76 | ||
|
2a58664735 | ||
|
89bc181072 | ||
|
ab7380a09f | ||
|
f8a26cf8f9 | ||
|
3505a2a973 | ||
|
5f94de0f24 | ||
|
6811ea1eb9 | ||
|
7be59a7435 | ||
|
c0683ca4c3 | ||
|
2b286410f6 | ||
|
907ac7c1f8 | ||
|
8bc27021db | ||
|
41ed66d323 | ||
|
0ef7e98479 | ||
|
161c77cb48 | ||
|
50d17bfb36 | ||
|
ee0f23718b | ||
|
cfe4546a0b | ||
|
f45e0d106f | ||
|
12a66342db | ||
|
f2b17560e6 | ||
|
ba30dce6c8 | ||
|
f5984313be | ||
|
df058352a5 | ||
|
cde25fad92 | ||
|
d89bbc5571 | ||
|
71a7fc015a | ||
|
83cef7a824 | ||
|
f65de0c9eb | ||
|
3edf74e6d2 | ||
|
b01aa7eb45 | ||
|
e59e3aa7d1 | ||
|
51051e0ee0 | ||
|
b20ab19f13 | ||
|
68e79f1573 | ||
|
ed8ee67048 | ||
|
68b516998d | ||
|
0fa7a66fb6 | ||
|
13f39b9bd5 | ||
|
013d37bd09 | ||
|
4760e5e8ba | ||
|
8930dac40e | ||
|
3f0586ef63 | ||
|
e94503abbe | ||
|
f8253cc2f0 | ||
|
2806aa1b19 | ||
|
8f57e07279 | ||
|
6ff560f22f | ||
|
2226b79c46 | ||
|
9e9bf63d70 | ||
|
5d9419be5d | ||
|
9f37aa96c6 | ||
|
eceb14ff9e | ||
|
85211e8d5c | ||
|
bd08041f53 | ||
|
77b284f01f | ||
|
daaaa133ab | ||
|
e6c4eb7cdf | ||
|
dc2cdb7d3a | ||
|
f3e03d48bb | ||
|
6577f4f35d | ||
|
d29624c816 | ||
|
6afde54bda | ||
|
ec7f0f479a | ||
|
7f05420fda | ||
|
a3f8cd4850 | ||
|
01ccf5170a | ||
|
6ddb69e1ea | ||
|
b01f82bb33 | ||
|
b6c9edba21 | ||
|
f7d164be6e | ||
|
6f2f24171d | ||
|
12cc64008b | ||
|
b9955f58d3 | ||
|
489995daef | ||
|
e156ee1b58 | ||
|
a24b0091ad | ||
|
2655b6deee | ||
|
45c40f7395 | ||
|
ecb0eee355 | ||
|
4916f4cc92 | ||
|
15fe119256 | ||
|
0b46880a00 | ||
|
deaa731983 | ||
|
d061bb1a4f | ||
|
03db0c5486 | ||
|
bb275e671d | ||
|
2d0580ff71 | ||
|
2331d3487b | ||
|
f1380fd51d | ||
|
d462dab8eb | ||
|
cf37b74d9a | ||
|
aec3ea9c0c | ||
|
1f5aa70acd | ||
|
416637ce83 | ||
|
99c4b0bc01 | ||
|
74d8fec98a | ||
|
321a58c356 | ||
|
81884cf2ea | ||
|
d7ff634f5e | ||
|
a965da97b6 | ||
|
b99cb0248d | ||
|
a31b402b9e | ||
|
6959f14a3f | ||
|
0765cf5955 | ||
|
09ad70983a | ||
|
6e64b872cf | ||
|
d26b92500c | ||
|
fc9aa33dbb | ||
|
a286dbdf86 | ||
|
c3f2bce818 | ||
|
df6f0ce9af | ||
|
5f2998a6e2 | ||
|
fa6981faa8 | ||
|
ce80d7e883 | ||
|
1a84ca204e | ||
|
0d523e5394 | ||
|
b28f087bbe | ||
|
ea536dbf87 | ||
|
ed19424271 | ||
|
5d7a3ceff5 | ||
|
610e1dc885 | ||
|
553aa0fffa | ||
|
ebd650b62f | ||
|
66dbbf3822 | ||
|
1e27a4fcd2 | ||
|
9c20d5947d | ||
|
bb77d7171a | ||
|
10bb689d5f | ||
|
a76b4a0d3e | ||
|
97c538dc48 | ||
|
0b67446ec0 | ||
|
4b26893b21 | ||
|
99410005a6 | ||
|
4ea21e0c32 | ||
|
ebf92605ae | ||
|
606a64f49c | ||
|
f76f99b423 | ||
|
1f9388d62c | ||
|
5c7dd6df5a | ||
|
26a91416c7 | ||
|
b5f01c005f | ||
|
b1ecb75e1f | ||
|
a0ead2c48e | ||
|
eb82ae87ca | ||
|
a6caa357c8 | ||
|
da4c61653f | ||
|
eef86d6166 | ||
|
4be5182913 | ||
|
92b4b967d9 | ||
|
9a043bfca5 | ||
|
156a681ecf | ||
|
5587f10487 | ||
|
34540ed30a | ||
|
bafa5053fd | ||
|
43feb1ea7e | ||
|
2531e89457 | ||
|
06ae47f507 | ||
|
b1ea3f3ad1 | ||
|
f87ff54e3d | ||
|
a4854fcde8 | ||
|
3235f58f5a | ||
|
920f54f5d3 | ||
|
de035dca39 | ||
|
1501238730 | ||
|
108b5b4cdc | ||
|
da8cc73df6 | ||
|
e95ea48ce9 | ||
|
0aef1f95ef | ||
|
a67eab46f4 | ||
|
f603440c30 | ||
|
80b16dd17e | ||
|
ad09bd93d6 | ||
|
a29648d46c | ||
|
e7184f5f86 | ||
|
8789e557ea | ||
|
f62bfbb853 | ||
|
e06a640900 | ||
|
5a620ee26e | ||
|
170f587f28 | ||
|
7518ac00fc | ||
|
9171a1ee9e | ||
|
30fab85caa | ||
|
1354c247b4 | ||
|
9642f5f715 | ||
|
f721d0123e | ||
|
518d7fc187 | ||
|
35a1da0b08 | ||
|
91bd8969cc | ||
|
2fc9c53ff0 | ||
|
e3efe70bab | ||
|
015aec503e | ||
|
54884d6db4 | ||
|
5667e687e9 | ||
|
fbfca47ef3 | ||
|
c37c2256c6 | ||
|
c79c9c4c2f | ||
|
17792d91a1 | ||
|
d8ed15873b | ||
|
29a8e815d9 | ||
|
0ff25b6302 | ||
|
bfacf71397 | ||
|
7224165ae4 | ||
|
f59e312ee2 | ||
|
829a245858 | ||
|
75eea7b87c | ||
|
4880ca19d6 | ||
|
ad83f74532 | ||
|
3a60efa153 | ||
|
c044017ba4 | ||
|
4810c01aec | ||
|
b3f950e67a | ||
|
f43edc2736 | ||
|
ea65346f04 | ||
|
a2a80bc2e3 | ||
|
9cf5974c7b | ||
|
66ad2259a9 | ||
|
c516ab405b | ||
|
17295734fd | ||
|
3fa13828cd | ||
|
99b55129f2 | ||
|
49e6b5cf62 | ||
|
81b3ddf0e7 | ||
|
e2db02887c | ||
|
0da3881aa6 | ||
|
cd1f95c5ea | ||
|
c119821c19 | ||
|
656673ed57 | ||
|
044477ba0d | ||
|
0985340a7f | ||
|
9e58af7232 | ||
|
5b65186b4d | ||
|
874f3010b7 | ||
|
a0ec926ba2 | ||
|
abe0013914 | ||
|
8ba49c6fdf | ||
|
39b3e0ac98 | ||
|
f3b2ca4752 | ||
|
35063ac05c | ||
|
a3e1ff4bdd | ||
|
e3248b65f5 | ||
|
b12a937079 | ||
|
aa067e3d16 | ||
|
131a7e7362 | ||
|
f92679c58a | ||
|
674db9a543 | ||
|
16a104c2fc | ||
|
de43a44c1f | ||
|
d76ec0ba0d | ||
|
e81c7f2dd2 | ||
|
e954ecd024 | ||
|
dda0835189 | ||
|
1aca81b584 | ||
|
ba54bb02fa | ||
|
f459e4cbc6 | ||
|
76c143e8b0 | ||
|
f8b7d20255 | ||
|
74cd19f942 | ||
|
fd390dff6b | ||
|
6e0ec05d17 | ||
|
c1b325004a | ||
|
4499408907 | ||
|
10870ed6d4 | ||
|
2f55738f16 | ||
|
7fb1692565 | ||
|
dcbb6f5dd2 | ||
|
5c04c06d6f | ||
|
a1423e4851 | ||
|
3e9cb1d4fd | ||
|
6496172aed | ||
|
4d0beb6d47 | ||
|
c4fe38e632 | ||
|
7eb9305448 | ||
|
586fe2c690 | ||
|
a23a1acc46 | ||
|
3657c0369e | ||
|
ec99511397 | ||
|
01a9e49458 | ||
|
d889cd55db | ||
|
876fcfe008 | ||
|
286a31a7f7 | ||
|
3d1c92685b | ||
|
bbc41ab726 | ||
|
31e9e7227c | ||
|
f7a41fbc8e | ||
|
1900ffe96d | ||
|
93441ea10b | ||
|
65b0d7f2f7 | ||
|
22ea40e104 | ||
|
93c35c9423 | ||
|
c86df6a480 | ||
|
3ed7d4a72b | ||
|
b7eb2f9fa8 | ||
|
752c14d726 | ||
|
b0ddba5a61 | ||
|
e12af60579 | ||
|
0c58d238e8 | ||
|
38e91ea1f7 | ||
|
da9da7ec62 | ||
|
80cb18ca90 | ||
|
17962360e5 | ||
|
f01fb8d66c | ||
|
7af1c9eaef | ||
|
97ad84cef9 | ||
|
320755a294 | ||
|
facba2811c | ||
|
fec4a905cb | ||
|
e1282bfd59 | ||
|
9ef8e0ff4a | ||
|
57473a0aad | ||
|
a6b866cbe1 | ||
|
646eb6f266 | ||
|
95fd05b135 | ||
|
bb99f51001 | ||
|
cab532873e | ||
|
d7edde0bd8 | ||
|
a836f531f6 | ||
|
9bfc7d9860 | ||
|
b7f37fdf89 | ||
|
69acced2fb | ||
|
a90e63935e | ||
|
71f976f6a5 | ||
|
3a8aea1aa4 | ||
|
f0943f7b67 | ||
|
4fb2bee330 | ||
|
b4b913cf15 | ||
|
ce8f156f51 | ||
|
26bce33e98 | ||
|
3ed19ba9f6 | ||
|
c1198dc76a | ||
|
3edea55976 | ||
|
19feb0c48b | ||
|
6dcb145732 | ||
|
414b3636d9 | ||
|
6f52107234 | ||
|
c5b8d82234 | ||
|
526b16b931 | ||
|
8f2594602c | ||
|
4e3b055d0d | ||
|
0b6e4ac99b | ||
|
341157483b | ||
|
33e1214ef6 | ||
|
11c8bf7e6e | ||
|
bd5e3d363c | ||
|
127a28e9b0 | ||
|
1e8f1cd5c5 | ||
|
80d56c4d63 | ||
|
91c4056aec | ||
|
f560563d89 | ||
|
ede600458a | ||
|
4a9d8033fa | ||
|
6746b9af70 | ||
|
ef281e8f74 | ||
|
935b4dca0a | ||
|
15d85f4ee4 | ||
|
fb165c87c3 | ||
|
1f536ba3d9 | ||
|
dac6c5fde2 | ||
|
67cbc068c6 | ||
|
1c1558c7bf | ||
|
613938e8c9 | ||
|
f24f8e8b47 | ||
|
e673ce132e | ||
|
775e22818b | ||
|
b1b5069a23 | ||
|
f38e7ec782 | ||
|
a419e1eb7c | ||
|
52c7889731 | ||
|
de64e5e8f2 | ||
|
07484de91e | ||
|
61399cec62 | ||
|
98e5810197 | ||
|
02c251ed95 | ||
|
69cd63b57f | ||
|
06b21848ac | ||
|
40a4c69afe | ||
|
dadec484e9 | ||
|
fb1c876b52 | ||
|
285482804a | ||
|
73314447b9 | ||
|
477b9fb8e8 | ||
|
cb2c2160ae | ||
|
ccbc329cbf | ||
|
4a847a096b | ||
|
0b88b7a288 | ||
|
db985b9faf | ||
|
8132311ce6 | ||
|
b0af917a35 | ||
|
f898fd4ef0 | ||
|
42c80e6e28 | ||
|
2f8aafd85b | ||
|
95253f70ea | ||
|
4156b13c32 | ||
|
18dfc5a987 | ||
|
ae29238592 | ||
|
99445cac27 | ||
|
de5bc45300 | ||
|
95f59a67ea | ||
|
fb04a3ae20 | ||
|
12187b9da3 | ||
|
35597ce3c2 | ||
|
ea49242f24 | ||
|
f60f07ad19 | ||
|
4e8299d444 | ||
|
8de46ed462 | ||
|
cda9441c69 | ||
|
11b8821bf4 | ||
|
f7a457fb6c | ||
|
63a5bfa756 | ||
|
e828c8e6eb | ||
|
dbbbd22aef | ||
|
ad56d02eb8 | ||
|
adad4cab75 | ||
|
89a2e9fe9a | ||
|
774be9cc0d | ||
|
351a05fb0d | ||
|
a320e113ac | ||
|
1509e6e58a | ||
|
cbd842c268 | ||
|
257cde4383 | ||
|
039da8c15c | ||
|
0cbecabff2 | ||
|
63559ac8b9 | ||
|
0e2351e79e | ||
|
86610e7561 | ||
|
c895f7cd4f | ||
|
83c1753049 | ||
|
22a7668d4b | ||
|
469143c2e8 | ||
|
d4a6078392 | ||
|
0c09202950 | ||
|
5128ef22bf | ||
|
43a8f4a46e | ||
|
63493214a0 | ||
|
fa9f5fd458 | ||
|
2d4ae4d8de | ||
|
716a92944d | ||
|
2018a0bd61 | ||
|
3ecf942b44 | ||
|
33db9883c9 | ||
|
85355f8eda | ||
|
1c696bf989 | ||
|
7a8629c38d | ||
|
9b24c2f4a9 | ||
|
ff0c1b62b3 | ||
|
1e611a7ab9 | ||
|
58960071e7 | ||
|
f9b0e2f6df | ||
|
fc7bd41c10 | ||
|
8d35298500 | ||
|
197e43d78a | ||
|
0e1fb9f491 | ||
|
df1df6dc1f | ||
|
ad34cee234 | ||
|
ddf3e16ff0 | ||
|
4e2e26f033 | ||
|
f37d37e613 | ||
|
63e30f6ccb | ||
|
9c718baf61 | ||
|
e8ae29adf2 | ||
|
0c67805626 | ||
|
e91c94baca | ||
|
aa74d05b24 | ||
|
9a1f7f227d | ||
|
40779d09c0 | ||
|
351d8d94c5 | ||
|
6addd52ba4 | ||
|
ea5849855f | ||
|
c81529dc45 | ||
|
b6d7971691 | ||
|
446db2d688 | ||
|
52da072f9a | ||
|
0d2bf6d787 | ||
|
59fe4a2193 | ||
|
df6d146c84 | ||
|
eb3493f648 | ||
|
7fd4c28a5b | ||
|
d1b55aeceb | ||
|
413ec1a933 | ||
|
7ad29577f9 | ||
|
7652a5a0a0 | ||
|
105189fc57 | ||
|
e559999aa4 | ||
|
4a230d7cd5 | ||
|
9b2e5e2959 | ||
|
3c5ac1ecc5 | ||
|
03dc1bbfe1 | ||
|
80580ba54d | ||
|
6a80b2ae9e | ||
|
f14ea46f0b | ||
|
247bd9bfd9 | ||
|
fc58db5d1a | ||
|
466cd836d7 | ||
|
66a09e5068 | ||
|
b53e475f99 | ||
|
ecb6134828 | ||
|
4b2bb1168b | ||
|
4743b0b5ce | ||
|
3abf21d4ae | ||
|
6cdb16c8ab | ||
|
b7bfa2b997 | ||
|
eab2371206 | ||
|
63615ffbaf | ||
|
59fa51c5bf | ||
|
c70f023fe0 | ||
|
fb5eb1a47b | ||
|
5aa5089ae0 | ||
|
4413e6a1ee | ||
|
309a97fb5b | ||
|
1b5b2342fc | ||
|
0f23277bfc | ||
|
e595e19c0d | ||
|
79dde365f0 | ||
|
2489409abb | ||
|
cbad3b1190 | ||
|
b74b849830 | ||
|
63a331c82f | ||
|
b7313568de | ||
|
25341858d5 | ||
|
dc6ae90113 | ||
|
3c8d79975c | ||
|
7530d2e4bc | ||
|
f678434411 | ||
|
9d547a58c9 | ||
|
aa4905ab45 | ||
|
b24eb5d09c | ||
|
1bc56d0fa9 | ||
|
a77d500bfa | ||
|
8fea9ba193 | ||
|
3fdcd3aaa6 | ||
|
0629cb394c | ||
|
f58b7563e6 | ||
|
d434723244 | ||
|
fca8f71f4a | ||
|
023170548f | ||
|
d75adc3740 | ||
|
0bf3531f51 | ||
|
c9f40ea23f | ||
|
c8755839be | ||
|
c3e696db5a | ||
|
a0134005b7 | ||
|
b66d90bbcc | ||
|
41edf5b2da | ||
|
c484c88715 | ||
|
4a0fb124a7 | ||
|
ebbaa5177b | ||
|
5d1dc224ca | ||
|
3626714403 | ||
|
3884ada760 | ||
|
16788d1437 | ||
|
b1908756d4 | ||
|
ccf5271584 | ||
|
df3e6a6219 | ||
|
f43ec71d9a | ||
|
32dab88054 | ||
|
1b5868a7c5 | ||
|
72712e71eb | ||
|
ec29f791ba | ||
|
40c2e59394 | ||
|
98cbb237b5 | ||
|
826dda5a75 | ||
|
6dc5a816e5 | ||
|
1700b29f7d | ||
|
7a6966405c | ||
|
9cb576889f | ||
|
047846a552 | ||
|
99fb578db4 | ||
|
7114228fd6 | ||
|
8d4d438136 | ||
|
420ac8359c | ||
|
fe7691d786 | ||
|
db4f35b936 | ||
|
72aabf71f3 | ||
|
d145ce1876 | ||
|
ab6f02a949 | ||
|
1339414443 | ||
|
732ca53b70 | ||
|
fa749d6d2a | ||
|
6e69343bb6 | ||
|
520454affb | ||
|
734514b6d8 | ||
|
ceb252b9ad | ||
|
f121245e40 | ||
|
215a1e0240 | ||
|
8ed36d7a29 | ||
|
2b33df2955 | ||
|
5c283e4508 | ||
|
c94ee5d99a | ||
|
4a258a2427 | ||
|
330ef6f7e6 | ||
|
4a579393f3 | ||
|
1091795a3a | ||
|
b5fc206202 | ||
|
794fb6a122 | ||
|
ec7cccf573 | ||
|
e94a1cac1c | ||
|
76ff0b9c11 | ||
|
fb01c64133 | ||
|
1dbeff1908 | ||
|
4f2d316db4 | ||
|
4851fd1ab3 | ||
|
ac8ddb1166 | ||
|
b61150457c | ||
|
3e948146cd | ||
|
8492a7ee26 | ||
|
0e57baf5b9 | ||
|
05f65c326a | ||
|
491714cde6 | ||
|
34c1096307 | ||
|
ebe3ddcd21 | ||
|
ca5ac9696b | ||
|
fdfbb84d37 | ||
|
740aba90ea | ||
|
eab9ff175c | ||
|
5b295d5f6f | ||
|
0be8cdf760 | ||
|
545940f545 | ||
|
d58f39823a | ||
|
f9fb1b8a81 | ||
|
56ded0062a | ||
|
83b29d7c51 | ||
|
1ec0746263 | ||
|
568d11bddf | ||
|
97b25ac99d | ||
|
7f1d3d8a5d | ||
|
fde201fbe9 | ||
|
694a1b4ede | ||
|
20d126b39d | ||
|
8ca9c3092a | ||
|
d2771029a3 | ||
|
4128c53fcf | ||
|
a14410b28c | ||
|
d1f8520e6e | ||
|
d76746b8e4 | ||
|
89d173b460 | ||
|
81aba8b8b0 | ||
|
9e076bf194 | ||
|
74a797b410 | ||
|
f48697572d | ||
|
e61e8b7b94 | ||
|
1deab7e8d1 | ||
|
86b28b5ecf | ||
|
938e723434 | ||
|
ee2ec28cd4 | ||
|
9dc505e85b | ||
|
3df31584af | ||
|
a7e3b381cb | ||
|
70381a233b | ||
|
2966fe0df2 | ||
|
143f0b4bc5 | ||
|
24ec3b8897 | ||
|
01aa4f9d5e | ||
|
520efdcb39 | ||
|
34a99f738c | ||
|
0e0de1207f | ||
|
2fda067034 | ||
|
29177330b0 | ||
|
66a5490b54 | ||
|
469cd19ec1 | ||
|
41684a64ef | ||
|
2cd7839552 | ||
|
c3d4617612 | ||
|
158fafc4a0 | ||
|
0f59731c06 | ||
|
d0f1a67d96 | ||
|
2a1434f987 | ||
|
1ee177880d | ||
|
f6d899eb29 | ||
|
a97f25fd61 | ||
|
325a5ab08f | ||
|
c158878b66 | ||
|
0f0f9c1161 | ||
|
79612163b2 | ||
|
fab5ed165c | ||
|
4897c763bd | ||
|
17b9867bf2 | ||
|
b8f14d50f5 | ||
|
9e2f60523f | ||
|
321ff4fced | ||
|
2a31f914bb | ||
|
0b71c33d09 | ||
|
502c812d9c | ||
|
5dc3baa50c | ||
|
a9af58146b | ||
|
17edebb6b1 | ||
|
bb2855bd80 | ||
|
6cae8a7d20 | ||
|
849cd9a2a2 | ||
|
5826a8d373 | ||
|
18c5404cbc | ||
|
f16fd6462b | ||
|
67c2998b9d | ||
|
db4f6e9ce5 | ||
|
0a2364f917 | ||
|
1aebcbb27c | ||
|
5bf1dc906d | ||
|
2529da5b09 | ||
|
d1a7d31335 | ||
|
b8493baa5e | ||
|
f53a7d3a8a | ||
|
33c5037816 | ||
|
38b0702314 | ||
|
693f59d07a | ||
|
59e2e65de0 | ||
|
4180d4bd28 | ||
|
46d22d8847 | ||
|
fbbfa2833b | ||
|
e351564bec | ||
|
9f8e6a3060 | ||
|
a1c08adb3e | ||
|
5cd9114334 | ||
|
65cc6853bd | ||
|
dca51cc7de | ||
|
bc76e4a918 | ||
|
3ed0083e94 | ||
|
5cafc8cea5 | ||
|
ff5e8ee7aa | ||
|
f1bbcea64b | ||
|
8e874891c0 | ||
|
546ee354dd | ||
|
afebce145f | ||
|
d202b6b5a9 | ||
|
7543d43428 | ||
|
5737560e19 | ||
|
a278c2c32a | ||
|
13dbeb4b36 | ||
|
a3f8b9027c | ||
|
f436967779 | ||
|
f37224fc42 | ||
|
a737a21185 | ||
|
234c05a966 | ||
|
92b4795410 | ||
|
3e21e9a334 | ||
|
dc3e9178ef | ||
|
46ed1304f2 | ||
|
01cf0de974 | ||
|
abf5d16da9 | ||
|
f21199a7f3 | ||
|
cdf2873883 | ||
|
0390928fea | ||
|
efb3546675 | ||
|
169841dcc4 | ||
|
b780261153 | ||
|
c906354510 | ||
|
6487fde09d | ||
|
50f046ffc4 | ||
|
ded14ff8db | ||
|
64bbd93f54 | ||
|
9a30b69610 | ||
|
046433a947 | ||
|
42232fac84 | ||
|
245976f659 | ||
|
8d90cc234f | ||
|
5183767e43 | ||
|
ceb625dbeb | ||
|
7677d9cd7d | ||
|
92fe5e2362 |
10
.dockerignore
Normal file
@@ -0,0 +1,10 @@
|
||||
**/node_modules
|
||||
Assets/
|
||||
.git/
|
||||
_releases/
|
||||
packages/app-desktop
|
||||
packages/app-cli
|
||||
packages/app-mobile
|
||||
packages/app-clipper
|
||||
packages/generator-joplin
|
||||
packages/plugin-repo-cli
|
26
.env-sample
Normal file
@@ -0,0 +1,26 @@
|
||||
# =============================================================================
|
||||
# PRODUCTION CONFIG EXAMPLE
|
||||
# -----------------------------------------------------------------------------
|
||||
# By default it will use SQLite, but that's mostly to test and evaluate the
|
||||
# server. So you'll want to specify db connection settings to use Postgres.
|
||||
# =============================================================================
|
||||
#
|
||||
# APP_BASE_URL=https://example.com/joplin
|
||||
# APP_PORT=22300
|
||||
#
|
||||
# DB_CLIENT=pg
|
||||
# POSTGRES_PASSWORD=joplin
|
||||
# POSTGRES_DATABASE=joplin
|
||||
# POSTGRES_USER=joplin
|
||||
# POSTGRES_PORT=5432
|
||||
# POSTGRES_HOST=localhost
|
||||
|
||||
# =============================================================================
|
||||
# DEV CONFIG EXAMPLE
|
||||
# -----------------------------------------------------------------------------
|
||||
# Example of local config, for development. In dev mode, you would usually use
|
||||
# SQLite so database settings are not needed.
|
||||
# =============================================================================
|
||||
#
|
||||
# APP_BASE_URL=http://localhost:22300
|
||||
# APP_PORT=22300
|
753
.eslintignore
17
.eslintrc.js
@@ -1,4 +1,5 @@
|
||||
module.exports = {
|
||||
'root': true,
|
||||
'env': {
|
||||
'browser': true,
|
||||
'es6': true,
|
||||
@@ -34,6 +35,12 @@ module.exports = {
|
||||
'chrome': 'readonly',
|
||||
'browser': 'readonly',
|
||||
|
||||
// Server admin UI global variables
|
||||
'onDocumentReady': 'readonly',
|
||||
'setupPasswordStrengthHandler': 'readonly',
|
||||
'$': 'readonly',
|
||||
'zxcvbn': 'readonly',
|
||||
|
||||
'tinymce': 'readonly',
|
||||
},
|
||||
'parserOptions': {
|
||||
@@ -61,13 +68,18 @@ module.exports = {
|
||||
'no-var': ['error'],
|
||||
'no-new-func': ['error'],
|
||||
'import/prefer-default-export': ['error'],
|
||||
'import/first': ['error'],
|
||||
|
||||
// This rule should not be enabled since it matters in what order
|
||||
// imports are done, in particular in relation to the shim.setReact
|
||||
// call, which should be done first, but this rule might move it down.
|
||||
// 'import/first': ['error'],
|
||||
|
||||
'no-array-constructor': ['error'],
|
||||
'radix': ['error'],
|
||||
|
||||
// Warn only for now because fixing everything would take too much
|
||||
// refactoring, but new code should try to stick to it.
|
||||
'complexity': ['warn', { max: 10 }],
|
||||
// 'complexity': ['warn', { max: 10 }],
|
||||
|
||||
// Checks rules of Hooks
|
||||
'react-hooks/rules-of-hooks': 'error',
|
||||
@@ -116,6 +128,7 @@ module.exports = {
|
||||
'space-before-blocks': 'error',
|
||||
'spaced-comment': ['error', 'always'],
|
||||
'keyword-spacing': ['error', { 'before': true, 'after': true }],
|
||||
'no-multi-spaces': ['error'],
|
||||
},
|
||||
'plugins': [
|
||||
'react',
|
||||
|
141
.github/scripts/run_ci.sh
vendored
Executable file
@@ -0,0 +1,141 @@
|
||||
#!/bin/bash
|
||||
|
||||
# =============================================================================
|
||||
# Setup environment variables
|
||||
# =============================================================================
|
||||
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
||||
ROOT_DIR="$SCRIPT_DIR/../.."
|
||||
|
||||
IS_PULL_REQUEST=0
|
||||
IS_DEV_BRANCH=0
|
||||
IS_LINUX=0
|
||||
IS_MACOS=0
|
||||
|
||||
if [ "$GITHUB_EVENT_NAME" == "pull_request" ]; then
|
||||
IS_PULL_REQUEST=1
|
||||
fi
|
||||
|
||||
if [ "$GITHUB_REF" == "refs/heads/dev" ]; then
|
||||
IS_DEV_BRANCH=1
|
||||
fi
|
||||
|
||||
if [ "$RUNNER_OS" == "Linux" ]; then
|
||||
IS_LINUX=1
|
||||
IS_MACOS=0
|
||||
else
|
||||
IS_LINUX=0
|
||||
IS_MACOS=1
|
||||
fi
|
||||
|
||||
# =============================================================================
|
||||
# Print environment
|
||||
# =============================================================================
|
||||
|
||||
echo "GITHUB_WORKFLOW=$GITHUB_WORKFLOW"
|
||||
echo "GITHUB_EVENT_NAME=$GITHUB_EVENT_NAME"
|
||||
echo "GITHUB_REF=$GITHUB_REF"
|
||||
echo "RUNNER_OS=$RUNNER_OS"
|
||||
echo "GIT_TAG_NAME=$GIT_TAG_NAME"
|
||||
|
||||
echo "IS_CONTINUOUS_INTEGRATION=$IS_CONTINUOUS_INTEGRATION"
|
||||
echo "IS_PULL_REQUEST=$IS_PULL_REQUEST"
|
||||
echo "IS_DEV_BRANCH=$IS_DEV_BRANCH"
|
||||
echo "IS_LINUX=$IS_LINUX"
|
||||
echo "IS_MACOS=$IS_MACOS"
|
||||
|
||||
echo "Node $( node -v )"
|
||||
echo "Npm $( npm -v )"
|
||||
|
||||
# =============================================================================
|
||||
# Install packages
|
||||
# =============================================================================
|
||||
|
||||
cd "$ROOT_DIR"
|
||||
npm install
|
||||
|
||||
# =============================================================================
|
||||
# Run test units. Only do it for pull requests and dev branch because we don't
|
||||
# want it to randomly fail when trying to create a desktop release.
|
||||
# =============================================================================
|
||||
|
||||
if [ "$IS_PULL_REQUEST" == "1" ] || [ "$IS_DEV_BRANCH" = "1" ]; then
|
||||
echo "Step: Running tests..."
|
||||
|
||||
npm run test-ci
|
||||
testResult=$?
|
||||
if [ $testResult -ne 0 ]; then
|
||||
exit $testResult
|
||||
fi
|
||||
fi
|
||||
|
||||
# =============================================================================
|
||||
# Run linter for pull requests only. We also don't want this to make the desktop
|
||||
# release randomly fail.
|
||||
# =============================================================================
|
||||
|
||||
if [ "$IS_PULL_REQUEST" == "1" ]; then
|
||||
echo "Step: Running linter..."
|
||||
|
||||
npm run linter-ci ./
|
||||
testResult=$?
|
||||
if [ $testResult -ne 0 ]; then
|
||||
exit $testResult
|
||||
fi
|
||||
fi
|
||||
|
||||
# =============================================================================
|
||||
# Validate translations - this is needed as some users manually edit .po files
|
||||
# (and often make mistakes) instead of using a proper tool like poedit. Doing it
|
||||
# for Linux only is sufficient.
|
||||
# =============================================================================
|
||||
|
||||
if [ "$IS_PULL_REQUEST" == "1" ]; then
|
||||
if [ "$IS_LINUX" == "1" ]; then
|
||||
echo "Step: Validating translations..."
|
||||
|
||||
node packages/tools/validate-translation.js
|
||||
testResult=$?
|
||||
if [ $testResult -ne 0 ]; then
|
||||
exit $testResult
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# =============================================================================
|
||||
# Find out if we should run the build or not. Electron-builder gets stuck when
|
||||
# building PRs so we disable it in this case. The Linux build should provide
|
||||
# enough info if the app builds or not.
|
||||
# https://github.com/electron-userland/electron-builder/issues/4263
|
||||
# =============================================================================
|
||||
|
||||
if [ "$IS_PULL_REQUEST" == "1" ]; then
|
||||
if [ "$IS_MACOS" == "1" ]; then
|
||||
echo "Step: Not building Electron app"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# =============================================================================
|
||||
# Prepare the Electron app and build it
|
||||
#
|
||||
# If the current tag is a desktop release tag (starts with "v", such as
|
||||
# "v1.4.7"), we build and publish to github
|
||||
#
|
||||
# Otherwise we only build but don't publish to GitHub. It helps finding
|
||||
# out any issue in pull requests and dev branch.
|
||||
# =============================================================================
|
||||
|
||||
cd "$ROOT_DIR/packages/app-desktop"
|
||||
|
||||
if [[ $GIT_TAG_NAME = v* ]]; then
|
||||
echo "Step: Building and publishing desktop application..."
|
||||
USE_HARD_LINKS=false npm run dist
|
||||
elif [[ $GIT_TAG_NAME = server-v* ]] && [[ $IS_LINUX = 1 ]]; then
|
||||
echo "Step: Building Docker Image..."
|
||||
cd "$ROOT_DIR"
|
||||
npm run buildServerDocker -- --tag-name $GIT_TAG_NAME
|
||||
else
|
||||
echo "Step: Building but *not* publishing desktop application..."
|
||||
USE_HARD_LINKS=false npm run dist -- --publish=never
|
||||
fi
|
2
.github/stale.yml
vendored
@@ -9,7 +9,9 @@ exemptLabels:
|
||||
- "upstream"
|
||||
- "backlog"
|
||||
- "high"
|
||||
- "medium"
|
||||
- "spec"
|
||||
- "cannot reproduce"
|
||||
# Label to use when marking an issue as stale
|
||||
staleLabel: stale
|
||||
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||
|
76
.github/workflows/github-actions-main.yml
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
name: Joplin Continuous Integration
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
Main:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-latest, ubuntu-latest, windows-2016]
|
||||
steps:
|
||||
|
||||
# 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 -
|
||||
# https://github.com/atom/node-keytar
|
||||
|
||||
- name: Install Linux dependencies
|
||||
if: runner.os == 'Linux'
|
||||
run: |
|
||||
sudo apt-get update || true
|
||||
sudo apt-get install -y gettext
|
||||
sudo apt-get install -y libsecret-1-dev
|
||||
|
||||
- name: Install Docker Engine
|
||||
if: runner.os == 'Linux' && startsWith(github.ref, 'refs/tags/server-v')
|
||||
run: |
|
||||
sudo apt-get install -y apt-transport-https
|
||||
sudo apt-get install -y ca-certificates
|
||||
sudo apt-get install -y curl
|
||||
sudo apt-get install -y gnupg
|
||||
sudo apt-get install -y lsb-release
|
||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
||||
echo \
|
||||
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
|
||||
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
sudo apt-get update || true
|
||||
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
- uses: olegtarasov/get-tag@v2.1
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: '12'
|
||||
|
||||
# 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
|
||||
if: runner.os == 'Linux' && startsWith(github.ref, 'refs/tags/server-v')
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Run tests, build and publish Linux and macOS apps
|
||||
if: runner.os == 'Linux' || runner.os == 'macOs'
|
||||
env:
|
||||
APPLE_ASC_PROVIDER: ${{ secrets.APPLE_ASC_PROVIDER }}
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
CSC_KEY_PASSWORD: ${{ secrets.APPLE_CSC_KEY_PASSWORD }}
|
||||
CSC_LINK: ${{ secrets.APPLE_CSC_LINK }}
|
||||
GH_TOKEN: ${{ secrets.GH_TOKEN }}
|
||||
IS_CONTINUOUS_INTEGRATION: 1
|
||||
run: |
|
||||
"${GITHUB_WORKSPACE}/.github/scripts/run_ci.sh"
|
||||
|
||||
- name: Build and publish Windows app
|
||||
if: runner.os == 'Windows' && startsWith(github.ref, 'refs/tags/v')
|
||||
env:
|
||||
CSC_KEY_PASSWORD: ${{ secrets.WINDOWS_CSC_KEY_PASSWORD }}
|
||||
CSC_LINK: ${{ secrets.WINDOWS_CSC_LINK }}
|
||||
GH_TOKEN: ${{ secrets.GH_TOKEN }}
|
||||
IS_CONTINUOUS_INTEGRATION: 1
|
||||
run: |
|
||||
npm install
|
||||
cd packages/app-desktop
|
||||
npm run dist
|
750
.gitignore
vendored
138
.travis.yml
@@ -1,138 +0,0 @@
|
||||
# Only build tags (Doesn't work - doesn't build anything)
|
||||
if: tag IS present OR type = pull_request OR branch = dev
|
||||
|
||||
rvm: 2.3.3
|
||||
|
||||
# It's important to only build production branches otherwise Electron Builder
|
||||
# might take assets from dev branches and overwrite those of production.
|
||||
# https://docs.travis-ci.com/user/customizing-the-build/#Building-Specific-Branches
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- dev
|
||||
- /^v\d+\.\d+(\.\d+)?(-\S*)?$/
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- os: osx
|
||||
osx_image: xcode12
|
||||
language: node_js
|
||||
node_js: "12"
|
||||
cache:
|
||||
npm: false
|
||||
# Cache was disabled because when changing from node_js 10 to node_js 12
|
||||
# it was still using build files from Node 10 when building SQLite which
|
||||
# was making it fail. Might be ok to re-enable later on, although it doesn't
|
||||
# make build that much faster.
|
||||
#
|
||||
# env:
|
||||
# - ELECTRON_CACHE=$HOME/.cache/electron
|
||||
# - ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder
|
||||
|
||||
- os: linux
|
||||
sudo: required
|
||||
dist: trusty
|
||||
language: node_js
|
||||
node_js: "12"
|
||||
cache:
|
||||
npm: false
|
||||
# env:
|
||||
# - ELECTRON_CACHE=$HOME/.cache/electron
|
||||
# - ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder
|
||||
|
||||
# cache:
|
||||
# directories:
|
||||
# - node_modules
|
||||
# - $HOME/.cache/electron
|
||||
# - $HOME/.cache/electron-builder
|
||||
|
||||
before_install:
|
||||
# HOMEBREW_NO_AUTO_UPDATE needed so that Homebrew doesn't upgrade to the next
|
||||
# version, which requires Ruby 2.3, which is not available on the Travis VM.
|
||||
|
||||
# Silence apt-get update errors (for example when a module doesn't exist) since
|
||||
# otherwise it will make the whole build fails, even though all we need is yarn.
|
||||
|
||||
# libsecret-1-dev is required for keytar - https://github.com/atom/node-keytar
|
||||
- |
|
||||
if [ "$TRAVIS_OS_NAME" == "osx" ]; then
|
||||
HOMEBREW_NO_AUTO_UPDATE=1 brew install yarn
|
||||
else
|
||||
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
|
||||
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
|
||||
sudo apt-get update || true
|
||||
sudo apt-get install -y yarn
|
||||
sudo apt-get install -y gettext
|
||||
sudo apt-get install -y libsecret-1-dev
|
||||
fi
|
||||
|
||||
script:
|
||||
- |
|
||||
# Prints some env variables
|
||||
echo "TRAVIS_OS_NAME=$TRAVIS_OS_NAME"
|
||||
echo "TRAVIS_BRANCH=$TRAVIS_BRANCH"
|
||||
echo "TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST"
|
||||
echo "TRAVIS_TAG=$TRAVIS_TAG"
|
||||
|
||||
# Install tools
|
||||
npm install
|
||||
|
||||
# Run test units.
|
||||
# Only do it for pull requests because Travis randomly fails to run them
|
||||
# and that would break the desktop release.
|
||||
if [ "$TRAVIS_PULL_REQUEST" != "false" ] || [ "$TRAVIS_BRANCH" = "dev" ]; then
|
||||
npm run test-ci
|
||||
testResult=$?
|
||||
if [ $testResult -ne 0 ]; then
|
||||
exit $testResult
|
||||
fi
|
||||
fi
|
||||
|
||||
# Run linter for pull requests only - this is so that
|
||||
# bypassing eslint is allowed for urgent fixes.
|
||||
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
|
||||
npm run linter-ci ./
|
||||
testResult=$?
|
||||
if [ $testResult -ne 0 ]; then
|
||||
exit $testResult
|
||||
fi
|
||||
fi
|
||||
|
||||
# Validate translations - this is needed as some users manually
|
||||
# edit .po files (and often make mistakes) instead of using a proper
|
||||
# tool like poedit. Doing it for Linux only is sufficient.
|
||||
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
|
||||
if [ "$TRAVIS_OS_NAME" != "osx" ]; then
|
||||
node packages/tools/validate-translation.js
|
||||
testResult=$?
|
||||
if [ $testResult -ne 0 ]; then
|
||||
exit $testResult
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Find out if we should run the build or not. Electron-builder gets stuck when
|
||||
# building PRs so we disable it in this case. The Linux build should provide
|
||||
# enough info if the app builds or not.
|
||||
# https://github.com/electron-userland/electron-builder/issues/4263
|
||||
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
|
||||
if [ "$TRAVIS_OS_NAME" == "osx" ]; then
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# Prepare the Electron app and build it
|
||||
#
|
||||
# If the current tag is a desktop release tag (starts with "v", such as
|
||||
# "v1.4.7"), we build and publish to github
|
||||
#
|
||||
# Otherwise we only build but don't publish to GitHub. It helps finding
|
||||
# out any issue in pull requests and dev branch.
|
||||
|
||||
cd packages/app-desktop
|
||||
|
||||
if [[ $TRAVIS_TAG = v* ]]; then
|
||||
USE_HARD_LINKS=false npm run dist
|
||||
else
|
||||
USE_HARD_LINKS=false npm run dist -- --publish=never
|
||||
fi
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 113 KiB |
3
Assets/LICENSE
Normal file
@@ -0,0 +1,3 @@
|
||||
All assets in this directory including, but not limited to, logos, icons
|
||||
and images are copyright (c) Laurent Cozic, all rights reserved.
|
||||
They may not be used without a permission.
|
@@ -22,7 +22,8 @@ module.exports = {
|
||||
|
||||
return `joplin.${camelCaseToDots(p)
|
||||
.replace(/menu\.items/, 'menuItems')
|
||||
.replace(/toolbar\.buttons/, 'toolbarButtons')}`;
|
||||
.replace(/toolbar\.buttons/, 'toolbarButtons')
|
||||
.replace(/content\.scripts/, 'contentScripts')}`;
|
||||
},
|
||||
|
||||
jpIsAllowedGroup: function(name) {
|
||||
|
@@ -48,7 +48,7 @@ const listState = function (editor: Editor, listName, options:any = {}) {
|
||||
// dependent on how the checkbox is styled, so if the style is changed, this might need
|
||||
// to be updated too.
|
||||
// For the styling, see:
|
||||
// packages/app-mobile/lib/joplin-renderer/MdToHtml/rules/checkbox.ts
|
||||
// packages/renderer/MdToHtml/rules/checkbox.ts
|
||||
//
|
||||
// The previous solution was to use "pointer-event: none", which mostly work, however
|
||||
// it means that links are no longer clickable when they are within the checkbox label.
|
||||
|
7
Assets/WebsiteAssets/css/bootstrap5.0.2.min.css
vendored
Normal file
1145
Assets/WebsiteAssets/css/site.css
Normal file
11
Assets/WebsiteAssets/images/apple-icon.svg
Normal file
@@ -0,0 +1,11 @@
|
||||
<svg width="33" height="33" viewBox="0 0 33 33" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0)">
|
||||
<path d="M22.6857 0C20.9264 0.121687 18.8701 1.24781 17.6718 2.71423C16.5787 4.04454 15.6795 6.0204 16.0301 7.94058C17.9523 8.00039 19.9385 6.84746 21.0894 5.35628C22.166 3.96823 22.9807 2.00474 22.6857 0Z" fill="white"/>
|
||||
<path d="M29.6386 11.2903C27.9494 9.17211 25.5755 7.94287 23.3335 7.94287C20.3739 7.94287 19.1219 9.3598 17.0656 9.3598C14.9454 9.3598 13.3346 7.947 10.7751 7.947C8.26088 7.947 5.58377 9.48355 3.88634 12.1112C1.50004 15.8113 1.90842 22.768 5.77558 28.6936C7.15951 30.8138 9.0075 33.198 11.4247 33.2187C13.5759 33.2393 14.1823 31.8389 17.0966 31.8244C20.0109 31.8079 20.5636 33.2372 22.7107 33.2145C25.13 33.196 27.079 30.5539 28.4629 28.4337C29.455 26.9136 29.8242 26.1485 30.5935 24.4325C24.998 22.3019 24.1008 14.3448 29.6386 11.2903Z" fill="white"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0">
|
||||
<rect width="33" height="33" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 1015 B |
1
Assets/WebsiteAssets/images/badges/Donate-IBAN.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="86" height="20" role="img" aria-label="Donate: IBAN"><title>Donate: IBAN</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="86" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="49" height="20" fill="#555"/><rect x="49" width="37" height="20" fill="#007ec6"/><rect width="86" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="255" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="390">Donate</text><text x="255" y="140" transform="scale(.1)" fill="#fff" textLength="390">Donate</text><text aria-hidden="true" x="665" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="270">IBAN</text><text x="665" y="140" transform="scale(.1)" fill="#fff" textLength="270">IBAN</text></g></svg>
|
After Width: | Height: | Size: 1.1 KiB |
BIN
Assets/WebsiteAssets/images/basic-icon.png
Normal file
After Width: | Height: | Size: 6.1 KiB |
BIN
Assets/WebsiteAssets/images/business-icon.png
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
Assets/WebsiteAssets/images/business-top-left-bg.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
Assets/WebsiteAssets/images/business-top-right-bg.png
Normal file
After Width: | Height: | Size: 71 KiB |
BIN
Assets/WebsiteAssets/images/carousel-btn.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
Assets/WebsiteAssets/images/check-icon.png
Normal file
After Width: | Height: | Size: 339 B |
BIN
Assets/WebsiteAssets/images/check-white-icon.png
Normal file
After Width: | Height: | Size: 215 B |
BIN
Assets/WebsiteAssets/images/close-icon.png
Normal file
After Width: | Height: | Size: 310 B |
BIN
Assets/WebsiteAssets/images/customise-it-bg.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
Assets/WebsiteAssets/images/customise-it-img.png
Normal file
After Width: | Height: | Size: 44 KiB |
4
Assets/WebsiteAssets/images/download-icon.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10.9997 13.75L14.6663 10.0833M10.9997 13.75V2.75V13.75ZM10.9997 13.75L7.33301 10.0833L10.9997 13.75Z" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1.83301 15.5833L2.40226 17.8612C2.5014 18.2578 2.73026 18.6099 3.05248 18.8615C3.37469 19.1131 3.77177 19.2499 4.18059 19.2499H17.8188C18.2276 19.2499 18.6247 19.1131 18.9469 18.8615C19.2691 18.6099 19.498 18.2578 19.5971 17.8612L20.1663 15.5833" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
After Width: | Height: | Size: 638 B |
BIN
Assets/WebsiteAssets/images/favicon.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
Assets/WebsiteAssets/images/frame-blue-lg.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
Assets/WebsiteAssets/images/frame-blue.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
Assets/WebsiteAssets/images/frame-yellow-lg.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
Assets/WebsiteAssets/images/frame-yellow.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
Assets/WebsiteAssets/images/hear-from-client-bg-mobile.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
Assets/WebsiteAssets/images/home-top-img.png
Normal file
After Width: | Height: | Size: 1.6 MiB |
BIN
Assets/WebsiteAssets/images/in-the-press-img-left.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
Assets/WebsiteAssets/images/in-the-press-img-right.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
Assets/WebsiteAssets/images/in-the-press-img.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
Assets/WebsiteAssets/images/in-the-press-its-foss.png
Normal file
After Width: | Height: | Size: 69 KiB |
BIN
Assets/WebsiteAssets/images/in-the-press-life-hacker.png
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
Assets/WebsiteAssets/images/in-the-press-life-pcmag.png
Normal file
After Width: | Height: | Size: 65 KiB |
BIN
Assets/WebsiteAssets/images/in-the-web-bg.png
Normal file
After Width: | Height: | Size: 54 KiB |
10
Assets/WebsiteAssets/images/linux-icon.svg
Normal file
After Width: | Height: | Size: 6.7 KiB |
15
Assets/WebsiteAssets/images/logo-text-blue.svg
Normal file
After Width: | Height: | Size: 149 KiB |
15
Assets/WebsiteAssets/images/logo-text.svg
Normal file
After Width: | Height: | Size: 149 KiB |
6
Assets/WebsiteAssets/images/microsoft-icon.svg
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg width="33" height="33" viewBox="0 0 33 33" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="17.5312" y="17.5312" width="10.3125" height="10.3125" fill="white"/>
|
||||
<rect x="5.15625" y="17.5312" width="10.3125" height="10.3125" fill="white"/>
|
||||
<rect x="17.5312" y="5.15625" width="10.3125" height="10.3125" fill="white"/>
|
||||
<rect x="5.15625" y="5.15625" width="10.3125" height="10.3125" fill="white"/>
|
||||
</svg>
|
After Width: | Height: | Size: 421 B |
BIN
Assets/WebsiteAssets/images/mobile-menu-black-open-icon.png
Normal file
After Width: | Height: | Size: 177 B |
BIN
Assets/WebsiteAssets/images/mobile-menu-open-icon.png
Normal file
After Width: | Height: | Size: 153 B |
BIN
Assets/WebsiteAssets/images/multimedia-note-bg.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
Assets/WebsiteAssets/images/multimedia-notes-img.png
Normal file
After Width: | Height: | Size: 743 KiB |
BIN
Assets/WebsiteAssets/images/price-bg-left.png
Normal file
After Width: | Height: | Size: 84 KiB |
BIN
Assets/WebsiteAssets/images/price-bg-right.png
Normal file
After Width: | Height: | Size: 194 KiB |
BIN
Assets/WebsiteAssets/images/pro-icon.png
Normal file
After Width: | Height: | Size: 962 B |
BIN
Assets/WebsiteAssets/images/profile-black-icon.png
Normal file
After Width: | Height: | Size: 450 B |
BIN
Assets/WebsiteAssets/images/profile-blue.png
Normal file
After Width: | Height: | Size: 434 B |
BIN
Assets/WebsiteAssets/images/profile-icon.png
Normal file
After Width: | Height: | Size: 271 B |
BIN
Assets/WebsiteAssets/images/save-web-bg-mobile.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
Assets/WebsiteAssets/images/save-web-bg.png
Normal file
After Width: | Height: | Size: 146 KiB |
BIN
Assets/WebsiteAssets/images/save-web-bg2.png
Normal file
After Width: | Height: | Size: 64 KiB |
BIN
Assets/WebsiteAssets/images/save-web-img.png
Normal file
After Width: | Height: | Size: 602 KiB |
BIN
Assets/WebsiteAssets/images/sponsors/Tranio.png
Normal file
After Width: | Height: | Size: 72 KiB |
BIN
Assets/WebsiteAssets/images/top-bg-mobile.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
Assets/WebsiteAssets/images/top-left-bg.png
Normal file
After Width: | Height: | Size: 92 KiB |
BIN
Assets/WebsiteAssets/images/top-right-bg.png
Normal file
After Width: | Height: | Size: 73 KiB |
BIN
Assets/WebsiteAssets/images/transparent-bg.png
Normal file
After Width: | Height: | Size: 188 B |
BIN
Assets/WebsiteAssets/images/uncheck-icon.png
Normal file
After Width: | Height: | Size: 268 B |
BIN
Assets/WebsiteAssets/images/work-together-bg.png
Normal file
After Width: | Height: | Size: 127 KiB |
BIN
Assets/WebsiteAssets/images/work-together-img.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
Assets/WebsiteAssets/images/your-data-bg-mobile.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
Assets/WebsiteAssets/images/your-data-img.png
Normal file
After Width: | Height: | Size: 53 KiB |
BIN
Assets/WebsiteAssets/images/your-note-bg-mobile.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
Assets/WebsiteAssets/images/your-note-bg.png
Normal file
After Width: | Height: | Size: 71 KiB |
5016
Assets/WebsiteAssets/js/bootstrap5.0.2.js
vendored
Normal file
7
Assets/WebsiteAssets/js/bootstrap5.0.2.min.js
vendored
Normal file
2
Assets/WebsiteAssets/js/jquery-3.6.0.min.js
vendored
Normal file
77
Assets/WebsiteAssets/js/script.js
Normal file
@@ -0,0 +1,77 @@
|
||||
function getOs() {
|
||||
if (navigator.appVersion.indexOf("Win")!=-1) return "windows";
|
||||
if (navigator.appVersion.indexOf("Mac")!=-1) return "macOs";
|
||||
if (navigator.appVersion.indexOf("X11")!=-1) return "linux";
|
||||
if (navigator.appVersion.indexOf("Linux")!=-1) return "linux";
|
||||
return null;
|
||||
}
|
||||
|
||||
function getMobileOs() {
|
||||
var userAgent = navigator.userAgent || navigator.vendor || window.opera;
|
||||
|
||||
// Windows Phone must come first because its UA also contains "Android"
|
||||
if (/windows phone/i.test(userAgent)) {
|
||||
return "windowsPhone";
|
||||
}
|
||||
|
||||
if (/android/i.test(userAgent)) {
|
||||
return "android";
|
||||
}
|
||||
|
||||
// iOS detection from: http://stackoverflow.com/a/9039885/177710
|
||||
if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {
|
||||
return "ios";
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
function setupMobileMenu() {
|
||||
$("#open-menu-mobile").click(function () {
|
||||
$("#menu-mobile").animate({ "margin-right": "0px" }, 300);
|
||||
});
|
||||
|
||||
$("#close-menu-mobile").click(function () {
|
||||
$("#menu-mobile").animate({ "margin-right": "-300px" }, 300);
|
||||
});
|
||||
}
|
||||
|
||||
function setupDownloadPage() {
|
||||
if (!$('.page-download').length) return;
|
||||
|
||||
const downloadLinks = {};
|
||||
|
||||
$('.page-download .get-it-desktop a').each(function() {
|
||||
const href = $(this).attr('href');
|
||||
|
||||
if (href.indexOf('-Setup') > 0) downloadLinks['windows'] = href;
|
||||
if (href.indexOf('.dmg') > 0) downloadLinks['macOs'] = href;
|
||||
if (href.indexOf('.AppImage') > 0) downloadLinks['linux'] = href;
|
||||
});
|
||||
|
||||
$('.page-download .get-it-desktop').hide();
|
||||
|
||||
$('.page-download .download-click-here').click((event) => {
|
||||
event.preventDefault();
|
||||
$('.page-download .get-it-desktop').show(500);
|
||||
});
|
||||
|
||||
const mobileOs = getMobileOs();
|
||||
|
||||
if (mobileOs) {
|
||||
$('.page-download .intro').hide();
|
||||
} else {
|
||||
const os = getOs();
|
||||
if (!os || !downloadLinks[os]) {
|
||||
$('.page-download .get-it-desktop').show();
|
||||
} else {
|
||||
window.location = downloadLinks[os];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$(function () {
|
||||
setupMobileMenu();
|
||||
setupDownloadPage();
|
||||
});
|
408
Assets/WebsiteAssets/templates/front.mustache
Normal file
@@ -0,0 +1,408 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta
|
||||
charset="utf-8"
|
||||
http-equiv="X-UA-Compatible"
|
||||
content="IE=edge,chrome=1"
|
||||
/>
|
||||
<link rel="icon" href="{{imageBaseUrl}}/favicon.png" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
<meta name="description" content="Jopli website" />
|
||||
<link rel="stylesheet" href="{{cssBaseUrl}}/fontawesome-all.min.css?t={{buildTime}}">
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="{{cssBaseUrl}}/bootstrap5.0.2.min.css"
|
||||
as="style"
|
||||
/>
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&display=swap"
|
||||
rel="stylesheet"
|
||||
as="style"
|
||||
media="all"
|
||||
onload="this.media='all'; this.onload = null"
|
||||
/>
|
||||
<link rel="stylesheet" href="{{cssBaseUrl}}/site.css?t={{buildTime}}" as="style" />
|
||||
<title>Joplin</title>
|
||||
</head>
|
||||
<body class="front-page website-env-{{env}}">
|
||||
<div class="container-fluid" id="main-container">
|
||||
|
||||
{{#navbar}}
|
||||
{{> navbar}}
|
||||
{{/navbar}}
|
||||
|
||||
<div class="blue-bg" id="top-section">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="alert alert-danger alert-env-dev" role="alert">
|
||||
Running in {{env}} mode!
|
||||
</div>
|
||||
|
||||
<h1 class="text-center">
|
||||
Free your <span class="frame-bg frame-bg-blue">notes</span>
|
||||
</h1>
|
||||
<p 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>
|
||||
{{#showJoplinCloudLinks}}
|
||||
<a href="{{baseUrl}}/plans/" class="button-link btn-trans plans-button">Sign up with Joplin Cloud</a>
|
||||
{{/showJoplinCloudLinks}}
|
||||
</p>
|
||||
<img
|
||||
src="{{imageBaseUrl}}/home-top-img.png"
|
||||
alt=""
|
||||
class="img-fluid img-center"
|
||||
id="top-section-img"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="multimedia-notes-section">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-5 col-xxl-6">
|
||||
<div class="ml-30 ml-mobile-0">
|
||||
<h2 id="multimedia-title">
|
||||
Multimedia <span class="frame-bg frame-bg-yellow">notes</span>
|
||||
</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>
|
||||
<br />
|
||||
<p>
|
||||
<a href="{{baseUrl}}/download/" class="button-link btn-blue">Download the app</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-md-7 col-xxl-6">
|
||||
<br class="d-block d-lg-none" />
|
||||
<br class="d-block d-lg-none" />
|
||||
<img
|
||||
src="{{imageBaseUrl}}/multimedia-notes-img.png"
|
||||
alt=""
|
||||
class="img-fluid"
|
||||
id="multimedia-notes-section-img"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#showJoplinCloudLinks}}
|
||||
<div id="work-together-section" class="gray-bg">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<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 together</h2>
|
||||
<p>
|
||||
With Joplin Cloud, share your notes with your friends, family
|
||||
or colleagues and collaborate on them.
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<a 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" />
|
||||
<div class="text-center">
|
||||
<img
|
||||
src="{{imageBaseUrl}}/work-together-img.png"
|
||||
alt=""
|
||||
class="img-fluid d-block-inline d-md-none"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/showJoplinCloudLinks}}
|
||||
|
||||
<div id="save-web-section" class="blue-bg">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-6">
|
||||
<div class="ml-30 ml-mobile-0">
|
||||
<h2 id="save-web-title">
|
||||
Save web pages <br /><span class="frame-bg frame-bg-blue"
|
||||
>as notes</span
|
||||
>
|
||||
</h2>
|
||||
<p>
|
||||
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>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-md-6">
|
||||
<br class="d-block d-md-none" />
|
||||
<br class="d-block d-md-none" />
|
||||
<img
|
||||
src="{{imageBaseUrl}}/save-web-img.png"
|
||||
alt=""
|
||||
class="img-fluid"
|
||||
id="save-web-img"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="customise-it-section">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="d-none d-md-block col-md-6">
|
||||
<img
|
||||
src="{{imageBaseUrl}}/customise-it-img.png"
|
||||
alt=""
|
||||
class="img-fluid"
|
||||
/>
|
||||
</div>
|
||||
<div class="col-12 col-md-6">
|
||||
<div class="ml-30 ml-mobile-0">
|
||||
<h2 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>
|
||||
<br />
|
||||
<p>
|
||||
<a href="{{baseUrl}}/help/#plugins" class="button-link btn-blue">Find out more</a>
|
||||
</p>
|
||||
|
||||
<br class="d-block d-lg-none" />
|
||||
<br class="d-block d-lg-none" />
|
||||
<img
|
||||
src="{{imageBaseUrl}}/customise-it-img.png"
|
||||
alt=""
|
||||
class="img-fluid d-block d-md-none"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="your-note-section" class="blue-bg">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<h2 class="text-center">
|
||||
<span class="frame-bg frame-bg-blue-lg">Your notes,</span> everywhere you are.
|
||||
</h2>
|
||||
<p 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>
|
||||
</p>
|
||||
<br />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="your-data-section" class="gray-bg">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-6">
|
||||
<br class="d-block d-md-none" />
|
||||
<div class="ml-30 ml-mobile-0">
|
||||
<h2>100% your data</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.
|
||||
</p>
|
||||
<br />
|
||||
<p>
|
||||
<a href="{{baseUrl}}/e2ee/" class="button-link btn-blue">More about E2EE</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-md-6">
|
||||
<br class="d-block d-md-none" />
|
||||
<br class="d-block d-md-none" />
|
||||
<br class="d-block d-md-none" />
|
||||
<img
|
||||
src="{{imageBaseUrl}}/your-data-img.png"
|
||||
alt=""
|
||||
class="img-fluid"
|
||||
/>
|
||||
</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">
|
||||
In the <span class="frame-bg frame-bg-yellow">Press</span>
|
||||
</h2>
|
||||
<br />
|
||||
</div>
|
||||
<div class="d-none d-md-block col-3">
|
||||
<img
|
||||
src="{{imageBaseUrl}}/in-the-press-img-left.png"
|
||||
alt=""
|
||||
class="img-fluid d-none d-md-block"
|
||||
/>
|
||||
</div>
|
||||
<div class="d-none d-md-block col-6">
|
||||
<div
|
||||
id="{{pressCarouselRegular.id}}"
|
||||
class="carousel slide d-none d-md-block"
|
||||
data-bs-ride="carousel"
|
||||
>
|
||||
{{#pressCarouselRegular}}
|
||||
{{> pressCarouselButtons}}
|
||||
{{/pressCarouselRegular}}
|
||||
<div class="carousel-inner">
|
||||
{{#pressCarouselRegular.items}}
|
||||
{{> pressCarouselItem}}
|
||||
{{/pressCarouselRegular.items}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-none d-md-block col-3">
|
||||
<div class="text-right">
|
||||
<br />
|
||||
<img
|
||||
src="{{imageBaseUrl}}/in-the-press-img-right.png"
|
||||
alt=""
|
||||
class="img-fluid d-none d-md-inline-block"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row d-block d-md-none">
|
||||
<div class="col-12">
|
||||
<div
|
||||
id="{{pressCarouselMobile.id}}"
|
||||
class="carousel slide"
|
||||
data-bs-ride="carousel"
|
||||
>
|
||||
{{#pressCarouselMobile}}
|
||||
{{> pressCarouselButtons}}
|
||||
{{/pressCarouselMobile}}
|
||||
<div class="carousel-inner">
|
||||
{{#pressCarouselMobile.items}}
|
||||
{{> pressCarouselItem}}
|
||||
{{/pressCarouselMobile.items}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="sponsors-section" class="gray-bg">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<h2 class="text-center">
|
||||
Our <span class="frame-bg frame-bg-blue-lg">sponsors</span>
|
||||
</h2>
|
||||
<p class="text-center" id="your-note-text">
|
||||
Thank you for your support!
|
||||
</p>
|
||||
<br />
|
||||
|
||||
<div class="text-center sponsors-org">
|
||||
{{#sponsors.orgs}}
|
||||
<a class="sponsor-org-item" href="{{url}}"><img title="{{title}}" src="{{imageBaseUrl}}/sponsors/{{imageName}}"></a>
|
||||
{{/sponsors.orgs}}
|
||||
</div>
|
||||
|
||||
<div class="text-center sponsors-github">
|
||||
{{#sponsors.github}}
|
||||
<div class="sponsor-github-item">
|
||||
<a href="https://github.com/{{name}}" title="{{name}}">
|
||||
<img width="50" src="https://avatars2.githubusercontent.com/u/{{id}}?s=96&v=4">
|
||||
</a>
|
||||
</div>
|
||||
{{/sponsors.github}}
|
||||
</div>
|
||||
<br />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="darkblue-bg">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-3 d-none d-md-block">
|
||||
<img src="{{imageBaseUrl}}/logo-text.svg" alt="" width="150" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<hr />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-6">
|
||||
<a href="{{baseUrl}}">
|
||||
<img
|
||||
src="{{imageBaseUrl}}/logo-text.svg"
|
||||
width="120"
|
||||
class="img-center d-block d-md-none"
|
||||
alt=""
|
||||
/>
|
||||
</a>
|
||||
<br class="d-block d-md-none" />
|
||||
<p class="text-center-sm">Copyright (C) 2016-{{yyyy}} Laurent Cozic</p>
|
||||
</div>
|
||||
<div class="col-12 col-md-6">
|
||||
<p class="text-right text-center-sm right-links">
|
||||
<a href="https://github.com/laurent22/joplin/" class="github-link"><i class="fab fa-github"></i> GitHub Repository</a>
|
||||
<a href="{{baseUrl}}/privacy/">Privacy Policy</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
<script
|
||||
src="{{jsBaseUrl}}/bootstrap5.0.2.min.js"
|
||||
rel="preload"
|
||||
as="script"
|
||||
></script>
|
||||
<script
|
||||
src="{{jsBaseUrl}}/jquery-3.6.0.min.js"
|
||||
rel="preload"
|
||||
as="script"
|
||||
></script>
|
||||
<script src="{{jsBaseUrl}}/script.js?t={{buildTime}}"></script>
|
||||
{{> analytics}}
|
||||
</body>
|
||||
</html>
|
114
Assets/WebsiteAssets/templates/main-new.mustache
Normal file
@@ -0,0 +1,114 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<!--
|
||||
|
||||
!!! WARNING !!!
|
||||
|
||||
This file was auto-generated from {{{sourceMarkdownFile}}} and any manual change
|
||||
made to it will be overwritten. To make a change to this file please modify
|
||||
the source Markdown file:
|
||||
|
||||
https://github.com/laurent22/joplin/blob/dev/{{{sourceMarkdownFile}}}
|
||||
|
||||
-->
|
||||
|
||||
<head>
|
||||
<meta
|
||||
charset="utf-8"
|
||||
http-equiv="X-UA-Compatible"
|
||||
content="IE=edge,chrome=1"
|
||||
/>
|
||||
<link rel="icon" href="{{imageBaseUrl}}/favicon.png" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
<meta name="description" content="Joplin website" />
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="{{cssBaseUrl}}/bootstrap5.0.2.min.css"
|
||||
as="style"
|
||||
/>
|
||||
<link rel="stylesheet" href="{{cssBaseUrl}}/fontawesome-all.min.css?t={{buildTime}}">
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&display=swap"
|
||||
rel="stylesheet"
|
||||
as="style"
|
||||
media="all"
|
||||
onload="this.media='all'; this.onload = null"
|
||||
/>
|
||||
<link rel="stylesheet" href="{{cssBaseUrl}}/site.css?t={{buildTime}}" as="style" />
|
||||
<title>{{pageTitle}}</title>
|
||||
</head>
|
||||
<body class="website-env-{{env}}">
|
||||
<div class="container-fluid generic-template {{pageName}}-page" id="main-container">
|
||||
|
||||
{{#navbar}}
|
||||
{{> navbar}}
|
||||
{{/navbar}}
|
||||
|
||||
<div class="page-container page-{{sourceMarkdownName}}">
|
||||
<div class="container">
|
||||
<div class="row content-wrapper">
|
||||
{{#showToc}}<div id="toc">{{{tocHtml}}}</div>{{/showToc}}
|
||||
|
||||
<div class="main-content">
|
||||
<div class="alert alert-danger alert-env-dev" role="alert">
|
||||
Running in {{env}} mode!
|
||||
</div>
|
||||
{{{contentHtml}}}
|
||||
{{#showImproveThisDoc}}
|
||||
<div class="bottom-links">
|
||||
<a href="https://github.com/laurent22/joplin/blob/dev/{{{sourceMarkdownFile}}}">
|
||||
<i class="fab fa-github"></i> Improve this doc
|
||||
</a>
|
||||
</div>
|
||||
{{/showImproveThisDoc}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="darkblue-bg">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-3 d-none d-md-block">
|
||||
<img src="{{imageBaseUrl}}/logo-text.svg" alt="" width="150" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<hr />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-6">
|
||||
<img
|
||||
src="{{imageBaseUrl}}/logo-text.svg"
|
||||
width="120"
|
||||
class="img-center d-block d-md-none"
|
||||
alt=""
|
||||
/>
|
||||
<br class="d-block d-md-none" />
|
||||
<p class="text-center-sm">Copyright (C) 2016-{{yyyy}} Laurent Cozic</p>
|
||||
</div>
|
||||
<div class="col-12 col-md-6 right-links">
|
||||
<p class="text-right text-center-sm">
|
||||
<a href="https://github.com/laurent22/joplin/" class="github-link"><i class="fab fa-github"></i> GitHub Repository</a>
|
||||
<a href="{{baseUrl}}/privacy/">Privacy Policy</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
<script
|
||||
src="{{jsBaseUrl}}/jquery-3.6.0.min.js"
|
||||
rel="preload"
|
||||
as="script"
|
||||
></script>
|
||||
<script src="{{jsBaseUrl}}/script.js?t={{buildTime}}"></script>
|
||||
|
||||
{{> analytics}}
|
||||
</body>
|
||||
</html>
|
368
Assets/WebsiteAssets/templates/main.mustache
Normal file
@@ -0,0 +1,368 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
|
||||
<!--
|
||||
|
||||
!!! WARNING !!!
|
||||
|
||||
This file was auto-generated from {{{sourceMarkdownFile}}} and any manual change
|
||||
made to it will be overwritten. To make a change to this file please modify
|
||||
the source Markdown file:
|
||||
|
||||
https://github.com/laurent22/joplin/blob/dev/{{{sourceMarkdownFile}}}
|
||||
|
||||
-->
|
||||
|
||||
<head>
|
||||
<title>{{pageTitle}}</title>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="https://joplinapp.org/css/bootstrap.min.css">
|
||||
<link rel="shortcut icon" type="image/x-icon" href="https://joplinapp.org/favicon.ico">
|
||||
<!-- <link rel="stylesheet" href="https://joplinapp.org/css/fontawesome-all.min.css"> -->
|
||||
<link rel="stylesheet" href="https://joplinapp.org/css/fork-awesome.min.css">
|
||||
<script src="https://joplinapp.org/js/jquery-3.2.1.slim.min.js"></script>
|
||||
<style>
|
||||
body {
|
||||
background-color: #F1F1F1;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
.root {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
a[href^="mailto:"] {
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
table {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
td, th {
|
||||
padding: .8em;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
|
||||
.page-markdown table pre,
|
||||
.page-markdown table blockquote {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.page-markdown table pre,
|
||||
.page-markdown table blockquote {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.page-markdown table pre {
|
||||
background-color: rgba(0,0,0,0);
|
||||
border: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
h1, h2 {
|
||||
border-bottom: 1px solid #eaecef;
|
||||
padding-bottom: 0.3em;
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||
font-weight: 600;
|
||||
font-size: 2em;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
h2 {
|
||||
font-size: 1.6em;
|
||||
}
|
||||
h3 {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
code {
|
||||
color: black;
|
||||
background-color: #eee;
|
||||
border: 1px solid #ccc;
|
||||
font-size: .85em;
|
||||
/* word-break: break-all; */
|
||||
}
|
||||
pre code {
|
||||
border: none;
|
||||
}
|
||||
pre {
|
||||
font-size: .85em;
|
||||
}
|
||||
blockquote {
|
||||
font-size: 1em;
|
||||
color: #555;
|
||||
};
|
||||
#toc ul {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
#toc > ul > li {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
#toc {
|
||||
padding-bottom: 1em;
|
||||
}
|
||||
.title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.title-icon {
|
||||
display: flex;
|
||||
height: 1em;
|
||||
}
|
||||
.title-text {
|
||||
display: flex;
|
||||
font-weight: normal;
|
||||
margin-bottom: .2em;
|
||||
margin-left: .5em;
|
||||
}
|
||||
.sub-title {
|
||||
font-weight: normal;
|
||||
}
|
||||
.container {
|
||||
background-color: white;
|
||||
padding: 0;
|
||||
box-shadow: 0 10px 20px #888888;
|
||||
}
|
||||
table.screenshots {
|
||||
margin-top: 2em;
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
table.screenshots th {
|
||||
height: 3em;
|
||||
text-align: center;
|
||||
}
|
||||
table.screenshots th,
|
||||
table.screenshots td {
|
||||
border: 1px solid #C2C2C2;
|
||||
}
|
||||
img[align="left"] {
|
||||
margin-right: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.mobile-screenshot {
|
||||
height: 40em;
|
||||
padding: 1em;
|
||||
}
|
||||
.cli-screenshot-wrapper {
|
||||
background-color: black;
|
||||
vertical-align: top;
|
||||
padding: 1em 2em 1em 1em;
|
||||
}
|
||||
.cli-screenshot {
|
||||
font-family: "Monaco", "Inconsolata", "CONSOLAS", "Deja Vu Sans Mono", "Droid Sans Mono", "Andale Mono", monospace;
|
||||
background-color: black;
|
||||
color: white;
|
||||
border: none;
|
||||
}
|
||||
.cli-screenshot .prompt {
|
||||
color: #48C2F0;
|
||||
}
|
||||
.top-screenshot {
|
||||
margin-top: 2em;
|
||||
text-align: center;
|
||||
}
|
||||
.header {
|
||||
position: relative;
|
||||
padding-left: 2em;
|
||||
padding-right: 2em;
|
||||
padding-top: 1em;
|
||||
padding-bottom: 1em;
|
||||
color: white;
|
||||
background-color: #2B2B3D;
|
||||
}
|
||||
.header a h1 {
|
||||
color: white;
|
||||
}
|
||||
.header a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
.content {
|
||||
padding-left: 2em;
|
||||
padding-right: 2em;
|
||||
padding-bottom: 2em;
|
||||
padding-top: 2em;
|
||||
}
|
||||
.forkme {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top:0;
|
||||
}
|
||||
.nav-wrapper {
|
||||
position: relative;
|
||||
width: inherit;
|
||||
}
|
||||
.nav {
|
||||
background-color: black;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
.nav.sticky {
|
||||
position:fixed;
|
||||
top: 0;
|
||||
width: inherit;
|
||||
box-shadow: 0 0 10px #000000;
|
||||
}
|
||||
.nav a {
|
||||
color: white;
|
||||
display: inline-block;
|
||||
padding: .6em .9em .6em .9em;
|
||||
}
|
||||
.nav ul {
|
||||
padding-left: 2em;
|
||||
margin-bottom: 0;
|
||||
display: table-cell;
|
||||
display: flex;
|
||||
width: 100%;
|
||||
/* For GSoC: */
|
||||
min-width: 470px;
|
||||
}
|
||||
.nav ul li {
|
||||
display: inline-block;
|
||||
padding: 0;
|
||||
}
|
||||
.nav li.selected {
|
||||
background-color: #222;
|
||||
font-weight: bold;
|
||||
}
|
||||
.nav-right {
|
||||
display: flex;
|
||||
text-align: right;
|
||||
vertical-align: middle;
|
||||
line-height: 0;
|
||||
margin-right: 10px;
|
||||
}
|
||||
.nav-right .share-btn {
|
||||
display: none;
|
||||
}
|
||||
.nav-right .small-share-btn {
|
||||
display: none;
|
||||
}
|
||||
.footer {
|
||||
padding: 2em;
|
||||
border-top: 1px solid #d4d4d4;
|
||||
margin-top: 2em;
|
||||
color: gray;
|
||||
font-size: .9em;
|
||||
}
|
||||
a.heading-anchor {
|
||||
display: inline-block;
|
||||
opacity: 0;
|
||||
width: 1.3em;
|
||||
font-size: 0.7em;
|
||||
margin-left: 0.4em;
|
||||
line-height: 1em;
|
||||
text-decoration: none;
|
||||
transition: opacity 0.3s;
|
||||
}
|
||||
a.heading-anchor:hover,
|
||||
h1:hover a.heading-anchor,
|
||||
h2:hover a.heading-anchor,
|
||||
h3:hover a.heading-anchor,
|
||||
h4:hover a.heading-anchor,
|
||||
h5:hover a.heading-anchor,
|
||||
h6:hover a.heading-anchor {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
.content{
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#toc{
|
||||
display: block!important;
|
||||
align-self: flex-start;
|
||||
width: 300px;
|
||||
position: sticky; top: 20px; left: 0;
|
||||
}
|
||||
|
||||
.main{
|
||||
width: calc(100% - 300px);
|
||||
}
|
||||
}
|
||||
|
||||
.bottom-links {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
border-top: 1px solid #d4d4d4;
|
||||
margin-top: 30px;
|
||||
padding-top: 25px;
|
||||
}
|
||||
|
||||
@media all and (min-width: 400px) {
|
||||
.nav-right .share-btn {
|
||||
display: inline-block;
|
||||
}
|
||||
.nav-right .small-share-btn {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div class="container root page-{{sourceMarkdownName}}">
|
||||
|
||||
<div class="header">
|
||||
<a class="forkme" href="https://github.com/laurent22/joplin"><img src="{{{imageBaseUrl}}}/ForkMe.png"/></a>
|
||||
<a href="https://joplinapp.org"><h1 class="title"><img class="title-icon" src="{{{imageBaseUrl}}}/Icon512.png"><span class="title-text">Joplin</span></h1></a>
|
||||
<p class="sub-title">An open source note taking and to-do application with synchronisation capabilities</p>
|
||||
</div>
|
||||
|
||||
<div class="nav-wrapper">
|
||||
<div class="nav">
|
||||
<ul>
|
||||
<li class="{{selectedHome}}"><a href="{{baseUrl}}/" title="Home"><i class="fa fa-home"></i></a></li>
|
||||
<li><a href="https://discourse.joplinapp.org" title="Forum">Forum</a></li>
|
||||
<li><a class="gsoc" href="https://joplinapp.org/gsoc2021/index/" title="Google Summer of Code 2021">GSoC 2021</a></li>
|
||||
</ul>
|
||||
<div class="nav-right">
|
||||
<iframe class="share-btn share-btn-github" src="https://ghbtns.com/github-btn.html?user=laurent22&repo=joplin&type=star&count=true" frameborder="0" scrolling="0" width="115px" height="20px"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
{{{tocHtml}}}
|
||||
|
||||
<div class="main">
|
||||
{{{contentHtml}}}
|
||||
<div class="bottom-links">
|
||||
<a href="https://github.com/laurent22/joplin/blob/dev/{{{sourceMarkdownFile}}}">
|
||||
<i class="fa fa-github"></i> Improve this doc
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
Copyright (C) 2016-{{yyyy}} Laurent Cozic
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function stickyHeader() {
|
||||
return; // Disabled
|
||||
|
||||
if ($(window).scrollTop() > 179) {
|
||||
$('.nav').addClass('sticky');
|
||||
} else {
|
||||
$('.nav').removeClass('sticky');
|
||||
}
|
||||
}
|
||||
|
||||
$(window).scroll(function() {
|
||||
stickyHeader();
|
||||
});
|
||||
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
||||
ga('create', 'UA-103586105-1', 'auto');
|
||||
ga('send', 'pageview');
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -0,0 +1,8 @@
|
||||
<script>
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
||||
ga('create', 'UA-103586105-1', 'auto');
|
||||
ga('send', 'pageview');
|
||||
</script>
|
@@ -0,0 +1 @@
|
||||
<a href="{{baseUrl}}/plans/" class="button-link btn-trans plans-button">Joplin Cloud</a>
|
68
Assets/WebsiteAssets/templates/partials/navbar.mustache
Normal file
@@ -0,0 +1,68 @@
|
||||
<div class="{{#isFrontPage}}navbar-frontpage blue-bg{{/isFrontPage}} {{^isFrontPage}}navbar-main white-bg{{/isFrontPage}}" id="nav-section">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-3">
|
||||
<a href="{{baseUrl}}/">
|
||||
<img
|
||||
src="{{#isFrontPage}}{{imageBaseUrl}}/logo-text.svg{{/isFrontPage}}{{^isFrontPage}}{{imageBaseUrl}}/logo-text-blue.svg{{/isFrontPage}}"
|
||||
alt=""
|
||||
id="top-logo"
|
||||
width="180"
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-9 text-right d-none d-md-block">
|
||||
<a href="{{baseUrl}}/help/" class="fw500">Help</a>
|
||||
<a href="{{forumUrl}}" class="fw500">Forum</a>
|
||||
{{#showJoplinCloudLinks}}
|
||||
{{> joplinCloudButton}}
|
||||
{{/showJoplinCloudLinks}}
|
||||
{{> supportButton}}
|
||||
</div>
|
||||
<div class="col-9 text-right d-block d-md-none">
|
||||
<span class="pointer"
|
||||
><img
|
||||
src="{{#isFrontPage}}{{imageBaseUrl}}/mobile-menu-open-icon.png{{/isFrontPage}}{{^isFrontPage}}{{imageBaseUrl}}/mobile-menu-black-open-icon.png{{/isFrontPage}}"
|
||||
id="open-menu-mobile"
|
||||
alt=""
|
||||
/></span>
|
||||
|
||||
|
||||
<div id="menu-mobile">
|
||||
<div>
|
||||
<div class="text-right">
|
||||
<img
|
||||
src="{{imageBaseUrl}}/close-icon.png"
|
||||
alt=""
|
||||
class="pointer"
|
||||
id="close-menu-mobile"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="text-center menu-mobile-top">
|
||||
<a href="{{forumUrl}}" class="fw500 mobile-menu-link">Forum</a>
|
||||
<a href="{{baseUrl}}/help/" class="fw500 mobile-menu-link">Help</a>
|
||||
</div>
|
||||
|
||||
<div class="menu-mobile-buttons">
|
||||
{{#showJoplinCloudLinks}}
|
||||
{{> joplinCloudButton}}
|
||||
{{/showJoplinCloudLinks}}
|
||||
{{> supportButton}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="toc-mobile">{{{tocHtml}}}</div>
|
||||
|
||||
<div>
|
||||
<p class="light-blue mobile-menu-link-bottom text-center">
|
||||
Copyright (C) 2016-{{yyyy}} Laurent Cozic
|
||||
<br/>
|
||||
<a href="{{baseUrl}}/privacy/" class="fw500">Privacy Policy</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
52
Assets/WebsiteAssets/templates/partials/plan.mustache
Normal file
@@ -0,0 +1,52 @@
|
||||
<div class="col-12 col-lg-4">
|
||||
<div class="price-container {{#featured}}price-container-blue{{/featured}}">
|
||||
<div class="price-row">
|
||||
<div class="plan-type">
|
||||
<img src="{{imageBaseUrl}}/{{iconName}}.png"/> {{title}}
|
||||
</div>
|
||||
|
||||
<div class="plan-price">
|
||||
{{price}}<sub class="per-month"> /month</sub>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#featuresOn}}
|
||||
<p><i class="fas fa-check feature feature-on"></i>{{.}}</p>
|
||||
{{/featuresOn}}
|
||||
|
||||
{{#featuresOff}}
|
||||
<p class="unchecked-text"><i class="fas fa-times feature feature-off"></i>{{.}}</p>
|
||||
{{/featuresOff}}
|
||||
|
||||
<p class="text-center subscribe-wrapper">
|
||||
<a id="subscribeButton-{{name}}" href="{{cfaUrl}}" class="button-link btn-white">{{cfaLabel}}</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function() {
|
||||
const stripePriceId = '{{{stripePriceId}}}';
|
||||
const planName = '{{{name}}}';
|
||||
const buttonId = 'subscribeButton-' + planName;
|
||||
const buttonElement = document.getElementById(buttonId);
|
||||
|
||||
if (stripePriceId) {
|
||||
function handleResult() {
|
||||
console.info('Redirected to checkout');
|
||||
}
|
||||
|
||||
buttonElement.addEventListener("click", function(evt) {
|
||||
evt.preventDefault();
|
||||
const priceId = '{{{stripePriceId}}}';
|
||||
|
||||
createCheckoutSession(priceId).then(function(data) {
|
||||
stripe.redirectToCheckout({
|
||||
sessionId: data.sessionId
|
||||
})
|
||||
.then(handleResult);
|
||||
});
|
||||
});
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
</div>
|
@@ -0,0 +1,22 @@
|
||||
<div class="carousel-indicators">
|
||||
<button
|
||||
type="button"
|
||||
data-bs-target="#{{id}}"
|
||||
data-bs-slide-to="0"
|
||||
class="active"
|
||||
aria-current="true"
|
||||
aria-label="Slide 1"
|
||||
></button>
|
||||
<button
|
||||
type="button"
|
||||
data-bs-target="#{{id}}"
|
||||
data-bs-slide-to="1"
|
||||
aria-label="Slide 2"
|
||||
></button>
|
||||
<button
|
||||
type="button"
|
||||
data-bs-target="#{{id}}"
|
||||
data-bs-slide-to="2"
|
||||
aria-label="Slide 3"
|
||||
></button>
|
||||
</div>
|
@@ -0,0 +1,23 @@
|
||||
<div class="carousel-item {{active}} press-carousel" data-bs-interval="10000">
|
||||
<img
|
||||
src="{{imageBaseUrl}}/transparent-bg.png"
|
||||
class="d-block w-100"
|
||||
alt=""
|
||||
/>
|
||||
<div class="carousel-caption">
|
||||
<img
|
||||
src="{{imageBaseUrl}}/{{imageName}}"
|
||||
alt=""
|
||||
class="img-fluid img-center photo"
|
||||
/>
|
||||
<br />
|
||||
<p class="text-center">
|
||||
“{{body}}”
|
||||
</p>
|
||||
<br />
|
||||
<p class="fw500 text-center">
|
||||
<a href="{{url}}">{{source}}</a>
|
||||
</p>
|
||||
<p class="fw400 small text-center">By {{author}}</p>
|
||||
</div>
|
||||
</div>
|
@@ -0,0 +1,3 @@
|
||||
<a class="button-link btn-blue donate-button" href="{{baseUrl}}/donate">
|
||||
<i class="fas fa-heart heart-full"></i><i class="far fa-heart heart-line"></i> Support
|
||||
</a>
|
54
Assets/WebsiteAssets/templates/plans.mustache
Normal file
@@ -0,0 +1,54 @@
|
||||
<div id="plans-section" class="env-{{env}}">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12 title-box">
|
||||
<h1 class="text-center">
|
||||
Joplin Cloud <span class="frame-bg frame-bg-yellow">plans</span>
|
||||
</h1>
|
||||
<p class="text-center sub-title">
|
||||
Joplin Cloud allows you to synchronise your notes across devices. It also lets you publish notes, and collaborate on notebooks with your friends, family or colleagues.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
{{#plans.basic}}
|
||||
{{> plan}}
|
||||
{{/plans.basic}}
|
||||
|
||||
{{#plans.pro}}
|
||||
{{> plan}}
|
||||
{{/plans.pro}}
|
||||
|
||||
{{#plans.business}}
|
||||
{{> plan}}
|
||||
{{/plans.business}}
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
{{{faqHtml}}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://js.stripe.com/v3/"></script>
|
||||
|
||||
<script>
|
||||
var stripe = Stripe('{{{stripeConfig.publishableKey}}}');
|
||||
|
||||
var createCheckoutSession = function(priceId) {
|
||||
console.info('Creating Stripe session for price:', priceId);
|
||||
|
||||
return fetch("{{{stripeConfig.webhookBaseUrl}}}/stripe/createCheckoutSession", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: JSON.stringify({
|
||||
priceId: priceId
|
||||
})
|
||||
}).then(function(result) {
|
||||
return result.json();
|
||||
});
|
||||
};
|
||||
</script>
|
||||
</div>
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 134 KiB |
BIN
Assets/macOsIcon_2.psd
Normal file
11
BUILD.md
@@ -1,5 +1,3 @@
|
||||
[](https://travis-ci.org/laurent22/joplin) [](https://ci.appveyor.com/project/laurent22/joplin)
|
||||
|
||||
# Building the applications
|
||||
|
||||
The Joplin source code is hosted on a [monorepo](https://en.wikipedia.org/wiki/Monorepo) managed by Lerna. The usage of Lerna is mostly transparent as the needed commands have been moved to the root package.json and thus are invoked for example when running `npm install` or `npm run watch`. The main thing to know about Lerna is that it links the packages in the monorepo using `npm link`, so if you check the node_modules directory you will see links instead of actual directories for certain packages. This is something to keep in mind as these links can cause issues in some cases.
|
||||
@@ -21,10 +19,9 @@ There are also a few forks of existing packages under the "fork-*" name.
|
||||
## Required dependencies
|
||||
|
||||
- Install node 10+ - https://nodejs.org/en/
|
||||
- macOS, Linux: Install rsync - https://nodejs.org/en/
|
||||
- macOS: Install Cocoapods - `brew install cocoapods`
|
||||
- Windows: Install Windows Build Tools - `npm install -g windows-build-tools`
|
||||
- Linux: Install dependencies - `sudo apt install libnss3 libsecret-1-dev`
|
||||
- Windows: Install Windows Build Tools - `npm install -g windows-build-tools --vs2015`
|
||||
- Linux: Install dependencies - `sudo apt install libnss3 libsecret-1-dev python rsync`
|
||||
|
||||
## Building
|
||||
|
||||
@@ -65,7 +62,7 @@ Normally the **bundler** should start automatically with the application. If it
|
||||
npm install
|
||||
npm run watch # To watch for changes
|
||||
|
||||
To test the extension please refer to the relevant pages for each browser: [Firefox](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Your_first_WebExtension#Trying_it_out) / [Chrome](https://developer.chrome.com/extensions/faq#faq-dev-01). Please note that the extension in dev mode will only connect to a dev instance of the desktop app (and vice-versa).
|
||||
To test the extension please refer to the relevant pages for each browser: [Firefox](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Your_first_WebExtension#Trying_it_out) / [Chrome](https://developer.chrome.com/docs/extensions/mv3/getstarted/). Please note that the extension in dev mode will only connect to a dev instance of the desktop app (and vice-versa).
|
||||
|
||||
## Watching files
|
||||
|
||||
@@ -110,4 +107,4 @@ It still requires you to quit the application each time you want it to rebuild,
|
||||
|
||||
# Troubleshooting
|
||||
|
||||
Please read for the [Build Troubleshooting Document](https://github.com/laurent22/joplin/blob/dev/readme/build_troubleshooting.md) for various tips on how to get the build working.
|
||||
Please read for the [Build Troubleshooting Document](https://github.com/laurent22/joplin/blob/dev/readme/build_troubleshooting.md) for various tips on how to get the build working.
|
||||
|
@@ -25,7 +25,7 @@ Finally, when submitting a pull request, don't forget to [test your code](#autom
|
||||
|
||||
# Contributing to Joplin's translation
|
||||
|
||||
Joplin is available in multiple languages thanks to the help of its users. You can help translate Joplin to your language or keep it up to date. Please read the documentation about [Localisation](https://joplinapp.org/#localisation).
|
||||
Joplin is available in multiple languages thanks to the help of its users. You can help translate Joplin to your language or keep it up to date. Please read the documentation about [Localisation](https://joplinapp.org/help/#localisation).
|
||||
|
||||
# Contributing to Joplin's code
|
||||
|
||||
|
77
DEPLOY.md
Normal file
@@ -0,0 +1,77 @@
|
||||
# Deploying Joplin apps and scripts
|
||||
|
||||
Various scripts are provided to deploy the Joplin applications, scripts and tools.
|
||||
|
||||
## Setting up version numbers
|
||||
|
||||
Before new releases are created, all version numbers must be updated. This is done using the `setupNewRelease` script and passing it the new major.minor version number. For example:
|
||||
|
||||
npm run setupNewRelease -- 1.8
|
||||
|
||||
Patch numbers are going to be incremented automatically when releasing each individual package.
|
||||
|
||||
## Desktop application
|
||||
|
||||
The desktop application is built for Windows, macOS and Linux via continuous integration, by pushing a version tag to GitHub. The process is automated using:
|
||||
|
||||
npm run releaseDesktop
|
||||
|
||||
## Android application
|
||||
|
||||
The app is built and upload to GitHub using:
|
||||
|
||||
npm run releaseAndroid -- --type=prerelease
|
||||
|
||||
The "type" parameter can be either "release" or "prerelease"
|
||||
|
||||
## iOS application
|
||||
|
||||
It must be built and released manually using XCode.
|
||||
|
||||
## CLI application
|
||||
|
||||
Unlike the mobile or desktop application, the CLI app doesn't bundle its dependencies and is always installed from source. For that reason, all its `@joplin` dependencies must be deployed publicly first. This is done using:
|
||||
|
||||
npm run publishAll
|
||||
|
||||
This is going to publish all the Joplin libraries, such as `@joplin/lib`, `@joplin/tools`, etc.
|
||||
|
||||
Then in `app-cli/package.json`, all `@joplin` dependencies and devdependencies must be set to the last major/minor version. For example:
|
||||
|
||||
```json
|
||||
"dependencies": {
|
||||
"@joplin/lib": "1.8",
|
||||
"@joplin/renderer": "1.8",
|
||||
"...": "..."
|
||||
},
|
||||
"devDependencies": {
|
||||
"@joplin/tools": "1.8",
|
||||
"...": "..."
|
||||
}
|
||||
```
|
||||
|
||||
Finally, to release the actual app, run:
|
||||
|
||||
npm run releaseCli
|
||||
|
||||
## Joplin Server
|
||||
|
||||
Run:
|
||||
|
||||
npm run releaseServer
|
||||
|
||||
## Web clipper
|
||||
|
||||
Run:
|
||||
|
||||
npm run releaseClipper
|
||||
|
||||
## Plugin generator
|
||||
|
||||
First the types should generally be updated, using `./updateTypes.sh`. Then run:
|
||||
|
||||
npm run releasePluginGenerator
|
||||
|
||||
## Plugin Repo Cli
|
||||
|
||||
Since it has dependencies to the `@joplin` packages, it is released when running `npm run publishAll`
|
89
Dockerfile.server
Normal file
@@ -0,0 +1,89 @@
|
||||
# https://versatile.nl/blog/deploying-lerna-web-apps-with-docker
|
||||
|
||||
FROM node:12
|
||||
|
||||
RUN apt-get update
|
||||
RUN apt-get --yes install vim
|
||||
|
||||
ARG user=joplin
|
||||
|
||||
RUN useradd --create-home --shell /bin/bash $user
|
||||
USER $user
|
||||
|
||||
ENV NODE_ENV development
|
||||
|
||||
WORKDIR /home/$user
|
||||
|
||||
RUN mkdir /home/$user/logs
|
||||
|
||||
# Install the root scripts but don't run postinstall (which would bootstrap
|
||||
# and build TypeScript files, but we don't have the TypeScript files at
|
||||
# this point)
|
||||
|
||||
COPY --chown=$user:$user package*.json ./
|
||||
RUN npm install --ignore-scripts
|
||||
|
||||
# To take advantage of the Docker cache, we first copy all the package.json
|
||||
# and package-lock.json files, as they rarely change, and then bootstrap
|
||||
# all the packages.
|
||||
#
|
||||
# Note that bootstrapping the packages will run all the postinstall
|
||||
# scripts, which means that for packages that have such scripts, we need to
|
||||
# copy all the files.
|
||||
#
|
||||
# We can't run boostrap with "--ignore-scripts" because that would
|
||||
# prevent certain sub-packages, such as sqlite3, from being built
|
||||
|
||||
COPY --chown=$user:$user packages/fork-sax/package*.json ./packages/fork-sax/
|
||||
COPY --chown=$user:$user packages/renderer/package*.json ./packages/renderer/
|
||||
COPY --chown=$user:$user packages/tools/package*.json ./packages/tools/
|
||||
COPY --chown=$user:$user packages/lib/package*.json ./packages/lib/
|
||||
COPY --chown=$user:$user lerna.json .
|
||||
COPY --chown=$user:$user tsconfig.json .
|
||||
|
||||
# The following have postinstall scripts so we need to copy all the files.
|
||||
# Since they should rarely change this is not an issue
|
||||
|
||||
COPY --chown=$user:$user packages/turndown ./packages/turndown
|
||||
COPY --chown=$user:$user packages/turndown-plugin-gfm ./packages/turndown-plugin-gfm
|
||||
COPY --chown=$user:$user packages/fork-htmlparser2 ./packages/fork-htmlparser2
|
||||
|
||||
# Then bootstrap only, without compiling the TypeScript files
|
||||
|
||||
RUN npm run bootstrap
|
||||
|
||||
# We have a separate step for the server files because they are more likely to
|
||||
# change.
|
||||
|
||||
COPY --chown=$user:$user packages/server/package*.json ./packages/server/
|
||||
RUN npm run bootstrapServerOnly
|
||||
|
||||
# Now copy the source files. Put lib and server last as they are more likely to change.
|
||||
|
||||
COPY --chown=$user:$user packages/fork-sax ./packages/fork-sax
|
||||
COPY --chown=$user:$user packages/renderer ./packages/renderer
|
||||
COPY --chown=$user:$user packages/tools ./packages/tools
|
||||
COPY --chown=$user:$user packages/lib ./packages/lib
|
||||
COPY --chown=$user:$user packages/server ./packages/server
|
||||
|
||||
# Finally build everything, in particular the TypeScript files.
|
||||
|
||||
RUN npm run build
|
||||
|
||||
ENV RUNNING_IN_DOCKER=1
|
||||
EXPOSE ${APP_PORT}
|
||||
|
||||
CMD [ "npm", "--prefix", "packages/server", "start" ]
|
||||
|
||||
# Build-time metadata
|
||||
# https://github.com/opencontainers/image-spec/blob/master/annotations.md
|
||||
ARG BUILD_DATE
|
||||
ARG REVISION
|
||||
ARG VERSION
|
||||
LABEL org.opencontainers.image.created="$BUILD_DATE" \
|
||||
org.opencontainers.image.title="Joplin Server" \
|
||||
org.opencontainers.image.description="Docker image for Joplin Server" \
|
||||
org.opencontainers.image.url="https://joplinapp.org/" \
|
||||
org.opencontainers.image.revision="$REVISION" \
|
||||
org.opencontainers.image.source="https://github.com/laurent22/joplin.git" \
|
||||
org.opencontainers.image.version="${VERSION}"
|