Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ea878fb614 | ||
|
|
5fd0408365 | ||
|
|
2d099b2bed | ||
|
|
3c0b9ee522 | ||
|
|
987890ba98 | ||
|
|
3358c46122 | ||
|
|
d819e6ee0c | ||
|
|
b66be79351 | ||
|
|
433fa21069 | ||
|
|
30543104be | ||
|
|
b6a004086c | ||
|
|
4265b3afb0 | ||
|
|
ccd7ba28d7 | ||
|
|
871f8b3a72 | ||
|
|
f276d2b2d4 | ||
|
|
2bb5acdfb1 | ||
|
|
dda0d8ca08 | ||
|
|
15f22c0507 | ||
|
|
fa7bd2cfab | ||
|
|
dc51781976 | ||
|
|
c874aee774 | ||
|
|
6c84fdc51d | ||
|
|
8ff0f7c529 | ||
|
|
b326ffc41c | ||
|
|
a0de8582e6 | ||
|
|
5eb0417b1a | ||
|
|
c42d9cf069 | ||
|
|
d965a7b6db | ||
|
|
c1919c2908 | ||
|
|
3fd7470104 | ||
|
|
0bf74142ac | ||
|
|
b3bf7144ac | ||
|
|
5738a4f92b | ||
|
|
784851b217 | ||
|
|
0e0803e050 | ||
|
|
3d3abfe259 | ||
|
|
3f38b518fe | ||
|
|
e673ee97de | ||
|
|
7cb55ffdc4 | ||
|
|
b706217d41 | ||
|
|
6f680081f4 | ||
|
|
fe41d37f8f | ||
|
|
833fb1264f | ||
|
|
f007735936 | ||
|
|
73a39d36ea | ||
|
|
a43ab26a46 | ||
|
|
f5f117cb72 | ||
|
|
fc6da04081 | ||
|
|
12ff654986 | ||
|
|
e852ad846f | ||
|
|
28e00fdf2e | ||
|
|
3bd0656eab | ||
|
|
e9af71dd76 | ||
|
|
73b33e8e32 | ||
|
|
c2c7efee91 | ||
|
|
c9c44d5643 | ||
|
|
0836fca822 | ||
|
|
566df5039c | ||
|
|
559655bf33 | ||
|
|
0eab23fbcf | ||
|
|
f334f4f487 | ||
|
|
49bfa49489 | ||
|
|
5f81944a3e | ||
|
|
00057da17d | ||
|
|
0a05464013 | ||
|
|
26f5a606e0 | ||
|
|
9ebb574059 | ||
|
|
d29c3c2466 | ||
|
|
a71f1c19ec | ||
|
|
485921d879 | ||
|
|
15de7572c0 | ||
|
|
09f41dd50e | ||
|
|
7b8ee467a0 | ||
|
|
99a496d684 | ||
|
|
9d6975a9e2 | ||
|
|
f43ee123d8 | ||
|
|
f42fb1b871 | ||
|
|
cf2442c5b2 | ||
|
|
e0e4735b03 | ||
|
|
138faa2aae | ||
|
|
8bd58c9608 | ||
|
|
215a725ded | ||
|
|
12c0a05af0 | ||
|
|
a7fa119041 | ||
|
|
7fb52b8b0e | ||
|
|
3e86ae4a82 | ||
|
|
ca46590ff3 | ||
|
|
947d81d96d | ||
|
|
6ca640d2ed | ||
|
|
6aca233b21 | ||
|
|
2200be697e | ||
|
|
25ab3c323b | ||
|
|
5bf30a9586 | ||
|
|
b6779a8074 | ||
|
|
59599d318c | ||
|
|
538600fd6c | ||
|
|
63264ba471 | ||
|
|
95e7f3df7d | ||
|
|
366fd2a333 | ||
|
|
5be99a4a16 | ||
|
|
d86f6a1fbd | ||
|
|
7d68208cb4 | ||
|
|
e9de9d9128 | ||
|
|
1af16d9f0b | ||
|
|
8e11eababa | ||
|
|
4ec9faadd5 | ||
|
|
5cf462c885 | ||
|
|
f7ef0a2b1e | ||
|
|
870f55a6c5 | ||
|
|
7f7e38b434 | ||
|
|
460a07b1a3 | ||
|
|
48c9b86d2b | ||
|
|
7202066c1f | ||
|
|
5226f0019b | ||
|
|
26ac745419 | ||
|
|
b3f2bbee5b | ||
|
|
56c6cfc785 | ||
|
|
1db4932573 | ||
|
|
a2873ebbc5 | ||
|
|
f652011d59 | ||
|
|
27c572b2f5 | ||
|
|
7a4c97618d | ||
|
|
3ac4fbeee5 | ||
|
|
9e05fa553c | ||
|
|
d4f0d2423d | ||
|
|
abdd7e3256 | ||
|
|
f3ea476f27 | ||
|
|
aa22af443c | ||
|
|
ce3bd2a47d | ||
|
|
a9b26246e6 | ||
|
|
cc1e941dd9 | ||
|
|
9610b7e6bd | ||
|
|
ad85a12535 | ||
|
|
b825346829 | ||
|
|
bd4cbaf93d | ||
|
|
9af2a19bdf | ||
|
|
d3fa906a9a | ||
|
|
22679641ee | ||
|
|
0ca7457000 | ||
|
|
c84e49c71c | ||
|
|
07ab0e986d | ||
|
|
17957f5da4 | ||
|
|
a7b5d43e69 | ||
|
|
38eda3f151 | ||
|
|
056285deda | ||
|
|
bdedf69439 | ||
|
|
c9451d8675 | ||
|
|
c38834b04c | ||
|
|
851eee1500 | ||
|
|
40e24102ce | ||
|
|
7614a795e9 | ||
|
|
1273a1dc5f | ||
|
|
10909fe4fc | ||
|
|
9b3d3026bf | ||
|
|
96076c84f4 | ||
|
|
2c553db45a | ||
|
|
7d7005596f | ||
|
|
998dd52adc | ||
|
|
2a1c6d6475 | ||
|
|
1ba0644142 | ||
|
|
88ac57d7f3 | ||
|
|
314686bede | ||
|
|
af8845f209 | ||
|
|
c95d7f9d37 | ||
|
|
2510c659e6 | ||
|
|
b7523e1b21 | ||
|
|
e4e9e801a2 | ||
|
|
524ec12d8a | ||
|
|
1108e8c28a | ||
|
|
0f1156ab9c | ||
|
|
2a08cc332a | ||
|
|
5d2baa872e | ||
|
|
4b377589aa | ||
|
|
cf78204c85 | ||
|
|
c513cdd4eb | ||
|
|
5f410e80e6 | ||
|
|
2aa7eaa192 | ||
|
|
b24d060281 | ||
|
|
a014b9347e | ||
|
|
582ab4ac13 | ||
|
|
c9adccad4a | ||
|
|
f41ba67e15 | ||
|
|
1f70a76c7e | ||
|
|
5fe3732a38 | ||
|
|
445533cfcc | ||
|
|
a8e29249d6 | ||
|
|
e4a3cbd2ff | ||
|
|
96b7ce9d50 | ||
|
|
2bbc1e7ecd | ||
|
|
83619b279d | ||
|
|
8b5a99d494 | ||
|
|
67d4123608 | ||
|
|
a424e3c899 | ||
|
|
08d4b5a714 | ||
|
|
68aefd5e4c | ||
|
|
57d750bc9a | ||
|
|
fbe966903b | ||
|
|
652748f969 | ||
|
|
e108fdb1d8 | ||
|
|
a8296e2e37 | ||
|
|
0998fc0ad7 | ||
|
|
d5f3e860b9 | ||
|
|
4e624f7db5 | ||
|
|
5b697b7e16 | ||
|
|
30e0d69a74 | ||
|
|
652816fd26 | ||
|
|
3a33e5f416 | ||
|
|
277dac5512 | ||
|
|
81d97d9f9d | ||
|
|
a4873cd40d | ||
|
|
20cb2daf43 | ||
|
|
e5b5250a91 | ||
|
|
db7d617e2b | ||
|
|
a627884876 | ||
|
|
ed30d09e07 | ||
|
|
179e3f9aee | ||
|
|
a67aedba35 | ||
|
|
199c411a7d | ||
|
|
5cd7bb5bdb | ||
|
|
30b8f5e2aa | ||
|
|
44f2842820 | ||
|
|
569355a318 | ||
|
|
8464e16d5d | ||
|
|
874c1e3e82 | ||
|
|
2530ecfc86 | ||
|
|
6b49f1dfcc | ||
|
|
b1af25ea18 | ||
|
|
3086007a9c | ||
|
|
bdfb6b97f5 | ||
|
|
c01219e6be | ||
|
|
743c11c279 | ||
|
|
11646d1c21 | ||
|
|
797f4a9669 | ||
|
|
815775ad8f | ||
|
|
085109288f | ||
|
|
c6cf0f3ba5 | ||
|
|
f9bdce7e24 | ||
|
|
f8cf4db5db | ||
|
|
14e6ae373f | ||
|
|
39bffd2790 | ||
|
|
f3cb903901 | ||
|
|
abad1883bc | ||
|
|
bb8770a967 | ||
|
|
c903947704 | ||
|
|
82e96840e9 | ||
|
|
e190d90832 | ||
|
|
0ae8d454ad | ||
|
|
77c7f966cf | ||
|
|
619fa1d607 | ||
|
|
157736ff7e | ||
|
|
0b57d906f8 | ||
|
|
86bfdb5c79 | ||
|
|
fc7d34f79c | ||
|
|
9d962f0328 | ||
|
|
79e1a33b28 | ||
|
|
0eedae1f62 | ||
|
|
e1144c098e | ||
|
|
5c5cb0f781 | ||
|
|
656615b571 | ||
|
|
799a9e810d | ||
|
|
aa147bbcdc | ||
|
|
8c7a24282c | ||
|
|
f99f3f8a6d | ||
|
|
29fbafdfff | ||
|
|
3253146dae | ||
|
|
7e4ac0fd73 | ||
|
|
60d77cb5ea | ||
|
|
8299164964 | ||
|
|
488393e75d | ||
|
|
c19f8c8035 | ||
|
|
b0b55718cc | ||
|
|
5ade9ff2f6 | ||
|
|
e4cfb518ba | ||
|
|
89864de1ff | ||
|
|
ee2a474611 | ||
|
|
223caca0f5 | ||
|
|
ee358f70dd | ||
|
|
0718828d60 | ||
|
|
d13f54c2ce | ||
|
|
90f7f99cd1 | ||
|
|
a273bbaeee | ||
|
|
619b426689 | ||
|
|
97c752a39e | ||
|
|
7565f1cada | ||
|
|
0c147236a3 | ||
|
|
88f22fabf7 | ||
|
|
5f46d60c5e | ||
|
|
cc8c200826 | ||
|
|
4485947b0f | ||
|
|
9f1a877f96 | ||
|
|
13280ce1b3 | ||
|
|
7f73931530 | ||
|
|
bbfed9bca8 | ||
|
|
bab29cd582 | ||
|
|
baea44cbd6 | ||
|
|
ab0538df43 | ||
|
|
58d4a69053 | ||
|
|
9147b3061a | ||
|
|
1b0102f62c | ||
|
|
471631933b | ||
|
|
cd761932c1 | ||
|
|
e63eee89ef | ||
|
|
4393ebbcc6 | ||
|
|
ed82390a8d | ||
|
|
79e708779f | ||
|
|
98905f6892 | ||
|
|
44e57c3959 | ||
|
|
35d48394ce | ||
|
|
eb42a5f34b | ||
|
|
729c8c6fac | ||
|
|
7a1707d864 | ||
|
|
64d7603eed | ||
|
|
89e6b680a6 | ||
|
|
da071a804c | ||
|
|
7833ca5ae6 | ||
|
|
44d49b57b9 | ||
|
|
9db150f8ff | ||
|
|
e2d3630783 | ||
|
|
cb1b5cae9f | ||
|
|
3af5b31c1c | ||
|
|
b6dafd6da6 | ||
|
|
d08b922632 | ||
|
|
9d4e250f6b | ||
|
|
c19cc1b39a | ||
|
|
73bd6f9776 | ||
|
|
6fef55398f | ||
|
|
d209d5036b | ||
|
|
4be02bc33c | ||
|
|
d6daa34e0a | ||
|
|
9cebbbe7cf | ||
|
|
71e5304298 | ||
|
|
8f8d11c9b3 | ||
|
|
1cd86fd3ea | ||
|
|
7f1f5a8c3d | ||
|
|
9dfb0642da | ||
|
|
0fa8dfa063 | ||
|
|
1d79dedf6d | ||
|
|
a274a56e65 | ||
|
|
44d3a4213f | ||
|
|
e68eb196b7 | ||
|
|
4bef79cd71 | ||
|
|
f3dc3602c8 | ||
|
|
17e140ba56 | ||
|
|
89d0575ccd | ||
|
|
ca0197a319 | ||
|
|
62bc296abe | ||
|
|
e58dc809ec | ||
|
|
abd57ad384 | ||
|
|
bada9286d0 | ||
|
|
3807317e66 | ||
|
|
10ff43f4f0 | ||
|
|
282f6de1a9 | ||
|
|
9a55afec01 | ||
|
|
c8c4bb3245 | ||
|
|
e1f831af62 | ||
|
|
657cebfda9 | ||
|
|
7f1c25793a | ||
|
|
b770ffda4d | ||
|
|
d0b3e15999 | ||
|
|
20433b0282 | ||
|
|
452b41de0f | ||
|
|
b69008225f | ||
|
|
b3a778e983 | ||
|
|
a57c6e9155 | ||
|
|
3fbfba2c03 | ||
|
|
8a5e6875f0 | ||
|
|
e11e57f1d8 | ||
|
|
073bd80f89 | ||
|
|
e3aaee738a | ||
|
|
f1b2b7b86b | ||
|
|
e0a87d6253 | ||
|
|
a7eae2e033 | ||
|
|
51235f191d | ||
|
|
003ead2511 | ||
|
|
8dc8527fdc | ||
|
|
985dcc2605 | ||
|
|
4063cdba11 | ||
|
|
c96c591fa9 | ||
|
|
4913fdb800 | ||
|
|
24bc7f153a | ||
|
|
8732c97dcd | ||
|
|
e092eaef6f | ||
|
|
4ade1bf65f | ||
|
|
77a03599de | ||
|
|
9c057071b5 | ||
|
|
ee3f4beeaf | ||
|
|
7035b1f9f6 | ||
|
|
3aea55ee63 | ||
|
|
28acb4eca6 | ||
|
|
c63c6370b5 | ||
|
|
6046f40e45 | ||
|
|
262159cf73 | ||
|
|
8eb94bc8ab | ||
|
|
a9390affaa | ||
|
|
66392b4e8a | ||
|
|
3283f34c79 | ||
|
|
fd4e5d7d30 | ||
|
|
5bbf9d87c2 | ||
|
|
acf1ff6d1d | ||
|
|
05acc51054 | ||
|
|
eb8841379c | ||
|
|
d601575549 | ||
|
|
0d2f253218 | ||
|
|
349d020da2 | ||
|
|
87ccb86f54 | ||
|
|
20482b2f14 | ||
|
|
47a05fb4ba | ||
|
|
ac0a89625a | ||
|
|
a07638239b | ||
|
|
5143870d3b | ||
|
|
f61c4c1374 | ||
|
|
254735fcae | ||
|
|
44024371ff | ||
|
|
be232fa34b | ||
|
|
1a90165255 | ||
|
|
13417d15b7 | ||
|
|
9fe1f6acfc | ||
|
|
1899d86641 | ||
|
|
6ca63ca56b | ||
|
|
e796968ec0 | ||
|
|
7b64c8dbe3 | ||
|
|
2377f7bc07 | ||
|
|
47fdcef182 | ||
|
|
d27b658392 | ||
|
|
07720ed6f8 | ||
|
|
a9cdecf599 | ||
|
|
c6b5a5c328 | ||
|
|
e7f3aa3764 | ||
|
|
89ca8e08d6 | ||
|
|
6350506ce7 | ||
|
|
d5ed611920 | ||
|
|
acc10ccac4 | ||
|
|
45160a2e73 | ||
|
|
e38794171a | ||
|
|
c2d6da83c0 | ||
|
|
fd568b5300 | ||
|
|
77005fc495 | ||
|
|
0273e58783 | ||
|
|
3e88a24753 | ||
|
|
1205908233 | ||
|
|
3a7a068196 | ||
|
|
845ecfe742 | ||
|
|
53355aaad3 | ||
|
|
7cd0e25538 | ||
|
|
2f15178ff6 | ||
|
|
a4b13be0d1 | ||
|
|
23ae4fb790 | ||
|
|
cff036d08b | ||
|
|
7826cc0b03 | ||
|
|
2bfa28a311 | ||
|
|
780c5c80ae | ||
|
|
fcd00b3212 | ||
|
|
6a41d6e85a | ||
|
|
3733858145 | ||
|
|
95d8ee65a5 | ||
|
|
8e57697b71 | ||
|
|
c9c371b297 | ||
|
|
d4f794920e | ||
|
|
13b5ef36d7 | ||
|
|
83e0bac52a | ||
|
|
9943ae0fa5 | ||
|
|
4c95872826 | ||
|
|
4aef72572d | ||
|
|
126918be54 | ||
|
|
1dc4516efc | ||
|
|
9a9cfbd130 | ||
|
|
341c9ba64b | ||
|
|
f432734338 | ||
|
|
b7f5f848f2 | ||
|
|
d80cf6bf37 | ||
|
|
31bce2e644 | ||
|
|
faabd17fc6 | ||
|
|
4c4ed60cfb | ||
|
|
be1895a080 | ||
|
|
b81b6135f6 | ||
|
|
583ac7960b | ||
|
|
b749bb60fc | ||
|
|
2c6a298758 | ||
|
|
42544cc63b | ||
|
|
d2b81d221b | ||
|
|
618d8723d1 | ||
|
|
8058d3f728 | ||
|
|
0bc10acf02 | ||
|
|
e5866e8aa6 | ||
|
|
b4e907ae77 | ||
|
|
ff23248017 | ||
|
|
ac0d01b724 | ||
|
|
40adbc5e9e | ||
|
|
f36e0c2513 | ||
|
|
5be8c2cdcf | ||
|
|
e915549f6d | ||
|
|
30b3f3190b | ||
|
|
3f7390d104 | ||
|
|
005bfe799c | ||
|
|
c9f1715899 | ||
|
|
faf5eac806 | ||
|
|
9c5ab41b05 | ||
|
|
a8c8539e7a | ||
|
|
a3153f1c9f | ||
|
|
f23ab37a11 | ||
|
|
334da21a3b | ||
|
|
4a7c1f54d2 | ||
|
|
643b06ffa7 | ||
|
|
0f4a781df0 | ||
|
|
d6cc84aabd | ||
|
|
33ad0dce15 | ||
|
|
949c92f6d6 | ||
|
|
48098b5c06 | ||
|
|
afcfb0e341 | ||
|
|
a1364a621a | ||
|
|
4113252f18 | ||
|
|
386d11f51a | ||
|
|
39a506ad52 | ||
|
|
d9c266e3f1 | ||
|
|
f4092c0824 | ||
|
|
4fd20b1c5a | ||
|
|
0d5586b379 | ||
|
|
da77de0a08 | ||
|
|
dd34b155b4 | ||
|
|
26ce102113 | ||
|
|
5082181c49 | ||
|
|
0ee370303c | ||
|
|
720494d870 | ||
|
|
cfe1911723 | ||
|
|
b2318b1f9f | ||
|
|
560db37025 | ||
|
|
dd557f66a5 | ||
|
|
0603f179cc | ||
|
|
21fcaf621d | ||
|
|
794c8dd051 | ||
|
|
f020b571da | ||
|
|
071ea5854f | ||
|
|
bfec890632 | ||
|
|
3bb9d2efd6 | ||
|
|
e117b6f732 | ||
|
|
710026c8ac | ||
|
|
79c45af0d5 | ||
|
|
a75db94da5 | ||
|
|
468261906a | ||
|
|
3f1c9c989b | ||
|
|
3b40de1962 | ||
|
|
2dda1c82c5 | ||
|
|
4bc4d41728 | ||
|
|
c8c160d912 | ||
|
|
99354f7dbe | ||
|
|
279310f9a5 | ||
|
|
d0de79bffa | ||
|
|
fbd42726c0 | ||
|
|
dfe02fbe96 | ||
|
|
a8cffb9ac8 | ||
|
|
bdbf2fe583 | ||
|
|
36776cd615 | ||
|
|
1852d9291d | ||
|
|
0e5a0fdbe5 | ||
|
|
7e59c40091 | ||
|
|
53eba3f062 | ||
|
|
334347abcf | ||
|
|
e43e3c198a | ||
|
|
a8b8da4732 | ||
|
|
ea57f5655c | ||
|
|
68496bd1a1 | ||
|
|
097d4d5735 | ||
|
|
89224c8f88 | ||
|
|
22c0a219aa | ||
|
|
9eed42cea0 | ||
|
|
be24cbed2d | ||
|
|
aef3e0aead | ||
|
|
7a06a41502 | ||
|
|
03948d185d | ||
|
|
40d39d6268 | ||
|
|
66f1506429 | ||
|
|
f19f148297 | ||
|
|
79c6eb5503 | ||
|
|
1204bed80a | ||
|
|
dc91b1f7d6 | ||
|
|
66dc2b33de | ||
|
|
c97c337c79 | ||
|
|
0f7deeeac1 | ||
|
|
8c338675d2 | ||
|
|
b126c761cd | ||
|
|
d02513bb70 | ||
|
|
68e8d69d04 | ||
|
|
4eb680d675 | ||
|
|
068dbfffd8 | ||
|
|
d9ec2efa4b | ||
|
|
1c90e9dd7d | ||
|
|
811942d45e | ||
|
|
dbde239a25 | ||
|
|
ab3ba3e2ca | ||
|
|
79e77b5a10 | ||
|
|
c3395133c9 | ||
|
|
b1d073cdeb | ||
|
|
2c115cd074 | ||
|
|
c99bd27e4d | ||
|
|
25d723b373 | ||
|
|
0cfceab151 | ||
|
|
65a0e056c7 | ||
|
|
b27a215c7f | ||
|
|
e9783d050b | ||
|
|
e1be1ead86 | ||
|
|
b129bed69f | ||
|
|
265ad50ce4 | ||
|
|
3e2570601f | ||
|
|
05513e67d2 | ||
|
|
34e4164e2f | ||
|
|
e4123b4ad9 | ||
|
|
ee6325e3c2 | ||
|
|
a2fce031a2 | ||
|
|
2de30f8b82 | ||
|
|
f1dbc1d41c | ||
|
|
a96734f5be | ||
|
|
b83eee751f | ||
|
|
49451dba20 | ||
|
|
3830f36c0b | ||
|
|
9f7eeb0510 | ||
|
|
58396ea5ce | ||
|
|
b1bb470b0a | ||
|
|
0b6f5581f0 | ||
|
|
c34f762507 | ||
|
|
9eac63c021 | ||
|
|
1fec7d5558 | ||
|
|
5eb084fd3b | ||
|
|
a99db36578 | ||
|
|
bec8a2e7d1 | ||
|
|
38ced8cb09 | ||
|
|
8eff3f5616 | ||
|
|
6f8332bad1 | ||
|
|
01e0c0c21f | ||
|
|
7a1eecc815 | ||
|
|
bec91863e2 | ||
|
|
341b763088 | ||
|
|
e0721493e9 | ||
|
|
2d467f7fa5 | ||
|
|
23ecbfcb3a | ||
|
|
f8ad782991 | ||
|
|
c2684a8149 | ||
|
|
4e7c6b0aea | ||
|
|
c568f5b33c | ||
|
|
e85d4fca5d | ||
|
|
d9601f3136 | ||
|
|
3ee5deb9f3 | ||
|
|
8bc92e88df | ||
|
|
ebe06c9c38 | ||
|
|
b3f32ffc59 | ||
|
|
ecc50790ed | ||
|
|
a09c7b72c7 | ||
|
|
7d767cf0c9 | ||
|
|
b5fc8e7fc1 | ||
|
|
91ec0dce37 | ||
|
|
1aa2786ba0 | ||
|
|
3265fafd76 | ||
|
|
17fd8ee504 | ||
|
|
05adb06aeb | ||
|
|
dacf6377ae | ||
|
|
fa76c5db8d | ||
|
|
17f6d6e8c1 | ||
|
|
347d84526b | ||
|
|
172327613f | ||
|
|
3e1ee7f330 | ||
|
|
22b5888671 | ||
|
|
41edae9719 | ||
|
|
6446a3c4de | ||
|
|
9c4939e051 | ||
|
|
9f9f760ede | ||
|
|
488cb99d4c | ||
|
|
4167ecafd2 | ||
|
|
6ca41ddf80 | ||
|
|
734f83470c | ||
|
|
0f8f7aeb14 | ||
|
|
3b653a95a0 | ||
|
|
06eb389b21 | ||
|
|
17d2d6f959 | ||
|
|
20e065a371 | ||
|
|
57cf826e2c | ||
|
|
dbe8d3a68e | ||
|
|
5a174b2236 | ||
|
|
b8158f3b53 | ||
|
|
e768b8cfea | ||
|
|
c593546575 | ||
|
|
578f93fb90 | ||
|
|
24a90036b7 | ||
|
|
488c0f1828 | ||
|
|
f4717d0a3d | ||
|
|
913c78f45d | ||
|
|
4e90c05472 | ||
|
|
d31d9f2638 | ||
|
|
0cf56d5a9a | ||
|
|
80112e7b35 | ||
|
|
b2f1fac133 | ||
|
|
cd57877175 | ||
|
|
30f515d473 | ||
|
|
199113341f | ||
|
|
64aef69d74 | ||
|
|
2073755498 | ||
|
|
f72b5c1028 | ||
|
|
561b24f6fd | ||
|
|
d41221bd90 | ||
|
|
132c6543b2 | ||
|
|
7152344fe1 | ||
|
|
a04092c99c | ||
|
|
c273fd4d63 | ||
|
|
e06dd9c69f | ||
|
|
463b20013d | ||
|
|
204fbec648 | ||
|
|
d65706aa9c | ||
|
|
f2a1597ecc | ||
|
|
9a2f0bee29 | ||
|
|
3f8833eaf1 | ||
|
|
c3a1e7c6e9 | ||
|
|
f5aec137bd | ||
|
|
20960dbd47 | ||
|
|
e45fd6b4d3 | ||
|
|
8eacba972e | ||
|
|
51732a5adb | ||
|
|
f51873d877 | ||
|
|
d738fa54ad | ||
|
|
ec8ccc94aa | ||
|
|
cb8dca747b | ||
|
|
b16ebbbf7a | ||
|
|
90ccb34916 | ||
|
|
724af8f757 | ||
|
|
125fa8647a | ||
|
|
bf47237d8f | ||
|
|
294b9fc941 | ||
|
|
699c1ab58c | ||
|
|
150ee14de6 | ||
|
|
b207f7a53f | ||
|
|
096698912e | ||
|
|
a5ec1be7d1 | ||
|
|
f9f884a7f3 | ||
|
|
31d59c1e21 | ||
|
|
7663044e9f | ||
|
|
7ceb68d835 | ||
|
|
ac2635a363 | ||
|
|
2496e6e738 | ||
|
|
b4b36c6f22 | ||
|
|
0171ea837f | ||
|
|
79a343c2d9 | ||
|
|
dd5ed48c7e | ||
|
|
e7169cc70d | ||
|
|
c65ee4a424 | ||
|
|
feee162578 | ||
|
|
d1cab4b7f5 | ||
|
|
d2acf314f5 | ||
|
|
b803984773 | ||
|
|
d2582f4fdf | ||
|
|
dfd18ebe24 | ||
|
|
94082bc6a5 | ||
|
|
5c3c72c37e | ||
|
|
d730e068b0 | ||
|
|
b2f8c38842 | ||
|
|
71b2e36429 | ||
|
|
e598c64241 | ||
|
|
2b2ec2c655 | ||
|
|
381d757525 | ||
|
|
d54c59cf74 | ||
|
|
1f481fba4e | ||
|
|
69cd88e4a5 | ||
|
|
b140a9d7de | ||
|
|
b1b530edf2 | ||
|
|
ab63316f83 | ||
|
|
35df8e5d9e | ||
|
|
ea3c82733c | ||
|
|
60f75fe2db | ||
|
|
9214095a64 | ||
|
|
676c43ebab | ||
|
|
e65af8c1e4 | ||
|
|
2321455723 | ||
|
|
9260235224 | ||
|
|
56801c0a08 | ||
|
|
aa738cc086 | ||
|
|
900b0f3eb2 | ||
|
|
b5a64e2c3e | ||
|
|
4163d9e474 | ||
|
|
d769dc2b94 | ||
|
|
c9fc52ec74 | ||
|
|
fe72568d3b | ||
|
|
c5c379f38a | ||
|
|
2050889590 | ||
|
|
6164e2d8eb | ||
|
|
30c175ef29 | ||
|
|
f6fed72b64 | ||
|
|
7596ff2eda | ||
|
|
142976f012 | ||
|
|
ab5c97f75a | ||
|
|
aea3de982a | ||
|
|
83aff6f478 | ||
|
|
6cb7154bf4 | ||
|
|
3aa38d35d7 | ||
|
|
870a76c570 | ||
|
|
206a64eff6 | ||
|
|
6b97839617 | ||
|
|
456d979aa6 | ||
|
|
ea5e0d337c | ||
|
|
9651317695 | ||
|
|
a4cc2076d7 | ||
|
|
db820d500d | ||
|
|
722192127c | ||
|
|
36e23d6432 | ||
|
|
8cfb014f60 | ||
|
|
b4a572c8ae | ||
|
|
531e92e2da | ||
|
|
53a857b706 | ||
|
|
4f5473f8a2 | ||
|
|
1b617a4adc | ||
|
|
7741a43d42 | ||
|
|
776411f882 | ||
|
|
ae4cecc621 | ||
|
|
5be98a46e3 | ||
|
|
1907ef0c99 | ||
|
|
bd99b25848 | ||
|
|
616401ebba | ||
|
|
d0fb6acccd | ||
|
|
12a7b3c73c | ||
|
|
75b28c46af | ||
|
|
93dccf62df | ||
|
|
ec499eecd5 | ||
|
|
7ccd19e21d | ||
|
|
a6459d3641 | ||
|
|
9b26378fdd | ||
|
|
6b8e84332d | ||
|
|
6d56bb8afd | ||
|
|
be9e873277 | ||
|
|
10feeeeb6b | ||
|
|
518af9dc0a | ||
|
|
093fc811eb | ||
|
|
2a8b27033f | ||
|
|
62bddd7c69 | ||
|
|
113f91b3c5 | ||
|
|
d40ad2de89 | ||
|
|
3b7733018c | ||
|
|
e319864669 | ||
|
|
7251813634 | ||
|
|
e024015d5e | ||
|
|
3f5e6d72d6 | ||
|
|
9fd43a30f9 | ||
|
|
0707a0e05f | ||
|
|
f550d847c4 | ||
|
|
1e9a0036e7 | ||
|
|
16cf0a3058 | ||
|
|
0fa19a281c | ||
|
|
9c53f485e6 | ||
|
|
dc131f77d4 | ||
|
|
712601b8c0 | ||
|
|
ff7775b344 | ||
|
|
0512fa6208 | ||
|
|
27ab2b8e30 | ||
|
|
9fa7c9c20a | ||
|
|
6bd0250ef8 | ||
|
|
0d736bcb58 | ||
|
|
c1129604ba | ||
|
|
693f6cbfe7 | ||
|
|
7f397a4da8 | ||
|
|
52ba5c5bb7 | ||
|
|
ce24942a03 | ||
|
|
719afba05a | ||
|
|
c99dd2ba87 | ||
|
|
a59cc94afc | ||
|
|
336cadbc12 | ||
|
|
a946dc69c1 | ||
|
|
e2e95df057 | ||
|
|
e095369e1a | ||
|
|
1c938a5998 | ||
|
|
a45128807e | ||
|
|
d54e52b1a8 | ||
|
|
5743729d11 | ||
|
|
11d8466db1 | ||
|
|
c3360d6c48 | ||
|
|
37158fdb89 | ||
|
|
ae73051797 | ||
|
|
62db3d09ea | ||
|
|
f82aa0adde | ||
|
|
5e5b6cdc42 | ||
|
|
351306eb03 | ||
|
|
e4fffa52d4 | ||
|
|
d622ff4a78 | ||
|
|
b6d4fd16c9 | ||
|
|
a548d695f2 | ||
|
|
499f318192 | ||
|
|
42ecf98344 | ||
|
|
6f08e1e4ff | ||
|
|
9524eb7e37 | ||
|
|
84e478f8fe | ||
|
|
0cc77f99ac | ||
|
|
622049dfad | ||
|
|
65bcc58261 | ||
|
|
9749a2b9b7 | ||
|
|
7b365194ba | ||
|
|
6e5c2730f1 | ||
|
|
8d045f0c96 | ||
|
|
c370358bd1 | ||
|
|
03e8d921d3 | ||
|
|
6cf624c18d | ||
|
|
41acdce165 | ||
|
|
c607444c23 | ||
|
|
940198b9a0 | ||
|
|
9c3cf705c6 | ||
|
|
6027725fae | ||
|
|
054aa52bc8 | ||
|
|
f4a562bc3c | ||
|
|
de8bf33ad9 | ||
|
|
159eaf7899 | ||
|
|
1bc045eb18 | ||
|
|
0f934e48bc | ||
|
|
3ecd29d0b5 | ||
|
|
42498842b5 | ||
|
|
ed4fbf093d | ||
|
|
96b19027ec | ||
|
|
cdb8a1e98c | ||
|
|
8cd26c9380 | ||
|
|
0863f0d564 | ||
|
|
63a2f7b7a5 | ||
|
|
9b562276f3 | ||
|
|
a17e01793e | ||
|
|
7fb061ea76 | ||
|
|
91d864bded | ||
|
|
339d7d16c7 | ||
|
|
8e5762c3a3 | ||
|
|
50a811720f | ||
|
|
c2e1c4c1e1 | ||
|
|
e7b11a2d82 | ||
|
|
61d3582357 | ||
|
|
9e66219690 | ||
|
|
d049b8846c | ||
|
|
bdd760f343 | ||
|
|
1ee88618e8 | ||
|
|
e399474b4e | ||
|
|
e2e55b6e08 | ||
|
|
d0d2bad7f4 | ||
|
|
92bee549a1 | ||
|
|
02121f66de | ||
|
|
115eb6f511 | ||
|
|
d208da577f | ||
|
|
62665899c6 | ||
|
|
7640839f92 | ||
|
|
cda837247a | ||
|
|
8e2ba0d963 | ||
|
|
f4958de885 | ||
|
|
3917e3469d | ||
|
|
5ce79b1761 | ||
|
|
7a621e0cd7 | ||
|
|
34a1c965be | ||
|
|
17b42ae051 | ||
|
|
55ae00af27 | ||
|
|
7e200b1ec7 | ||
|
|
f65a3be231 | ||
|
|
20bec7e26c | ||
|
|
b367955e56 | ||
|
|
84c3ef144d | ||
|
|
ab2c8e3826 | ||
|
|
f2c6ff7904 | ||
|
|
06ee4d08d6 | ||
|
|
e96679c820 | ||
|
|
105e4652c6 | ||
|
|
e5b8f149bf | ||
|
|
334cb23691 | ||
|
|
52d9807648 | ||
|
|
b44a2075a8 | ||
|
|
b60952d684 | ||
|
|
5db362e812 | ||
|
|
0b74168343 | ||
|
|
58e2d7be61 | ||
|
|
728c167660 | ||
|
|
982f274425 | ||
|
|
557c7a2877 | ||
|
|
dbba7af4b5 | ||
|
|
82eefca110 |
No files matched your search
@@ -21,44 +21,297 @@ Clipper/content_scripts/Readability.js
|
||||
Clipper/dist
|
||||
Clipper/icons
|
||||
Clipper/popup/build
|
||||
Clipper/popup/config/webpack.config.js
|
||||
Clipper/popup/config/webpack_config_at_eject_time.js
|
||||
Clipper/popup/node_modules
|
||||
Clipper/popup/scripts/build.js
|
||||
docs/
|
||||
ElectronClient/dist
|
||||
ElectronClient/lib
|
||||
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/plugins/lists.js
|
||||
ElectronClient/lib/vendor/sjcl-rn.js
|
||||
ElectronClient/lib/vendor/sjcl.js
|
||||
ElectronClient/locales
|
||||
ElectronClient/node_modules
|
||||
ElectronClient/packageInfo.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/supportedLocales.js
|
||||
highlight.pack.js
|
||||
Modules/TinyMCE/JoplinLists/
|
||||
node_modules/
|
||||
ReactNativeClient/android
|
||||
ReactNativeClient/ios
|
||||
ReactNativeClient/lib/joplin-renderer/assets/
|
||||
ReactNativeClient/lib/joplin-renderer/vendor/fountain.min.js
|
||||
ReactNativeClient/lib/rnInjectedJs/
|
||||
ReactNativeClient/lib/vendor/
|
||||
ReactNativeClient/lib/welcomeAssets.js
|
||||
ReactNativeClient/locales
|
||||
ReactNativeClient/node_modules
|
||||
ReactNativeClient/pluginAssets/
|
||||
readme/
|
||||
Tools/node_modules
|
||||
Tools/PortableAppsLauncher
|
||||
Server/.git/
|
||||
Server/.github/
|
||||
Server/docs/
|
||||
Server/dist/
|
||||
Server/bin/
|
||||
Server/dist/
|
||||
Server/docs/
|
||||
Server/node_modules/
|
||||
ElectronClient/packageInfo.js
|
||||
ReactNativeClient/pluginAssets/
|
||||
ReactNativeClient/lib/joplin-renderer/vendor/fountain.min.js
|
||||
ReactNativeClient/lib/joplin-renderer/assets/
|
||||
ReactNativeClient/lib/rnInjectedJs/
|
||||
Tools/node_modules
|
||||
Tools/PortableAppsLauncher
|
||||
Modules/TinyMCE/IconPack/postinstall.js
|
||||
Modules/TinyMCE/langs/
|
||||
CliClient/build/
|
||||
|
||||
# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD
|
||||
CliClient/app/LinkSelector.js
|
||||
CliClient/app/services/plugins/PluginRunner.js
|
||||
CliClient/tests/models_Setting.js
|
||||
CliClient/tests/services_CommandService.js
|
||||
CliClient/tests/services_InteropService.js
|
||||
CliClient/tests/services_PluginService.js
|
||||
CliClient/tests/services_rest_Api.js
|
||||
CliClient/tests/services/plugins/sandboxProxy.js
|
||||
CliClient/tests/synchronizer_LockHandler.js
|
||||
CliClient/tests/synchronizer_MigrationHandler.js
|
||||
ElectronClient/app.js
|
||||
ElectronClient/bridge.js
|
||||
ElectronClient/commands/copyDevCommand.js
|
||||
ElectronClient/commands/focusElement.js
|
||||
ElectronClient/commands/startExternalEditing.js
|
||||
ElectronClient/commands/stopExternalEditing.js
|
||||
ElectronClient/commands/toggleExternalEditing.js
|
||||
ElectronClient/ElectronAppWrapper.js
|
||||
ElectronClient/global.d.js
|
||||
ElectronClient/gui/Button/Button.js
|
||||
ElectronClient/gui/ConfigScreen/ButtonBar.js
|
||||
ElectronClient/gui/ConfigScreen/ConfigScreen.js
|
||||
ElectronClient/gui/ConfigScreen/SideBar.js
|
||||
ElectronClient/gui/DropboxLoginScreen.js
|
||||
ElectronClient/gui/ErrorBoundary.js
|
||||
ElectronClient/gui/KeymapConfig/KeymapConfigScreen.js
|
||||
ElectronClient/gui/KeymapConfig/ShortcutRecorder.js
|
||||
ElectronClient/gui/KeymapConfig/styles/index.js
|
||||
ElectronClient/gui/KeymapConfig/utils/getLabel.js
|
||||
ElectronClient/gui/KeymapConfig/utils/useCommandStatus.js
|
||||
ElectronClient/gui/KeymapConfig/utils/useKeymap.js
|
||||
ElectronClient/gui/MainScreen/commands/editAlarm.js
|
||||
ElectronClient/gui/MainScreen/commands/exportPdf.js
|
||||
ElectronClient/gui/MainScreen/commands/hideModalMessage.js
|
||||
ElectronClient/gui/MainScreen/commands/moveToFolder.js
|
||||
ElectronClient/gui/MainScreen/commands/newFolder.js
|
||||
ElectronClient/gui/MainScreen/commands/newNote.js
|
||||
ElectronClient/gui/MainScreen/commands/newTodo.js
|
||||
ElectronClient/gui/MainScreen/commands/print.js
|
||||
ElectronClient/gui/MainScreen/commands/renameFolder.js
|
||||
ElectronClient/gui/MainScreen/commands/renameTag.js
|
||||
ElectronClient/gui/MainScreen/commands/search.js
|
||||
ElectronClient/gui/MainScreen/commands/selectTemplate.js
|
||||
ElectronClient/gui/MainScreen/commands/setTags.js
|
||||
ElectronClient/gui/MainScreen/commands/showModalMessage.js
|
||||
ElectronClient/gui/MainScreen/commands/showNoteContentProperties.js
|
||||
ElectronClient/gui/MainScreen/commands/showNoteProperties.js
|
||||
ElectronClient/gui/MainScreen/commands/showShareNoteDialog.js
|
||||
ElectronClient/gui/MainScreen/commands/toggleEditors.js
|
||||
ElectronClient/gui/MainScreen/commands/toggleNoteList.js
|
||||
ElectronClient/gui/MainScreen/commands/toggleSidebar.js
|
||||
ElectronClient/gui/MainScreen/commands/toggleVisiblePanes.js
|
||||
ElectronClient/gui/MainScreen/MainScreen.js
|
||||
ElectronClient/gui/MenuBar.js
|
||||
ElectronClient/gui/MultiNoteActions.js
|
||||
ElectronClient/gui/NoteContentPropertiesDialog.js
|
||||
ElectronClient/gui/NoteEditor/commands/editorCommandDeclarations.js
|
||||
ElectronClient/gui/NoteEditor/commands/focusElementNoteBody.js
|
||||
ElectronClient/gui/NoteEditor/commands/focusElementNoteTitle.js
|
||||
ElectronClient/gui/NoteEditor/commands/showLocalSearch.js
|
||||
ElectronClient/gui/NoteEditor/commands/showRevisions.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Editor.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/styles/index.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/index.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useKeymap.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/styles/index.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js
|
||||
ElectronClient/gui/NoteEditor/NoteEditor.js
|
||||
ElectronClient/gui/NoteEditor/styles/index.js
|
||||
ElectronClient/gui/NoteEditor/utils/contextMenu.js
|
||||
ElectronClient/gui/NoteEditor/utils/index.js
|
||||
ElectronClient/gui/NoteEditor/utils/resourceHandling.js
|
||||
ElectronClient/gui/NoteEditor/utils/types.js
|
||||
ElectronClient/gui/NoteEditor/utils/useDropHandler.js
|
||||
ElectronClient/gui/NoteEditor/utils/useFolder.js
|
||||
ElectronClient/gui/NoteEditor/utils/useFormNote.js
|
||||
ElectronClient/gui/NoteEditor/utils/useMarkupToHtml.js
|
||||
ElectronClient/gui/NoteEditor/utils/useMessageHandler.js
|
||||
ElectronClient/gui/NoteEditor/utils/useNoteSearchBar.js
|
||||
ElectronClient/gui/NoteEditor/utils/usePluginServiceRegistration.js
|
||||
ElectronClient/gui/NoteEditor/utils/useSearchMarkers.js
|
||||
ElectronClient/gui/NoteEditor/utils/useWindowCommandHandler.js
|
||||
ElectronClient/gui/NoteList/commands/focusElementNoteList.js
|
||||
ElectronClient/gui/NoteList/NoteList.js
|
||||
ElectronClient/gui/NoteListControls/commands/focusSearch.js
|
||||
ElectronClient/gui/NoteListControls/NoteListControls.js
|
||||
ElectronClient/gui/NoteListItem.js
|
||||
ElectronClient/gui/NoteTextViewer.js
|
||||
ElectronClient/gui/NoteToolbar/NoteToolbar.js
|
||||
ElectronClient/gui/OneDriveLoginScreen.js
|
||||
ElectronClient/gui/ResizableLayout/hooks/useLayoutItemSizes.js
|
||||
ElectronClient/gui/ResizableLayout/hooks/useWindowResizeEvent.js
|
||||
ElectronClient/gui/ResizableLayout/ResizableLayout.js
|
||||
ElectronClient/gui/ResourceScreen.js
|
||||
ElectronClient/gui/Root_UpgradeSyncTarget.js
|
||||
ElectronClient/gui/Root.js
|
||||
ElectronClient/gui/SearchBar/hooks/useSearch.js
|
||||
ElectronClient/gui/SearchBar/SearchBar.js
|
||||
ElectronClient/gui/SearchBar/styles/index.js
|
||||
ElectronClient/gui/ShareNoteDialog.js
|
||||
ElectronClient/gui/SideBar/commands/focusElementSideBar.js
|
||||
ElectronClient/gui/SideBar/SideBar.js
|
||||
ElectronClient/gui/SideBar/styles/index.js
|
||||
ElectronClient/gui/StatusScreen/StatusScreen.js
|
||||
ElectronClient/gui/style/StyledInput.js
|
||||
ElectronClient/gui/style/StyledTextInput.js
|
||||
ElectronClient/gui/ToggleEditorsButton/styles/index.js
|
||||
ElectronClient/gui/ToggleEditorsButton/ToggleEditorsButton.js
|
||||
ElectronClient/gui/ToolbarBase.js
|
||||
ElectronClient/gui/ToolbarButton/styles/index.js
|
||||
ElectronClient/gui/ToolbarButton/ToolbarButton.js
|
||||
ElectronClient/gui/utils/NoteListUtils.js
|
||||
ElectronClient/InteropServiceHelper.js
|
||||
ElectronClient/services/bridge.js
|
||||
ElectronClient/services/plugins/hooks/useThemeCss.js
|
||||
ElectronClient/services/plugins/hooks/useViewIsReady.js
|
||||
ElectronClient/services/plugins/PlatformImplementation.js
|
||||
ElectronClient/services/plugins/PluginRunner.js
|
||||
ElectronClient/services/plugins/UserWebview.js
|
||||
ElectronClient/services/plugins/UserWebviewDialog.js
|
||||
ElectronClient/services/plugins/UserWebviewDialogButtonBar.js
|
||||
ReactNativeClient/lib/AsyncActionQueue.js
|
||||
ReactNativeClient/lib/BaseApplication.js
|
||||
ReactNativeClient/lib/checkPermissions.js
|
||||
ReactNativeClient/lib/commands/historyBackward.js
|
||||
ReactNativeClient/lib/commands/historyForward.js
|
||||
ReactNativeClient/lib/commands/synchronize.js
|
||||
ReactNativeClient/lib/components/BackButtonDialogBox.js
|
||||
ReactNativeClient/lib/components/screens/UpgradeSyncTargetScreen.js
|
||||
ReactNativeClient/lib/errorUtils.js
|
||||
ReactNativeClient/lib/eventManager.js
|
||||
ReactNativeClient/lib/hooks/useEffectDebugger.js
|
||||
ReactNativeClient/lib/hooks/useImperativeHandlerDebugger.js
|
||||
ReactNativeClient/lib/hooks/usePrevious.js
|
||||
ReactNativeClient/lib/hooks/usePropsDebugger.js
|
||||
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/checkbox.js
|
||||
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fence.js
|
||||
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.js
|
||||
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/sanitize_html.js
|
||||
ReactNativeClient/lib/JoplinServerApi.js
|
||||
ReactNativeClient/lib/locale.js
|
||||
ReactNativeClient/lib/Logger.js
|
||||
ReactNativeClient/lib/markdownUtils.js
|
||||
ReactNativeClient/lib/models/Alarm.js
|
||||
ReactNativeClient/lib/models/Setting.js
|
||||
ReactNativeClient/lib/ntpDate.js
|
||||
ReactNativeClient/lib/reducer.js
|
||||
ReactNativeClient/lib/services/AlarmService.js
|
||||
ReactNativeClient/lib/services/AlarmServiceDriver.android.js
|
||||
ReactNativeClient/lib/services/AlarmServiceDriver.ios.js
|
||||
ReactNativeClient/lib/services/AlarmServiceDriverNode.js
|
||||
ReactNativeClient/lib/services/BaseService.js
|
||||
ReactNativeClient/lib/services/BooleanExpression.js
|
||||
ReactNativeClient/lib/services/commands/MenuUtils.js
|
||||
ReactNativeClient/lib/services/commands/propsHaveChanged.js
|
||||
ReactNativeClient/lib/services/commands/ToolbarButtonUtils.js
|
||||
ReactNativeClient/lib/services/CommandService.js
|
||||
ReactNativeClient/lib/services/contextkey/contextkey.js
|
||||
ReactNativeClient/lib/services/debug/populateDatabase.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Exporter_Base.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Exporter_Custom.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Exporter_Html.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Exporter_Jex.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Exporter_Md.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Exporter_Raw.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Importer_Base.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Importer_Custom.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToHtml.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToMd.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Importer_Jex.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Importer_Md.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Importer_Raw.js
|
||||
ReactNativeClient/lib/services/interop/InteropService.js
|
||||
ReactNativeClient/lib/services/interop/types.js
|
||||
ReactNativeClient/lib/services/keychain/KeychainService.js
|
||||
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.dummy.js
|
||||
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.mobile.js
|
||||
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.node.js
|
||||
ReactNativeClient/lib/services/keychain/KeychainServiceDriverBase.js
|
||||
ReactNativeClient/lib/services/KeymapService.js
|
||||
ReactNativeClient/lib/services/plugins/api/Global.js
|
||||
ReactNativeClient/lib/services/plugins/api/Joplin.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinCommands.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinData.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinFilters.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinInterop.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinPlugins.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinSettings.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinViews.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinViewsDialogs.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinViewsMenuItems.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinViewsPanels.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinViewsToolbarButtons.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinWorkspace.js
|
||||
ReactNativeClient/lib/services/plugins/api/types.js
|
||||
ReactNativeClient/lib/services/plugins/BasePluginRunner.js
|
||||
ReactNativeClient/lib/services/plugins/MenuItemController.js
|
||||
ReactNativeClient/lib/services/plugins/Plugin.js
|
||||
ReactNativeClient/lib/services/plugins/PluginService.js
|
||||
ReactNativeClient/lib/services/plugins/reducer.js
|
||||
ReactNativeClient/lib/services/plugins/sandboxProxy.js
|
||||
ReactNativeClient/lib/services/plugins/ToolbarButtonController.js
|
||||
ReactNativeClient/lib/services/plugins/utils/createViewHandle.js
|
||||
ReactNativeClient/lib/services/plugins/utils/executeSandboxCall.js
|
||||
ReactNativeClient/lib/services/plugins/utils/manifestFromObject.js
|
||||
ReactNativeClient/lib/services/plugins/utils/mapEventHandlersToIds.js
|
||||
ReactNativeClient/lib/services/plugins/utils/types.js
|
||||
ReactNativeClient/lib/services/plugins/ViewController.js
|
||||
ReactNativeClient/lib/services/plugins/WebviewController.js
|
||||
ReactNativeClient/lib/services/ResourceEditWatcher/index.js
|
||||
ReactNativeClient/lib/services/ResourceEditWatcher/reducer.js
|
||||
ReactNativeClient/lib/services/rest/actionApi.desktop.js
|
||||
ReactNativeClient/lib/services/rest/Api.js
|
||||
ReactNativeClient/lib/services/rest/errors.js
|
||||
ReactNativeClient/lib/services/searchengine/filterParser.js
|
||||
ReactNativeClient/lib/services/searchengine/queryBuilder.js
|
||||
ReactNativeClient/lib/services/SettingUtils.js
|
||||
ReactNativeClient/lib/services/synchronizer/gui/useSyncTargetUpgrade.js
|
||||
ReactNativeClient/lib/services/synchronizer/LockHandler.js
|
||||
ReactNativeClient/lib/services/synchronizer/MigrationHandler.js
|
||||
ReactNativeClient/lib/services/synchronizer/migrations/1.js
|
||||
ReactNativeClient/lib/services/synchronizer/migrations/2.js
|
||||
ReactNativeClient/lib/services/synchronizer/utils/types.js
|
||||
ReactNativeClient/lib/services/UndoRedoService.js
|
||||
ReactNativeClient/lib/ShareExtension.js
|
||||
ReactNativeClient/lib/shareHandler.js
|
||||
ReactNativeClient/lib/shim.js
|
||||
ReactNativeClient/lib/Synchronizer.js
|
||||
ReactNativeClient/lib/theme.js
|
||||
ReactNativeClient/lib/themes/aritimDark.js
|
||||
ReactNativeClient/lib/themes/dark.js
|
||||
ReactNativeClient/lib/themes/dracula.js
|
||||
ReactNativeClient/lib/themes/light.js
|
||||
ReactNativeClient/lib/themes/nord.js
|
||||
ReactNativeClient/lib/themes/oledDark.js
|
||||
ReactNativeClient/lib/themes/solarizedDark.js
|
||||
ReactNativeClient/lib/themes/solarizedLight.js
|
||||
ReactNativeClient/lib/themes/type.js
|
||||
ReactNativeClient/lib/uuid.js
|
||||
ReactNativeClient/lib/versionInfo.js
|
||||
ReactNativeClient/PluginAssetsLoader.js
|
||||
ReactNativeClient/setUpQuickActions.js
|
||||
# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD
|
||||
@@ -4,9 +4,9 @@ module.exports = {
|
||||
'es6': true,
|
||||
'node': true,
|
||||
},
|
||||
"parser": "@typescript-eslint/parser",
|
||||
'parser': '@typescript-eslint/parser',
|
||||
'extends': ['eslint:recommended'],
|
||||
"settings": {
|
||||
'settings': {
|
||||
'react': {
|
||||
'version': '16.12',
|
||||
},
|
||||
@@ -32,69 +32,105 @@ module.exports = {
|
||||
'browserSupportsPromises_': true,
|
||||
'chrome': 'readonly',
|
||||
'browser': 'readonly',
|
||||
|
||||
'tinymce': 'readonly',
|
||||
},
|
||||
'parserOptions': {
|
||||
'ecmaVersion': 2018,
|
||||
"ecmaFeatures": {
|
||||
"jsx": true,
|
||||
},
|
||||
"sourceType": "module",
|
||||
'ecmaFeatures': {
|
||||
'jsx': true,
|
||||
},
|
||||
'sourceType': 'module',
|
||||
},
|
||||
'rules': {
|
||||
// -------------------------------
|
||||
// Code correctness
|
||||
// -------------------------------
|
||||
"react/jsx-uses-react": "error",
|
||||
"react/jsx-uses-vars": "error",
|
||||
"no-unused-vars": "error",
|
||||
"no-constant-condition": 0,
|
||||
"no-prototype-builtins": 0,
|
||||
'react/jsx-uses-react': 'error',
|
||||
'react/jsx-uses-vars': 'error',
|
||||
'no-unused-vars': ['error', { 'argsIgnorePattern': '^_' }],
|
||||
'@typescript-eslint/no-unused-vars': ['error', { 'argsIgnorePattern': '^_' }],
|
||||
'@typescript-eslint/explicit-member-accessibility': 'off',
|
||||
'no-constant-condition': 0,
|
||||
'no-prototype-builtins': 0,
|
||||
// This error is always a false positive so far since it detects
|
||||
// possible race conditions in contexts where we know it cannot happen.
|
||||
"require-atomic-updates": 0,
|
||||
'require-atomic-updates': 0,
|
||||
'prefer-const': ['error'],
|
||||
'no-var': ['error'],
|
||||
'no-new-func': ['error'],
|
||||
'import/prefer-default-export': ['error'],
|
||||
'import/first': ['error'],
|
||||
'no-array-constructor': ['error'],
|
||||
'radix': ['error'],
|
||||
|
||||
// Warn only for now because fixing everything would take too much
|
||||
// refactoring, but new code should try to stick to it.
|
||||
'complexity': ['warn', { max: 10 }],
|
||||
|
||||
// Checks rules of Hooks
|
||||
"react-hooks/rules-of-hooks": "error",
|
||||
'react-hooks/rules-of-hooks': 'error',
|
||||
// Checks effect dependencies
|
||||
"react-hooks/exhaustive-deps": "error",
|
||||
// Disable because of this: https://github.com/facebook/react/issues/16265
|
||||
// "react-hooks/exhaustive-deps": "warn",
|
||||
|
||||
// -------------------------------
|
||||
// Formatting
|
||||
// -------------------------------
|
||||
"space-in-parens": ["error", "never"],
|
||||
"semi": ["error", "always"],
|
||||
"eol-last": ["error", "always"],
|
||||
"quotes": ["error", "single"],
|
||||
"indent": ["error", "tab"],
|
||||
"comma-dangle": ["error", "always-multiline"],
|
||||
"no-trailing-spaces": "error",
|
||||
"linebreak-style": ["error", "unix"],
|
||||
"prefer-template": ["error"],
|
||||
"template-curly-spacing": ["error", "never"],
|
||||
"object-curly-spacing": ["error", "always"],
|
||||
"array-bracket-spacing": ["error", "never"],
|
||||
"key-spacing": ["error", {
|
||||
"beforeColon": false,
|
||||
"afterColon": true,
|
||||
"mode": "strict"
|
||||
'space-in-parens': ['error', 'never'],
|
||||
'space-infix-ops': ['error'],
|
||||
'curly': ['error', 'multi-line', 'consistent'],
|
||||
'semi': ['error', 'always'],
|
||||
'eol-last': ['error', 'always'],
|
||||
'quotes': ['error', 'single'],
|
||||
'indent': ['error', 'tab'],
|
||||
'comma-dangle': ['error', {
|
||||
'arrays': 'always-multiline',
|
||||
'objects': 'always-multiline',
|
||||
'imports': 'always-multiline',
|
||||
'exports': 'always-multiline',
|
||||
'functions': 'never',
|
||||
}],
|
||||
"block-spacing": ["error"],
|
||||
"brace-style": ["error", "1tbs", { "allowSingleLine": true }],
|
||||
"no-spaced-func": ["error"],
|
||||
"func-call-spacing": ["error"],
|
||||
"space-before-function-paren": ["error", {
|
||||
"anonymous": "never",
|
||||
"named": "never",
|
||||
"asyncArrow": "always"
|
||||
'no-trailing-spaces': 'error',
|
||||
'linebreak-style': ['error', 'unix'],
|
||||
'prefer-template': ['error'],
|
||||
'template-curly-spacing': ['error', 'never'],
|
||||
'object-curly-spacing': ['error', 'always'],
|
||||
'array-bracket-spacing': ['error', 'never'],
|
||||
'key-spacing': ['error', {
|
||||
'beforeColon': false,
|
||||
'afterColon': true,
|
||||
'mode': 'strict',
|
||||
}],
|
||||
"multiline-comment-style": ["error", "separate-lines"],
|
||||
"space-before-blocks": "error",
|
||||
"spaced-comment": ["error", "always"],
|
||||
"keyword-spacing": ["error", { "before": true, "after": true }]
|
||||
'block-spacing': ['error'],
|
||||
'brace-style': ['error', '1tbs', { 'allowSingleLine': true }],
|
||||
'no-spaced-func': ['error'],
|
||||
'func-call-spacing': ['error'],
|
||||
'space-before-function-paren': ['error', {
|
||||
'anonymous': 'never',
|
||||
'named': 'never',
|
||||
'asyncArrow': 'always',
|
||||
}],
|
||||
'multiline-comment-style': ['error', 'separate-lines'],
|
||||
'space-before-blocks': 'error',
|
||||
'spaced-comment': ['error', 'always'],
|
||||
'keyword-spacing': ['error', { 'before': true, 'after': true }],
|
||||
},
|
||||
"plugins": [
|
||||
"react",
|
||||
"@typescript-eslint",
|
||||
"react-hooks"
|
||||
'plugins': [
|
||||
'react',
|
||||
'@typescript-eslint',
|
||||
'react-hooks',
|
||||
'import',
|
||||
],
|
||||
'overrides': [
|
||||
{
|
||||
// enable the rule specifically for TypeScript files
|
||||
'files': ['*.ts', '*.tsx'],
|
||||
'rules': {
|
||||
// Warn only because it would make it difficult to convert JS classes to TypeScript, unless we
|
||||
// make everything public which is not great. New code however should specify member accessibility.
|
||||
'@typescript-eslint/explicit-member-accessibility': ['warn'],
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
@@ -0,0 +1,15 @@
|
||||
---
|
||||
name: "\U0001F914 Feature requests and support"
|
||||
about: 'For non-bug issues we recommend using the forum, where you''ll be more likely
|
||||
to get an answer: https://discourse.joplinapp.org/'
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
If this is a feature request or a support query, please note that you'll not get an answer here.
|
||||
|
||||
Instead we recommend using the forum where you'll are a lot more likely to get an answer: https://discourse.joplinapp.org/
|
||||
|
||||
The forum is also the right place to submit a feature request so that it can be discussed by other users.
|
||||
@@ -1,8 +1,9 @@
|
||||
---
|
||||
name: "🐛 Bug Report"
|
||||
name: "\U0001F41B Bug Report"
|
||||
about: Report a reproducible bug or regression in Joplin.
|
||||
title: ''
|
||||
labels: 'bug'
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
---
|
||||
name: "🤔 Questions and Help"
|
||||
about: The issue tracker is not for questions. Please ask questions on https://discourse.joplinapp.org/.
|
||||
title: ''
|
||||
labels: 'invalid'
|
||||
|
||||
---
|
||||
|
||||
⚠🚨⛔ The issue tracker is not for questions. ⛔🚨⚠
|
||||
|
||||
As it happens, support requests that are created as issues are likely to be closed. We want to make sure you are able to find the help you seek.
|
||||
|
||||
## Questions and Help
|
||||
|
||||
Please read the [documentation](https://joplinapp.org/) and [FAQ](https://joplinapp.org/faq/) first.
|
||||
|
||||
### https://discourse.joplinapp.org/
|
||||
|
||||
If you have still questions related to Joplin, please open a topic in the [forum](https://discourse.joplinapp.org/).
|
||||
You can use your GitHub credentials to login to the forum.
|
||||
|
||||
## Links
|
||||
|
||||
- Documentation: https://joplinapp.org
|
||||
- FAQ: https://joplinapp.org/faq/
|
||||
- Forum: https://discourse.joplinapp.org
|
||||
- How to enable end-to-end encryption: https://joplinapp.org/e2ee/
|
||||
- API documentation: https://joplinapp.org/api/
|
||||
- How to enable debug mode: https://joplinapp.org/debugging/
|
||||
@@ -2,14 +2,24 @@
|
||||
|
||||
Please prefix the title with the platform you are targetting:
|
||||
|
||||
Here are some examples of good titles:
|
||||
|
||||
- Desktop: Resolves #123: Added new setting to change font
|
||||
- Mobile, Desktop: Fixes #456: Fixed config screen error
|
||||
- All: Resolves #777: Made synchronisation faster
|
||||
|
||||
And here's an explanation of the title format:
|
||||
|
||||
- "Desktop" for the Windows/macOS/Linux app (Electron app)
|
||||
- "Mobile" for the mobile app (or "Android" / "iOS" if the pull request only applies to one of the mobile platforms)
|
||||
- "CLI" for the CLI app
|
||||
|
||||
If it's two platforms, separate them with commas - "Desktop, Mobile" or if it's for all platforms, prefix with "All".
|
||||
|
||||
If it's not related to any platform (such as a translation, change to the documentation, etc.), simply don't add a platform.
|
||||
|
||||
For example: "Desktop: Added new setting to change font", or "Mobile: Fixed config screen error"
|
||||
Then please append the issue that you've addressed or fixed. Use "Resolves #123" for new features or improvements and "Fixes #123" for bug fixes.
|
||||
|
||||
PLEASE READ THE GUIDE FIRST: https://github.com/laurent22/joplin/blob/master/CONTRIBUTING.md
|
||||
AND PLEASE READ THE GUIDE: https://github.com/laurent22/joplin/blob/dev/CONTRIBUTING.md
|
||||
|
||||
-->
|
||||
@@ -1,18 +1,15 @@
|
||||
# Configuration for probot-stale - https://github.com/probot/stale
|
||||
# Number of days of inactivity before an issue becomes stale
|
||||
daysUntilStale: 90
|
||||
daysUntilStale: 30
|
||||
# Number of days of inactivity before a stale issue is closed
|
||||
daysUntilClose: 7
|
||||
# Issues with these labels will never be considered stale
|
||||
exemptLabels:
|
||||
- "good first issue"
|
||||
- "essential"
|
||||
- "essential-reviewed"
|
||||
- "help wanted"
|
||||
- "nice to have"
|
||||
- "upstream"
|
||||
- "backlog"
|
||||
- "high"
|
||||
- "spec"
|
||||
# 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
|
||||
|
||||
@@ -37,25 +37,275 @@ _mydocs
|
||||
Assets/DownloadBadges*.psd
|
||||
node_modules
|
||||
Tools/github_oauth_token.txt
|
||||
CliClient/tests/support/amazon-s3-auth.json
|
||||
_releases
|
||||
ReactNativeClient/lib/csstojs/
|
||||
ReactNativeClient/lib/rnInjectedJs/
|
||||
ElectronClient/gui/note-viewer/fonts/
|
||||
ElectronClient/gui/note-viewer/lib.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/supportedLocales.js
|
||||
Clipper-source/
|
||||
Clipper/joplin-webclipper-source.zip
|
||||
joplin-webclipper-source.zip
|
||||
Tools/commit_hook.txt
|
||||
.vscode/*
|
||||
*.map
|
||||
ReactNativeClient/lib/sql-extensions/spellfix.so
|
||||
ReactNativeClient/lib/sql-extensions/spellfix.dylib
|
||||
CliClient/build/
|
||||
plugin_types/
|
||||
|
||||
# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD
|
||||
CliClient/app/LinkSelector.js
|
||||
CliClient/app/services/plugins/PluginRunner.js
|
||||
CliClient/tests/models_Setting.js
|
||||
CliClient/tests/services_CommandService.js
|
||||
CliClient/tests/services_InteropService.js
|
||||
CliClient/tests/services_PluginService.js
|
||||
CliClient/tests/services_rest_Api.js
|
||||
CliClient/tests/services/plugins/sandboxProxy.js
|
||||
CliClient/tests/synchronizer_LockHandler.js
|
||||
CliClient/tests/synchronizer_MigrationHandler.js
|
||||
ElectronClient/app.js
|
||||
ElectronClient/bridge.js
|
||||
ElectronClient/commands/copyDevCommand.js
|
||||
ElectronClient/commands/focusElement.js
|
||||
ElectronClient/commands/startExternalEditing.js
|
||||
ElectronClient/commands/stopExternalEditing.js
|
||||
ElectronClient/commands/toggleExternalEditing.js
|
||||
ElectronClient/ElectronAppWrapper.js
|
||||
ElectronClient/global.d.js
|
||||
ElectronClient/gui/Button/Button.js
|
||||
ElectronClient/gui/ConfigScreen/ButtonBar.js
|
||||
ElectronClient/gui/ConfigScreen/ConfigScreen.js
|
||||
ElectronClient/gui/ConfigScreen/SideBar.js
|
||||
ElectronClient/gui/DropboxLoginScreen.js
|
||||
ElectronClient/gui/ErrorBoundary.js
|
||||
ElectronClient/gui/KeymapConfig/KeymapConfigScreen.js
|
||||
ElectronClient/gui/KeymapConfig/ShortcutRecorder.js
|
||||
ElectronClient/gui/KeymapConfig/styles/index.js
|
||||
ElectronClient/gui/KeymapConfig/utils/getLabel.js
|
||||
ElectronClient/gui/KeymapConfig/utils/useCommandStatus.js
|
||||
ElectronClient/gui/KeymapConfig/utils/useKeymap.js
|
||||
ElectronClient/gui/MainScreen/commands/editAlarm.js
|
||||
ElectronClient/gui/MainScreen/commands/exportPdf.js
|
||||
ElectronClient/gui/MainScreen/commands/hideModalMessage.js
|
||||
ElectronClient/gui/MainScreen/commands/moveToFolder.js
|
||||
ElectronClient/gui/MainScreen/commands/newFolder.js
|
||||
ElectronClient/gui/MainScreen/commands/newNote.js
|
||||
ElectronClient/gui/MainScreen/commands/newTodo.js
|
||||
ElectronClient/gui/MainScreen/commands/print.js
|
||||
ElectronClient/gui/MainScreen/commands/renameFolder.js
|
||||
ElectronClient/gui/MainScreen/commands/renameTag.js
|
||||
ElectronClient/gui/MainScreen/commands/search.js
|
||||
ElectronClient/gui/MainScreen/commands/selectTemplate.js
|
||||
ElectronClient/gui/MainScreen/commands/setTags.js
|
||||
ElectronClient/gui/MainScreen/commands/showModalMessage.js
|
||||
ElectronClient/gui/MainScreen/commands/showNoteContentProperties.js
|
||||
ElectronClient/gui/MainScreen/commands/showNoteProperties.js
|
||||
ElectronClient/gui/MainScreen/commands/showShareNoteDialog.js
|
||||
ElectronClient/gui/MainScreen/commands/toggleEditors.js
|
||||
ElectronClient/gui/MainScreen/commands/toggleNoteList.js
|
||||
ElectronClient/gui/MainScreen/commands/toggleSidebar.js
|
||||
ElectronClient/gui/MainScreen/commands/toggleVisiblePanes.js
|
||||
ElectronClient/gui/MainScreen/MainScreen.js
|
||||
ElectronClient/gui/MenuBar.js
|
||||
ElectronClient/gui/MultiNoteActions.js
|
||||
ElectronClient/gui/NoteContentPropertiesDialog.js
|
||||
ElectronClient/gui/NoteEditor/commands/editorCommandDeclarations.js
|
||||
ElectronClient/gui/NoteEditor/commands/focusElementNoteBody.js
|
||||
ElectronClient/gui/NoteEditor/commands/focusElementNoteTitle.js
|
||||
ElectronClient/gui/NoteEditor/commands/showLocalSearch.js
|
||||
ElectronClient/gui/NoteEditor/commands/showRevisions.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/CodeMirror.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Editor.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/styles/index.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/Toolbar.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/index.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useJoplinMode.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useKeymap.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useLineSorting.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useListIdent.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/CodeMirror/utils/useScrollUtils.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/styles/index.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.js
|
||||
ElectronClient/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js
|
||||
ElectronClient/gui/NoteEditor/NoteEditor.js
|
||||
ElectronClient/gui/NoteEditor/styles/index.js
|
||||
ElectronClient/gui/NoteEditor/utils/contextMenu.js
|
||||
ElectronClient/gui/NoteEditor/utils/index.js
|
||||
ElectronClient/gui/NoteEditor/utils/resourceHandling.js
|
||||
ElectronClient/gui/NoteEditor/utils/types.js
|
||||
ElectronClient/gui/NoteEditor/utils/useDropHandler.js
|
||||
ElectronClient/gui/NoteEditor/utils/useFolder.js
|
||||
ElectronClient/gui/NoteEditor/utils/useFormNote.js
|
||||
ElectronClient/gui/NoteEditor/utils/useMarkupToHtml.js
|
||||
ElectronClient/gui/NoteEditor/utils/useMessageHandler.js
|
||||
ElectronClient/gui/NoteEditor/utils/useNoteSearchBar.js
|
||||
ElectronClient/gui/NoteEditor/utils/usePluginServiceRegistration.js
|
||||
ElectronClient/gui/NoteEditor/utils/useSearchMarkers.js
|
||||
ElectronClient/gui/NoteEditor/utils/useWindowCommandHandler.js
|
||||
ElectronClient/gui/NoteList/commands/focusElementNoteList.js
|
||||
ElectronClient/gui/NoteList/NoteList.js
|
||||
ElectronClient/gui/NoteListControls/commands/focusSearch.js
|
||||
ElectronClient/gui/NoteListControls/NoteListControls.js
|
||||
ElectronClient/gui/NoteListItem.js
|
||||
ElectronClient/gui/NoteTextViewer.js
|
||||
ElectronClient/gui/NoteToolbar/NoteToolbar.js
|
||||
ElectronClient/gui/OneDriveLoginScreen.js
|
||||
ElectronClient/gui/ResizableLayout/hooks/useLayoutItemSizes.js
|
||||
ElectronClient/gui/ResizableLayout/hooks/useWindowResizeEvent.js
|
||||
ElectronClient/gui/ResizableLayout/ResizableLayout.js
|
||||
ElectronClient/gui/ResourceScreen.js
|
||||
ElectronClient/gui/Root_UpgradeSyncTarget.js
|
||||
ElectronClient/gui/Root.js
|
||||
ElectronClient/gui/SearchBar/hooks/useSearch.js
|
||||
ElectronClient/gui/SearchBar/SearchBar.js
|
||||
ElectronClient/gui/SearchBar/styles/index.js
|
||||
ElectronClient/gui/ShareNoteDialog.js
|
||||
ElectronClient/gui/SideBar/commands/focusElementSideBar.js
|
||||
ElectronClient/gui/SideBar/SideBar.js
|
||||
ElectronClient/gui/SideBar/styles/index.js
|
||||
ElectronClient/gui/StatusScreen/StatusScreen.js
|
||||
ElectronClient/gui/style/StyledInput.js
|
||||
ElectronClient/gui/style/StyledTextInput.js
|
||||
ElectronClient/gui/ToggleEditorsButton/styles/index.js
|
||||
ElectronClient/gui/ToggleEditorsButton/ToggleEditorsButton.js
|
||||
ElectronClient/gui/ToolbarBase.js
|
||||
ElectronClient/gui/ToolbarButton/styles/index.js
|
||||
ElectronClient/gui/ToolbarButton/ToolbarButton.js
|
||||
ElectronClient/gui/utils/NoteListUtils.js
|
||||
ElectronClient/InteropServiceHelper.js
|
||||
ElectronClient/services/bridge.js
|
||||
ElectronClient/services/plugins/hooks/useThemeCss.js
|
||||
ElectronClient/services/plugins/hooks/useViewIsReady.js
|
||||
ElectronClient/services/plugins/PlatformImplementation.js
|
||||
ElectronClient/services/plugins/PluginRunner.js
|
||||
ElectronClient/services/plugins/UserWebview.js
|
||||
ElectronClient/services/plugins/UserWebviewDialog.js
|
||||
ElectronClient/services/plugins/UserWebviewDialogButtonBar.js
|
||||
ReactNativeClient/lib/AsyncActionQueue.js
|
||||
ReactNativeClient/lib/BaseApplication.js
|
||||
ReactNativeClient/lib/checkPermissions.js
|
||||
ReactNativeClient/lib/commands/historyBackward.js
|
||||
ReactNativeClient/lib/commands/historyForward.js
|
||||
ReactNativeClient/lib/commands/synchronize.js
|
||||
ReactNativeClient/lib/components/BackButtonDialogBox.js
|
||||
ReactNativeClient/lib/components/screens/UpgradeSyncTargetScreen.js
|
||||
ReactNativeClient/lib/errorUtils.js
|
||||
ReactNativeClient/lib/eventManager.js
|
||||
ReactNativeClient/lib/hooks/useEffectDebugger.js
|
||||
ReactNativeClient/lib/hooks/useImperativeHandlerDebugger.js
|
||||
ReactNativeClient/lib/hooks/usePrevious.js
|
||||
ReactNativeClient/lib/hooks/usePropsDebugger.js
|
||||
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/checkbox.js
|
||||
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/fence.js
|
||||
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.js
|
||||
ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/sanitize_html.js
|
||||
ReactNativeClient/lib/JoplinServerApi.js
|
||||
ReactNativeClient/lib/locale.js
|
||||
ReactNativeClient/lib/Logger.js
|
||||
ReactNativeClient/lib/markdownUtils.js
|
||||
ReactNativeClient/lib/models/Alarm.js
|
||||
ReactNativeClient/lib/models/Setting.js
|
||||
ReactNativeClient/lib/ntpDate.js
|
||||
ReactNativeClient/lib/reducer.js
|
||||
ReactNativeClient/lib/services/AlarmService.js
|
||||
ReactNativeClient/lib/services/AlarmServiceDriver.android.js
|
||||
ReactNativeClient/lib/services/AlarmServiceDriver.ios.js
|
||||
ReactNativeClient/lib/services/AlarmServiceDriverNode.js
|
||||
ReactNativeClient/lib/services/BaseService.js
|
||||
ReactNativeClient/lib/services/BooleanExpression.js
|
||||
ReactNativeClient/lib/services/commands/MenuUtils.js
|
||||
ReactNativeClient/lib/services/commands/propsHaveChanged.js
|
||||
ReactNativeClient/lib/services/commands/ToolbarButtonUtils.js
|
||||
ReactNativeClient/lib/services/CommandService.js
|
||||
ReactNativeClient/lib/services/contextkey/contextkey.js
|
||||
ReactNativeClient/lib/services/debug/populateDatabase.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Exporter_Base.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Exporter_Custom.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Exporter_Html.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Exporter_Jex.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Exporter_Md.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Exporter_Raw.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Importer_Base.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Importer_Custom.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToHtml.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Importer_EnexToMd.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Importer_Jex.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Importer_Md.js
|
||||
ReactNativeClient/lib/services/interop/InteropService_Importer_Raw.js
|
||||
ReactNativeClient/lib/services/interop/InteropService.js
|
||||
ReactNativeClient/lib/services/interop/types.js
|
||||
ReactNativeClient/lib/services/keychain/KeychainService.js
|
||||
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.dummy.js
|
||||
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.mobile.js
|
||||
ReactNativeClient/lib/services/keychain/KeychainServiceDriver.node.js
|
||||
ReactNativeClient/lib/services/keychain/KeychainServiceDriverBase.js
|
||||
ReactNativeClient/lib/services/KeymapService.js
|
||||
ReactNativeClient/lib/services/plugins/api/Global.js
|
||||
ReactNativeClient/lib/services/plugins/api/Joplin.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinCommands.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinData.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinFilters.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinInterop.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinPlugins.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinSettings.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinViews.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinViewsDialogs.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinViewsMenuItems.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinViewsPanels.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinViewsToolbarButtons.js
|
||||
ReactNativeClient/lib/services/plugins/api/JoplinWorkspace.js
|
||||
ReactNativeClient/lib/services/plugins/api/types.js
|
||||
ReactNativeClient/lib/services/plugins/BasePluginRunner.js
|
||||
ReactNativeClient/lib/services/plugins/MenuItemController.js
|
||||
ReactNativeClient/lib/services/plugins/Plugin.js
|
||||
ReactNativeClient/lib/services/plugins/PluginService.js
|
||||
ReactNativeClient/lib/services/plugins/reducer.js
|
||||
ReactNativeClient/lib/services/plugins/sandboxProxy.js
|
||||
ReactNativeClient/lib/services/plugins/ToolbarButtonController.js
|
||||
ReactNativeClient/lib/services/plugins/utils/createViewHandle.js
|
||||
ReactNativeClient/lib/services/plugins/utils/executeSandboxCall.js
|
||||
ReactNativeClient/lib/services/plugins/utils/manifestFromObject.js
|
||||
ReactNativeClient/lib/services/plugins/utils/mapEventHandlersToIds.js
|
||||
ReactNativeClient/lib/services/plugins/utils/types.js
|
||||
ReactNativeClient/lib/services/plugins/ViewController.js
|
||||
ReactNativeClient/lib/services/plugins/WebviewController.js
|
||||
ReactNativeClient/lib/services/ResourceEditWatcher/index.js
|
||||
ReactNativeClient/lib/services/ResourceEditWatcher/reducer.js
|
||||
ReactNativeClient/lib/services/rest/actionApi.desktop.js
|
||||
ReactNativeClient/lib/services/rest/Api.js
|
||||
ReactNativeClient/lib/services/rest/errors.js
|
||||
ReactNativeClient/lib/services/searchengine/filterParser.js
|
||||
ReactNativeClient/lib/services/searchengine/queryBuilder.js
|
||||
ReactNativeClient/lib/services/SettingUtils.js
|
||||
ReactNativeClient/lib/services/synchronizer/gui/useSyncTargetUpgrade.js
|
||||
ReactNativeClient/lib/services/synchronizer/LockHandler.js
|
||||
ReactNativeClient/lib/services/synchronizer/MigrationHandler.js
|
||||
ReactNativeClient/lib/services/synchronizer/migrations/1.js
|
||||
ReactNativeClient/lib/services/synchronizer/migrations/2.js
|
||||
ReactNativeClient/lib/services/synchronizer/utils/types.js
|
||||
ReactNativeClient/lib/services/UndoRedoService.js
|
||||
ReactNativeClient/lib/ShareExtension.js
|
||||
ReactNativeClient/lib/shareHandler.js
|
||||
ReactNativeClient/lib/shim.js
|
||||
ReactNativeClient/lib/Synchronizer.js
|
||||
ReactNativeClient/lib/theme.js
|
||||
ReactNativeClient/lib/themes/aritimDark.js
|
||||
ReactNativeClient/lib/themes/dark.js
|
||||
ReactNativeClient/lib/themes/dracula.js
|
||||
ReactNativeClient/lib/themes/light.js
|
||||
ReactNativeClient/lib/themes/nord.js
|
||||
ReactNativeClient/lib/themes/oledDark.js
|
||||
ReactNativeClient/lib/themes/solarizedDark.js
|
||||
ReactNativeClient/lib/themes/solarizedLight.js
|
||||
ReactNativeClient/lib/themes/type.js
|
||||
ReactNativeClient/lib/uuid.js
|
||||
ReactNativeClient/lib/versionInfo.js
|
||||
ReactNativeClient/PluginAssetsLoader.js
|
||||
ReactNativeClient/setUpQuickActions.js
|
||||
# AUTO-GENERATED - EXCLUDED TYPESCRIPT BUILD
|
||||
@@ -9,6 +9,7 @@ rvm: 2.3.3
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- dev
|
||||
- /^v\d+\.\d+(\.\d+)?(-\S*)?$/
|
||||
|
||||
matrix:
|
||||
@@ -16,7 +17,7 @@ matrix:
|
||||
- os: osx
|
||||
osx_image: xcode9.0
|
||||
language: node_js
|
||||
node_js: "8"
|
||||
node_js: "10"
|
||||
env:
|
||||
- ELECTRON_CACHE=$HOME/.cache/electron
|
||||
- ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder
|
||||
@@ -25,7 +26,7 @@ matrix:
|
||||
sudo: required
|
||||
dist: trusty
|
||||
language: node_js
|
||||
node_js: "8"
|
||||
node_js: "10"
|
||||
env:
|
||||
- ELECTRON_CACHE=$HOME/.cache/electron
|
||||
- ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder
|
||||
@@ -42,6 +43,8 @@ before_install:
|
||||
|
||||
# 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
|
||||
@@ -51,6 +54,7 @@ before_install:
|
||||
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:
|
||||
@@ -66,7 +70,7 @@ script:
|
||||
# and that would break the desktop release.
|
||||
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
|
||||
cd CliClient
|
||||
npm run test
|
||||
npm run test-ci
|
||||
testResult=$?
|
||||
if [ $testResult -ne 0 ]; then
|
||||
exit $testResult
|
||||
@@ -109,4 +113,4 @@ script:
|
||||
|
||||
# Prepare the Electron app and build it
|
||||
cd ElectronClient
|
||||
USE_HARD_LINKS=false yarn dist
|
||||
USE_HARD_LINKS=false npm run dist
|
||||
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 33 KiB |
@@ -0,0 +1,109 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="disegno.svg"
|
||||
inkscape:version="1.0rc1 (09960d6, 2020-04-09)"
|
||||
id="svg8"
|
||||
version="1.1"
|
||||
viewBox="0 0 70 70"
|
||||
height="70"
|
||||
width="70">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-height="775"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:guide-bbox="true"
|
||||
showguides="true"
|
||||
inkscape:pagecheckerboard="true"
|
||||
inkscape:showpageshadow="false"
|
||||
showborder="true"
|
||||
showgrid="false"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-units="px"
|
||||
inkscape:cy="39.253064"
|
||||
inkscape:cx="25.246811"
|
||||
inkscape:zoom="5.8562241"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base"
|
||||
units="px">
|
||||
<sodipodi:guide
|
||||
inkscape:color="rgb(0,0,255)"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
id="guide1932"
|
||||
orientation="-1,0"
|
||||
position="12,70" />
|
||||
<sodipodi:guide
|
||||
inkscape:color="rgb(0,0,255)"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
id="guide1934"
|
||||
orientation="-1,0"
|
||||
position="58,70" />
|
||||
<sodipodi:guide
|
||||
inkscape:color="rgb(0,0,255)"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
id="guide1936"
|
||||
orientation="0,1"
|
||||
position="0,58" />
|
||||
<sodipodi:guide
|
||||
inkscape:color="rgb(0,0,255)"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
id="guide1938"
|
||||
orientation="0,1"
|
||||
position="0,12" />
|
||||
<sodipodi:guide
|
||||
inkscape:color="rgb(0,0,255)"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
id="guide2021"
|
||||
orientation="-1,0"
|
||||
position="35,70" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Livello 1">
|
||||
<path
|
||||
inkscape:transform-center-y="23.027731"
|
||||
inkscape:transform-center-x="-17.510929"
|
||||
id="path30"
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.133334;stop-opacity:1"
|
||||
d="M 52.1731,12 H 35.107236 c -0.161294,0 -0.291666,0.130494 -0.291666,0.291543 v 5.419239 c 0,0.182381 0.147678,0.330176 0.330178,0.330176 h 2.339824 c 0.94638,0 1.713811,0.727936 1.795988,1.652976 v 3.715485 2.069989 19.715998 0.139708 h -6.44e-4 c 0.0058,0.206545 -0.0023,0.409658 -0.02244,0.609702 -0.0023,0.02918 -0.0062,0.05801 -0.0097,0.08697 -0.01349,0.116897 -0.02846,0.233161 -0.05114,0.346981 -0.01243,0.06489 -0.02993,0.128044 -0.0455,0.191949 -0.02097,0.08499 -0.0379,0.171342 -0.06401,0.254505 -0.1543,0.493916 -0.39825,0.95202 -0.735666,1.355297 -0.01243,0.01438 -0.02771,0.02761 -0.03998,0.04182 -0.102908,0.119222 -0.210962,0.235367 -0.330548,0.34416 -0.120695,0.109778 -0.248492,0.211819 -0.382795,0.306628 -0.954719,0.676302 -2.23974,0.973854 -3.6755,0.836485 -1.830697,-0.172088 -3.646921,-1.002309 -5.114939,-2.337984 -1.467772,-1.335554 -2.380422,-2.988039 -2.569305,-4.653525 -0.169868,-1.489971 0.276578,-2.801116 1.256197,-3.692426 0.0027,-0.0019 0.005,-0.0037 0.0069,-0.0058 0.0379,-0.03398 0.0796,-0.06379 0.1186,-0.09654 0.701076,-0.58738 1.614951,-0.943313 2.657858,-1.041435 0.01172,-0.0011 0.02306,-0.003 0.03423,-0.0039 0.109777,-0.0097 0.221631,-0.01402 0.334471,-0.01827 0.05899,-0.0019 0.117251,-0.0062 0.177111,-0.0065 0.01986,-2.76e-4 0.03875,-0.0023 0.05864,-0.0023 0.03557,0 0.07248,0.0046 0.108055,0.0051 0.164347,0.0027 0.329933,0.0094 0.498825,0.02379 0.02134,0.0017 0.0417,9.78e-4 0.06365,0.003 0.01562,0.0016 0.03103,0.005 0.04662,0.0065 0.956682,0.09592 1.90392,0.381568 2.802834,0.814406 0.01876,8.39e-4 0.04047,0.0065 0.06759,0.02159 0.274004,0.151353 0.326498,-0.01101 0.334593,-0.118351 v -4.688237 -3.46883 c 0,-0.233653 -0.162519,-0.440321 -0.3904,-0.490484 -4.841795,-1.065597 -9.592336,0.04355 -12.944402,3.09499 -2.928307,2.663747 -4.344811,6.507647 -3.885849,10.545461 0.409535,3.596512 2.255685,7.05173 5.198956,9.730318 2.868698,2.609903 6.521262,4.242028 10.288996,4.596993 0.519184,0.04805 1.040822,0.07283 1.549826,0.07283 3.598351,0 6.937296,-1.233851 9.401735,-3.475688 2.33455,-2.125552 3.732902,-5.044294 3.938097,-8.219619 l 0.01901,-20.825138 h 0.0021 V 19.91155 h 7.7e-4 v -0.09714 c 0.02109,-0.982682 0.822378,-1.773296 1.81046,-1.773296 h 2.339824 c 0.182259,0 0.330177,-0.147802 0.330177,-0.330177 v -5.419299 c -2.1e-5,-0.161046 -0.130406,-0.291543 -0.291686,-0.291543"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<inkscape:templateinfo>
|
||||
<inkscape:name>SmallTile</inkscape:name>
|
||||
<inkscape:shortdesc>Small tile</inkscape:shortdesc>
|
||||
<inkscape:date>2020-04-15</inkscape:date>
|
||||
</inkscape:templateinfo>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.4 KiB |
@@ -0,0 +1,109 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="disegno-1.svg"
|
||||
inkscape:version="1.0rc1 (09960d6, 2020-04-09)"
|
||||
id="svg8"
|
||||
version="1.1"
|
||||
viewBox="0 0 150 150"
|
||||
height="150"
|
||||
width="150">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-height="775"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:guide-bbox="true"
|
||||
showguides="true"
|
||||
inkscape:pagecheckerboard="true"
|
||||
inkscape:showpageshadow="false"
|
||||
showborder="true"
|
||||
showgrid="false"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-units="px"
|
||||
inkscape:cy="79.075594"
|
||||
inkscape:cx="91.835957"
|
||||
inkscape:zoom="3.1892627"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base"
|
||||
units="px">
|
||||
<sodipodi:guide
|
||||
inkscape:color="rgb(0,0,255)"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
id="guide1919"
|
||||
orientation="0,1"
|
||||
position="0,115" />
|
||||
<sodipodi:guide
|
||||
inkscape:color="rgb(0,0,255)"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
id="guide1921"
|
||||
orientation="-1,0"
|
||||
position="25,150" />
|
||||
<sodipodi:guide
|
||||
inkscape:color="rgb(0,0,255)"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
id="guide1923"
|
||||
orientation="-1,0"
|
||||
position="125,150" />
|
||||
<sodipodi:guide
|
||||
inkscape:color="rgb(0,0,255)"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
id="guide1925"
|
||||
orientation="0,1"
|
||||
position="0,35" />
|
||||
<sodipodi:guide
|
||||
inkscape:color="rgb(0,0,255)"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
id="guide2879"
|
||||
orientation="-1,0"
|
||||
position="75,150" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Livello 1">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="M 105.30102,35.000001 H 75.621261 c -0.280511,0 -0.507245,0.226946 -0.507245,0.507031 v 9.424762 c 0,0.317185 0.256831,0.574219 0.574223,0.574219 h 4.069258 c 1.645878,0 2.980541,1.265976 3.123457,2.874741 v 6.461712 3.599981 34.288687 0.24297 h -0.0011 c 0.01009,0.359209 -0.004,0.712449 -0.03903,1.060352 -0.004,0.05075 -0.01078,0.100887 -0.01687,0.151252 -0.02346,0.203299 -0.0495,0.405497 -0.08894,0.603445 -0.02162,0.112852 -0.05205,0.222685 -0.07913,0.333824 -0.03647,0.147809 -0.06591,0.297986 -0.111322,0.442618 -0.268348,0.858984 -0.692608,1.655686 -1.279419,2.357038 -0.02162,0.02501 -0.04819,0.04802 -0.06953,0.07273 -0.178971,0.207343 -0.366891,0.409334 -0.574866,0.598539 -0.209904,0.190918 -0.43216,0.368381 -0.66573,0.533266 -1.660381,1.176182 -3.8952,1.693662 -6.392174,1.454752 -3.18382,-0.29928 -6.34247,-1.743142 -8.895544,-4.066054 -2.552647,-2.322703 -4.139864,-5.196589 -4.468356,-8.093086 -0.295423,-2.591254 0.481005,-4.871506 2.18469,-6.42161 0.0047,-0.0033 0.0087,-0.0064 0.012,-0.01009 0.06591,-0.05909 0.138435,-0.110939 0.206261,-0.167895 1.219262,-1.021531 2.80861,-1.640544 4.622361,-1.811191 0.02038,-0.0019 0.0401,-0.0052 0.05953,-0.0068 0.190917,-0.01687 0.385445,-0.02438 0.581689,-0.03177 0.102591,-0.0033 0.203915,-0.01078 0.308019,-0.0113 0.03454,-4.8e-4 0.06739,-0.004 0.101982,-0.004 0.06186,0 0.126053,0.008 0.187922,0.0089 0.285821,0.0047 0.573797,0.01635 0.867522,0.04137 0.03711,0.003 0.07252,0.0017 0.110695,0.0052 0.02717,0.0028 0.05397,0.0087 0.08108,0.0113 1.663794,0.166817 3.311164,0.663596 4.874493,1.416358 0.03263,0.0015 0.07038,0.0113 0.117548,0.03755 0.476528,0.263222 0.567822,-0.01915 0.581901,-0.205828 V 73.11952 67.086773 c 0,-0.406353 -0.282642,-0.765776 -0.678957,-0.853016 -8.420512,-1.853212 -16.682323,0.07574 -22.512002,5.382591 -5.092707,4.632602 -7.556192,11.317645 -6.757997,18.339929 0.712234,6.254803 3.92293,12.263883 9.041661,16.922293 4.989039,4.53896 11.341325,7.37744 17.893905,7.99477 0.902929,0.0836 1.810125,0.12666 2.69535,0.12666 6.258001,0 12.064861,-2.14583 16.350841,-6.04467 4.060086,-3.69661 6.492006,-8.77269 6.848866,-14.294994 l 0.0331,-36.217627 h 0.004 v -9.683497 h 10e-4 v -0.16894 c 0.0367,-1.709012 1.43023,-3.083992 3.148627,-3.083992 h 4.06926 c 0.31697,0 0.57422,-0.257047 0.57422,-0.574221 v -9.424867 c -4e-5,-0.28008 -0.22679,-0.507031 -0.50728,-0.507031"
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.133334;stop-opacity:1"
|
||||
id="path30"
|
||||
inkscape:transform-center-x="-30.453831"
|
||||
inkscape:transform-center-y="40.048222" />
|
||||
</g>
|
||||
<inkscape:templateinfo>
|
||||
<inkscape:name>Square150x150Logo</inkscape:name>
|
||||
<inkscape:shortdesc>Medium tile</inkscape:shortdesc>
|
||||
<inkscape:date>2020-04-15</inkscape:date>
|
||||
</inkscape:templateinfo>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 820 B |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 71 KiB |
@@ -7,7 +7,11 @@ Note that all the applications share the same library, which, for historical rea
|
||||
## Required dependencies
|
||||
|
||||
- Install yarn - https://yarnpkg.com/lang/en/docs/install/
|
||||
- Install node - https://nodejs.org/en/
|
||||
- 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`
|
||||
|
||||
## Building
|
||||
|
||||
@@ -22,18 +26,7 @@ Then you can test the various applications:
|
||||
cd ElectronClient
|
||||
npm start
|
||||
|
||||
If you'd like to auto-reload the app on changes rather than having to quit and restart it manually each time, you can use [watchman-make](https://facebook.github.io/watchman/docs/watchman-make.html):
|
||||
|
||||
```sh
|
||||
cd ElectronClient
|
||||
watchman-make -p '**/*.js' '**/*.jsx' --run "npm start"
|
||||
```
|
||||
|
||||
It still requires you to quit the application each time you want it to rebuild, but at least you don't have to re-run `"npm start"` each time. Here's what the workflow loop looks like in practice:
|
||||
|
||||
1. Edit and save files in your text editor.
|
||||
2. Switch to the Electron app and <kbd>cmd</kbd>+<kbd>Q</kbd> to quit it.
|
||||
3. `watchman` immediately restarts the app for you (whereas usually you'd have to switch back to the terminal, type `"npm start"`, and hit enter).
|
||||
You can also run it under WSL 2. To do so, [follow these instructions](https://www.beekeeperstudio.io/blog/building-electron-windows-ubuntu-wsl2) to setup your environment.
|
||||
|
||||
## Testing the Terminal application
|
||||
|
||||
@@ -47,12 +40,12 @@ First you need to setup React Native to build projects with native code. For thi
|
||||
Then:
|
||||
|
||||
cd ReactNativeClient
|
||||
npm start-android
|
||||
# Or: npm start-ios
|
||||
npm run start-android
|
||||
# Or: npm run start-ios
|
||||
|
||||
To run the iOS application, it might be easier to open the file `ios/Joplin.xcworkspace` on XCode and run the app from there.
|
||||
|
||||
Normally the bundler should start automatically with the application. If it doesn't run `npm start`.
|
||||
Normally the bundler should start automatically with the application. If it doesn't, run `npm start`.
|
||||
|
||||
## Building the clipper
|
||||
|
||||
@@ -80,37 +73,27 @@ You can specify additional parameters when running the desktop or CLI applicatio
|
||||
|
||||
Most of the application is written in JavaScript, however new classes and files should generally be written in [TypeScript](https://www.typescriptlang.org/). All TypeScript files are generated next to the .ts or .tsx file. So for example, if there's a file "lib/MyClass.ts", there will be a generated "lib/MyClass.js" next to it. It is implemented that way as it requires minimal changes to integrate TypeScript in the existing JavaScript code base.
|
||||
|
||||
# Troubleshooting desktop application
|
||||
In the current setup, `tsc` is executed from the root of the project, and will compile everything in CliClient, ElectronClient, etc. This is more convenient to have just one place to compile everything, and it also means there's only one watch command to run. However, one drawback is that TypeScript doesn't find types defined in node_modules folders in sub-directories. For example, if you install `immer` in ElectronClient, then try to use the package, TypeScript will report that it cannot find this module. In theory using `typeRoots`, it should be possible to make it find the right modules but it doesn't seem to work in this case. Currently the workaround is to install any such package at the root of the project. By doing so, TypeScript will find the type definitions and compilation will work. It's not ideal since the module is installed at the root even though it's not used, but for now that will work.
|
||||
|
||||
## On Linux and macOS
|
||||
## Hot reload
|
||||
|
||||
If there's an error `while loading shared libraries: libgconf-2.so.4: cannot open shared object file: No such file or directory`, run `sudo apt-get install libgconf-2-4`
|
||||
If you'd like to auto-reload the desktop app on changes rather than having to quit and restart it manually each time, you can use [watchman-make](https://facebook.github.io/watchman/docs/watchman-make.html):
|
||||
|
||||
If you get a node-gyp related error, you might need to manually install it: `npm install -g node-gyp`.
|
||||
```sh
|
||||
cd ElectronClient
|
||||
watchman-make -p '**/*.js' '**/*.jsx' --run "npm start"
|
||||
```
|
||||
|
||||
If you get the error `libtool: unrecognized option '-static'`, follow the instructions [in this post](https://stackoverflow.com/a/38552393/561309) to use the correct libtool version.
|
||||
It still requires you to quit the application each time you want it to rebuild, but at least you don't have to re-run `"npm start"` each time. Here's what the workflow loop looks like in practice:
|
||||
|
||||
## On Windows
|
||||
1. Edit and save files in your text editor.
|
||||
2. Switch to the Electron app and <kbd>cmd</kbd>+<kbd>Q</kbd> to quit it.
|
||||
3. `watchman` immediately restarts the app for you (whereas usually you'd have to switch back to the terminal, type `"npm start"`, and hit enter).
|
||||
|
||||
If node-gyp does not work (MSBUILD: error MSB3428: Could not load the Visual C++ component "VCBuild.exe"), you might need to install `windows-build-tools` using `npm install --global windows-build-tools`.
|
||||
# Updating Markdown renderer packages
|
||||
|
||||
If `yarn dist` fails, it may need administrative rights.
|
||||
The Markdown renderer is located under ReactNativeClient/lib/joplin-renderer. Whenever updating one of its dependencies, such as Mermaid or Katex, please run `npm run buildAssets` to make sure all assets such as fonts or CSS files are deployed correctly.
|
||||
|
||||
If you get an `error MSB8020: The build tools for v140 cannot be found.` try to run with a different toolset version, eg `npm install --toolset=v141` (See [here](https://github.com/mapbox/node-sqlite3/issues/1124) for more info).
|
||||
# Troubleshooting
|
||||
|
||||
## Other issues
|
||||
|
||||
> The application window doesn't open or is white
|
||||
|
||||
This is an indication that there's an early initialisation error. Try this:
|
||||
|
||||
- In ElectronAppWrapper, set `debugEarlyBugs` to `true`. This will force the window to show up and should open the console next to it, which should display any error.
|
||||
- In more rare cases, an already open instance of Joplin can create strange low-level bugs that will display no error but will result in this white window. A non-dev instance of Joplin, or a dev instance that wasn't properly closed might cause this. So make sure you close everything and try again. Perhaps even other Electron apps running (Skype, Slack, etc.) could cause this?
|
||||
- Also try to delete node_modules and rebuild.
|
||||
- If all else fails, switch your computer off and on again, to make sure you start clean.
|
||||
|
||||
> How to work on the app from Windows?
|
||||
|
||||
**You should not use WSL at all** because this is a GUI app that lives outside of WSL, and the WSL layer can cause all kind of very hard to debug issues. It can also lock files in node_modules that cannot be unlocked when the app crashes. (You need to restart your computer.) Likewise, don't run the TypeScript watch command from WSL.
|
||||
|
||||
So everything should be done from a Windows Command prompt or Windows PowerShell running as Administrator. All build and start commands are designed to work cross-platform, including on Windows.
|
||||
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.
|
||||
@@ -21,15 +21,13 @@ Please check that your request has not already been posted on the forum or the [
|
||||
|
||||
Avoid listing multiple requests in one topic. One topic per request makes it easier to track and discuss it.
|
||||
|
||||
Finally, when submitting a pull request, don't forget to [test your code](#unit-tests).
|
||||
Finally, when submitting a pull request, don't forget to [test your code](#automated-tests).
|
||||
|
||||
# Contribute to the project
|
||||
|
||||
## Contributing to Joplin's translation
|
||||
# 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).
|
||||
|
||||
## Contributing to Joplin's code
|
||||
# Contributing to Joplin's code
|
||||
|
||||
If you want to start contributing to the project's code, please follow these guidelines before creating a pull request:
|
||||
|
||||
@@ -38,10 +36,11 @@ If you want to start contributing to the project's code, please follow these gui
|
||||
- Before adding a new feature, ask about it in the [Github Issue Tracker](https://github.com/laurent22/joplin/issues?utf8=%E2%9C%93&q=is%3Aissue) or the [Joplin Forum](https://discourse.joplinapp.org/), or check if existing discussions exist to make sure the new functionality is desired.
|
||||
- **Changes that will consist in more than 50 lines of code should be discussed the [Joplin Forum](https://discourse.joplinapp.org/)**, so that you don't spend too much time implementing something that might not be accepted.
|
||||
- All the applications share the same backend (database, synchronisation, settings, models, business logic, etc.) so if you change something in the backend in one app, makes sure it still work in the other apps. Usually it does, but keep this in mind.
|
||||
- Pull requests that make many changes using an automated tool, like for spell fixing, styling, etc. will not be accepted. An exception would be if the changes have been discussed in the forum and someone has agreed to review **and test** the pull request.
|
||||
|
||||
Building the apps is relatively easy - please [see the build instructions](https://github.com/laurent22/joplin/blob/master/BUILD.md) for more details.
|
||||
Building the apps is relatively easy - please [see the build instructions](https://github.com/laurent22/joplin/blob/dev/BUILD.md) for more details.
|
||||
|
||||
### Coding style
|
||||
## Coding style
|
||||
|
||||
Coding style is enforced by a pre-commit hook that runs eslint. This hook is installed whenever running `npm install` on any of the application directory. If for some reason the pre-commit hook didn't get installed, you can manually install it by running `npm install` at the root of the repository.
|
||||
|
||||
@@ -49,44 +48,45 @@ For new React components, please use [React Hooks](https://reactjs.org/docs/hook
|
||||
|
||||
For changes made to the Desktop client that affect the user interface, refer to `ElectronClient/app/theme.js` for all styling information. The goal is to create a consistent user interface to allow for easy navigation of Joplin's various features and improve the overall user experience.
|
||||
|
||||
### Unit tests
|
||||
## Automated tests
|
||||
|
||||
When submitting a pull request for a new feature or bug fix, please add unit tests for your code. Unit testing GUI changes is not always possible so it is not required, but any change in a file under /lib for example should be unit tested.
|
||||
When submitting a pull request for a new feature or a bug fix, please add automated tests for your code whenever possible. Tests in Joplin are divided into **unit tests** and **feature tests**.
|
||||
|
||||
* **Unit tests** are used to test models, services or utility classes - they are relatively low level. Unit tests should be prefixed with the type of class that is being tested - for example "models_Folder" or "services_SearchEngine".
|
||||
|
||||
* **Feature tests** on the other hand are to test higher level functionalities such as interactions with the GUI and how they affect the underlying model. Often these tests would dispatch Redux actions, and inspect how the application state has been changed. The feature tests should be prefixed with "feature_", for example "feature_TagList". There's a good explanation on what qualifies as a feature test in [this post](https://github.com/laurent22/joplin/pull/2819#issuecomment-603502230).
|
||||
|
||||
The tests are under CliClient/tests. To get them running, you first need to build the CLI app:
|
||||
|
||||
```sh
|
||||
npm run tsc # Build the .ts and .tsx files
|
||||
cd CliClient
|
||||
npm install
|
||||
cd CliClient
|
||||
```
|
||||
|
||||
To run all the test units:
|
||||
|
||||
```sh
|
||||
npm run test
|
||||
npm test
|
||||
```
|
||||
|
||||
To run just one particular file:
|
||||
|
||||
```sh
|
||||
npm run test -- --filter=markdownUtils # Don't add the .js extension
|
||||
npm test -- --filter=markdownUtils # Don't add the .js extension
|
||||
```
|
||||
|
||||
To filter tests. For example, to run all the test units that contain "should handle conflict" in their description:
|
||||
|
||||
```sh
|
||||
npm run test -- --filter="should handle conflict"
|
||||
npm test -- --filter="should handle conflict"
|
||||
```
|
||||
|
||||
If you get the error `Cannot find module '/joplin/CliClient/node_modules/sqlite3/lib/binding/node-v79-darwin-x64/node_sqlite3.node'`, you may need to run `npm rebuild`.
|
||||
|
||||
## About abandoned pull requests
|
||||
|
||||
It happens that a pull request is started but not finished and despite our attempts to contact the contributor, we don’t hear from them again.
|
||||
It happens that a pull request is started but not finished and despite our attempts to contact the contributor, we don't hear from them again.
|
||||
|
||||
In that case we will not merge the pull request, even if only small changes are missing. Our policy is simply to close the pull request. Why? Because an unfinished pull request essentially means giving us work and moving on. We would rather not encourage this behaviour.
|
||||
|
||||
Also, please note that since we have spent time reviewing the pull request and proposing solutions, we reserve the right to re-use that knowledge to create a new pull request, potentially based on your changes.
|
||||
|
||||
We’d much prefer that you complete the pull request though, so we’ll be sure to ping you a few times before that!
|
||||
We'd much prefer that you complete the pull request though, so we'll be sure to ping you a few times before that!
|
||||
@@ -1,13 +1,13 @@
|
||||
module.exports = {
|
||||
"overrides": [
|
||||
'overrides': [
|
||||
{
|
||||
"files": ["tests/**/*.js"],
|
||||
'files': ['tests/**/*.js'],
|
||||
'rules': {
|
||||
// Ignore all unused function arguments, because in some
|
||||
// case they are kept to indicate the function signature.
|
||||
"no-unused-vars": ["error", { "argsIgnorePattern": ".*" }],
|
||||
"@typescript-eslint/no-unused-vars": 0,
|
||||
}
|
||||
'no-unused-vars': ['error', { 'argsIgnorePattern': '.*' }],
|
||||
'@typescript-eslint/no-unused-vars': 0,
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
};
|
||||
@@ -20,4 +20,6 @@ out.txt
|
||||
linkToLocal.sh
|
||||
yarn-error.log
|
||||
tests/support/dropbox-auth.txt
|
||||
tests/support/nextcloud-auth.json
|
||||
tests/support/onedrive-auth.txt
|
||||
build/
|
||||
@@ -0,0 +1,134 @@
|
||||
const open = require('open');
|
||||
interface LinkStoreEntry {
|
||||
link: string;
|
||||
noteX: number;
|
||||
noteY: number;
|
||||
}
|
||||
|
||||
class LinkSelector {
|
||||
noteId_: string;
|
||||
scrollTop_: number;
|
||||
renderedText_: string;
|
||||
currentLinkIndex_: number;
|
||||
linkStore_: LinkStoreEntry[];
|
||||
linkRegex_: RegExp;
|
||||
|
||||
constructor() {
|
||||
this.noteId_ = null;
|
||||
this.scrollTop_ = null; // used so 'o' won't open unhighlighted link after scrolling
|
||||
this.renderedText_ = null;
|
||||
this.currentLinkIndex_ = null;
|
||||
this.linkStore_ = null;
|
||||
this.linkRegex_ = /http:\/\/[0-9.]+:[0-9]+\/[0-9]+/g;
|
||||
}
|
||||
|
||||
get link(): string | null {
|
||||
if (this.currentLinkIndex_ === null) return null;
|
||||
return this.linkStore_[this.currentLinkIndex_].link;
|
||||
}
|
||||
|
||||
get noteX(): number | null {
|
||||
if (this.currentLinkIndex_ === null) return null;
|
||||
return this.linkStore_[this.currentLinkIndex_].noteX;
|
||||
}
|
||||
|
||||
get noteY(): number | null {
|
||||
if (this.currentLinkIndex_ === null) return null;
|
||||
return this.linkStore_[this.currentLinkIndex_].noteY;
|
||||
}
|
||||
|
||||
findLinks(renderedText: string): LinkStoreEntry[] {
|
||||
const newLinkStore: LinkStoreEntry[] = [];
|
||||
const lines: string[] = renderedText.split('\n');
|
||||
for (let i = 0; i < lines.length; i++) {
|
||||
const matches = [...lines[i].matchAll(this.linkRegex_)];
|
||||
matches.forEach((_e, n) => {
|
||||
newLinkStore.push(
|
||||
{
|
||||
link: matches[n][0],
|
||||
noteX: matches[n].index,
|
||||
noteY: i,
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
return newLinkStore;
|
||||
}
|
||||
|
||||
updateText(renderedText: string): void {
|
||||
this.currentLinkIndex_ = null;
|
||||
this.renderedText_ = renderedText;
|
||||
this.linkStore_ = this.findLinks(this.renderedText_);
|
||||
}
|
||||
|
||||
updateNote(textWidget: any): void {
|
||||
this.noteId_ = textWidget.noteId;
|
||||
this.scrollTop_ = textWidget.scrollTop_;
|
||||
this.updateText(textWidget.renderedText_);
|
||||
}
|
||||
|
||||
scrollWidget(textWidget: any): void {
|
||||
if (this.currentLinkIndex_ === null) return;
|
||||
|
||||
const noteY = this.linkStore_[this.currentLinkIndex_].noteY;
|
||||
|
||||
let viewBoxMin = textWidget.scrollTop_ + 1;
|
||||
let viewBoxMax = viewBoxMin + textWidget.innerHeight - 2;
|
||||
|
||||
if (noteY < viewBoxMin) {
|
||||
for (; noteY < viewBoxMin; textWidget.pageUp()) {
|
||||
viewBoxMin = textWidget.scrollTop_;
|
||||
viewBoxMax = viewBoxMin + textWidget.innerHeight;
|
||||
}
|
||||
return;
|
||||
|
||||
} else if (noteY > viewBoxMax) {
|
||||
for (; noteY > viewBoxMax; textWidget.pageDown()) {
|
||||
viewBoxMin = textWidget.scrollTop_;
|
||||
viewBoxMax = viewBoxMin + textWidget.innerHeight;
|
||||
}
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
changeLink(textWidget: any, offset: number): void | null {
|
||||
if (textWidget.noteId !== this.noteId_) {
|
||||
this.updateNote(textWidget);
|
||||
this.changeLink(textWidget, offset);
|
||||
return;
|
||||
}
|
||||
if (textWidget.renderedText_ !== this.renderedText_) {
|
||||
this.updateText(textWidget.renderedText_);
|
||||
this.changeLink(textWidget, offset);
|
||||
return;
|
||||
}
|
||||
if (textWidget.scrollTop_ !== this.scrollTop_) this.scrollTop_ = textWidget.scrollTop_;
|
||||
|
||||
if (!this.linkStore_.length) return null;
|
||||
|
||||
let offsetMod = (offset + this.currentLinkIndex_) % this.linkStore_.length;
|
||||
|
||||
if (this.currentLinkIndex_ === null) {
|
||||
if (offsetMod < 0) this.currentLinkIndex_ = this.linkStore_.length + offsetMod;
|
||||
else if (!offsetMod) this.currentLinkIndex_ = 0;
|
||||
else this.currentLinkIndex_ = offsetMod - 1;
|
||||
return;
|
||||
}
|
||||
|
||||
if (offsetMod < 0) offsetMod = this.linkStore_.length + offsetMod;
|
||||
|
||||
this.currentLinkIndex_ = offsetMod;
|
||||
return;
|
||||
}
|
||||
|
||||
openLink(textWidget: any): void {
|
||||
if (textWidget.noteId !== this.noteId_) return;
|
||||
if (textWidget.renderedText_ !== this.renderedText_) return;
|
||||
if (textWidget.scrollTop_ !== this.scrollTop_) return;
|
||||
open(this.linkStore_[this.currentLinkIndex_].link);
|
||||
}
|
||||
}
|
||||
|
||||
export default LinkSelector;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { Logger } = require('lib/logger.js');
|
||||
const Logger = require('lib/Logger').default;
|
||||
const { netUtils } = require('lib/net-utils.js');
|
||||
|
||||
const http = require('http');
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
const { Logger } = require('lib/logger.js');
|
||||
const Logger = require('lib/Logger').default;
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const BaseItem = require('lib/models/BaseItem.js');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const Resource = require('lib/models/Resource.js');
|
||||
const { reducer, defaultState } = require('lib/reducer.js');
|
||||
const Setting = require('lib/models/Setting').default;
|
||||
const reducer = require('lib/reducer').default;
|
||||
const { defaultState } = require('lib/reducer');
|
||||
const { splitCommandString } = require('lib/string-utils.js');
|
||||
const { reg } = require('lib/registry.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const shim = require('lib/shim').default;
|
||||
const Entities = require('html-entities').AllHtmlEntities;
|
||||
const htmlentities = new Entities().encode;
|
||||
|
||||
@@ -32,6 +35,8 @@ const FolderListWidget = require('./gui/FolderListWidget.js');
|
||||
const NoteListWidget = require('./gui/NoteListWidget.js');
|
||||
const StatusBarWidget = require('./gui/StatusBarWidget.js');
|
||||
const ConsoleWidget = require('./gui/ConsoleWidget.js');
|
||||
const LinkSelector = require('./LinkSelector.js').default;
|
||||
|
||||
|
||||
class AppGui {
|
||||
constructor(app, store, keymap) {
|
||||
@@ -73,6 +78,8 @@ class AppGui {
|
||||
this.currentShortcutKeys_ = [];
|
||||
this.lastShortcutKeyTime_ = 0;
|
||||
|
||||
this.linkSelector_ = new LinkSelector();
|
||||
|
||||
// Recurrent sync is setup only when the GUI is started. In
|
||||
// a regular command it's not necessary since the process
|
||||
// exits right away.
|
||||
@@ -134,7 +141,7 @@ class AppGui {
|
||||
const item = folderList.currentItem;
|
||||
|
||||
if (item === '-') {
|
||||
let newIndex = event.currentIndex + (event.previousIndex < event.currentIndex ? +1 : -1);
|
||||
const newIndex = event.currentIndex + (event.previousIndex < event.currentIndex ? +1 : -1);
|
||||
let nextItem = folderList.itemAt(newIndex);
|
||||
if (!nextItem) nextItem = folderList.itemAt(event.previousIndex);
|
||||
|
||||
@@ -186,7 +193,7 @@ class AppGui {
|
||||
borderRightWidth: 1,
|
||||
};
|
||||
noteList.on('currentItemChange', async () => {
|
||||
let note = noteList.currentItem;
|
||||
const note = noteList.currentItem;
|
||||
this.store_.dispatch({
|
||||
type: 'NOTE_SELECT',
|
||||
id: note ? note.id : null,
|
||||
@@ -243,9 +250,9 @@ class AppGui {
|
||||
|
||||
const hLayout = new HLayoutWidget();
|
||||
hLayout.name = 'hLayout';
|
||||
hLayout.addChild(folderList, { type: 'stretch', factor: 1 });
|
||||
hLayout.addChild(noteList, { type: 'stretch', factor: 1 });
|
||||
hLayout.addChild(noteLayout, { type: 'stretch', factor: 2 });
|
||||
hLayout.addChild(folderList, { type: 'stretch', factor: Setting.value('layout.folderList.factor') });
|
||||
hLayout.addChild(noteList, { type: 'stretch', factor: Setting.value('layout.noteList.factor') });
|
||||
hLayout.addChild(noteLayout, { type: 'stretch', factor: Setting.value('layout.note.factor') });
|
||||
|
||||
const vLayout = new VLayoutWidget();
|
||||
vLayout.name = 'vLayout';
|
||||
@@ -338,7 +345,7 @@ class AppGui {
|
||||
|
||||
if (consoleWidget.isMaximized__ === doMaximize) return;
|
||||
|
||||
let constraints = {
|
||||
const constraints = {
|
||||
type: 'stretch',
|
||||
factor: !doMaximize ? 1 : 4,
|
||||
};
|
||||
@@ -415,10 +422,10 @@ class AppGui {
|
||||
async handleModelAction(action) {
|
||||
this.logger().info('Action:', action);
|
||||
|
||||
let state = Object.assign({}, defaultState);
|
||||
const state = Object.assign({}, defaultState);
|
||||
state.notes = this.widget('noteList').items;
|
||||
|
||||
let newState = reducer(state, action);
|
||||
const newState = reducer(state, action);
|
||||
|
||||
if (newState !== state) {
|
||||
this.widget('noteList').items = newState.notes;
|
||||
@@ -454,6 +461,30 @@ class AppGui {
|
||||
} else {
|
||||
this.stdout(_('Please select the note or notebook to be deleted first.'));
|
||||
}
|
||||
} else if (cmd === 'next_link' || cmd === 'previous_link') {
|
||||
const noteText = this.widget('noteText');
|
||||
|
||||
noteText.render();
|
||||
|
||||
if (cmd === 'next_link') this.linkSelector_.changeLink(noteText, 1);
|
||||
else this.linkSelector_.changeLink(noteText, -1);
|
||||
|
||||
this.linkSelector_.scrollWidget(noteText);
|
||||
|
||||
const cursorOffsetX = this.widget('mainWindow').width - noteText.innerWidth - 8;
|
||||
const cursorOffsetY = 1 - noteText.scrollTop_;
|
||||
|
||||
if (this.linkSelector_.link) {
|
||||
this.term_.moveTo(
|
||||
this.linkSelector_.noteX + cursorOffsetX,
|
||||
this.linkSelector_.noteY + cursorOffsetY
|
||||
);
|
||||
shim.setTimeout(() => this.term_.term().inverse(this.linkSelector_.link), 50);
|
||||
}
|
||||
} else if (cmd === 'open_link') {
|
||||
if (this.widget('noteText').hasFocus) {
|
||||
this.linkSelector_.openLink(this.widget('noteText'));
|
||||
}
|
||||
} else if (cmd === 'toggle_console') {
|
||||
if (!this.consoleIsShown()) {
|
||||
this.showConsole();
|
||||
@@ -485,9 +516,9 @@ class AppGui {
|
||||
// this.logger().debug('Got command: ' + cmd);
|
||||
|
||||
try {
|
||||
let note = this.widget('noteList').currentItem;
|
||||
let folder = this.widget('folderList').currentItem;
|
||||
let args = splitCommandString(cmd);
|
||||
const note = this.widget('noteList').currentItem;
|
||||
const folder = this.widget('folderList').currentItem;
|
||||
const args = splitCommandString(cmd);
|
||||
|
||||
for (let i = 0; i < args.length; i++) {
|
||||
if (args[i] == '$n') {
|
||||
@@ -548,7 +579,7 @@ class AppGui {
|
||||
stdout(text) {
|
||||
if (text === null || text === undefined) return;
|
||||
|
||||
let lines = text.split('\n');
|
||||
const lines = text.split('\n');
|
||||
for (let i = 0; i < lines.length; i++) {
|
||||
const v = typeof lines[i] === 'object' ? JSON.stringify(lines[i]) : lines[i];
|
||||
this.widget('console').addLine(v);
|
||||
@@ -626,7 +657,7 @@ class AppGui {
|
||||
|
||||
if (link.type === 'item') {
|
||||
const itemId = link.id;
|
||||
let item = await BaseItem.loadItemById(itemId);
|
||||
const item = await BaseItem.loadItemById(itemId);
|
||||
if (!item) throw new Error(`No item with ID ${itemId}`); // Should be nearly impossible
|
||||
|
||||
if (item.type_ === BaseModel.TYPE_RESOURCE) {
|
||||
@@ -750,7 +781,7 @@ class AppGui {
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
const shortcutKey = this.currentShortcutKeys_.join('');
|
||||
let keymapItem = this.keymapItemByKey(shortcutKey);
|
||||
const keymapItem = this.keymapItemByKey(shortcutKey);
|
||||
|
||||
// If this command is an alias to another command, resolve to the actual command
|
||||
|
||||
@@ -766,7 +797,7 @@ class AppGui {
|
||||
if (keymapItem.type === 'function') {
|
||||
this.processFunctionCommand(keymapItem.command);
|
||||
} else if (keymapItem.type === 'prompt') {
|
||||
let promptOptions = {};
|
||||
const promptOptions = {};
|
||||
if ('cursorPosition' in keymapItem) promptOptions.cursorPosition = keymapItem.cursorPosition;
|
||||
const commandString = await statusBar.prompt(keymapItem.command ? keymapItem.command : '', null, promptOptions);
|
||||
this.addCommandToConsole(commandString);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { BaseApplication } = require('lib/BaseApplication');
|
||||
const BaseApplication = require('lib/BaseApplication').default;
|
||||
const { FoldersScreenUtils } = require('lib/folders-screen-utils.js');
|
||||
const ResourceService = require('lib/services/ResourceService');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
@@ -6,14 +6,15 @@ const Folder = require('lib/models/Folder.js');
|
||||
const BaseItem = require('lib/models/BaseItem.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const Setting = require('lib/models/Setting').default;
|
||||
const { reg } = require('lib/registry.js');
|
||||
const { fileExtension } = require('lib/path-utils.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const fs = require('fs-extra');
|
||||
const { cliUtils } = require('./cli-utils.js');
|
||||
const Cache = require('lib/Cache');
|
||||
const RevisionService = require('lib/services/RevisionService');
|
||||
const shim = require('lib/shim').default;
|
||||
|
||||
class Application extends BaseApplication {
|
||||
constructor() {
|
||||
@@ -47,7 +48,7 @@ class Application extends BaseApplication {
|
||||
}
|
||||
|
||||
async loadItem(type, pattern, options = null) {
|
||||
let output = await this.loadItems(type, pattern, options);
|
||||
const output = await this.loadItems(type, pattern, options);
|
||||
|
||||
if (output.length > 1) {
|
||||
// output.sort((a, b) => { return a.user_updated_time < b.user_updated_time ? +1 : -1; });
|
||||
@@ -144,7 +145,7 @@ class Application extends BaseApplication {
|
||||
if (options.type === 'boolean') {
|
||||
if (answer === null) return false; // Pressed ESCAPE
|
||||
if (!answer) answer = options.answers[0];
|
||||
let positiveIndex = options.booleanAnswerDefault == 'y' ? 0 : 1;
|
||||
const positiveIndex = options.booleanAnswerDefault == 'y' ? 0 : 1;
|
||||
return answer.toLowerCase() === options.answers[positiveIndex].toLowerCase();
|
||||
} else {
|
||||
return answer;
|
||||
@@ -161,7 +162,7 @@ class Application extends BaseApplication {
|
||||
};
|
||||
|
||||
// Give it a few seconds to cancel otherwise exit anyway
|
||||
setTimeout(async () => {
|
||||
shim.setTimeout(async () => {
|
||||
await doExit();
|
||||
}, 5000);
|
||||
|
||||
@@ -181,7 +182,7 @@ class Application extends BaseApplication {
|
||||
const ext = fileExtension(path);
|
||||
if (ext != 'js') return;
|
||||
|
||||
let CommandClass = require(`./${path}`);
|
||||
const CommandClass = require(`./${path}`);
|
||||
let cmd = new CommandClass();
|
||||
if (!cmd.enabled()) return;
|
||||
cmd = this.setupCommand(cmd);
|
||||
@@ -192,8 +193,8 @@ class Application extends BaseApplication {
|
||||
}
|
||||
|
||||
if (uiType !== null) {
|
||||
let temp = [];
|
||||
for (let n in this.commands_) {
|
||||
const temp = [];
|
||||
for (const n in this.commands_) {
|
||||
if (!this.commands_.hasOwnProperty(n)) continue;
|
||||
const c = this.commands_[n];
|
||||
if (!c.supportsUi(uiType)) continue;
|
||||
@@ -207,8 +208,8 @@ class Application extends BaseApplication {
|
||||
|
||||
async commandNames() {
|
||||
const metadata = await this.commandMetadata();
|
||||
let output = [];
|
||||
for (let n in metadata) {
|
||||
const output = [];
|
||||
for (const n in metadata) {
|
||||
if (!metadata.hasOwnProperty(n)) continue;
|
||||
output.push(n);
|
||||
}
|
||||
@@ -227,7 +228,7 @@ class Application extends BaseApplication {
|
||||
const commands = this.commands();
|
||||
|
||||
output = {};
|
||||
for (let n in commands) {
|
||||
for (const n in commands) {
|
||||
if (!commands.hasOwnProperty(n)) continue;
|
||||
const cmd = commands[n];
|
||||
output[n] = cmd.metadata();
|
||||
@@ -251,7 +252,7 @@ class Application extends BaseApplication {
|
||||
CommandClass = require(`${__dirname}/command-${name}.js`);
|
||||
} catch (error) {
|
||||
if (error.message && error.message.indexOf('Cannot find module') >= 0) {
|
||||
let e = new Error(_('No such command: %s', name));
|
||||
const e = new Error(_('No such command: %s', name));
|
||||
e.type = 'notFound';
|
||||
throw e;
|
||||
} else {
|
||||
@@ -324,6 +325,9 @@ class Application extends BaseApplication {
|
||||
{ keys: ['PAGE_DOWN'], type: 'function', command: 'page_down' },
|
||||
{ keys: ['ENTER'], type: 'function', command: 'activate' },
|
||||
{ keys: ['DELETE', 'BACKSPACE'], type: 'function', command: 'delete' },
|
||||
{ keys: ['n'], type: 'function', command: 'next_link' },
|
||||
{ keys: ['b'], type: 'function', command: 'previous_link' },
|
||||
{ keys: ['o'], type: 'function', command: 'open_link' },
|
||||
{ keys: [' '], command: 'todo toggle $n' },
|
||||
{ keys: ['tc'], type: 'function', command: 'toggle_console' },
|
||||
{ keys: ['tm'], type: 'function', command: 'toggle_metadata' },
|
||||
@@ -362,7 +366,7 @@ class Application extends BaseApplication {
|
||||
}
|
||||
|
||||
const output = [];
|
||||
for (let n in itemsByCommand) {
|
||||
for (const n in itemsByCommand) {
|
||||
if (!itemsByCommand.hasOwnProperty(n)) continue;
|
||||
output.push(itemsByCommand[n]);
|
||||
}
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
var { app } = require('./app.js');
|
||||
var Note = require('lib/models/Note.js');
|
||||
var Folder = require('lib/models/Folder.js');
|
||||
var Tag = require('lib/models/Tag.js');
|
||||
var { cliUtils } = require('./cli-utils.js');
|
||||
var yargParser = require('yargs-parser');
|
||||
var fs = require('fs-extra');
|
||||
const { app } = require('./app.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
const { cliUtils } = require('./cli-utils.js');
|
||||
const yargParser = require('yargs-parser');
|
||||
const fs = require('fs-extra');
|
||||
|
||||
async function handleAutocompletionPromise(line) {
|
||||
// Auto-complete the command name
|
||||
const names = await app().commandNames();
|
||||
let words = getArguments(line);
|
||||
const words = getArguments(line);
|
||||
// If there is only one word and it is not already a command name then you
|
||||
// should look for commands it could be
|
||||
if (words.length == 1) {
|
||||
if (names.indexOf(words[0]) === -1) {
|
||||
let x = names.filter(n => n.indexOf(words[0]) === 0);
|
||||
const x = names.filter(n => n.indexOf(words[0]) === 0);
|
||||
if (x.length === 1) {
|
||||
return `${x[0]} `;
|
||||
}
|
||||
@@ -36,8 +36,8 @@ async function handleAutocompletionPromise(line) {
|
||||
}
|
||||
|
||||
// complete an option
|
||||
let next = words.length > 1 ? words[words.length - 1] : '';
|
||||
let l = [];
|
||||
const next = words.length > 1 ? words[words.length - 1] : '';
|
||||
const l = [];
|
||||
if (next[0] === '-') {
|
||||
for (let i = 0; i < metadata.options.length; i++) {
|
||||
const options = metadata.options[i][0].split(' ');
|
||||
@@ -60,7 +60,7 @@ async function handleAutocompletionPromise(line) {
|
||||
if (l.length === 0) {
|
||||
return line;
|
||||
}
|
||||
let ret = l.map(a => toCommandLine(a));
|
||||
const ret = l.map(a => toCommandLine(a));
|
||||
ret.prefix = `${toCommandLine(words.slice(0, -1))} `;
|
||||
return ret;
|
||||
}
|
||||
@@ -69,7 +69,7 @@ async function handleAutocompletionPromise(line) {
|
||||
// words that don't start with a - less one for the command name
|
||||
const positionalArgs = words.filter(a => a.indexOf('-') !== 0).length - 1;
|
||||
|
||||
let cmdUsage = yargParser(metadata.usage)['_'];
|
||||
const cmdUsage = yargParser(metadata.usage)['_'];
|
||||
cmdUsage.splice(0, 1);
|
||||
|
||||
if (cmdUsage.length >= positionalArgs) {
|
||||
@@ -95,29 +95,29 @@ async function handleAutocompletionPromise(line) {
|
||||
}
|
||||
|
||||
if (argName == 'tag') {
|
||||
let tags = await Tag.search({ titlePattern: `${next}*` });
|
||||
const tags = await Tag.search({ titlePattern: `${next}*` });
|
||||
l.push(...tags.map(n => n.title));
|
||||
}
|
||||
|
||||
if (argName == 'file') {
|
||||
let files = await fs.readdir('.');
|
||||
const files = await fs.readdir('.');
|
||||
l.push(...files);
|
||||
}
|
||||
|
||||
if (argName == 'tag-command') {
|
||||
let c = filterList(['add', 'remove', 'list', 'notetags'], next);
|
||||
const c = filterList(['add', 'remove', 'list', 'notetags'], next);
|
||||
l.push(...c);
|
||||
}
|
||||
|
||||
if (argName == 'todo-command') {
|
||||
let c = filterList(['toggle', 'clear'], next);
|
||||
const c = filterList(['toggle', 'clear'], next);
|
||||
l.push(...c);
|
||||
}
|
||||
}
|
||||
if (l.length === 1) {
|
||||
return toCommandLine([...words.slice(0, -1), l[0]]);
|
||||
} else if (l.length > 1) {
|
||||
let ret = l.map(a => toCommandLine(a));
|
||||
const ret = l.map(a => toCommandLine(a));
|
||||
ret.prefix = `${toCommandLine(words.slice(0, -1))} `;
|
||||
return ret;
|
||||
}
|
||||
@@ -155,7 +155,7 @@ function getArguments(line) {
|
||||
let inSingleQuotes = false;
|
||||
let inDoubleQuotes = false;
|
||||
let currentWord = '';
|
||||
let parsed = [];
|
||||
const parsed = [];
|
||||
for (let i = 0; i < line.length; i++) {
|
||||
if (line[i] === '"') {
|
||||
if (inDoubleQuotes) {
|
||||
@@ -192,7 +192,7 @@ function getArguments(line) {
|
||||
return parsed;
|
||||
}
|
||||
function filterList(list, next) {
|
||||
let output = [];
|
||||
const output = [];
|
||||
for (let i = 0; i < list.length; i++) {
|
||||
if (list[i].indexOf(next) !== 0) continue;
|
||||
output.push(list[i]);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const { reg } = require('lib/registry.js');
|
||||
|
||||
class BaseCommand {
|
||||
@@ -50,7 +50,7 @@ class BaseCommand {
|
||||
async cancel() {}
|
||||
|
||||
name() {
|
||||
let r = this.usage().split(' ');
|
||||
const r = this.usage().split(' ');
|
||||
return r[0];
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
const fs = require('fs-extra');
|
||||
const { fileExtension, dirname } = require('lib/path-utils.js');
|
||||
const wrap_ = require('word-wrap');
|
||||
const { languageCode } = require('lib/locale.js');
|
||||
const { languageCode } = require('lib/locale');
|
||||
|
||||
const rootDir = dirname(dirname(__dirname));
|
||||
const MAX_WIDTH = 78;
|
||||
@@ -15,11 +15,11 @@ function wrap(text, indent) {
|
||||
}
|
||||
|
||||
function renderOptions(options) {
|
||||
let output = [];
|
||||
const output = [];
|
||||
const optionColWidth = getOptionColWidth(options);
|
||||
|
||||
for (let i = 0; i < options.length; i++) {
|
||||
let option = options[i];
|
||||
const option = options[i];
|
||||
const flag = option[0];
|
||||
const indent = INDENT + INDENT + ' '.repeat(optionColWidth + 2);
|
||||
|
||||
@@ -33,7 +33,7 @@ function renderOptions(options) {
|
||||
}
|
||||
|
||||
function renderCommand(cmd) {
|
||||
let output = [];
|
||||
const output = [];
|
||||
output.push(INDENT + cmd.usage());
|
||||
output.push('');
|
||||
output.push(wrap(cmd.description(), INDENT + INDENT));
|
||||
@@ -48,14 +48,14 @@ function renderCommand(cmd) {
|
||||
}
|
||||
|
||||
function getCommands() {
|
||||
let output = [];
|
||||
const output = [];
|
||||
fs.readdirSync(__dirname).forEach(path => {
|
||||
if (path.indexOf('command-') !== 0) return;
|
||||
const ext = fileExtension(path);
|
||||
if (ext != 'js') return;
|
||||
|
||||
let CommandClass = require(`./${path}`);
|
||||
let cmd = new CommandClass();
|
||||
const CommandClass = require(`./${path}`);
|
||||
const cmd = new CommandClass();
|
||||
if (!cmd.enabled()) return;
|
||||
if (cmd.hidden()) return;
|
||||
output.push(cmd);
|
||||
@@ -73,7 +73,7 @@ function getOptionColWidth(options) {
|
||||
}
|
||||
|
||||
function getHeader() {
|
||||
let output = [];
|
||||
const output = [];
|
||||
|
||||
output.push('NAME');
|
||||
output.push('');
|
||||
@@ -84,7 +84,7 @@ function getHeader() {
|
||||
output.push('DESCRIPTION');
|
||||
output.push('');
|
||||
|
||||
let description = [];
|
||||
const description = [];
|
||||
description.push('Joplin is a note taking and to-do application, which can handle a large number of notes organised into notebooks.');
|
||||
description.push('The notes are searchable, can be copied, tagged and modified with your own text editor.');
|
||||
description.push('\n\n');
|
||||
@@ -98,7 +98,7 @@ function getHeader() {
|
||||
}
|
||||
|
||||
function getFooter() {
|
||||
let output = [];
|
||||
const output = [];
|
||||
|
||||
output.push('WEBSITE');
|
||||
output.push('');
|
||||
@@ -120,10 +120,10 @@ async function main() {
|
||||
// setLocale('fr_FR');
|
||||
|
||||
const commands = getCommands();
|
||||
let commandBlocks = [];
|
||||
const commandBlocks = [];
|
||||
|
||||
for (let i = 0; i < commands.length; i++) {
|
||||
let cmd = commands[i];
|
||||
const cmd = commands[i];
|
||||
commandBlocks.push(renderCommand(cmd));
|
||||
}
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
'use strict';
|
||||
|
||||
const fs = require('fs-extra');
|
||||
const { Logger } = require('lib/logger.js');
|
||||
const Logger = require('lib/Logger').default;
|
||||
const { dirname } = require('lib/path-utils.js');
|
||||
const { DatabaseDriverNode } = require('lib/database-driver-node.js');
|
||||
const { JoplinDatabase } = require('lib/joplin-database.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const Setting = require('lib/models/Setting').default;
|
||||
const { sprintf } = require('sprintf-js');
|
||||
const exec = require('child_process').exec;
|
||||
|
||||
@@ -40,8 +40,8 @@ function createClient(id) {
|
||||
const client = createClient(1);
|
||||
|
||||
function execCommand(client, command) {
|
||||
let exePath = `node ${joplinAppPath}`;
|
||||
let cmd = `${exePath} --update-geolocation-disabled --env dev --profile ${client.profileDir} ${command}`;
|
||||
const exePath = `node ${joplinAppPath}`;
|
||||
const cmd = `${exePath} --update-geolocation-disabled --env dev --profile ${client.profileDir} ${command}`;
|
||||
logger.info(`${client.id}: ${command}`);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
@@ -129,8 +129,8 @@ testUnits.testCat = async () => {
|
||||
await execCommand(client, 'mkbook nb1');
|
||||
await execCommand(client, 'mknote mynote');
|
||||
|
||||
let folder = await Folder.loadByTitle('nb1');
|
||||
let note = await Note.loadFolderNoteByField(folder.id, 'title', 'mynote');
|
||||
const folder = await Folder.loadByTitle('nb1');
|
||||
const note = await Note.loadFolderNoteByField(folder.id, 'title', 'mynote');
|
||||
|
||||
let r = await execCommand(client, 'cat mynote');
|
||||
assertTrue(r.indexOf('mynote') >= 0);
|
||||
@@ -149,7 +149,7 @@ testUnits.testConfig = async () => {
|
||||
await Setting.load();
|
||||
assertEquals('subl', Setting.value('editor'));
|
||||
|
||||
let r = await execCommand(client, 'config');
|
||||
const r = await execCommand(client, 'config');
|
||||
assertTrue(r.indexOf('editor') >= 0);
|
||||
assertTrue(r.indexOf('subl') >= 0);
|
||||
};
|
||||
@@ -161,14 +161,14 @@ testUnits.testCp = async () => {
|
||||
|
||||
await execCommand(client, 'cp n1');
|
||||
|
||||
let f1 = await Folder.loadByTitle('nb1');
|
||||
let f2 = await Folder.loadByTitle('nb2');
|
||||
const f1 = await Folder.loadByTitle('nb1');
|
||||
const f2 = await Folder.loadByTitle('nb2');
|
||||
let notes = await Note.previews(f1.id);
|
||||
|
||||
assertEquals(2, notes.length);
|
||||
|
||||
await execCommand(client, 'cp n1 nb2');
|
||||
let notesF1 = await Note.previews(f1.id);
|
||||
const notesF1 = await Note.previews(f1.id);
|
||||
assertEquals(2, notesF1.length);
|
||||
notes = await Note.previews(f2.id);
|
||||
assertEquals(1, notes.length);
|
||||
@@ -179,7 +179,7 @@ testUnits.testLs = async () => {
|
||||
await execCommand(client, 'mkbook nb1');
|
||||
await execCommand(client, 'mknote note1');
|
||||
await execCommand(client, 'mknote note2');
|
||||
let r = await execCommand(client, 'ls');
|
||||
const r = await execCommand(client, 'ls');
|
||||
|
||||
assertTrue(r.indexOf('note1') >= 0);
|
||||
assertTrue(r.indexOf('note2') >= 0);
|
||||
@@ -191,8 +191,8 @@ testUnits.testMv = async () => {
|
||||
await execCommand(client, 'mknote n1');
|
||||
await execCommand(client, 'mv n1 nb2');
|
||||
|
||||
let f1 = await Folder.loadByTitle('nb1');
|
||||
let f2 = await Folder.loadByTitle('nb2');
|
||||
const f1 = await Folder.loadByTitle('nb1');
|
||||
const f2 = await Folder.loadByTitle('nb2');
|
||||
let notes1 = await Note.previews(f1.id);
|
||||
let notes2 = await Note.previews(f2.id);
|
||||
|
||||
@@ -218,18 +218,18 @@ async function main() {
|
||||
logger.info(await execCommand(client, 'version'));
|
||||
|
||||
await db.open({ name: `${client.profileDir}/database.sqlite` });
|
||||
BaseModel.db_ = db;
|
||||
BaseModel.setDb(db);
|
||||
await Setting.load();
|
||||
|
||||
let onlyThisTest = 'testMv';
|
||||
onlyThisTest = '';
|
||||
|
||||
for (let n in testUnits) {
|
||||
for (const n in testUnits) {
|
||||
if (!testUnits.hasOwnProperty(n)) continue;
|
||||
if (onlyThisTest && n != onlyThisTest) continue;
|
||||
|
||||
await clearDatabase();
|
||||
let testName = n.substr(4).toLowerCase();
|
||||
const testName = n.substr(4).toLowerCase();
|
||||
process.stdout.write(`${testName}: `);
|
||||
await testUnits[n]();
|
||||
console.info('');
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
const yargParser = require('yargs-parser');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const stringPadding = require('string-padding');
|
||||
const Logger = require('lib/Logger').default;
|
||||
|
||||
const cliUtils = {};
|
||||
|
||||
@@ -11,27 +12,27 @@ cliUtils.printArray = function(logFunction, rows) {
|
||||
const ALIGN_LEFT = 0;
|
||||
const ALIGN_RIGHT = 1;
|
||||
|
||||
let colWidths = [];
|
||||
let colAligns = [];
|
||||
const colWidths = [];
|
||||
const colAligns = [];
|
||||
|
||||
for (let i = 0; i < rows.length; i++) {
|
||||
let row = rows[i];
|
||||
const row = rows[i];
|
||||
|
||||
for (let j = 0; j < row.length; j++) {
|
||||
let item = row[j];
|
||||
let width = item ? item.toString().length : 0;
|
||||
let align = typeof item == 'number' ? ALIGN_RIGHT : ALIGN_LEFT;
|
||||
const item = row[j];
|
||||
const width = item ? item.toString().length : 0;
|
||||
const align = typeof item == 'number' ? ALIGN_RIGHT : ALIGN_LEFT;
|
||||
if (!colWidths[j] || colWidths[j] < width) colWidths[j] = width;
|
||||
if (colAligns.length <= j) colAligns[j] = align;
|
||||
}
|
||||
}
|
||||
|
||||
for (let row = 0; row < rows.length; row++) {
|
||||
let line = [];
|
||||
const line = [];
|
||||
for (let col = 0; col < colWidths.length; col++) {
|
||||
let item = rows[row][col];
|
||||
let width = colWidths[col];
|
||||
let dir = colAligns[col] == ALIGN_LEFT ? stringPadding.RIGHT : stringPadding.LEFT;
|
||||
const item = rows[row][col];
|
||||
const width = colWidths[col];
|
||||
const dir = colAligns[col] == ALIGN_LEFT ? stringPadding.RIGHT : stringPadding.LEFT;
|
||||
line.push(stringPadding(item, width, ' ', dir));
|
||||
}
|
||||
logFunction(line.join(' '));
|
||||
@@ -39,7 +40,7 @@ cliUtils.printArray = function(logFunction, rows) {
|
||||
};
|
||||
|
||||
cliUtils.parseFlags = function(flags) {
|
||||
let output = {};
|
||||
const output = {};
|
||||
flags = flags.split(',');
|
||||
for (let i = 0; i < flags.length; i++) {
|
||||
let f = flags[i].trim();
|
||||
@@ -76,11 +77,11 @@ cliUtils.parseCommandArg = function(arg) {
|
||||
cliUtils.makeCommandArgs = function(cmd, argv) {
|
||||
let cmdUsage = cmd.usage();
|
||||
cmdUsage = yargParser(cmdUsage);
|
||||
let output = {};
|
||||
const output = {};
|
||||
|
||||
let options = cmd.options();
|
||||
let booleanFlags = [];
|
||||
let aliases = {};
|
||||
const options = cmd.options();
|
||||
const booleanFlags = [];
|
||||
const aliases = {};
|
||||
for (let i = 0; i < options.length; i++) {
|
||||
if (options[i].length != 2) throw new Error(`Invalid options: ${options[i]}`);
|
||||
let flags = options[i][0];
|
||||
@@ -97,7 +98,7 @@ cliUtils.makeCommandArgs = function(cmd, argv) {
|
||||
}
|
||||
}
|
||||
|
||||
let args = yargParser(argv, {
|
||||
const args = yargParser(argv, {
|
||||
boolean: booleanFlags,
|
||||
alias: aliases,
|
||||
string: ['_'],
|
||||
@@ -113,8 +114,8 @@ cliUtils.makeCommandArgs = function(cmd, argv) {
|
||||
}
|
||||
}
|
||||
|
||||
let argOptions = {};
|
||||
for (let key in args) {
|
||||
const argOptions = {};
|
||||
for (const key in args) {
|
||||
if (!args.hasOwnProperty(key)) continue;
|
||||
if (key == '_') continue;
|
||||
argOptions[key] = args[key];
|
||||
@@ -134,7 +135,7 @@ cliUtils.promptMcq = function(message, answers) {
|
||||
});
|
||||
|
||||
message += '\n\n';
|
||||
for (let n in answers) {
|
||||
for (const n in answers) {
|
||||
if (!answers.hasOwnProperty(n)) continue;
|
||||
message += `${_('%s: %s', n, answers[n])}\n`;
|
||||
}
|
||||
@@ -245,4 +246,17 @@ cliUtils.redrawDone = function() {
|
||||
redrawStarted_ = false;
|
||||
};
|
||||
|
||||
cliUtils.stdoutLogger = function(stdout) {
|
||||
const stdoutFn = (...s) => stdout(s.join(' '));
|
||||
|
||||
const logger = new Logger();
|
||||
logger.addTarget('console', { console: {
|
||||
info: stdoutFn,
|
||||
warn: stdoutFn,
|
||||
error: stdoutFn,
|
||||
} });
|
||||
|
||||
return logger;
|
||||
};
|
||||
|
||||
module.exports = { cliUtils };
|
||||
@@ -3,7 +3,7 @@ const BaseItem = require('lib/models/BaseItem');
|
||||
const BaseModel = require('lib/BaseModel');
|
||||
const { toTitleCase } = require('lib/string-utils.js');
|
||||
const { reg } = require('lib/registry.js');
|
||||
const markdownUtils = require('lib/markdownUtils');
|
||||
const markdownUtils = require('lib/markdownUtils').default;
|
||||
const { Database } = require('lib/database.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
@@ -15,6 +15,10 @@ class Command extends BaseCommand {
|
||||
return 'Build the API doc';
|
||||
}
|
||||
|
||||
enabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
createPropertiesTable(tableFields) {
|
||||
const headers = [
|
||||
{ name: 'name', label: 'Name' },
|
||||
@@ -49,10 +53,9 @@ class Command extends BaseCommand {
|
||||
|
||||
const lines = [];
|
||||
|
||||
lines.push('# Joplin API');
|
||||
lines.push('# Joplin Data API');
|
||||
lines.push('');
|
||||
|
||||
lines.push('When the Web Clipper service is enabled, Joplin exposes a [REST API](https://en.wikipedia.org/wiki/Representational_state_transfer) which allows third-party applications to access Joplin\'s data and to create, modify or delete notes, notebooks, resources or tags.');
|
||||
lines.push('This API is available when the clipper server is running. It provides access to the notes, notebooks, tags and other Joplin object via a REST API. Plugins can also access this API even when the clipper server is not running.');
|
||||
lines.push('');
|
||||
lines.push('In order to use it, you\'ll first need to find on which port the service is running. To do so, open the Web Clipper Options in Joplin and if the service is running it should tell you on which port. Normally it runs on port **41184**. If you want to find it programmatically, you may follow this kind of algorithm:');
|
||||
lines.push('');
|
||||
@@ -287,7 +290,7 @@ class Command extends BaseCommand {
|
||||
lines.push('');
|
||||
lines.push('### Creating a note with a specific ID');
|
||||
lines.push('');
|
||||
lines.push('When a new note is created, it is automatically assigned a new unique ID so **normally you do not need to set the ID**. However, if for some reason you want to set it, you can supply it as the `id` property. It needs to be a 32 characters long hexadecimal string. **Make sure it is unique**, for example by generating it using whatever GUID function is available in your programming language.');
|
||||
lines.push('When a new note is created, it is automatically assigned a new unique ID so **normally you do not need to set the ID**. However, if for some reason you want to set it, you can supply it as the `id` property. It needs to be a **32 characters long string** in hexadecimal. **Make sure it is unique**, for example by generating it using whatever GUID function is available in your programming language.');
|
||||
lines.push('');
|
||||
lines.push(' curl --data \'{ "id": "00a87474082744c1a8515da6aa5792d2", "title": "My note with custom ID"}\' http://127.0.0.1:41184/notes');
|
||||
lines.push('');
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const { shim } = require('lib/shim.js');
|
||||
const shim = require('lib/shim').default;
|
||||
|
||||
class Command extends BaseCommand {
|
||||
usage() {
|
||||
@@ -14,9 +14,9 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
let title = args['note'];
|
||||
const title = args['note'];
|
||||
|
||||
let note = await app().loadItem(BaseModel.TYPE_NOTE, title, { parent: app().currentFolder() });
|
||||
const note = await app().loadItem(BaseModel.TYPE_NOTE, title, { parent: app().currentFolder() });
|
||||
this.encryptionCheck(note);
|
||||
if (!note) throw new Error(_('Cannot find "%s".', title));
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const BaseItem = require('lib/models/BaseItem.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
@@ -18,20 +19,22 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
let title = args['note'];
|
||||
const title = args['note'];
|
||||
|
||||
let item = await app().loadItem(BaseModel.TYPE_NOTE, title, { parent: app().currentFolder() });
|
||||
const item = await app().loadItem(BaseModel.TYPE_NOTE, title, { parent: app().currentFolder() });
|
||||
if (!item) throw new Error(_('Cannot find "%s".', title));
|
||||
|
||||
const content = args.options.verbose ? await Note.serialize(item) : await Note.serializeForEdit(item);
|
||||
this.stdout(content);
|
||||
let content = '';
|
||||
|
||||
app()
|
||||
.gui()
|
||||
.showConsole();
|
||||
app()
|
||||
.gui()
|
||||
.maximizeConsole();
|
||||
if (item.encryption_applied) {
|
||||
content = BaseItem.displayTitle(item);
|
||||
} else {
|
||||
content = args.options.verbose ? await Note.serialize(item) : await Note.serializeForEdit(item);
|
||||
}
|
||||
|
||||
this.stdout(content);
|
||||
app().gui().showConsole();
|
||||
app().gui().maximizeConsole();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { _, setLocale } = require('lib/locale.js');
|
||||
const { _, setLocale } = require('lib/locale');
|
||||
const { app } = require('./app.js');
|
||||
const fs = require('fs-extra');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const Setting = require('lib/models/Setting').default;
|
||||
|
||||
class Command extends BaseCommand {
|
||||
usage() {
|
||||
@@ -35,7 +35,7 @@ class Command extends BaseCommand {
|
||||
});
|
||||
|
||||
inputStream.on('end', () => {
|
||||
let json = chunks.join('');
|
||||
const json = chunks.join('');
|
||||
let settingsObj;
|
||||
try {
|
||||
settingsObj = JSON.parse(json);
|
||||
@@ -83,7 +83,7 @@ class Command extends BaseCommand {
|
||||
};
|
||||
|
||||
if (isExport || (!isImport && !args.value)) {
|
||||
let keys = Setting.keys(!verbose, 'cli');
|
||||
const keys = Setting.keys(!verbose, 'cli');
|
||||
keys.sort();
|
||||
|
||||
if (isExport) {
|
||||
@@ -124,7 +124,6 @@ class Command extends BaseCommand {
|
||||
|
||||
if (args.name == 'locale') {
|
||||
setLocale(Setting.value('locale'));
|
||||
app().onLocaleChanged();
|
||||
}
|
||||
|
||||
await Setting.saveAll();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
|
||||
@@ -18,15 +18,15 @@ class Command extends BaseCommand {
|
||||
|
||||
async action() {
|
||||
let items = [];
|
||||
let folders = await Folder.all();
|
||||
const folders = await Folder.all();
|
||||
for (let i = 0; i < folders.length; i++) {
|
||||
let folder = folders[i];
|
||||
let notes = await Note.previews(folder.id);
|
||||
const folder = folders[i];
|
||||
const notes = await Note.previews(folder.id);
|
||||
items.push(folder);
|
||||
items = items.concat(notes);
|
||||
}
|
||||
|
||||
let tags = await Tag.all();
|
||||
const tags = await Tag.all();
|
||||
for (let i = 0; i < tags.length; i++) {
|
||||
tags[i].notes_ = await Tag.noteIds(tags[i].id);
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const EncryptionService = require('lib/services/EncryptionService');
|
||||
const DecryptionWorker = require('lib/services/DecryptionWorker');
|
||||
const BaseItem = require('lib/models/BaseItem');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const { shim } = require('lib/shim');
|
||||
const Setting = require('lib/models/Setting').default;
|
||||
const shim = require('lib/shim').default;
|
||||
const pathUtils = require('lib/path-utils.js');
|
||||
const imageType = require('image-type');
|
||||
const readChunk = require('read-chunk');
|
||||
@@ -24,12 +24,11 @@ class Command extends BaseCommand {
|
||||
['-p, --password <password>', 'Use this password as master password (For security reasons, it is not recommended to use this option).'],
|
||||
['-v, --verbose', 'More verbose output for the `target-status` command'],
|
||||
['-o, --output <directory>', 'Output directory'],
|
||||
['--retry-failed-items', 'Applies to `decrypt` command - retries decrypting items that previously could not be decrypted.'],
|
||||
];
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
// change-password
|
||||
|
||||
const options = args.options;
|
||||
|
||||
const askForMasterKey = async error => {
|
||||
@@ -39,11 +38,36 @@ class Command extends BaseCommand {
|
||||
this.stdout(_('Operation cancelled'));
|
||||
return false;
|
||||
}
|
||||
Setting.setObjectKey('encryption.passwordCache', masterKeyId, password);
|
||||
Setting.setObjectValue('encryption.passwordCache', masterKeyId, password);
|
||||
await EncryptionService.instance().loadMasterKeysFromSettings();
|
||||
return true;
|
||||
};
|
||||
|
||||
const startDecryption = async () => {
|
||||
this.stdout(_('Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.'));
|
||||
|
||||
while (true) {
|
||||
try {
|
||||
const result = await DecryptionWorker.instance().start();
|
||||
const line = [];
|
||||
line.push(_('Decrypted items: %d', result.decryptedItemCount));
|
||||
if (result.skippedItemCount) line.push(_('Skipped items: %d (use --retry-failed-items to retry decrypting them)', result.skippedItemCount));
|
||||
this.stdout(line.join('\n'));
|
||||
break;
|
||||
} catch (error) {
|
||||
if (error.code === 'masterKeyNotLoaded') {
|
||||
const ok = await askForMasterKey(error);
|
||||
if (!ok) return;
|
||||
continue;
|
||||
}
|
||||
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
this.stdout(_('Completed decryption.'));
|
||||
};
|
||||
|
||||
if (args.command === 'enable') {
|
||||
const password = options.password ? options.password.toString() : await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
|
||||
if (!password) {
|
||||
@@ -73,24 +97,8 @@ class Command extends BaseCommand {
|
||||
const plainText = await EncryptionService.instance().decryptString(args.path);
|
||||
this.stdout(plainText);
|
||||
} else {
|
||||
this.stdout(_('Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.'));
|
||||
|
||||
while (true) {
|
||||
try {
|
||||
await DecryptionWorker.instance().start();
|
||||
break;
|
||||
} catch (error) {
|
||||
if (error.code === 'masterKeyNotLoaded') {
|
||||
const ok = await askForMasterKey(error);
|
||||
if (!ok) return;
|
||||
continue;
|
||||
}
|
||||
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
this.stdout(_('Completed decryption.'));
|
||||
if (args.options['retry-failed-items']) await DecryptionWorker.instance().clearDisabledItems();
|
||||
await startDecryption();
|
||||
}
|
||||
|
||||
return;
|
||||
@@ -138,7 +146,7 @@ class Command extends BaseCommand {
|
||||
if (!targetPath) throw new Error('Please specify the sync target path.');
|
||||
|
||||
const dirPaths = function(targetPath) {
|
||||
let paths = [];
|
||||
const paths = [];
|
||||
fs.readdirSync(targetPath).forEach(path => {
|
||||
paths.push(path);
|
||||
});
|
||||
@@ -151,10 +159,10 @@ class Command extends BaseCommand {
|
||||
let encryptedResourceCount = 0;
|
||||
let otherItemCount = 0;
|
||||
|
||||
let encryptedPaths = [];
|
||||
let decryptedPaths = [];
|
||||
const encryptedPaths = [];
|
||||
const decryptedPaths = [];
|
||||
|
||||
let paths = dirPaths(targetPath);
|
||||
const paths = dirPaths(targetPath);
|
||||
|
||||
for (let i = 0; i < paths.length; i++) {
|
||||
const path = paths[i];
|
||||
@@ -164,7 +172,7 @@ class Command extends BaseCommand {
|
||||
// this.stdout(fullPath);
|
||||
|
||||
if (path === '.resource') {
|
||||
let resourcePaths = dirPaths(fullPath);
|
||||
const resourcePaths = dirPaths(fullPath);
|
||||
for (let j = 0; j < resourcePaths.length; j++) {
|
||||
const resourcePath = resourcePaths[j];
|
||||
resourceCount++;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
const fs = require('fs-extra');
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { splitCommandString } = require('lib/string-utils.js');
|
||||
const { uuid } = require('lib/uuid.js');
|
||||
const uuid = require('lib/uuid').default;
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const Setting = require('lib/models/Setting').default;
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
@@ -35,7 +35,7 @@ class Command extends BaseCommand {
|
||||
// Load note or create it if it doesn't exist
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
let title = args['note'];
|
||||
const title = args['note'];
|
||||
|
||||
if (!app().currentFolder()) throw new Error(_('No active notebook.'));
|
||||
let note = await app().loadItem(BaseModel.TYPE_NOTE, title);
|
||||
@@ -91,7 +91,7 @@ class Command extends BaseCommand {
|
||||
|
||||
const updatedContent = await fs.readFile(tempFilePath, 'utf8');
|
||||
if (updatedContent !== originalContent) {
|
||||
let updatedNote = await Note.unserializeForEdit(updatedContent);
|
||||
const updatedNote = await Note.unserializeForEdit(updatedContent);
|
||||
updatedNote.id = note.id;
|
||||
await Note.save(updatedNote);
|
||||
this.stdout(_('Note has been saved.'));
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
usage() {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const Setting = require('lib/models/Setting').default;
|
||||
const { ReportService } = require('lib/services/report.js');
|
||||
const fs = require('fs-extra');
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const InteropService = require('lib/services/InteropService.js');
|
||||
const InteropService = require('lib/services/interop/InteropService').default;
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
usage() {
|
||||
@@ -14,21 +14,23 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
options() {
|
||||
const service = new InteropService();
|
||||
const service = InteropService.instance();
|
||||
const formats = service
|
||||
.modules()
|
||||
.filter(m => m.type === 'exporter')
|
||||
.filter(m => m.type === 'exporter' && m.format !== 'html')
|
||||
.map(m => m.format + (m.description ? ` (${m.description})` : ''));
|
||||
|
||||
return [['--format <format>', _('Destination format: %s', formats.join(', '))], ['--note <note>', _('Exports only the given note.')], ['--notebook <notebook>', _('Exports only the given notebook.')]];
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
let exportOptions = {};
|
||||
const exportOptions = {};
|
||||
exportOptions.path = args.path;
|
||||
|
||||
exportOptions.format = args.options.format ? args.options.format : 'jex';
|
||||
|
||||
if (exportOptions.format === 'html') throw new Error('HTML export is not supported. Please use the desktop application.');
|
||||
|
||||
if (args.options.note) {
|
||||
const notes = await app().loadItems(BaseModel.TYPE_NOTE, args.options.note, { parent: app().currentFolder() });
|
||||
if (!notes.length) throw new Error(_('Cannot find "%s".', args.options.note));
|
||||
@@ -39,7 +41,7 @@ class Command extends BaseCommand {
|
||||
exportOptions.sourceFolderIds = folders.map(n => n.id);
|
||||
}
|
||||
|
||||
const service = new InteropService();
|
||||
const service = InteropService.instance();
|
||||
const result = await service.export(exportOptions);
|
||||
|
||||
result.warnings.map(w => this.stdout(w));
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
|
||||
@@ -14,9 +14,9 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
let title = args['note'];
|
||||
const title = args['note'];
|
||||
|
||||
let item = await app().loadItem(BaseModel.TYPE_NOTE, title, { parent: app().currentFolder() });
|
||||
const item = await app().loadItem(BaseModel.TYPE_NOTE, title, { parent: app().currentFolder() });
|
||||
if (!item) throw new Error(_('Cannot find "%s".', title));
|
||||
const url = Note.geolocationUrl(item);
|
||||
this.stdout(url);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { renderCommandHelp } = require('./help-utils.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const { cliUtils } = require('./cli-utils.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
@@ -15,8 +15,8 @@ class Command extends BaseCommand {
|
||||
|
||||
allCommands() {
|
||||
const commands = app().commands(app().uiType());
|
||||
let output = [];
|
||||
for (let n in commands) {
|
||||
const output = [];
|
||||
for (const n in commands) {
|
||||
if (!commands.hasOwnProperty(n)) continue;
|
||||
const command = commands[n];
|
||||
if (command.hidden()) continue;
|
||||
@@ -48,7 +48,7 @@ class Command extends BaseCommand {
|
||||
.gui()
|
||||
.keymap();
|
||||
|
||||
let rows = [];
|
||||
const rows = [];
|
||||
|
||||
for (let i = 0; i < keymap.length; i++) {
|
||||
const item = keymap[i];
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const InteropService = require('lib/services/InteropService.js');
|
||||
const InteropService = require('lib/services/interop/InteropService').default;
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const { cliUtils } = require('./cli-utils.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
usage() {
|
||||
@@ -15,17 +15,21 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
options() {
|
||||
const service = new InteropService();
|
||||
const service = InteropService.instance();
|
||||
const formats = service
|
||||
.modules()
|
||||
.filter(m => m.type === 'importer')
|
||||
.map(m => m.format);
|
||||
|
||||
return [['--format <format>', _('Source format: %s', ['auto'].concat(formats).join(', '))], ['-f, --force', _('Do not ask for confirmation.')]];
|
||||
return [
|
||||
['--format <format>', _('Source format: %s', ['auto'].concat(formats).join(', '))],
|
||||
['-f, --force', _('Do not ask for confirmation.')],
|
||||
['--output-format <output-format>', _('Output format: %s', 'md, html')],
|
||||
];
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
let folder = await app().loadItem(BaseModel.TYPE_FOLDER, args.notebook);
|
||||
const folder = await app().loadItem(BaseModel.TYPE_FOLDER, args.notebook);
|
||||
|
||||
if (args.notebook && !folder) throw new Error(_('Cannot find "%s".', args.notebook));
|
||||
|
||||
@@ -39,7 +43,7 @@ class Command extends BaseCommand {
|
||||
// onProgress/onError supported by Enex import only
|
||||
|
||||
importOptions.onProgress = progressState => {
|
||||
let line = [];
|
||||
const line = [];
|
||||
line.push(_('Found: %d.', progressState.loaded));
|
||||
line.push(_('Created: %d.', progressState.created));
|
||||
if (progressState.updated) line.push(_('Updated: %d.', progressState.updated));
|
||||
@@ -51,15 +55,15 @@ class Command extends BaseCommand {
|
||||
};
|
||||
|
||||
importOptions.onError = error => {
|
||||
let s = error.trace ? error.trace : error.toString();
|
||||
const s = error.trace ? error.trace : error.toString();
|
||||
this.stdout(s);
|
||||
};
|
||||
|
||||
app()
|
||||
.gui()
|
||||
.showConsole();
|
||||
if (args.options.outputFormat) importOptions.outputFormat = args.options.outputFormat;
|
||||
|
||||
app().gui().showConsole();
|
||||
this.stdout(_('Importing notes...'));
|
||||
const service = new InteropService();
|
||||
const service = InteropService.instance();
|
||||
const result = await service.import(importOptions);
|
||||
result.warnings.map(w => this.stdout(w));
|
||||
cliUtils.redrawDone();
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const Setting = require('lib/models/Setting').default;
|
||||
const Note = require('lib/models/Note.js');
|
||||
const { sprintf } = require('sprintf-js');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
@@ -19,19 +19,26 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
enabled() {
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
options() {
|
||||
return [['-n, --limit <num>', _('Displays only the first top <num> notes.')], ['-s, --sort <field>', _('Sorts the item by <field> (eg. title, updated_time, created_time).')], ['-r, --reverse', _('Reverses the sorting order.')], ['-t, --type <type>', _('Displays only the items of the specific type(s). Can be `n` for notes, `t` for to-dos, or `nt` for notes and to-dos (eg. `-tt` would display only the to-dos, while `-ttd` would display notes and to-dos.')], ['-f, --format <format>', _('Either "text" or "json"')], ['-l, --long', _('Use long list format. Format is ID, NOTE_COUNT (for notebook), DATE, TODO_CHECKED (for to-dos), TITLE')]];
|
||||
return [
|
||||
['-n, --limit <num>', _('Displays only the first top <num> notes.')],
|
||||
['-s, --sort <field>', _('Sorts the item by <field> (eg. title, updated_time, created_time).')],
|
||||
['-r, --reverse', _('Reverses the sorting order.')],
|
||||
['-t, --type <type>', _('Displays only the items of the specific type(s). Can be `n` for notes, `t` for to-dos, or `nt` for notes and to-dos (eg. `-tt` would display only the to-dos, while `-ttd` would display notes and to-dos.')],
|
||||
['-f, --format <format>', _('Either "text" or "json"')],
|
||||
['-l, --long', _('Use long list format. Format is ID, NOTE_COUNT (for notebook), DATE, TODO_CHECKED (for to-dos), TITLE')],
|
||||
];
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
let pattern = args['note-pattern'];
|
||||
const pattern = args['note-pattern'];
|
||||
let items = [];
|
||||
let options = args.options;
|
||||
const options = args.options;
|
||||
|
||||
let queryOptions = {};
|
||||
const queryOptions = {};
|
||||
if (options.limit) queryOptions.limit = options.limit;
|
||||
if (options.sort) {
|
||||
queryOptions.orderBy = options.sort;
|
||||
@@ -63,19 +70,19 @@ class Command extends BaseCommand {
|
||||
} else {
|
||||
let hasTodos = false;
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
let item = items[i];
|
||||
const item = items[i];
|
||||
if (item.is_todo) {
|
||||
hasTodos = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
let seenTitles = [];
|
||||
let rows = [];
|
||||
const seenTitles = [];
|
||||
const rows = [];
|
||||
let shortIdShown = false;
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
let item = items[i];
|
||||
let row = [];
|
||||
const item = items[i];
|
||||
const row = [];
|
||||
|
||||
if (options.long) {
|
||||
row.push(BaseModel.shortId(item.id));
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
@@ -13,7 +13,7 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
let folder = await Folder.save({ title: args['new-notebook'] }, { userSideValidation: true });
|
||||
const folder = await Folder.save({ title: args['new-notebook'] }, { userSideValidation: true });
|
||||
app().switchCurrentFolder(folder);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const Note = require('lib/models/Note.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const Note = require('lib/models/Note.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
|
||||
@@ -26,7 +26,7 @@ class Command extends BaseCommand {
|
||||
|
||||
const ok = force ? true : await this.prompt(notes.length > 1 ? _('%d notes match this pattern. Delete them?', notes.length) : _('Delete note?'), { booleanAnswerDefault: 'n' });
|
||||
if (!ok) return;
|
||||
let ids = notes.map(n => n.id);
|
||||
const ids = notes.map(n => n.id);
|
||||
await Note.batchDelete(ids);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Folder = require('lib/models/Folder.js');
|
||||
const { uuid } = require('lib/uuid.js');
|
||||
const uuid = require('lib/uuid').default;
|
||||
|
||||
class Command extends BaseCommand {
|
||||
usage() {
|
||||
@@ -18,8 +18,8 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
let pattern = args['pattern'];
|
||||
let folderTitle = args['notebook'];
|
||||
const pattern = args['pattern'];
|
||||
const folderTitle = args['notebook'];
|
||||
|
||||
let folder = null;
|
||||
if (folderTitle) {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const { Logger } = require('lib/logger.js');
|
||||
const { shim } = require('lib/shim');
|
||||
const { _ } = require('lib/locale');
|
||||
const Setting = require('lib/models/Setting').default;
|
||||
const Logger = require('lib/Logger').default;
|
||||
const shim = require('lib/shim').default;
|
||||
|
||||
class Command extends BaseCommand {
|
||||
|
||||
@@ -18,7 +18,8 @@ class Command extends BaseCommand {
|
||||
const command = args.command;
|
||||
|
||||
const ClipperServer = require('lib/ClipperServer');
|
||||
const stdoutFn = (s) => this.stdout(s);
|
||||
ClipperServer.instance().initialize();
|
||||
const stdoutFn = (...s) => this.stdout(s.join(' '));
|
||||
const clipperLogger = new Logger();
|
||||
clipperLogger.addTarget('file', { path: `${Setting.value('profileDir')}/log-clipper.txt` });
|
||||
clipperLogger.addTarget('console', { console: {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const { Database } = require('lib/database.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
@@ -23,18 +23,18 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
let title = args['note'];
|
||||
let propName = args['name'];
|
||||
const title = args['note'];
|
||||
const propName = args['name'];
|
||||
let propValue = args['value'];
|
||||
if (!propValue) propValue = '';
|
||||
|
||||
let notes = await app().loadItems(BaseModel.TYPE_NOTE, title);
|
||||
const notes = await app().loadItems(BaseModel.TYPE_NOTE, title);
|
||||
if (!notes.length) throw new Error(_('Cannot find "%s".', title));
|
||||
|
||||
for (let i = 0; i < notes.length; i++) {
|
||||
this.encryptionCheck(notes[i]);
|
||||
|
||||
let newNote = {
|
||||
const newNote = {
|
||||
id: notes[i].id,
|
||||
type_: notes[i].type_,
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const Setting = require('lib/models/Setting').default;
|
||||
const { _ } = require('lib/locale');
|
||||
const { ReportService } = require('lib/services/report.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
@@ -14,30 +14,39 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
async action() {
|
||||
let service = new ReportService();
|
||||
let report = await service.status(Setting.value('sync.target'));
|
||||
const service = new ReportService();
|
||||
const report = await service.status(Setting.value('sync.target'));
|
||||
|
||||
for (let i = 0; i < report.length; i++) {
|
||||
let section = report[i];
|
||||
const section = report[i];
|
||||
|
||||
if (i > 0) this.stdout('');
|
||||
|
||||
this.stdout(`# ${section.title}`);
|
||||
this.stdout('');
|
||||
|
||||
for (let n in section.body) {
|
||||
let canRetryType = '';
|
||||
|
||||
for (const n in section.body) {
|
||||
if (!section.body.hasOwnProperty(n)) continue;
|
||||
let line = section.body[n];
|
||||
this.stdout(line);
|
||||
const item = section.body[n];
|
||||
|
||||
if (typeof item === 'object') {
|
||||
canRetryType = item.canRetryType;
|
||||
this.stdout(item.text);
|
||||
} else {
|
||||
this.stdout(item);
|
||||
}
|
||||
}
|
||||
|
||||
if (canRetryType === 'e2ee') {
|
||||
this.stdout('');
|
||||
this.stdout(_('To retry decryption of these items. Run `e2ee decrypt --retry-failed-items`'));
|
||||
}
|
||||
}
|
||||
|
||||
app()
|
||||
.gui()
|
||||
.showConsole();
|
||||
app()
|
||||
.gui()
|
||||
.maximizeConsole();
|
||||
app().gui().showConsole();
|
||||
app().gui().maximizeConsole();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const { OneDriveApiNodeUtils } = require('lib/onedrive-api-node-utils.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const Setting = require('lib/models/Setting').default;
|
||||
const ResourceFetcher = require('lib/services/ResourceFetcher');
|
||||
const { Synchronizer } = require('lib/synchronizer.js');
|
||||
const Synchronizer = require('lib/Synchronizer').default;
|
||||
const { reg } = require('lib/registry.js');
|
||||
const { cliUtils } = require('./cli-utils.js');
|
||||
const md5 = require('md5');
|
||||
const locker = require('proper-lockfile');
|
||||
const fs = require('fs-extra');
|
||||
const SyncTargetRegistry = require('lib/SyncTargetRegistry');
|
||||
const MigrationHandler = require('lib/services/synchronizer/MigrationHandler').default;
|
||||
|
||||
class Command extends BaseCommand {
|
||||
constructor() {
|
||||
@@ -29,7 +30,10 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
options() {
|
||||
return [['--target <target>', _('Sync to provided target (defaults to sync.target config value)')]];
|
||||
return [
|
||||
['--target <target>', _('Sync to provided target (defaults to sync.target config value)')],
|
||||
['--upgrade', _('Upgrade the sync target to the latest version.')],
|
||||
];
|
||||
}
|
||||
|
||||
static lockFile(filePath) {
|
||||
@@ -148,12 +152,8 @@ class Command extends BaseCommand {
|
||||
const syncTarget = reg.syncTarget(this.syncTargetId_);
|
||||
|
||||
if (!(await syncTarget.isAuthenticated())) {
|
||||
app()
|
||||
.gui()
|
||||
.showConsole();
|
||||
app()
|
||||
.gui()
|
||||
.maximizeConsole();
|
||||
app().gui().showConsole();
|
||||
app().gui().maximizeConsole();
|
||||
|
||||
const authDone = await this.doAuth();
|
||||
if (!authDone) return cleanUp();
|
||||
@@ -161,9 +161,9 @@ class Command extends BaseCommand {
|
||||
|
||||
const sync = await syncTarget.synchronizer();
|
||||
|
||||
let options = {
|
||||
const options = {
|
||||
onProgress: report => {
|
||||
let lines = Synchronizer.reportToLines(report);
|
||||
const lines = Synchronizer.reportToLines(report);
|
||||
if (lines.length) cliUtils.redraw(lines.join(' '));
|
||||
},
|
||||
onMessage: msg => {
|
||||
@@ -174,7 +174,35 @@ class Command extends BaseCommand {
|
||||
|
||||
this.stdout(_('Synchronisation target: %s (%s)', Setting.enumOptionLabel('sync.target', this.syncTargetId_), this.syncTargetId_));
|
||||
|
||||
if (!sync) throw new Error(_('Cannot initialize synchroniser.'));
|
||||
if (!sync) throw new Error(_('Cannot initialise synchroniser.'));
|
||||
|
||||
if (args.options.upgrade) {
|
||||
let migrationError = null;
|
||||
|
||||
try {
|
||||
const migrationHandler = new MigrationHandler(
|
||||
sync.api(),
|
||||
sync.lockHandler(),
|
||||
Setting.value('appType'),
|
||||
Setting.value('clientId')
|
||||
);
|
||||
|
||||
migrationHandler.setLogger(cliUtils.stdoutLogger(this.stdout.bind(this)));
|
||||
|
||||
await migrationHandler.upgrade();
|
||||
} catch (error) {
|
||||
migrationError = error;
|
||||
}
|
||||
|
||||
if (!migrationError) {
|
||||
Setting.setValue('sync.upgradeState', Setting.SYNC_UPGRADE_STATE_IDLE);
|
||||
await Setting.saveAll();
|
||||
}
|
||||
|
||||
if (migrationError) throw migrationError;
|
||||
|
||||
return cleanUp();
|
||||
}
|
||||
|
||||
this.stdout(_('Starting synchronisation...'));
|
||||
|
||||
@@ -185,7 +213,7 @@ class Command extends BaseCommand {
|
||||
options.context = context;
|
||||
|
||||
try {
|
||||
let newContext = await sync.start(options);
|
||||
const newContext = await sync.start(options);
|
||||
Setting.setValue(contextKey, JSON.stringify(newContext));
|
||||
} catch (error) {
|
||||
if (error.code == 'alreadyStarted') {
|
||||
@@ -210,6 +238,12 @@ class Command extends BaseCommand {
|
||||
throw error;
|
||||
}
|
||||
|
||||
if (Setting.value('sync.upgradeState') > Setting.SYNC_UPGRADE_STATE_IDLE) {
|
||||
this.stdout(`/!\\ ${_('Sync target must be upgraded! Run `%s` to proceed.', 'sync --upgrade')}`);
|
||||
app().gui().showConsole();
|
||||
app().gui().maximizeConsole();
|
||||
}
|
||||
|
||||
cleanUp();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
@@ -20,7 +20,7 @@ class Command extends BaseCommand {
|
||||
|
||||
async action(args) {
|
||||
let tag = null;
|
||||
let options = args.options;
|
||||
const options = args.options;
|
||||
|
||||
if (args.tag) tag = await app().loadItem(BaseModel.TYPE_TAG, args.tag);
|
||||
let notes = [];
|
||||
@@ -46,7 +46,7 @@ class Command extends BaseCommand {
|
||||
}
|
||||
} else if (command == 'list') {
|
||||
if (tag) {
|
||||
let notes = await Tag.notes(tag.id);
|
||||
const notes = await Tag.notes(tag.id);
|
||||
notes.map(note => {
|
||||
let line = '';
|
||||
if (options.long) {
|
||||
@@ -70,7 +70,7 @@ class Command extends BaseCommand {
|
||||
this.stdout(line);
|
||||
});
|
||||
} else {
|
||||
let tags = await Tag.all();
|
||||
const tags = await Tag.all();
|
||||
tags.map(tag => {
|
||||
this.stdout(tag.title);
|
||||
});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const Note = require('lib/models/Note.js');
|
||||
const { time } = require('lib/time-utils.js');
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
|
||||
const CommandDone = require('./command-done.js');
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const { app } = require('./app.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
@@ -17,7 +17,7 @@ class Command extends BaseCommand {
|
||||
}
|
||||
|
||||
async action(args) {
|
||||
let folder = await app().loadItem(BaseModel.TYPE_FOLDER, args['notebook']);
|
||||
const folder = await app().loadItem(BaseModel.TYPE_FOLDER, args['notebook']);
|
||||
if (!folder) throw new Error(_('Cannot find "%s".', args['notebook']));
|
||||
app().switchCurrentFolder(folder);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { BaseCommand } = require('./base-command.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const Setting = require('lib/models/Setting').default;
|
||||
const { _ } = require('lib/locale');
|
||||
|
||||
class Command extends BaseCommand {
|
||||
usage() {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
const { time } = require('lib/time-utils.js');
|
||||
const { Logger } = require('lib/logger.js');
|
||||
const Logger = require('lib/Logger').default;
|
||||
const Resource = require('lib/models/Resource.js');
|
||||
const { dirname } = require('lib/path-utils.js');
|
||||
const { FsDriverNode } = require('./fs-driver-node.js');
|
||||
@@ -12,7 +12,7 @@ const fs = require('fs-extra');
|
||||
const baseDir = `${dirname(__dirname)}/tests/fuzzing`;
|
||||
const syncDir = `${baseDir}/sync`;
|
||||
const joplinAppPath = `${__dirname}/main.js`;
|
||||
let syncDurations = [];
|
||||
const syncDurations = [];
|
||||
|
||||
const fsDriver = new FsDriverNode();
|
||||
Logger.fsDriver_ = fsDriver;
|
||||
@@ -34,10 +34,10 @@ function createClient(id) {
|
||||
}
|
||||
|
||||
async function createClients() {
|
||||
let output = [];
|
||||
let promises = [];
|
||||
const output = [];
|
||||
const promises = [];
|
||||
for (let clientId = 0; clientId < 2; clientId++) {
|
||||
let client = createClient(clientId);
|
||||
const client = createClient(clientId);
|
||||
promises.push(fs.remove(client.profileDir));
|
||||
promises.push(
|
||||
execCommand(client, 'config sync.target 2').then(() => {
|
||||
@@ -2064,8 +2064,8 @@ function randomWord() {
|
||||
}
|
||||
|
||||
function execCommand(client, command, options = {}) {
|
||||
let exePath = `node ${joplinAppPath}`;
|
||||
let cmd = `${exePath} --update-geolocation-disabled --env dev --log-level debug --profile ${client.profileDir} ${command}`;
|
||||
const exePath = `node ${joplinAppPath}`;
|
||||
const cmd = `${exePath} --update-geolocation-disabled --env dev --log-level debug --profile ${client.profileDir} ${command}`;
|
||||
logger.info(`${client.id}: ${command}`);
|
||||
|
||||
if (options.killAfter) {
|
||||
@@ -2073,7 +2073,7 @@ function execCommand(client, command, options = {}) {
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
let childProcess = exec(cmd, (error, stdout, stderr) => {
|
||||
const childProcess = exec(cmd, (error, stdout, stderr) => {
|
||||
if (error) {
|
||||
if (error.signal == 'SIGTERM') {
|
||||
resolve('Process was killed');
|
||||
@@ -2096,7 +2096,7 @@ function execCommand(client, command, options = {}) {
|
||||
}
|
||||
|
||||
async function clientItems(client) {
|
||||
let itemsJson = await execCommand(client, 'dump');
|
||||
const itemsJson = await execCommand(client, 'dump');
|
||||
try {
|
||||
return JSON.parse(itemsJson);
|
||||
} catch (error) {
|
||||
@@ -2105,7 +2105,7 @@ async function clientItems(client) {
|
||||
}
|
||||
|
||||
function randomTag(items) {
|
||||
let tags = [];
|
||||
const tags = [];
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
if (items[i].type_ != 5) continue;
|
||||
tags.push(items[i]);
|
||||
@@ -2115,7 +2115,7 @@ function randomTag(items) {
|
||||
}
|
||||
|
||||
function randomNote(items) {
|
||||
let notes = [];
|
||||
const notes = [];
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
if (items[i].type_ != 1) continue;
|
||||
notes.push(items[i]);
|
||||
@@ -2125,14 +2125,14 @@ function randomNote(items) {
|
||||
}
|
||||
|
||||
async function execRandomCommand(client) {
|
||||
let possibleCommands = [
|
||||
const possibleCommands = [
|
||||
['mkbook {word}', 40], // CREATE FOLDER
|
||||
['mknote {word}', 70], // CREATE NOTE
|
||||
[
|
||||
async () => {
|
||||
// DELETE RANDOM ITEM
|
||||
let items = await clientItems(client);
|
||||
let item = randomElement(items);
|
||||
const items = await clientItems(client);
|
||||
const item = randomElement(items);
|
||||
if (!item) return;
|
||||
|
||||
if (item.type_ == 1) {
|
||||
@@ -2150,8 +2150,8 @@ async function execRandomCommand(client) {
|
||||
[
|
||||
async () => {
|
||||
// SYNC
|
||||
let avgSyncDuration = averageSyncDuration();
|
||||
let options = {};
|
||||
const avgSyncDuration = averageSyncDuration();
|
||||
const options = {};
|
||||
if (!isNaN(avgSyncDuration)) {
|
||||
if (Math.random() >= 0.5) {
|
||||
options.killAfter = avgSyncDuration * Math.random();
|
||||
@@ -2164,8 +2164,8 @@ async function execRandomCommand(client) {
|
||||
[
|
||||
async () => {
|
||||
// UPDATE RANDOM ITEM
|
||||
let items = await clientItems(client);
|
||||
let item = randomNote(items);
|
||||
const items = await clientItems(client);
|
||||
const item = randomNote(items);
|
||||
if (!item) return;
|
||||
|
||||
return execCommand(client, `set ${item.id} title "${randomWord()}"`);
|
||||
@@ -2175,12 +2175,12 @@ async function execRandomCommand(client) {
|
||||
[
|
||||
async () => {
|
||||
// ADD TAG
|
||||
let items = await clientItems(client);
|
||||
let note = randomNote(items);
|
||||
const items = await clientItems(client);
|
||||
const note = randomNote(items);
|
||||
if (!note) return;
|
||||
|
||||
let tag = randomTag(items);
|
||||
let tagTitle = !tag || Math.random() >= 0.9 ? `tag-${randomWord()}` : tag.title;
|
||||
const tag = randomTag(items);
|
||||
const tagTitle = !tag || Math.random() >= 0.9 ? `tag-${randomWord()}` : tag.title;
|
||||
|
||||
return execCommand(client, `tag add ${tagTitle} ${note.id}`);
|
||||
},
|
||||
@@ -2191,7 +2191,7 @@ async function execRandomCommand(client) {
|
||||
let cmd = null;
|
||||
while (true) {
|
||||
cmd = randomElement(possibleCommands);
|
||||
let r = 1 + Math.floor(Math.random() * 100);
|
||||
const r = 1 + Math.floor(Math.random() * 100);
|
||||
if (r <= cmd[1]) break;
|
||||
}
|
||||
|
||||
@@ -2210,7 +2210,7 @@ function averageSyncDuration() {
|
||||
}
|
||||
|
||||
function randomNextCheckTime() {
|
||||
let output = time.unixMs() + 1000 + Math.random() * 1000 * 120;
|
||||
const output = time.unixMs() + 1000 + Math.random() * 1000 * 120;
|
||||
logger.info(`Next sync check: ${time.unixMsToIso(output)} (${Math.round((output - time.unixMs()) / 1000)} sec.)`);
|
||||
return output;
|
||||
}
|
||||
@@ -2223,11 +2223,11 @@ function findItem(items, itemId) {
|
||||
}
|
||||
|
||||
function compareItems(item1, item2) {
|
||||
let output = [];
|
||||
for (let n in item1) {
|
||||
const output = [];
|
||||
for (const n in item1) {
|
||||
if (!item1.hasOwnProperty(n)) continue;
|
||||
let p1 = item1[n];
|
||||
let p2 = item2[n];
|
||||
const p1 = item1[n];
|
||||
const p2 = item2[n];
|
||||
|
||||
if (n == 'notes_') {
|
||||
p1.sort();
|
||||
@@ -2243,13 +2243,13 @@ function compareItems(item1, item2) {
|
||||
}
|
||||
|
||||
function findMissingItems_(items1, items2) {
|
||||
let output = [];
|
||||
const output = [];
|
||||
|
||||
for (let i = 0; i < items1.length; i++) {
|
||||
let item1 = items1[i];
|
||||
const item1 = items1[i];
|
||||
let found = false;
|
||||
for (let j = 0; j < items2.length; j++) {
|
||||
let item2 = items2[j];
|
||||
const item2 = items2[j];
|
||||
if (item1.id == item2.id) {
|
||||
found = true;
|
||||
break;
|
||||
@@ -2269,33 +2269,33 @@ function findMissingItems(items1, items2) {
|
||||
}
|
||||
|
||||
async function compareClientItems(clientItems) {
|
||||
let itemCounts = [];
|
||||
const itemCounts = [];
|
||||
for (let i = 0; i < clientItems.length; i++) {
|
||||
let items = clientItems[i];
|
||||
const items = clientItems[i];
|
||||
itemCounts.push(items.length);
|
||||
}
|
||||
logger.info(`Item count: ${itemCounts.join(', ')}`);
|
||||
|
||||
let missingItems = findMissingItems(clientItems[0], clientItems[1]);
|
||||
const missingItems = findMissingItems(clientItems[0], clientItems[1]);
|
||||
if (missingItems[0].length || missingItems[1].length) {
|
||||
logger.error('Items are different');
|
||||
logger.error(missingItems);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
let differences = [];
|
||||
let items = clientItems[0];
|
||||
const differences = [];
|
||||
const items = clientItems[0];
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
let item1 = items[i];
|
||||
const item1 = items[i];
|
||||
for (let clientId = 1; clientId < clientItems.length; clientId++) {
|
||||
let item2 = findItem(clientItems[clientId], item1.id);
|
||||
const item2 = findItem(clientItems[clientId], item1.id);
|
||||
if (!item2) {
|
||||
logger.error(`Item not found on client ${clientId}:`);
|
||||
logger.error(item1);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
let diff = compareItems(item1, item2);
|
||||
const diff = compareItems(item1, item2);
|
||||
if (diff.length) {
|
||||
differences.push({
|
||||
item1: JSON.stringify(item1),
|
||||
@@ -2315,7 +2315,7 @@ async function compareClientItems(clientItems) {
|
||||
async function main() {
|
||||
await fs.remove(syncDir);
|
||||
|
||||
let clients = await createClients();
|
||||
const clients = await createClients();
|
||||
let clientId = 0;
|
||||
|
||||
for (let i = 0; i < clients.length; i++) {
|
||||
@@ -2348,7 +2348,7 @@ async function main() {
|
||||
|
||||
if (state == 'syncCheck') {
|
||||
state = 'waitForSyncCheck';
|
||||
let clientItems = [];
|
||||
const clientItems = [];
|
||||
// Up to 3 sync operations must be performed by each clients in order for them
|
||||
// to be perfectly in sync - in order for each items to send their changes
|
||||
// and get those from the other clients, and to also get changes that are
|
||||
@@ -2356,12 +2356,12 @@ async function main() {
|
||||
// with another one).
|
||||
for (let loopCount = 0; loopCount < 3; loopCount++) {
|
||||
for (let i = 0; i < clients.length; i++) {
|
||||
let beforeTime = time.unixMs();
|
||||
const beforeTime = time.unixMs();
|
||||
await execCommand(clients[i], 'sync');
|
||||
syncDurations.push(time.unixMs() - beforeTime);
|
||||
if (syncDurations.length > 20) syncDurations.splice(0, 1);
|
||||
if (loopCount === 2) {
|
||||
let dump = await execCommand(clients[i], 'dump');
|
||||
const dump = await execCommand(clients[i], 'dump');
|
||||
clientItems[i] = JSON.parse(dump);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ const Folder = require('lib/models/Folder.js');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
const BaseModel = require('lib/BaseModel.js');
|
||||
const ListWidget = require('tkwidgets/ListWidget.js');
|
||||
const _ = require('lib/locale.js')._;
|
||||
const _ = require('lib/locale')._;
|
||||
|
||||
class FolderListWidget extends ListWidget {
|
||||
constructor() {
|
||||
@@ -20,7 +20,7 @@ class FolderListWidget extends ListWidget {
|
||||
this.trimItemTitle = false;
|
||||
|
||||
this.itemRenderer = item => {
|
||||
let output = [];
|
||||
const output = [];
|
||||
if (item === '-') {
|
||||
output.push('-'.repeat(this.innerWidth));
|
||||
} else if (item.type_ === Folder.modelType()) {
|
||||
@@ -121,7 +121,7 @@ class FolderListWidget extends ListWidget {
|
||||
|
||||
folderHasChildren_(folders, folderId) {
|
||||
for (let i = 0; i < folders.length; i++) {
|
||||
let folder = folders[i];
|
||||
const folder = folders[i];
|
||||
if (folder.parent_id === folderId) return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const Note = require('lib/models/Note.js');
|
||||
const TextWidget = require('tkwidgets/TextWidget.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
|
||||
class NoteWidget extends TextWidget {
|
||||
constructor() {
|
||||
@@ -46,6 +46,8 @@ class NoteWidget extends TextWidget {
|
||||
|
||||
if (this.note_ && this.note_.encryption_applied) {
|
||||
this.text = _('One or more items are currently encrypted and you may need to supply a master password. To do so please type `e2ee decrypt`. If you have already supplied the password, the encrypted items are being decrypted in the background and will be available soon.');
|
||||
this.text += '\n\n';
|
||||
this.text += _('You may also type `status` for more information.');
|
||||
} else {
|
||||
this.text = this.note_ ? `${this.note_.title}\n\n${this.note_.body}` : '';
|
||||
}
|
||||
|
||||
@@ -106,7 +106,7 @@ class StatusBarWidget extends BaseWidget {
|
||||
|
||||
const isSecurePrompt = !!this.promptState_.secure;
|
||||
|
||||
let options = {
|
||||
const options = {
|
||||
cancelable: true,
|
||||
history: this.history,
|
||||
default: this.promptState_.initialText,
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
const { wrap } = require('lib/string-utils.js');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const Setting = require('lib/models/Setting').default;
|
||||
const { _ } = require('lib/locale');
|
||||
|
||||
const MAX_WIDTH = 78;
|
||||
const INDENT = ' ';
|
||||
|
||||
function renderTwoColumnData(options, baseIndent, width) {
|
||||
let output = [];
|
||||
const output = [];
|
||||
const optionColWidth = getOptionColWidth(options);
|
||||
|
||||
for (let i = 0; i < options.length; i++) {
|
||||
let option = options[i];
|
||||
const option = options[i];
|
||||
const flag = option[0];
|
||||
const indent = baseIndent + INDENT + ' '.repeat(optionColWidth + 2);
|
||||
|
||||
@@ -28,7 +28,7 @@ function renderCommandHelp(cmd, width = null) {
|
||||
|
||||
const baseIndent = '';
|
||||
|
||||
let output = [];
|
||||
const output = [];
|
||||
output.push(baseIndent + cmd.usage());
|
||||
output.push('');
|
||||
output.push(wrap(cmd.description(), baseIndent + INDENT, width));
|
||||
@@ -42,7 +42,7 @@ function renderCommandHelp(cmd, width = null) {
|
||||
|
||||
if (cmd.name() === 'config') {
|
||||
const renderMetadata = md => {
|
||||
let desc = [];
|
||||
const desc = [];
|
||||
|
||||
if (md.label) {
|
||||
let label = md.label();
|
||||
@@ -77,7 +77,7 @@ function renderCommandHelp(cmd, width = null) {
|
||||
output.push(_('Possible keys/values:'));
|
||||
output.push('');
|
||||
|
||||
let keysValues = [];
|
||||
const keysValues = [];
|
||||
const keys = Setting.keys(true, 'cli');
|
||||
for (let i = 0; i < keys.length; i++) {
|
||||
if (keysValues.length) keysValues.push(['', '']);
|
||||
|
||||
@@ -21,14 +21,17 @@ const Note = require('lib/models/Note.js');
|
||||
const Tag = require('lib/models/Tag.js');
|
||||
const NoteTag = require('lib/models/NoteTag.js');
|
||||
const MasterKey = require('lib/models/MasterKey');
|
||||
const Setting = require('lib/models/Setting.js');
|
||||
const Setting = require('lib/models/Setting').default;
|
||||
const Revision = require('lib/models/Revision.js');
|
||||
const { Logger } = require('lib/logger.js');
|
||||
const Logger = require('lib/Logger').default;
|
||||
const { FsDriverNode } = require('lib/fs-driver-node.js');
|
||||
const { shimInit } = require('lib/shim-init-node.js');
|
||||
const { _ } = require('lib/locale.js');
|
||||
const { _ } = require('lib/locale');
|
||||
const { FileApiDriverLocal } = require('lib/file-api-driver-local.js');
|
||||
const EncryptionService = require('lib/services/EncryptionService');
|
||||
const envFromArgs = require('lib/envFromArgs');
|
||||
|
||||
const env = envFromArgs(process.argv);
|
||||
|
||||
const fsDriver = new FsDriverNode();
|
||||
Logger.fsDriver_ = fsDriver;
|
||||
@@ -46,7 +49,7 @@ BaseItem.loadClass('NoteTag', NoteTag);
|
||||
BaseItem.loadClass('MasterKey', MasterKey);
|
||||
BaseItem.loadClass('Revision', Revision);
|
||||
|
||||
Setting.setConstant('appId', 'net.cozic.joplin-cli');
|
||||
Setting.setConstant('appId', `net.cozic.joplin${env === 'dev' ? 'dev' : ''}-cli`);
|
||||
Setting.setConstant('appType', 'cli');
|
||||
|
||||
shimInit();
|
||||
@@ -54,7 +57,7 @@ shimInit();
|
||||
const application = app();
|
||||
|
||||
if (process.platform === 'win32') {
|
||||
var rl = require('readline').createInterface({
|
||||
const rl = require('readline').createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout,
|
||||
});
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
import * as vm from 'vm';
|
||||
import Plugin from 'lib/services/plugins/Plugin';
|
||||
import sandboxProxy from 'lib/services/plugins/sandboxProxy';
|
||||
import BasePluginRunner from 'lib/services/plugins/BasePluginRunner';
|
||||
import executeSandboxCall from 'lib/services/plugins/utils/executeSandboxCall';
|
||||
import Global from 'lib/services/plugins/api/Global';
|
||||
import mapEventHandlersToIds, { EventHandlers } from 'lib/services/plugins/utils/mapEventHandlersToIds';
|
||||
|
||||
function createConsoleWrapper(pluginId:string) {
|
||||
const wrapper:any = {};
|
||||
|
||||
for (const n in console) {
|
||||
if (!console.hasOwnProperty(n)) continue;
|
||||
wrapper[n] = (...args:any[]) => {
|
||||
const newArgs = args.slice();
|
||||
newArgs.splice(0, 0, `Plugin "${pluginId}":`);
|
||||
return (console as any)[n](...newArgs);
|
||||
};
|
||||
}
|
||||
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
// The CLI plugin runner is more complex than it needs to be because it more or less emulates
|
||||
// how it would work in a multi-process architecture, as in the desktop app (and probably how
|
||||
// it would work in the mobile app too). This is mainly to allow doing integration testing.
|
||||
//
|
||||
// For example, all plugin calls go through a proxy, however they could made directly since
|
||||
// the plugin script is running within the same process as the main app.
|
||||
|
||||
export default class PluginRunner extends BasePluginRunner {
|
||||
|
||||
private eventHandlers_:EventHandlers = {};
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.eventHandler = this.eventHandler.bind(this);
|
||||
}
|
||||
|
||||
private async eventHandler(eventHandlerId:string, args:any[]) {
|
||||
const cb = this.eventHandlers_[eventHandlerId];
|
||||
return cb(...args);
|
||||
}
|
||||
|
||||
private newSandboxProxy(pluginId:string, sandbox:Global) {
|
||||
const target = async (path:string, args:any[]) => {
|
||||
return executeSandboxCall(pluginId, sandbox, `joplin.${path}`, mapEventHandlersToIds(args, this.eventHandlers_), this.eventHandler);
|
||||
};
|
||||
|
||||
return {
|
||||
joplin: sandboxProxy(target),
|
||||
console: createConsoleWrapper(pluginId),
|
||||
};
|
||||
}
|
||||
|
||||
async run(plugin:Plugin, sandbox:Global) {
|
||||
const vmSandbox = vm.createContext(this.newSandboxProxy(plugin.id, sandbox));
|
||||
|
||||
try {
|
||||
vm.runInContext(plugin.scriptText, vmSandbox);
|
||||
} catch (error) {
|
||||
this.logger().error(`In plugin ${plugin.id}:`, error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,10 +2,15 @@ const gulp = require('gulp');
|
||||
const fs = require('fs-extra');
|
||||
const utils = require('../Tools/gulp/utils');
|
||||
const tasks = {
|
||||
compileExtensions: {
|
||||
fn: require('../Tools/gulp/tasks/compileExtensions.js'),
|
||||
},
|
||||
copyLib: require('../Tools/gulp/tasks/copyLib'),
|
||||
tsc: require('../Tools/gulp/tasks/tsc'),
|
||||
updateIgnoredTypeScriptBuild: require('../Tools/gulp/tasks/updateIgnoredTypeScriptBuild'),
|
||||
};
|
||||
|
||||
tasks.build = {
|
||||
tasks.prepareBuild = {
|
||||
fn: async () => {
|
||||
const buildDir = `${__dirname}/build`;
|
||||
await utils.copyDir(`${__dirname}/app`, buildDir, {
|
||||
@@ -16,17 +21,18 @@ tasks.build = {
|
||||
await tasks.copyLib.fn();
|
||||
await utils.copyFile(`${__dirname}/package.json`, `${buildDir}/package.json`);
|
||||
await utils.copyFile(`${__dirname}/package-lock.json`, `${buildDir}/package-lock.json`);
|
||||
await utils.copyFile(`${__dirname}/gulpfile.js`, `${buildDir}/gulpfile.js`);
|
||||
|
||||
// const packageRaw = await fs.readFile(`${buildDir}/package.json`);
|
||||
// const package = JSON.parse(packageRaw.toString());
|
||||
// package.scripts.postinstall = package.scripts.postinstall.replace(/\.\.\/patches/, './patches');
|
||||
// await fs.writeFile(`${buildDir}/package.json`, JSON.stringify(package, null, 2), 'utf8');
|
||||
const packageRaw = await fs.readFile(`${buildDir}/package.json`);
|
||||
const package = JSON.parse(packageRaw.toString());
|
||||
package.scripts.postinstall = 'patch-package';
|
||||
await fs.writeFile(`${buildDir}/package.json`, JSON.stringify(package, null, 2), 'utf8');
|
||||
|
||||
fs.chmodSync(`${buildDir}/main.js`, 0o755);
|
||||
},
|
||||
};
|
||||
|
||||
tasks.buildTests = {
|
||||
tasks.prepareTestBuild = {
|
||||
fn: async () => {
|
||||
const testBuildDir = `${__dirname}/tests-build`;
|
||||
|
||||
@@ -35,14 +41,33 @@ tasks.buildTests = {
|
||||
'lib/',
|
||||
'locales/',
|
||||
'node_modules/',
|
||||
'*.ts',
|
||||
'*.tsx',
|
||||
],
|
||||
});
|
||||
|
||||
await utils.copyDir(`${__dirname}/../ReactNativeClient/lib`, `${testBuildDir}/lib`);
|
||||
await utils.copyDir(`${__dirname}/../ReactNativeClient/locales`, `${testBuildDir}/locales`);
|
||||
const rootDir = utils.rootDir();
|
||||
|
||||
await utils.copyDir(`${rootDir}/ReactNativeClient/lib`, `${testBuildDir}/lib`, {
|
||||
excluded: [
|
||||
`${rootDir}/ReactNativeClient/lib/joplin-renderer/node_modules`,
|
||||
],
|
||||
});
|
||||
await utils.copyDir(`${rootDir}/ReactNativeClient/locales`, `${testBuildDir}/locales`);
|
||||
await fs.mkdirp(`${testBuildDir}/data`);
|
||||
},
|
||||
};
|
||||
|
||||
gulp.task('build', tasks.build.fn);
|
||||
gulp.task('buildTests', tasks.buildTests.fn);
|
||||
utils.registerGulpTasks(gulp, tasks);
|
||||
|
||||
gulp.task('build', gulp.series([
|
||||
'prepareBuild',
|
||||
'compileExtensions',
|
||||
'copyLib',
|
||||
]));
|
||||
|
||||
gulp.task('buildTests', gulp.series([
|
||||
'prepareTestBuild',
|
||||
'compileExtensions',
|
||||
'copyLib',
|
||||
]));
|
||||
@@ -1 +1 @@
|
||||
{"To delete a tag, untag the associated notes.":"لتحذف الوسم، أزل الوسم عن الملاحظات التي وسمت به.","Please select the note or notebook to be deleted first.":"يرجى اختيار الملاحظة أو دفتر الملاحظات المراد حذفه أولاً.","Press Ctrl+D or type \"exit\" to exit the application":"اضغط Ctrl+D أو اكتب \"exit\" للخروج من التطبيق","More than one item match \"%s\". Please narrow down your query.":"أكثر من عنصر واحد يطابق \"%s\". يرجى تضييق الاستعلام الخاص بك.","No notebook selected.":"لم يتم اختيار دفتر ملاحظات.","No notebook has been specified.":"لم يتم تحديد دفتر ملاحظات.","Y":"نعم","n":"لا","N":"لا","y":"نعم","Cancelling background synchronisation... Please wait.":"يجري إلغاء مزامنة الخلفية... فضلاً انتظر.","No such command: %s":"أمر غير موجود: %s","The command \"%s\" is only available in GUI mode":"الأمر \"%s\" متوفر فقط في وضع الواجهة الرسومية","Cannot change encrypted item":"لا يمكن تغيير العنصر المشفَّر","Missing required argument: %s":"المعامل المطلوب %s مفقود","%s: %s":"%s: %s","Your choice: ":"اختيارك هو: ","Invalid answer: %s":"إجابة غير صحيحة: %s","Attaches the given file to the note.":"يرفق الملف المعطى بالملاحظة.","Cannot find \"%s\".":"لا يمكن العثور على \"%s\".","Displays the given note.":"يعرض الملاحظة المعطاة.","Displays the complete information about note.":"يعرض المعلومات الكاملة عن الملاحظة.","Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.":"يستخرج قيمة إعداد أو يضبطها. إذا لم يجر التزويد بـ [value] (قيمة) فسيعرض التطبيق قيمة [name] (اسم). إذا لم يجر التزويد بـ [name] ولا [value] فسيسرد التطبيق الإعداد الحالي.","Also displays unset and hidden config variables.":"يظهر أيضاً متغيرات الإعداد غير المضبوطة أو تلك المخفية.","%s = %s (%s)":"%s = %s (%s)","%s = %s":"%s = %s","Duplicates the notes matching <note> to [notebook]. If no notebook is specified the note is duplicated in the current notebook.":"ينشئ نسخة من الملاحظات المطابقة لـ <note> (ملاحظة) في [notebook] (دفتر ملاحظات). إذا لم يحدد دفتر ملاحظات فستنسخ الملاحظة في دفتر الملاحظات الحالي.","Marks a to-do as done.":"يعلّم قائمة مهام أنها تمت.","Note is not a to-do: \"%s\"":"الملاحظة: \"%s\" ليست قائمة مهام","Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file` and `target-status`.":"يدير ترتيبات (E2EE). الأوامر هي `enable`، `disable`، `decrypt`، `status`، `target-status`.","Enter master password:":"أدخل كلمة المرور الرئيسة:","Operation cancelled":"ألغيت العملية","Confirm password:":"تأكيد كلمة المرور:","Passwords do not match!":"كلمات المرور غير متطابقة!","Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.":"بدء فك التشفير جارٍ... يرجى الانتظار حيث قد تستغرق العملية عدة دقائق بحسب كمية البيانات المطلوب فك تشفيرها.","Completed decryption.":"اكتمل فك التشفير.","Enabled":"مفعََّل","Disabled":"معطَّل","Encryption is: %s":"التشفير هو: %s","Edit note.":"تحرير الملاحظة.","No text editor is defined. Please set it using `config editor <editor-path>`":"لم يعرَّف محرر نصوص. فضلاً اضبطه باستخدام `config editor <editor-path>`","No active notebook.":"لا يوجد دفتر ملاحظات نشط.","Note does not exist: \"%s\". Create it?":"الملاحظة: \"%s\" غير موجودة. تريد إنشائها؟","Exits the application.":"الخروج من التطبيق.","Exports Joplin data to the given path. By default, it will export the complete database including notebooks, notes, tags and resources.":"تصدير بيانات Joplin إلى المسار المعطى. سيصدِّر التطبيق تلقائياً كامل قاعدة البيانات بما في ذلك دفاتر الملاحظات ، الملاحظات ، الوسوم والموارد.","Destination format: %s":"التنسيق الوجهة: %s","Exports only the given note.":"تصدير الملاحظة المعطاة فقط.","Exports only the given notebook.":"تصدير دفتLine truncated
|
||||
{"OK":"موافق","Cancel":"إلغاء","Yes":"نعم","No":"لا","Close":"إغلاق","Current version is up-to-date.":"النسخة الحالية محدَّثة.","%s (pre-release)":"%s (ما قبل الإصدار)","An update is available, do you want to download it now?":"يتوفر تحديث ، هل تريد تنزيله الآن؟","Your version: %s":"النسخة لديك: %s","New version: %s":"النسخة الجديدة: %s","Full Release Notes":"ملاحظات الإصدار الكامل","Exporting to \"%s\" as \"%s\" format. Please wait...":"التصدير إلى \"%s\" بتنسيق \"%s\". فضلاً انتظر...","Goto Anything...":"اذهب إلى أي شيء...","Search in all the notes":"البحث في كل الملاحظات","ID":"المعرّف","Untitled":"بدون اسم","Delete":"حذف","Clear":"مسح","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"سيتم إنشاء دفتر الملاحظات \"%s\" و استيراد الملف \"%s\" إليه","Found: %d.":"تم العثور عليها: %d.","Created: %d.":"تم إنشاؤها: %d.","Updated: %d.":"تم تحديثها: %d.","Skipped: %d.":"تم تجاوزها: %d.","Resources: %d.":"الموارد: %d.","Tagged: %d.":"تم وسمها: %d.","The notes have been imported: %s":"جرى استيراد الملاحظات: %s","This will open a new screen. Save your current changes?":"هذا سيفتح شاشة جديدة. حفظ التغييرات الحالية الخاصة بك؟","Check synchronisation configuration":"فحص ضبط المزامنة","Unknown":"مجهول","Checking...":"تدقيق...","Error":"خطأ","The Joplin Nextcloud App is either not installed or misconfigured. Please see the full error message below:":"تطبيق Joplin Nextcloud إما غير مثبت أو تم تكوينه بشكل خاطئ. يرجى الاطلاع على رسالة الخطأ الكاملة أدناه:","Show Log":"إظهار السجل","Joplin Nextcloud App status:":"حالة تطبيق Joplin Nextcloud:","Check Status":"تحقق من الحالة","Help":"مساعدة","Show Advanced Settings":"أظهر الاعدادات المتقدمة","Browse...":"استعراض...","Edit":"تحرير","Back":"عودة","Apply":"تطبيق","Please select where the sync status should be exported to":"فضلاً اختر أين سيتم تصدير حالة المزامنة","Retry":"إعادة المحاولة","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"يرجى اتباع الخطوات التالية للسماح لـ Joplin بالمزامنة مع Dropbox:","Step 1: Open this URL in your browser to authorise the application:":"الخطوة 1: إفتح عنوان URL هذا في المستعرض للتصريح للتطبيق:","Step 2: Enter the code provided by Dropbox:":"الخطوة 2: أدخل الرمز المزوّد من Dropbox:","Submit":"إرسال","Synchronising...":"مزامنة...","Generating link...":"جارٍ إنشاء الرابط...","Link has been copied to clipboard!":"تم نسخ الرابط إلى الحافظة!","Note: When a note is shared, it will no longer be encrypted on the server.":"ملاحظة: عند مشاركة ملاحظة ، لن يتم تشفيرها على الخادم.","Share Notes":"مشاركة ملاحظات","Copy Shareable Link":"نسخ رابط قابل للمشاركة","Attach file":"إرفاق ملف","Insert Date Time":"إدراج التاريخ والوقت","strong text":"نص مشدَّد","Insert Hyperlink":"إدراج ارتباط تشعبي","List item":"عنصر قائمة","Cut":"قص","Copy":"نسخ","Paste":"لصق","Layout":"تخطيط","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"ليس لهذه الملاحظة أي محتوى. اضغط على \"%s\" لتبديل المحرّر وتحرير الملاحظة.","to-do":"قائمة مهام","note":"ملاحظة","Creating new %s...":"إنشاء %s جديد ...","In: %s":"في: %s","Open...":"فتح...","Save as...":"حفظ باسم...","Copy path to clipboard":"نسخ المسار إلى الحافظة","Copy Link Address":"نسخ عنوان الرابط","Unsupported link or message: %s":"رابط أو رسالة غير مدعومان: %s","Note title":"عنوان الملاحظة","Focus":"تركيز","Select all":"اختيار الكل","Bold":"غامق","Italic":"مائل","Hyperlink":"ارتباط تشعبي","Code":"رمز","Numbered List":"قائمة مرقّمة","Bulleted List":"قائمة تعداد نقطي","Checkbox":"خانة اختيار","Heading":"ترويسة","Horizontal Rule":"خط تسطير أفقي","Note body":"متن الملاحظة","Search in current note":"البحث في الملاحظة الحاليّة","Authentication was not completed (did not receive an authentication token).":"لم تكتمل المصادقة (لم أستلم الرمز المميز للمصادقة).","Some itemsLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"To delete a tag, untag the associated notes.":"За да изтриете таг, премахнете го от всички бележки.","Please select the note or notebook to be deleted first.":"Моля първо изберете бележката или тетрадката, която искате да изтриете.","Press Ctrl+D or type \"exit\" to exit the application":"Натиснете Ctrl+D или напишете \"exit\" за да напуснете приложението","More than one item match \"%s\". Please narrow down your query.":"Повече от едно нещо съответства на \"%s\". Моля рафинирайте търсенето си.","No notebook selected.":"Няма избрани тетрадки.","No notebook has been specified.":"Няма зададени тетрадки.","Y":"Д","n":"н","N":"Н","y":"д","Cancelling background synchronisation... Please wait.":"Отменя се синхронизацията течаща на заден план... Моля изчакайте.","No such command: %s":"Няма такава команда: %s","The command \"%s\" is only available in GUI mode":"Командата \"%s\" е приложима само в графичен режим","Cannot change encrypted item":"Криптираният обект не може да бъде променен","Missing required argument: %s":"Липсващ задължителен параметър: %s","%s: %s":"%s: %s","Your choice: ":"Вашият избор: ","Invalid answer: %s":"Невалиден отговор: %s","Attaches the given file to the note.":"Прикачва зададения файл към бележката.","Cannot find \"%s\".":"Не успях да намеря \"%s\".","Displays the given note.":"Показва зададената бележка.","Displays the complete information about note.":"Показва пълната информация за бележката.","Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.":"Показва или променя конфигурационна стойност. Ако [стойност] не е дадена, ще покаже стойността на [име]. Ако нито [име] нито [стойност] са дадени, изрежда цялата настояща конфигурация.","Also displays unset and hidden config variables.":"Показва също и конфигурации, които нямат стойност, или са скрити.","%s = %s (%s)":"%s = %s (%s)","%s = %s":"%s = %s","Duplicates the notes matching <note> to [notebook]. If no notebook is specified the note is duplicated in the current notebook.":"Дуплицира бележките съответстващи на <бележка> в [тетрадка]. Ако тетрадка не е зададена, бележките ще бъдат дуплицирани в настоящата тетрадка.","Marks a to-do as done.":"Маркира задача като изпълнена.","Note is not a to-do: \"%s\"":"Бележката не е задача: \"%s\"","Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file` and `target-status`.":"Управлява E2EE конфигурацията. Командите са `enable`, `disable`, `decrypt`, `status`, `decrypt-file` и `target-status`.","Enter master password:":"Въведете главната парола:","Operation cancelled":"Действието бе отменено","Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.":"Започвам да декриптирам... Моля изчакайте, защото това може да отнеме няколко минути, в зависимост от колко има за декриптиране.","Completed decryption.":"Завърших декриптирането.","Enabled":"Включено","Disabled":"Изключено","Encryption is: %s":"Криптирането е: %s","Edit note.":"Редактиране на бележка.","No text editor is defined. Please set it using `config editor <editor-path>`":"Няма зададен текстови редактор. Моля задайте го с командата: `config editor <път-до-редактора>`","No active notebook.":"Няма активна тетрадка.","Note does not exist: \"%s\". Create it?":"Бележката не съществува:\"%s\". Да я създам ли?","Exits the application.":"Напуска приложението.","Exports Joplin data to the given path. By default, it will export the complete database including notebooks, notes, tags and resources.":"Експортира данните от Joplin в зададенияLine truncated
|
||||
{"OK":"Добре","Cancel":"Отмени","Yes":"Да","No":"Не","Current version is up-to-date.":"Настоящата версия е най-новата.","%s (pre-release)":"%s (експериментална)","An update is available, do you want to download it now?":"Има обновление, искате ли да го свалите сега?","Your version: %s":"Вашата версия: %s","New version: %s":"Нова версия: %s","Exporting to \"%s\" as \"%s\" format. Please wait...":"Експортирам към \"%s\" във формат \"%s\". Моля изчакайте...","Goto Anything...":"Отиди на нещо...","Search in all the notes":"Търсене във всички бележки","ID":"Идентификатор","Untitled":"Без заглавие","Delete":"Изтрий","Clear":"Изчисти","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Нова тетрадка \"%s\" ще бъде създадена и файл \"%s\" ще бъде импортиран в нея","Found: %d.":"Намерени: %d.","Created: %d.":"Създадени: %d.","Updated: %d.":"Обновени: %d.","Skipped: %d.":"Пропуснати: %d.","Resources: %d.":"Ресурси: %d.","Tagged: %d.":"Тагнати: %d.","The notes have been imported: %s":"Бележките бяха импортирани: %s","Check synchronisation configuration":"Провери настройките за синхронизация","Browse...":"Търсене...","Edit":"Редактиране","Back":"Назад","Apply":"Приложи","Please select where the sync status should be exported to":"Моля изберете къде да бъде експортиран статуса на синхронизацията","Retry":"Нов опит","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"За да позволите на Joplin да синхронизира с Dropbox, моля изпълнете следните стъпки:","Step 1: Open this URL in your browser to authorise the application:":"1ва стъпка: Отворете този адрес в браузър и оторизирайте приложението:","Step 2: Enter the code provided by Dropbox:":"2ра стъпка: Въведете кода предоставен от Dropbox:","Submit":"Предай","Attach file":"Прикачи файл","Insert Date Time":"Постави датата и часа","strong text":"силно наблегнат текст","Insert Hyperlink":"Вкарай линк","List item":"Елемент на списък","Cut":"Изрежи","Copy":"Копирай","Paste":"Постави","Layout":"Разположеня","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"Тази бележка няма съдържание. Натиснете \"%s\" за да покажете редакторя и да редактирате бележката.","to-do":"задача","note":"бележка","Creating new %s...":"Създаване на нова %s...","In: %s":"В: %s","Open...":"Отвори...","Save as...":"Запазаи като...","Copy path to clipboard":"Копирай пътя в клипборда","Copy Link Address":"Копирай адреса на линка","Unsupported link or message: %s":"Неподдържан линк или съобщение: %s","Note title":"Заглавие на бележката","Focus":"Фокусирай","Select all":"Избери всичко","Bold":"Удебелен","Italic":"Курсив","Hyperlink":"Линк","Code":"Код","Numbered List":"Номериран списък","Bulleted List":"Неномериран списък","Checkbox":"Поле за отметка","Heading":"Заглавие","Horizontal Rule":"Хоризонтална черта","Note body":"Съдържание на бележката","Search in current note":"Търсене в настоящата бележка","Authentication was not completed (did not receive an authentication token).":"Оторизирането не беше завършено (не получих оторизационен жетон).","Some items cannot be synchronised.":"Някои обекти не можаха да бъдат синхронизирани.","View them now":"Покажи ги сега","One or more master keys need a password.":"Поне един главен ключ се нуждае от парола.","Set the password":"Задаване на паролата","Search...":"Търсене...","Tags":"Тагове","Add or remove tags:":"Добавяне и махане на тагове:","Note properties":"Атрибути на бележката","Rename":"Преименувай","Rename tag:":"Преименуване на таг:","New notebook":"Нова тетрадка","Notebook title:":"Заглавие на тетрадка:","Rename notebook:":"ПLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"To delete a tag, untag the associated notes.":"Da izbrišete oznaku, prvo je uklonite iz bilješki kojima je dodijeljena.","Please select the note or notebook to be deleted first.":"Prvo odaberite bilješku ili bilježnicu koju želite izbrisati","Press Ctrl+D or type \"exit\" to exit the application":"Pritisnite Ctrl+D ili kucajte \"exit\" da zatvorite aplikaciju","More than one item match \"%s\". Please narrow down your query.":"Više od jednog rezultata odgovara \"%s\". Molimo suzite obim pretrage.","No notebook selected.":"Nije odabrana bilježnica.","No notebook has been specified.":"Nije precizirana bilježnica","Y":"Y","n":"n","N":"N","y":"y","Cancelling background synchronisation... Please wait.":"Prekidam sinhronizaciju... Pričekajte.","No such command: %s":"Nepostojeća komanda: %s","The command \"%s\" is only available in GUI mode":"Komanda \"%s\" dostupna je samo u grafičkom okruženju","Cannot change encrypted item":"Nije moguće promijeniti šifriranu stavku","Missing required argument: %s":"Nedostaje neophodni argument: %s","%s: %s":"%s: %s","Your choice: ":"Vaš izbor: ","Invalid answer: %s":"Nevažeći odgovor: %s","Attaches the given file to the note.":"Prilaže datu datoteku bilješci.","Cannot find \"%s\".":"Ne mogu pronaći \"%s\".","Displays the given note.":"Prikazuje datu bilješku.","Displays the complete information about note.":"Prikazuje potpune informacije o bilješci.","Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.":"Prima ili podešava konfiguracijske vrijednosti. Ako [value] nije navedena, tada će biti prikazana vrijednost [name]. Ako ni [name] ni [value] nisu precizirane, prikazat će se trenutna konfiguracija.","Also displays unset and hidden config variables.":"Prikazuje i nepodešene i skrivene konfiguracijske varijable.","%s = %s (%s)":"%s = %s (%s)","%s = %s":"%s = %s","Duplicates the notes matching <note> to [notebook]. If no notebook is specified the note is duplicated in the current notebook.":"Kreira duplikat bilješke <note> u [notebook]. Ako bilježnica nije navedena, duplikat će biti pohranjen u trenutno otvorenu bilježnicu.","Marks a to-do as done.":"Označava da je zadatak obavljen.","Note is not a to-do: \"%s\"":"Bilješka nije zadatak: \"%s\"","Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file` and `target-status`.":"Upravlja konfiguracijom šifriranja s kraja na kraj (E2EE). Komande glase: `enable` (uključi), `disable` (isključi), `decrypt` (dešifruj), `status` (stanje), `decrypt-file` (dešifruj datoteku) i `target-status` (stanje odredišta).","Enter master password:":"Unesite glavnu lozinku:","Operation cancelled":"Radnja je prekinuta","Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.":"Počinjem sa dešifrovanjem... Molim Vas da pričekate, jer proces može trajati nekoliko minuta, zavisno od količine podataka koje treba dešifrovati.","Completed decryption.":"Dešifrovanje završeno.","Enabled":"Uključeno","Disabled":"Isključeno","Encryption is: %s":"Šifriranje je: %s","Edit note.":"Uredi bilješku.","No text editor is defined. Please set it using `config editor <editor-path>`":"Nije određen program za uređivanje teksta. Precizirajte ga pomoću `config editor <editor-path>`","No active notebook.":"Nema aktivne bilježnice.","Note does not exist: \"%s\". Create it?":"Bilješka ne postoji: \"%s\". Želite li je kreirati?","Exits the application.":"Zatvara aplikaciju.","Exports Joplin data to the given path. By default, it will export the complete database including notebooks, notes, tags and resources.":"Prenosi kopiju Joplin podataka na datu lokaciju. Čitava će baza podataka biti pohranjena, uključujući bilježnice, bilješke, oznake i resurse.","Destination format: %s":"Format: %s","Exports only the given note.":"Prenosi samo kopiju date bilješke.","Exports only the given notebook.":"Prenosi samo kopiju date bilježnice.","Displays a geolocation URL for the note.":"Prikazuje geografsku lokaciju bilješke.","Displays usage information.":"Prikazuje informacije o korištenju.","For information on how to customise the shortcuts please visit %s":"Da biste saznali kako raditi sa kraticama, posjetite %s","Shortcuts are not available in CLI mode.":"Kratice nisu dostupne u negrafičkom okruženju.","Type `help [command]` for more information about a command; or type `help all` for the complete usage information.":"Kucajte `help [command]` za više informacija o komandi; ili kucajte `help all` za detaljne informacije o načinu korištenja.","The possible commands are:":"Moguće komande glase:","In any command, a note or notebook can be referred to by title or ID, or using the shortcuts `$n` or `$b` for, respectively, the currently selected note or notebook. `$c` can be used to refer to the currently selected itLine truncated
|
||||
{"OK":"Uredu","Cancel":"Otkaži","Yes":"Da","No":"Ne","Close":"Zatvori","Current version is up-to-date.":"Trenutna je verzija ažurirana.","%s (pre-release)":"%s (verzija pred objavljivanje)","An update is available, do you want to download it now?":"Nova je verzija dostupna. Želite li je preuzeti?","Your version: %s":"Vaša verzija: %s","New version: %s":"Nova verzija: %s","Goto Anything...":"Pronađite bilo šta...","Search in all the notes":"Pretraži sve bilješke","Size":"Veličina","ID":"ID","Untitled":"Bez naziva","Delete":"Izbriši","This is an advanced tool to show the attachments that are linked to your notes. Please be careful when deleting one of them as they cannot be restored afterwards.":"Ovo je napredna alatka za prikazivanje priloga koji se nalaze u Vašim bilješkama. Molimo budite oprezni prilikom brisanja priloga, jer se oni više neće moći rekonstruisati.","No resources!":"Nema resursa!","Warning: not all resources shown for performance reasons (limit: %s).":"Upozorenje: zbog performansi nisu prikazani svi resursi (granica: %s).","Clear":"Počisti","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Kreirat će se nova bilježnica \"%s\" i u nju će biti unesena datoteka \"%s\"","Found: %d.":"Pronađeno: %d.","Created: %d.":"Kreirano: %d.","Updated: %d.":"Ažurirano: %d.","Skipped: %d.":"Preskočeno: %d.","Resources: %d.":"Resursi: %d.","Tagged: %d.":"Označeno: %d.","The notes have been imported: %s":"Bilješke su unesene: %s","This will open a new screen. Save your current changes?":"Otvorit će se novi prikaz. Želite li memorisati trenutne izmjene?","Check synchronisation configuration":"Provjeri postavke za sinhronizaciju","The Joplin Nextcloud App is either not installed or misconfigured. Please see the full error message below:":"Joplin Nextcloud aplikacija nije instalirana ili je pogrešno konfigurisana. Molimo pogledajte puni izvještaj o greški kako slijedi:","Joplin Nextcloud App status:":"Status Joplin Nextcloud aplikacije:","Browse...":"Pregledaj...","Edit":"Uredi","Back":"Nazad","Apply":"Primijeni","Please select where the sync status should be exported to":"Navedite gdje će biti pohranjen status sinhronizacije","Retry":"Ponovi","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"Slijedite ove korake da dopustite Joplinu sinhronizovanje sa Dropboxom:","Step 1: Open this URL in your browser to authorise the application:":"Korak 1: otvorite ovu adresu u Vašem internet pregledniku i ovjerite aplikaciju:","Step 2: Enter the code provided by Dropbox:":"Korak 2: unesite kōd koji Vam je poslao Dropbox:","Submit":"Pošalji","Note: When a note is shared, it will no longer be encrypted on the server.":"Napomena: bilješka koja se podijeli s drugima više neće biti šifrirana na serveru.","Attach file":"Priloži datoteku","Code Block":"Kōd (izdvojen)","Inline Code":"Kōd (unutar teksta)","Insert Date Time":"Unesi datum i vrijeme","Drop notes or files here":"Ispustite bilješke ili datoteke ovdje","Please wait for all attachments to be downloaded and decrypted. You may also switch to %s to edit the note.":"Pričekajte dok svi prilozi ne budu preuzeti i dešifrovani. Također možete otvoriti %s da uredite bilješku.","strong text":"podebljani tekst","Insert Hyperlink":"Unesi poveznicu","List item":"Stavka nabrajanja","Cut":"Izreži","Copy":"Kopiraj","Paste":"Zalijepi","Layout":"Prikaz","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"Bilješka je prazna. Pritisnite na \"%s\" da otvorite program za rad s tekstom i uredite bilješku.","to-do":"zadatak","note":"bilješka","Creating new %s...":"Kreiram: %s...","In: %s":"U: %s","Open...":"Otvori...","Save as...":"Pohrani kao...","Reveal file in folder":"Pokaži datoteku u direktoriju","Copy path to clipboard":"Kopiraj putanju u spremnik","Copy Link Address":"Kopiraj adresu veze","There was an error downloading this attachment:":"Došlo je do greške prilikom preuzimanja priloga:","Unsupported link or message: %s":"Nepodržana veza ili poruka: %s","Focus":"Fokus","Select all":"Označi sve","Bold":"Masna slova","Italic":"Kurziv","Hyperlink":"Poveznica","Code":"Kōd","Numbered List":"Numerisano nabrajanje","Bulleted List":"Nabrajanje","Checkbox":"Polje za kvačicu","Heading":"Naslov","Horizontal Rule":"Vodoravna linija","Search in current note":"Potraži u trenutnoj bilješci","Authentication was not completed (did not receive an authentication token).":"Ovjera nije završena (nije primljena potvrda /token/).","Some items cannot be synchronised.":"Neke stavke nije moguće sinhronizovati.","View them now":"Pregledajte ih sada","One or more master keys need a password.":"Jedan ili više glavnih ključeva zahtijevaju lozinku.","Set the password":"Zadajte lozinku","Search...":"Pretraživanje...","Tags":"Oznake","Add or remove tags:":"Dodajte ili uklonite oznake:","Note properties":"Svojstva bilješke","Rename":"Preimenuj","Rename tag:":"PreimenujtLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"To delete a tag, untag the associated notes.":"Per a suprimir una etiqueta, traieu l'etiqueta en les notes associades.","Please select the note or notebook to be deleted first.":"Primer seleccioneu la nota o el bloc de notes que vulgueu suprimir.","Press Ctrl+D or type \"exit\" to exit the application":"Premeu Ctrl+D o escriviu «exit» per a sortir de l'aplicació","More than one item match \"%s\". Please narrow down your query.":"Hi ha més d'un element que coincideix amb «%s». Restringiu la consulta.","No notebook selected.":"No heu seleccionat cap bloc de notes.","No notebook has been specified.":"No heu indicat cap bloc de notes.","Y":"S","n":"n","N":"N","y":"s","Cancelling background synchronisation... Please wait.":"S'està cancel·lant la sincronització en segon pla... Espereu.","No such command: %s":"No existeix l'ordre: %s","The command \"%s\" is only available in GUI mode":"L'ordre «%s» només és disponible en mode IGU","Cannot change encrypted item":"No es pot canviar l'element xifrat","Missing required argument: %s":"Manca un argument requerit: %s","%s: %s":"%s: %s","Your choice: ":"La vostra tria:","Invalid answer: %s":"La resposta no és vàlida: %s","Attaches the given file to the note.":"Adjunta el fitxer indicat a la nota.","Cannot find \"%s\".":"No es pot trobar «%s»","Displays the given note.":"Mostra la nota indicada.","Displays the complete information about note.":"Mostra la informació completa sobre la nota.","Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.":"Obté o estableix un valor de configuració. Si no s'indica [valor], mostrarà el valor de [nom]. Altrament, si no s'indica [nom] ni [valor], es mostrarà un llistat amb la configuració actual.","Also displays unset and hidden config variables.":"També mostra variables de configuració ocultes o sense definir.","%s = %s (%s)":"%s = %s (%s)","%s = %s":"%s = %s","Duplicates the notes matching <note> to [notebook]. If no notebook is specified the note is duplicated in the current notebook.":"Duplica les notes que coincideixen amb en [blocdenotes]. Si no indiqueu cap bloc de notes es dupliquen en el bloc de notes actual.","Marks a to-do as done.":"Marca un llistat de tasques pendents com a fet.","Note is not a to-do: \"%s\"":"La nota no és un llistat de tasques pendents: «%s»","Enter master password:":"Introduïu una contrasenya mestra:","Operation cancelled":"L'operació s'ha cancel·lat","Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.":"S'està iniciant el desxifratge... Espereu perquè això pot durar alguns minuts, depenent de quanta informació calgui desxifrar.","Completed decryption.":"El desxifratge ha finalitzat.","Enabled":"Activat","Disabled":"Desactivat","Encryption is: %s":"El xifratge és: %s","Edit note.":"Edita la nota.","No text editor is defined. Please set it using `config editor <editor-path>`":"No hi ha definit cap editor de text. Establiu-ne un usant `config editor <editor-path>`","No active notebook.":"No hi ha cap bloc de notes actiu.","Note does not exist: \"%s\". Create it?":"No existeix «%s». Voleu crear-lo?","Exits the application.":"Surt de l'aplicació","Exports Joplin data to the given path. By default, it will export the complete database including notebooks, notes, tags and resources.":"Exporta les dades del Joplin al camí indicat. Per defecte, exportarà tota la base de dades, incloent-hi blocs de notes, notes, etiquetes i recursos.","Destination format: %s":"Format de destinació: %s","Exports only the given note.":"Exporta només la nota indicada.","Exports only the given notebook.":"Exporta només el bloc de notes indicat.","Displays a geolocation URL for the note.":"Motra una URL de geolocalitzacio de la nota.","Displays usage information.":"Mostra la informació d'ús.","For information on how to customise the shortcuts please visit %s":"Per a obtenir informació sobre com personalitzar les dreceres de teclat, visiteu %s","Shortcuts are not available in CLI mode.":"Les dreceres no són disponibles en el mode de línia d'ordres.","Type `help [command]` for more information about a command; or type `help all` for the complete usage information.":"Escriviu «ajuda [ordre]» per a més informació sobre l'ordre; o escriviu «ajuda all» per a la informació d'ús completa.","The possible commands are:":"Les ordres possibles són:","In any command, a note or notebook can be referred to by title or ID, or using the shortcuts `$n` or `$b` for, respectively, the currently selected note or notebook. `$c` can be used to refer to the currently selected item.":"En qualsevol ordre, podeu referenciar una nota o bloc de notes per el títol o l'ID, o podeu usar dreceres «$n» o «$b» per a, respectivament, la nota o el bloc de nota seleccionat actual. Podeu usar «$c» per a fer referència a l'element Line truncated
|
||||
{"OK":"D'acord","Cancel":"Cancel·la","Yes":"Sí","No":"No","Close":"Tanca","Current version is up-to-date.":"La versió actual està actualitzada.","%s (pre-release)":"%s (pre-llençament)","An update is available, do you want to download it now?":"Hi ha disponible una actualització. Voleu descarregar-la ara?","Your version: %s":"La vostra versió: %s","New version: %s":"Nova versió: %s","Full Release Notes":"Notes completes de la versió","Exporting to \"%s\" as \"%s\" format. Please wait...":"S'està exportant a «%s» com a format «%s». Espereu...","Could not export notes: %s":"No s'han pogut exportar les notes: %s","Type a note title or part of its content to jump to it. Or type # followed by a tag name, or @ followed by a notebook name.":"Escriviu un títol de nota o part del seu contingut per saltar a la nota. O escriviu # seguit d'un nom d'etiqueta, o @ seguit d'un nom de bloc de notes.","Goto Anything...":"Anar a qualsevol cosa...","Search in all the notes":"Cerca a totes les notes","Title":"Títol","Size":"Mida","ID":"ID","Action":"Acció","Untitled":"Sense títol","Delete":"Suprimeix","Delete attachment \"%s\"?":"Voleu suprimir l'adjunt \"%s\"?","This is an advanced tool to show the attachments that are linked to your notes. Please be careful when deleting one of them as they cannot be restored afterwards.":"Aquesta és una eina avançada per mostrar els adjunts que estan enllaçats a les vostres notes. Tingueu precaució en suprimir-ne un, ja que després no es poden restaurar.","Please wait...":"Espereu...","No resources!":"No hi ha recursos!","Warning: not all resources shown for performance reasons (limit: %s).":"Avís: no es mostren tots els recursos per motius de rendiment (límit:% s).","Clear":"Neteja","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Es crearà un bloc de notes «%s» i s'hi importarà el fitxer «%s»","Found: %d.":"Trobades: %d.","Created: %d.":"Creades: %d.","Updated: %d.":"Actualitzades: %d.","Skipped: %d.":"Omeses: %d.","Resources: %d.":"Recursos: %d.","Tagged: %d.":"Etiquetats: %d.","The notes have been imported: %s":"Notes s'han importat: %s","This will open a new screen. Save your current changes?":"Això obrirà una nova pantalla. Voleu desar els canvis actuals?","Check synchronisation configuration":"Comprova la configuració de la sincronització","Unknown":"Desconegut","Checking...":"Verificant...","Error":"Error","The Joplin Nextcloud App is either not installed or misconfigured. Please see the full error message below:":"L'aplicació Joplin Nextcloud no està instal·lada, o està mal configurada. Llegiu el missatge d'error complet a continuació:","Show Log":"Mostra el registre","Joplin Nextcloud App status:":"Estat de l'aplicació Joplin Nextcloud:","Check Status":"Verifica l'estat","Help":"Ajuda","Show Advanced Settings":"Mostra opcions avançades","Browse...":"Navega...","Edit":"Edita","Back":"Enrere","Apply":"Aplica","Please select where the sync status should be exported to":"Seleccioneu on s'hauria d'exportar l'estat de la sincronització","Retry All":"Torna a provar-los tots","Retry":"Torna a provar","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"Per a permetre que el Joplin sincronitzi amb el Dropbox, seguiu les passes següents:","Step 1: Open this URL in your browser to authorise the application:":"Pas 1: Obriu aquest URL al navegador per autoritzar l'aplicació:","Step 2: Enter the code provided by Dropbox:":"Pas 2: Introduïu el codi proporcionat per Dropbox:","Submit":"Tramet","Synchronising...":"Sincronitzant...","Generating link...":"Generant enllaç...","Link has been copied to clipboard!":"L'enllaç s'ha copiat al porta-retalls!","Note: When a note is shared, it will no longer be encrypted on the server.":"Nota: quan es comparteix una nota, deixa d'estar xifrada al servidor.","Share Notes":"Comparteix notes","Copy Shareable Link":"Copia l'enllaç compartible","Attach file":"Adjunta un fitxer","Code Block":"Bloc de codi","Inline Code":"Codi en línia","Insert Date Time":"Insereix la data i hora","Drop notes or files here":"Arrossega les notes o fitxers aquí","Code View":"Vista de codi","Please wait for all attachments to be downloaded and decrypted. You may also switch to %s to edit the note.":"Espereu que tots els adjunts hagin estat descarregats i desxifrats. També podeu canviar a %s per editar la nota.","Checkbox list":"Llista de caselles de verificació","strong text":"text destacat","emphasised text":"text ressaltat","Insert Hyperlink":"Introdueix un enllaç","List item":"Element de llista","Cut":"Retalla","Copy":"Copia","Paste":"Enganxa","Layout":"Disposició","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"Aquesta nota no té contingut. Feu clic a «%s» per a anar a l'editor i modificar-la.","to-do":"tasques pendents","note":"nota","Creating new %s...":"S'està creant una %s...","In: %s":"A: %s","Open...":"Obre...","Save as...":Line truncated
|
||||
@@ -1 +1 @@
|
||||
{"To delete a tag, untag the associated notes.":"Pro smazání tagu jej odeberte od přiřazených poznámek.","Please select the note or notebook to be deleted first.":"Nejprve prosím vyberte poznámku či zápisník ke smazání.","Press Ctrl+D or type \"exit\" to exit the application":"Stiskněte Ctrl+D nebo napište \"exit\" pro ukončení aplikace","More than one item match \"%s\". Please narrow down your query.":"Výrazu \"%s\" odpovídá více než jedna položka, upřesněte prosím hledaný text.","No notebook selected.":"Není vybrán žádný zápisník.","No notebook has been specified.":"Nebyl vybrán žádný zápisník.","Y":"Y","n":"n","N":"N","y":"y","Cancelling background synchronisation... Please wait.":"Zastavuji synchronizaci, chvíli strpení...","No such command: %s":"Příkaz neexistuje\" %s","The command \"%s\" is only available in GUI mode":"Příkaz \"%s\" je dostupný pouze v grafickém rozhraní","Cannot change encrypted item":"Nelze editovat zašifrovanou položku","Missing required argument: %s":"Chybí povinný parametr: %s","%s: %s":"%s: %s","Your choice: ":"Vaše volba: ","Invalid answer: %s":"Neplatná odpověď: %s","Attaches the given file to the note.":"Přiloží soubor k poznámce.","Cannot find \"%s\".":"Výraz \"%s\" nebyl nalezen.","Displays the given note.":"Zobrazí vybranou poznámku.","Displays the complete information about note.":"Zobrazí veškeré informace o poznámce.","Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.":"Získá nebo nastaví konfigurační hodnotu. Pokud není [hodnota] specifikována, zobrazí hodnotu položky [jméno]. Pokud není specifikována [hodnota] ani [jméno], je zobrazena současná konfigurace.","Also displays unset and hidden config variables.":"Zobrazí i nenastavené a schované konfigurační proměnné.","%s = %s (%s)":"%s = %s (%s)","%s = %s":"%s = %s","Duplicates the notes matching <note> to [notebook]. If no notebook is specified the note is duplicated in the current notebook.":"Duplikuje poznámky vyhovující <note> do [notebook]. Pokud není notebook (zápisník) specifikován, je poznámka duplikována v tom současném.","Marks a to-do as done.":"Označí to-do jako hotové.","Note is not a to-do: \"%s\"":"Poznámka není to-do: \"%s\"","Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file` and `target-status`.":"Nastavuje šifrování. Příkazy jsou `enable` (zapnout), `disable` (vypnout), `decrypt` (dešifrovat), `status` (stav) a `target-status` (stav v cíli synchronizace).","Enter master password:":"Zadejte master heslo:","Operation cancelled":"Operace zrušena","Confirm password:":"Potvrďte heslo:","Passwords do not match!":"Hesla se neshodují!","Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.":"Dešifruji... Chvíli strpení, podle množství dat k dešifrování to může zabrat i několik minut.","Completed decryption.":"Dešifrování dokončeno.","Enabled":"Zapnuto","Disabled":"Vypnuto","Encryption is: %s":"Šifrování je: %s","Edit note.":"Upravit poznámku.","No text editor is defined. Please set it using `config editor <editor-path>`":"Nebyl vybrán textový editor. Prosím nastavte jej pomocí `config editor <editor-path>`","No active notebook.":"Není vybrán žádný zápisník.","Note does not exist: \"%s\". Create it?":"Poznámka \"%s\" neexistuje. Chcete ji vytvořit?","Exits the application.":"Ukončí aplikaci.","Exports Joplin data to the given path. By default, it will export the complete database including notebooks, notes, tags and resources.":"Exportuje data Joplinu do zadané cesty. Bez dalších voleb exportuje veškerý obsah databáze včetně zápisníků, poznámek, tagů a příloh.","Destination format: %s":"Formát destinace: %s","Exports only the given note.":"Exportuje pouze vybranou poznámku.","Exports only the given notebook.":"Exportuje pouze vybraný zápisník.","Displays a geolocation URL for the note.":"Zobrazí geolokační URL poznámky.","Displays usage information.":"Zobrazí informace o použití.","For information on how to customise the shortcuts please visit %s":"Pro informace k úpravě klávesových zkratek prosím běžte na %s","Shortcuts are not available in CLI mode.":"Klávesové zkratky nejsou v konzoli dostupné.","Type `help [command]` for more information about a command; or type `help all` for the complete usage information.":"Zadejte `help [příkaz]` pro více informací o příkazu; nebo `help all` pro kompletní nápovědu.","The possible commands are:":"Dostupné příkazy:","In any command, a note or notebook can be referred to by title or ID, or using the shortcuts `$n` or `$b` for, respectively, the currently selected note or notebook. `$c` can be used to refer to the currently selected item.":"Ve všech přLine truncated
|
||||
{"OK":"OK","Cancel":"Zrušit","Yes":"Ano","No":"Ne","Close":"Zavřít","Current version is up-to-date.":"Současná verze je aktuální.","%s (pre-release)":"%s (pre-release)","An update is available, do you want to download it now?":"Je k dispozici update, chcete jej stáhnout?","Your version: %s":"Vaše verze: %s","New version: %s":"Nová verze: %s","Full Release Notes":"Úplné poznámky k verzi","Exporting to \"%s\" as \"%s\" format. Please wait...":"Exportuji do \"%s\" jako formát \"%s\". Chvíli strpení...","Goto Anything...":"Přejít kamkoliv...","Search in all the notes":"Hledat ve všech poznámkách","ID":"ID","Untitled":"Bez názvu","Delete":"Smazat","Clear":"Vyčistit","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Bude vytvořen zápisník \"%s\" a soubor \"%s\" do něj bude importován","Found: %d.":"Nalezeno: %d.","Created: %d.":"Vytvořeno: %d.","Updated: %d.":"Upraveno: %d.","Skipped: %d.":"Přeskočeno: %d.","Resources: %d.":"Zdroje: %d.","Tagged: %d.":"Otagováno: %d.","The notes have been imported: %s":"Poznámky importovány: %s","This will open a new screen. Save your current changes?":"Toto otevře nové okno. Chcete uložit současné změny?","Check synchronisation configuration":"Zkontrolujte nastavení synchronizace","Unknown":"Neznámý/á","Checking...":"Kontroluji...","Error":"Chyba","The Joplin Nextcloud App is either not installed or misconfigured. Please see the full error message below:":"Joplin Nextcloud aplikace není nainstalována nebo je špatně nakonfigurována. Prosím zkontrolujte celou chybovou zprávu:","Show Log":"Zobrazit log","Joplin Nextcloud App status:":"Stav aplikace Joplin Nextcloud:","Check Status":"Zkontrolovat stav","Help":"Nápověda","Show Advanced Settings":"Ukázat pokročilá nastavení","Browse...":"Procházet...","Edit":"Upravit","Back":"Zpět","Apply":"Použít","Please select where the sync status should be exported to":"Prosím vyberte, kam má být stav synchronizace exportován","Retry":"Znovu","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"Chcete-li povolit synchronizaci služby Joplin se službou Dropbox, postupujte podle následujících kroků:","Step 1: Open this URL in your browser to authorise the application:":"Krok 1: Chcete-li povolit aplikaci, otevřete tuto adresu URL ve svém prohlížeči:","Step 2: Enter the code provided by Dropbox:":"Krok 2: Zadejte kód poskytnutý službou Dropbox:","Submit":"Odeslat","Synchronising...":"Synchronizuji...","Generating link...":"Vytvářím odkaz...","Link has been copied to clipboard!":"Odkaz byl zkopírován do schránky!","Note: When a note is shared, it will no longer be encrypted on the server.":"Poznámka: pokud je poznámka sdílena, už nebude na serveru šifrována.","Share Notes":"Sdílet poznámky","Copy Shareable Link":"Kopírovat odkaz ke sdílení","Attach file":"Přiložit soubor","Insert Date Time":"Vložit datum a čas","strong text":"tučný text","Insert Hyperlink":"Vložit odkaz","List item":"Seznam položek","Cut":"Vyjmout","Copy":"Kopírovat","Paste":"Vložit","Layout":"Rozvržení","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"Tato poznámka je prázdný. Klikněte na \"%s\" pro otevření editoru.","to-do":"to-do","note":"poznámka","Creating new %s...":"Vytvářím %s...","In: %s":"V: %s","Open...":"Otevřít...","Save as...":"Uložit jako...","Copy path to clipboard":"Kopírovat cestu do schránky","Copy Link Address":"Kopírovat adresu odkazu","There was an error downloading this attachment:":"Při stahování této přílohy došlo k chybě:","This attachment is not downloaded or not decrypted yet":"Tato příloha ještě není stažena nebo dešifrována","Unsupported link or message: %s":"Nepodporovaný link či zpráva: %s","Note title":"Název zápisníku","Focus":"Přejít na","Select all":"Vybrat vše","Bold":"Tučně","Italic":"Kurzíva","Hyperlink":"Odkaz","Code":"Kód","Numbered List":"Číslovanáý seznam","Bulleted List":"Seznam s odrážkami","Checkbox":"Zaškrtávací pole","Heading":"Nadpis","Horizontal Rule":"Horizontální čára","Search in current note":"Hledat v aktuální poznámce","Authentication was not completed (did not receive an authentication token).":"Autentizace nebyla dokončena (nedostali jsme autentizační token).","Some items cannot be synchronised.":"Některé položky nelze synchronizovat.","View them now":"Zobrazit","Some items cannot be decrypted.":"Některé položky nelze rozšifrovat.","One or more master keys need a password.":"Jeden nebo více master klíčů potřebují heslo.","Set the password":"Nastavit heslo","Search...":"Hledat...","Tags":"Tagy","Add or remove tags:":"Přidat či odebrat tagy:","Toggle note list":"Přepnout seznam poznámek","Note properties":"Nastavení poznámek","Rename":"Přejmenovat","Rename tag:":"Přejmenovat tag:","New notebook":"Nový zápisník","Notebook title:":"Název zápisnLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"To delete a tag, untag the associated notes.":"For at slette et mærke, afmærk de tilhørende noter.","Please select the note or notebook to be deleted first.":"Vælg først en note eller en notesbog der skal slettes.","Press Ctrl+D or type \"exit\" to exit the application":"Tast Ctrl+D eller tast \"exit\" for at afslutte app'en","More than one item match \"%s\". Please narrow down your query.":"Mere end et emne matcher \"%s\". Præciser din søgning.","No notebook selected.":"Ingen notesbog er valgt.","No notebook has been specified.":"Ingen notesbog er specificeret.","Y":"J","n":"n","N":"N","y":"j","Cancelling background synchronisation... Please wait.":"Annullerer baggrunds synkronisering... Vent venligst.","No such command: %s":"Kommando findes ikke: %s","The command \"%s\" is only available in GUI mode":"Kommando \"%s\" er kun til rådighed i GUI tilstand","Cannot change encrypted item":"Kan ikke ændre krypteret emne","Missing required argument: %s":"Mangler krævet argument: %s","%s: %s":"%s: %s","Your choice: ":"Dit valg: ","Invalid answer: %s":"Forkert svar: %s","Attaches the given file to the note.":"Vedhæfter valgt fil til noten.","Cannot find \"%s\".":"Kan ikke finde \"%s\".","Displays the given note.":"Viser valgt note.","Displays the complete information about note.":"Viser komplet note information.","Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.":"Henter eller tilføjer konfigurations værdi. Hvis [value] er tilføjet, vises værdien af [name]. Hvis hverken [name] eller [value] er tilføjet, vises aktuel konfiguration.","Also displays unset and hidden config variables.":"Viser også tomme eller skjulte konfigurations variabler.","%s = %s (%s)":"%s = %s (%s)","%s = %s":"%s = %s","Duplicates the notes matching <note> to [notebook]. If no notebook is specified the note is duplicated in the current notebook.":"Kopierer alle noter der matcher <note> til [notebook]. Hvis notesbog ikke er udfyldt, kopieres til aktuel notesbog.","Marks a to-do as done.":"Markerer en opgave som udført.","Note is not a to-do: \"%s\"":"Noten er ikke en opgave: \"%s\"","Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file` and `target-status`.":"Håndterer E2EE konfiguration. Kommandoer er `enable`(aktiver), `disable`(sluk), `decrypt`(dekrypter), `status`, `decrypt-file`(dekrypter fil) og `target-status` (modtager-status).","Enter master password:":"Indtast Hoved kodeord:","Operation cancelled":"Udførelse annulleret","Confirm password:":"Bekræft kodeord:","Passwords do not match!":"Kodeord stemmer ikke overens!","Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.":"Dekryptering startet... Vent venligst da kan tage adskillige minutter afhængig af mængden der skal dekrypteres.","Completed decryption.":"Dekryptering færdig.","Enabled":"Aktiveret","Disabled":"Deaktiveret","Encryption is: %s":"Kryptering er: %s","Edit note.":"Rediger note.","No text editor is defined. Please set it using `config editor <editor-path>`":"Ingen teksteditor er valgt. Vælg en ved at indstille `config editor <editor-path>`","No active notebook.":"Ingen aktiv notesbog.","Note does not exist: \"%s\". Create it?":"Note eksisterer ikke: \"%s\". Skal den oprettes?","Exits the application.":"Forlad/luk program.","Exports Joplin data to the given path. By default, it will export the complete database including notebooks, notes, tags and resources.":"Eksporterer Joplin data til valgt sti. Standard er eksport af hele databasen inkl. notesbøger, noter, mærker og ressourcer.","Destination format: %s":"Destinations format: %s","Exports only the given note.":"Eksporter kun valgt note.","Exports only the given notebook.":"Eksporter kun valgt notesbog.","Displays a geolocation URL for the note.":"Vis geolokations URL for noten.","Displays usage information.":"Viser årsags information.","For information on how to customise the shortcuts please visit %s":"For info om tilpasning af links, besøg %s","Shortcuts are not available in CLI mode.":"Links er ikke til rådighed i GUI tilstand.","Type `help [command]` for more information about a command; or type `help all` for the complete usage information.":"Tast `help[kommando]` for mere info om en kommando; eller tast `help all` for fuld hjælpe liste .","The possible commands are:":"Mulige kommandoer er:","In any command, a note or notebook can be referred to by title or ID, or using the shortcuts `$n` or `$b` for, respectively, the currently selected note or notebook. `$c` can be used to refer to the currently selected item.":"I enhver kommando kan en note eller notesbog refereres med titel eller ID, eller ved at bruge links `$n` eller `$b` for valgte noter eller notesbøger. `$c` kan bruges som reference til aktuel/valgt emne.","To move from one pane to another, press Tab Line truncated
|
||||
{"OK":"OK","Cancel":"Fortryd","Yes":"Ja","No":"Nej","Current version is up-to-date.":"Aktuel version er nyeste.","%s (pre-release)":"%s (pre-release)","An update is available, do you want to download it now?":"Opdatering er til rådighed, vil du hente den nu?","Your version: %s":"Din version: %s","New version: %s":"Ny version: %s","Full Release Notes":"Fulde udgivelses noter","Exporting to \"%s\" as \"%s\" format. Please wait...":"Eksporterer til \"%s\" som \"%s\"-format. Vent venligst...","Search in all the notes":"Søg i alle noter","ID":"ID","Untitled":"Samlet","Delete":"Slet","Clear":"Ryd/slet","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Ny notesbog \"%s\" bliver oprettet og filen \"%s\" importeres til den","Found: %d.":"Fundet: %d.","Created: %d.":"Oprettet: %d.","Updated: %d.":"Opdateret %d.","Skipped: %d.":"Droppet %d.","Resources: %d.":"Ressourcer: %d.","Tagged: %d.":"Markeret: %d.","The notes have been imported: %s":"Noterne er importeret: %s","This will open a new screen. Save your current changes?":"Dette åbner i et nyt vindue. Vil du gemme dine ændringer?","Check synchronisation configuration":"Check synkroniserings Indstillinger","Browse...":"Gennemse...","Edit":"Ret","Back":"Tilbage","Apply":"Udfør","Please select where the sync status should be exported to":"Vælg hvor sync status skal eksporteres til","Retry":"Prøv igen","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"For at Joplin kan synkronisere med Dropbox, skal man igennem nedenstående trin:","Step 1: Open this URL in your browser to authorise the application:":"Trin 1: Åben denne URL i din browser for at autorisere applikationen:","Step 2: Enter the code provided by Dropbox:":"Trin 2: Indtast koden, som er oplyst af Dropbox:","Submit":"Gem","Attach file":"Vedhæft fil","Insert Date Time":"Indsæt dato og tid","Insert Hyperlink":"Indsæt hyperlink","List item":"Listepunkt","Cut":"Klip","Copy":"Kopier","Paste":"Indsæt","Layout":"Layout","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"Denne note er tom. Klik på \"%s\" for at starte editor og rette noten.","to-do":"opgave","note":"note","Creating new %s...":"Opretter ny %s...","In: %s":"I: %s","Open...":"Åben...","Save as...":"Gem som...","Copy path to clipboard":"Kopier sti til udklipsholderen","Copy Link Address":"Kopier link","Unsupported link or message: %s":"Ugyldigt- eller ulovligt link eller besked: %s","Focus":"Fokuser","Select all":"Vælg alt","Bold":"Fremhævet","Italic":"Kursiv","Hyperlink":"Hyperlink","Code":"Kode","Numbered List":"Nummeret liste","Bulleted List":"Punktliste","Checkbox":"Afkrydsningsfelt","Heading":"Overskrift","Horizontal Rule":"Vandret linje","Search in current note":"Søg i denne note","Authentication was not completed (did not receive an authentication token).":"Godkendelse blev ikke fuldført (modtog ikke godkendelses token).","Some items cannot be synchronised.":"Nogle emner kan ikke synkroniseres.","View them now":"Vis dem nu","Some items cannot be decrypted.":"Nogle emner kan ikke krypteres.","One or more master keys need a password.":"En eller flere hovednøgler mangler et kodeord.","Set the password":"Indstil kodeord","Search...":"Søg...","Tags":"Mærker","Add or remove tags:":"Tilføj eller slet mærker:","Note properties":"Note egenskaber","Rename":"Omdøb","Rename tag:":"Omdøb mærke:","New notebook":"Ny notesbog","Notebook title:":"Notesbogs titel:","Rename notebook:":"Omdøb notesbog:","Set alarm":"Indstil alarm","Set alarm:":"Indstil alarm:","New to-do":"Ny opgave","PDF File":"PDF fil","Toggle editor layout":"Skift editor layout","Print":"Udskriv","New note":"Ny note","Toggle sidebar":"Slå sidebar til eller fra","Template file:":"Skabelonfil:","Save":"Gem","Status":"Status","Encryption is:":"Kryptering er:","Enabled":"Aktiveret","Disabled":"Deaktiveret","Created":"Oprettet","Updated":"Opdateret","Location":"Placering","URL":"URL","Note History":"Notehistore","Markup":"Markup","Previous versions of this note":"Tidligere udgaver af denne note","Remove":"Fjern","Delete notebook \"%s\"?\n\nAll notes and sub-notebooks within this notebook will also be deleted.":"Slet notesbogen \"%s\"?\n\nAlle noter og undernotesbøger i notesbogen bliver også slettet.","Remove tag \"%s\" from all notes?":"Slet markeringen \"%s\" fra alle noter?","Remove this search from the sidebar?":"Slet denne søgning fra sidebjælke?","Export":"Eksporter","All notes":"Alle noter","Synchronise":"Synkroniser","Notebooks":"Notesbøger","Decrypting items: %d/%d":"Dekrypterede emner: %d/%d","Fetching resources: %d/%d":"Henter ressourcer: %d/%d","Token has been copied to the clipboard!":"Din token er blevet kopieret til udklipsholderen!","The web clipper service is enabled and set to auto-start.":"Web-clipper tjenesten er slået til og sat til at starte automatisk.","Status: Started on port %d":"Status: Startet på port %d","Status: %s":"Tilstand: %s","Disable Web ClLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"To delete a tag, untag the associated notes.":"Um ein Schlagwort zu löschen, entferne es bei allen damit verbundenen Notizen.","Please select the note or notebook to be deleted first.":"Wähle bitte zuerst eine Notiz oder ein Notizbuch aus, das gelöscht werden soll.","Press Ctrl+D or type \"exit\" to exit the application":"Drücke Strg+D oder tippe \"exit\" um das Programm zu verlassen","More than one item match \"%s\". Please narrow down your query.":"Mehr als eine Notiz stimmt mit \"%s\" überein. Bitte die Suche einschränken.","No notebook selected.":"Kein Notizbuch ausgewählt.","No notebook has been specified.":"Es wurde kein Notizbuch festgelegt.","Y":"Y","n":"n","N":"N","y":"y","Cancelling background synchronisation... Please wait.":"Breche Hintergrundsynchronisation ab… Bitte warten.","No such command: %s":"Ungültiger Befehl: %s","The command \"%s\" is only available in GUI mode":"Der Befehl \"%s\" ist nur im GUI Modus verfügbar","Cannot change encrypted item":"Kann verschlüsseltes Objekt nicht ändern","Missing required argument: %s":"Fehlendes erforderliches Argument: %s","%s: %s":"%s: %s","Your choice: ":"Deine Auswahl: ","Invalid answer: %s":"Ungültige Antwort: %s","Attaches the given file to the note.":"Hängt die ausgewählte Datei an die Notiz an.","Cannot find \"%s\".":"Kann \"%s\" nicht finden.","Displays the given note.":"Zeigt die jeweilige Notiz an.","Displays the complete information about note.":"Zeigt alle Informationen über die Notiz an.","Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.":"Zeigt an oder stellt einen Optionswert. Wenn kein [Wert] angegeben ist, wird der Wert vom gegebenen [Namen] angezeigt. Wenn weder [Name] noch [Wert] gegeben sind, wird eine Liste der momentanen Konfiguration angezeigt.","Also displays unset and hidden config variables.":"Zeigt auch nicht gesetzte und versteckte Konfigurationsvariablen an.","%s = %s (%s)":"%s = %s (%s)","%s = %s":"%s = %s","Duplicates the notes matching <note> to [notebook]. If no notebook is specified the note is duplicated in the current notebook.":"Dupliziert die Notizen die mit <note> übereinstimmen in [Notizbuch]. Wenn kein Notizbuch angegeben ist, wird die Notiz in das aktuelle Notizbuch kopiert.","Marks a to-do as done.":"Markiert ein To-Do als erledigt.","Note is not a to-do: \"%s\"":"Notiz ist kein To-Do: \"%s\"","Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file` and `target-status`.":"Verwaltet die E2EE-Konfiguration. Die Befehle lauten `enable`, `disable`, `decrypt`, `status` und `target-status`.","Enter master password:":"Master-Passwort eingeben:","Operation cancelled":"Vorgang abgebrochen","Confirm password:":"Passwort bestätigen:","Passwords do not match!":"Passwörter sind nicht identisch!","Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.":"Starte Entschlüsselung.... Bitte warten, da dies je nach Anzahl der betreffenden Objekte einige Minuten dauern kann.","Completed decryption.":"Entschlüsselung abgeschlossen.","Enabled":"Aktiviert","Disabled":"Deaktiviert","Encryption is: %s":"Verschlüsselung ist: %s","Edit note.":"Notiz bearbeiten.","No text editor is defined. Please set it using `config editor <editor-path>`":"Kein Texteditor definiert. Bitte lege einen mit `config editor <Pfad-Zum-Texteditor>` fest","No active notebook.":"Kein aktives Notizbuch.","Note does not exist: \"%s\". Create it?":"Notiz \"%s\" existiert nicht. Soll sie erstellt werden?","Exits the application.":"Beendet das Programm.","Exports Joplin data to the given path. By default, it will export the complete database including notebooks, notes, tags and resources.":"Exportiert Joplin-Dateien in den angegebenen Pfad. Standardmäßig wird die komplette Datenbank inklusive Notizbüchern, Notizen, Schlagwörtern und Anhängen exportiert.","Destination format: %s":"Zielformat: %s","Exports only the given note.":"Exportiert nur die angegebene Notiz.","Exports only the given notebook.":"Exportiert nur das angegebene Notizbuch.","Displays a geolocation URL for the note.":"Zeigt die Standort-URL der Notiz an.","Displays usage information.":"Zeigt die Nutzungsstatistik an.","For information on how to customise the shortcuts please visit %s":"Für weitere Informationen über die Anpassung von Tastenkürzel besuche bitte %s","Shortcuts are not available in CLI mode.":"Tastenkürzel sind im CLI Modus nicht verfügbar.","Type `help [command]` for more information about a command; or type `help all` for the complete usage information.":"Tippe `help [Befehl]` um weitere Informationen über einen Befehl zu erhalten oder tippe `help all` für die vollständigen Informationen zur Befehlsverwendung.","The possible commands are:":"Mögliche Befehle lauten:","In any command, a note or notebook can be referred to by title orLine truncated
|
||||
{"OK":"OK","Cancel":"Abbrechen","Yes":"Ja","No":"Nein","Close":"Schließen","Current version is up-to-date.":"Die aktuelle Version ist auf dem neuesten Stand.","%s (pre-release)":"%s (Vorabversion)","An update is available, do you want to download it now?":"Es ist eine Aktualisierung verfügbar. Soll sie jetzt heruntergeladen werden?","Your version: %s":"Deine Version: %s","New version: %s":"Neue Version: %s","Full Release Notes":"Alle Versionshinweise","Exporting to \"%s\" as \"%s\" format. Please wait...":"Es wird nach „%s“ im Format „%s“ exportiert. Bitte warten ...","Could not export notes: %s":"Konnte Notizen nicht exportieren: %s","Type a note title or part of its content to jump to it. Or type # followed by a tag name, or @ followed by a notebook name.":"Gib den Titel einer Notiz oder einen Teil seines Inhalts ein, um dorthin zu springen. Oder gib # gefolgt von einem Schlagwort oder @ gefolgt vom Namen eines Notizbuchs ein.","Goto Anything...":"Gehe zu ...","Search in all the notes":"Alle Notizen durchsuchen","Title":"Titel","Size":"Größe","ID":"ID","Action":"Aktion","Untitled":"Unbenannt","Delete":"Löschen","Delete attachment \"%s\"?":"Anhang „%s“ löschen?","This is an advanced tool to show the attachments that are linked to your notes. Please be careful when deleting one of them as they cannot be restored afterwards.":"Dies ist ein Werkzeug für Fortgeschrittene, um die Anhänge anzuzeigen, die mit deinen Notizen verknüpft sind. Bitte sei vorsichtig, wenn du einen davon löschst, da sie danach nicht wiederhergestellt werden können.","Please wait...":"Bitte warten ...","No resources!":"Keine Anhänge!","Warning: not all resources shown for performance reasons (limit: %s).":"Warnung: Aus Leistungsgründen werden nicht alle Anhänge angezeigt (Obergrenze: %s).","Clear":"Leeren","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Neues Notizbuch „%s“ wird erstellt und die Datei „%s“ wird dort hinein importiert","Found: %d.":"Gefunden: %d.","Created: %d.":"Erstellt: %d.","Updated: %d.":"Aktualisiert: %d.","Skipped: %d.":"Übersprungen: %d.","Resources: %d.":"Anhänge: %d.","Tagged: %d.":"Verschlagwortet: %d.","The notes have been imported: %s":"Die Notizen wurden importiert: %s","This will open a new screen. Save your current changes?":"Diese Aktion wird ein neues Fenster öffnen. Aktuelle Änderungen speichern?","Check synchronisation configuration":"Überprüfen der Synchronisationseinstellungen","Unknown":"Unbekannt","Checking...":"Wird überprüft ...","Error":"Fehler","The Joplin Nextcloud App is either not installed or misconfigured. Please see the full error message below:":"Die Joplin Nextcloud App ist entweder nicht installiert oder falsch konfiguriert. Bitte beachte die vollständige Fehlermeldung unten:","Show Log":"Protokoll anzeigen","Joplin Nextcloud App status:":"Joplin Nextcloud App-Status:","Check Status":"Status überprüfen","Help":"Hilfe","Show Advanced Settings":"Erweiterte Einstellungen anzeigen","Browse...":"Durchsuchen ...","Edit":"Bearbeiten","Back":"Zurück","Apply":"Anwenden","Please select where the sync status should be exported to":"Bitte wähle aus, wohin der Synchronisations-Status exportiert werden soll","Retry All":"Erneut alle versuchen","Retry":"Erneut versuchen","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"Um Joplin die Synchronisation mit Dropbox zu ermöglichen, folge bitte den folgenden Schritten:","Step 1: Open this URL in your browser to authorise the application:":"Schritt 1: Öffne diese URL im Browser, um die Anwendung zu autorisieren:","Step 2: Enter the code provided by Dropbox:":"Schritt 2: Gib den von Dropbox bereitgestellten Code ein:","Submit":"Absenden","Synchronising...":"Wird synchronisiert ...","Generating link...":"Link wird erzeugt ...","Link has been copied to clipboard!":"Der Link wurde in die Zwischenablage kopiert!","Note: When a note is shared, it will no longer be encrypted on the server.":"Achtung: Wenn eine Notiz geteilt wird, wird sie auf dem Server nicht mehr verschlüsselt sein.","Share Notes":"Notizen teilen","Copy Shareable Link":"Teilbaren Link kopieren","Attach file":"Datei anhängen","Code Block":"Code-Block","Inline Code":"Code im Fließtext","Insert Date Time":"Datum / Uhrzeit einfügen","Drop notes or files here":"Notizen oder Dateien hierher ziehen","Code View":"Code-Ansicht","Checkbox list":"Liste mit Kontrollkästchen","strong text":"fetter Text","emphasised text":"hervorgehobener Text","Insert Hyperlink":"Weblink einfügen","List item":"Listeneintrag","Cut":"Ausschneiden","Copy":"Kopieren","Paste":"Einfügen","Layout":"Layout","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"Diese Notiz hat keinen Inhalt. Klicke auf „%s“, um den Editor zu aktivieren und die Notiz zu bearbeiten.","to-do":"Aufgabe","note":"Notiz","Creating new %s...":"Neue(s) %s wird erstellt ...","The following attachments are beingLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"To delete a tag, untag the associated notes.":"Για να διαγράψετε μία ετικέτα, αφαιρέστε την πρώτα από τις σχετικές σημειώσεις.","Please select the note or notebook to be deleted first.":"Παρακαλώ πρώτα επιλέξτε τη σημείωση ή το σημειωματάριο που θέλετε να διαγραφτεί.","Press Ctrl+D or type \"exit\" to exit the application":"Πατήστε Ctrl+D ή πληκτρολογήστε \"exit\" για να βγείτε από την εφαρμογή","More than one item match \"%s\". Please narrow down your query.":"Περισσότερα από ένα στοιχεία ταιριάζουν με το \"%s\". Παρακαλώ περιορίστε το ερώτημά σας.","No notebook selected.":"Κανένα σημειωματάριο δεν έχει επιλεχθεί.","No notebook has been specified.":"Κανένα σημειωματάριο δεν έχει καθοριστεί.","Y":"Ν","n":"ο","N":"Ο","y":"ν","Cancelling background synchronisation... Please wait.":"Ακύρωση συγχρονισμού ... Παρακαλώ περιμένετε.","No such command: %s":"Δεν υπάρχει τέτοια εντολή: %s","The command \"%s\" is only available in GUI mode":"Η εντολή \"%s\" είναι διαθέσιμη μόνο σε λειτουργία γραφικού περιβάλλοντος (GUI)","Cannot change encrypted item":"Δεν είναι δυνατή η αλλαγή κρυπτογραφημένου στοιχείου","Missing required argument: %s":"Λείπει το απαιτούμενο όρισμα: %s","%s: %s":"%s: %s","Your choice: ":"Η επιλογή σας: ","Invalid answer: %s":"Μη έγκυρη απάντηση: %s","Attaches the given file to the note.":"Προσθέτει το καθορισμένο αρχείο στη σημείωση.","Cannot find \"%s\".":"Δεν είναι δυνατή η εύρεση του \"%s\".","Displays the given note.":"Εμφανίζει τη καθορισμένη σημείωση.","Displays the complete information about note.":"Εμφανίζει όλες τις πληροφορίες σχετικά με τη σημείωση.","Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.":"Αποκτά ή ορίζει την τιμή μιας παραμέτρου. Αν δεν υπάρχει [τιμή], θα εμφανιστεί το [όνομα]. Εάν δεν υπάρχει ούτε [όνομα] ούτε [τιμή], θα εμφανιστεί η τρέχουσα παράμετρος.","Also displays unset and hidden config variables.":"Εμφανίζει επίσης μη ορισμένες και κρυφές μεταβλητές.","%s = %s (%s)":"%s = %s (%s)","%s = %s":"%s = %s","Duplicates the notes matching <note> to [notebook]. If no notebook is specified the note is duplicated in the current notebook.":"Αντιγράφει τις σημειώσεις που ταιριάζουν με τη <note> στο [σημειωματάριο]. Εάν δεν έχει οριστεί κανένα σημειωματάριο, η σημείωση αντιγράφεται στον τρέχον.","Marks a to-do as done.":"Επισημαίνει μία σημείωση to-do ως ολοκληρωμένη.","Note is not a to-do: \"%s\"":"Η σημείωση δεν είναι to-do: \"%s\"","Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file` and `target-status`.":"Διαχειρίζεται τις ρυθμίσεις του E2EE. Οι εντολές είναι `enable`, `disable`, `decrypt`, `status`, `decrypt-file` και `target-status`.","Enter master password:":"Πληκτρολογήστε τον κωδικό πρόσβασης:","Operation cancelled":"Η λειτουργία ακυρώθηκε","Confirm password:":"Επιβεβαίωση κωδικού πρόσβασης:","Passwords do not match!":"Ο κωδικός πρόσβασης δεν μπορεί να είναι κενός!","Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.":"Εκκίνηση αποκρυπτογράφησης... Παρακαλώ περιμένετε καθώς μπορεί να διαρκέσει αρκετά λεπτά ανάλογα με το μέγεθος αυτών που πρέπει να αποκρυπτογραφηθούν.","Completed decryption.":"Η αποκρυπτογράφηση ολοκληρώθηκε.","Enabled":"Ενεργοποιημένη","Disabled":"Απενεργοποιημένη","Encryption is: %s":"Η κρυπτογράφηση είναι: %s","Edit note.":"Eπεξεργασία σημείωσης.","No text editor is defined. Please set it using `config editor <editor-path>`":"Δεν Line truncated
|
||||
{"OK":"Εντάξει","Cancel":"Άκυρο","Yes":"Ναι","No":"Όχι","Close":"Κλείσιμο","Current version is up-to-date.":"Η τρέχουσα έκδοση είναι ενημερωμένη.","%s (pre-release)":"%s (pre-release)","An update is available, do you want to download it now?":"Υπάρχει διαθέσιμη μια ενημέρωση, θέλετε να την κατεβάσετε τώρα;","Your version: %s":"Η έκδοσή σου: %s","New version: %s":"Νέα έκδοση: %s","Full Release Notes":"Πλήρεις σημειώσεις έκδοσης","Exporting to \"%s\" as \"%s\" format. Please wait...":"Γίνεται εξαγωγή στο \"%s\" με μορφή \"%s\". Παρακαλώ περιμένετε...","Could not export notes: %s":"Δεν ήταν δυνατή η εξαγωγή σημειώσεων: %s","Type a note title or part of its content to jump to it. Or type # followed by a tag name, or @ followed by a notebook name.":"Πληκτρολογήστε έναν τίτλο σημείωσης ή μέρος του περιεχομένου του για να μεταβείτε σε αυτόν. Ή πληκτρολογήστε # ακολουθούμενο από ένα όνομα ετικέτας ή @ ακολουθούμενο από ένα σημειωματάριο.","Goto Anything...":"Γρήγορη Μετακίνηση...","Search in all the notes":"Αναζήτηση σε όλες τις σημειώσεις","Title":"Τίτλος","Size":"Μέγεθος","ID":"ID","Action":"Ενέργεια","Untitled":"Χωρίς τίτλο","Delete":"Διαγραφή","Delete attachment \"%s\"?":"Διαγραφή συνημμένου \"%s\";","This is an advanced tool to show the attachments that are linked to your notes. Please be careful when deleting one of them as they cannot be restored afterwards.":"Αυτό είναι ένα προηγμένο εργαλείο για την εμφάνιση των συνημμένων που συνδέονται με τις σημειώσεις σας. Να είστε προσεκτικοί όταν διαγράφετε ένα από αυτά, καθώς δεν μπορούν να αποκατασταθούν μετά.","Please wait...":"Παρακαλώ περιμένετε...","No resources!":"Χωρίς πόρους!","Warning: not all resources shown for performance reasons (limit: %s).":"Προειδοποίηση: δεν εμφανίζονται όλοι οι πόροι για λόγους απόδοσης (όριο:% s).","Clear":"Καθαρισμός","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Θα δημιουργηθεί νέο σημειωματάριο \"% s\" και θα εισαχθεί το αρχείο \"% s\"","Found: %d.":"Βρέθηκε: %d.","Created: %d.":"Δημιουργήθηκε: %d.","Updated: %d.":"Ενημερώθηκε: %d.","Skipped: %d.":"Παραλείφθηκε: %d.","Resources: %d.":"Πόροι: %d.","Tagged: %d.":"Με ετικέτα: %d.","The notes have been imported: %s":"Οι σημειώσεις έχουν εισαχθεί: %s","This will open a new screen. Save your current changes?":"Αυτό θα ανοίξει μια νέα οθόνη. Να αποθηκευθούν οι τρέχουσες αλλαγές;","Check synchronisation configuration":"Ελέγχος ρυθμίσεων συγχρονισμού","Unknown":"Άγνωστο","Checking...":"Έλεγχος...","Error":"Σφάλμα","The Joplin Nextcloud App is either not installed or misconfigured. Please see the full error message below:":"Η εφαρμογή Joplin δεν έχει εγκατασταθεί ή έχει ρυθμιστεί εσφαλμένα. Δείτε το πλήρες μήνυμα σφάλματος παρακάτω:","Show Log":"Εμφάνιση αρχείου καταγραφής","Joplin Nextcloud App status:":"Κατάσταση εφαρμογής Joplin:","Check Status":"Έλεγχος Κατάστασης","Help":"Βοήθεια","Show Advanced Settings":"Εμφάνιση επιλογών για προχωρημένους","Browse...":"Αναζήτηση...","Edit":"Επεξεργασία","Back":"Πίσω","Apply":"Εφαρμογή","Please select where the sync status should be exported to":"Επιλέξτε την τοποθεσία στην οποία θα εξαχθεί η κατάσταση του συγχρονισμού","Retry All":"Δοκιμή ξανά για Όλα","Retry":"Δοκιμή ξανά","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"Για να επιτρέψετε στο Joplin να συγχρονιστεί με το Dropbox, ακολουθήστε τα παρακάτω βήματα:","Step 1: Open this URL in your browser to authorise the application:":"Βήμα 1: Ανοίξτε αυτήν τη διεύθυνση URL στο πρόγραμμα περιήγησής σας για να εξουσιοδοτήσετε την εLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"Cancelling background synchronisation... Please wait.":"Cancelling background synchronization... Please wait.","For information on how to customise the shortcuts please visit %s":"For information on how to customize the shortcuts please visit %s","To maximise/minimise the console, press \"tc\".":"To maximize/minimize the console, press \"tc\".","Synchronises with remote storage.":"Synchronizes with remote storage.","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"To allow Joplin to synchronize with Dropbox, please follow the steps below:","Step 1: Open this URL in your browser to authorise the application:":"Step 1: Open this URL in your browser to authorize the application:","Not authentified with %s. Please provide any missing credentials.":"Not authenticated with %s. Please provide any missing credentials.","Synchronisation is already in progress.":"Synchronization is already in progress.","Lock file is already being hold. If you know that no synchronisation is taking place, you may delete the lock file at \"%s\" and resume the operation.":"Lock file is already being held. If you know that no synchronization is taking place, you may delete the lock file at \"%s\" and resume the operation.","Synchronisation target: %s (%s)":"Synchronization target: %s (%s)","Cannot initialize synchroniser.":"Cannot initialize synchronizer.","Starting synchronisation...":"Starting synchronization...","Synchronisation Status":"Synchronization Status","Synchronise":"Synchronize","Search in all the notes":"Search in all notes","Authorisation token:":"Authorization token:","This authorisation token is only needed to allow third-party applications to access Joplin.":"This authorization token is only needed to allow third-party applications to access Joplin.","Check synchronisation configuration":"Check synchronization configuration","Disabling encryption means *all* your notes and attachments are going to be re-synchronised and sent unencrypted to the sync target. Do you wish to continue?":"Disabling encryption means *all* your notes and attachments are going to be re-synchronized and sent unencrypted to the sync target. Do you wish to continue?","Enabling encryption means *all* your notes and attachments are going to be re-synchronised and sent encrypted to the sync target. Do not lose the password as, for security purposes, this will be the *only* way to decrypt the data! To enable encryption, please enter your password below.":"Enabling encryption means *all* your notes and attachments are going to be re-synchronized and sent encrypted to the sync target. Do not lose the password as, for security purposes, this will be the *only* way to decrypt the data! To enable encryption, please enter your password below.","The master keys with these IDs are used to encrypt some of your items, however the application does not currently have access to them. It is likely they will eventually be downloaded via synchronisation.":"The master keys with these IDs are used to encrypt some of your items, however the application does not currently have access to them. It is likely they will eventually be downloaded via synchronization.","Some items cannot be synchronised.":"Some items cannot be synchronized.","Synchronising...":"Synchronizing...","Could not connect to the Joplin Nextcloud app. Please check the configuration in the Synchronisation config screen. Full error was:\n\n%s":"Could not connect to the Joplin Nextcloud app. Please check the configuration in the Synchronization config screen. Full error was:\n\n%s","The application has been authorised - you may now close this browser tab.":"The application has been authorized - you may now close this browser tab.","The application has been successfully authorised.":"The application has been successfully authorized.","Cannot refresh token: authentication data is missing. Starting the synchronisation again may fix the problem.":"Cannot refresh token: authentication data is missing. Starting the synchronization again may fix the problem.","Synchronisation target":"Synchronization target","The target to synchonise to. Each sync target may have additional parameters which are named as `sync.NUM.NAME` (all documented below).":"The target to synchonize to. Each sync target may have additional parameters which are named as `sync.NUM.NAME` (all documented below).","Directory to synchronise with (absolute path)":"Directory to synchronize with (absolute path)","Attachment download behaviour":"Attachment download behavior","Solarised Light":"Solarized Light","Solarised Dark":"Solarized Dark","This will allow Joplin to run in the background. It is recommended to enable this setting so that your notes are constantly being synchronised, thus reducing the number of conflicts.":"This will allow Joplin to run in the background. It is recommended to enable this setting so that your notes are constantly being synchronized, thus reducing the number of conflicts.","Start applicatiLine truncated
|
||||
{"Search in all the notes":"Search in all notes","Check synchronisation configuration":"Check synchronization configuration","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"To allow Joplin to synchronize with Dropbox, please follow the steps below:","Step 1: Open this URL in your browser to authorise the application:":"Step 1: Open this URL in your browser to authorize the application:","Synchronising...":"Synchronizing...","emphasised text":"emphasized text","Some items cannot be synchronised.":"Some items cannot be synchronized.","Some items cannot be decrypted.":"Some items cannot be synchronized.","In order to do so, your entire data set will have to be encrypted and synchronised, so it is best to run it overnight.\n\nTo start, please follow these instructions:\n\n1. Synchronise all your devices.\n2. Click \"%s\".\n3. Let it run to completion. While it runs, avoid changing any note on your other devices, to avoid conflicts.\n4. Once sync is done on this device, sync all your other devices and let it run to completion.\n\nImportant: you only need to run this ONCE on one device.":"In order to do so, your entire data set will have to be encrypted and synchronized, so it is best to run it overnight.\n\nTo start, please follow these instructions:\n\n1. Synchronize all your devices.\n2. Click \"%s\".\n3. Let it run to completion. While it runs, avoid changing any note on your other devices, to avoid conflicts.\n4. Once sync is done on this device, sync all your other devices and let it run to completion.\n\nImportant: you only need to run this ONCE on one device.","Synchronise":"Synchronize","Authorisation token:":"Authorization token:","This authorisation token is only needed to allow third-party applications to access Joplin.":"This authorization token is only needed to allow third-party applications to access Joplin.","Synchronisation Status":"Synchronization Status","For information on how to customise the shortcuts please visit %s":"For information on how to customize the shortcuts please visit %s","To maximise/minimise the console, press \"tc\".":"To maximize/minimize the console, press \"tc\".","Synchronises with remote storage.":"Synchronizes with remote storage.","Not authentified with %s. Please provide any missing credentials.":"Not authenticated with %s. Please provide any missing credentials.","Synchronisation is already in progress.":"Synchronization is already in progress.","Lock file is already being hold. If you know that no synchronisation is taking place, you may delete the lock file at \"%s\" and resume the operation.":"Lock file is already being held. If you know that no synchronization is taking place, you may delete the lock file at \"%s\" and resume the operation.","Synchronisation target: %s (%s)":"Synchronization target: %s (%s)","Cannot initialise synchroniser.":"Cannot initialize synchronizer.","Starting synchronisation...":"Starting synchronization...","Cancelling background synchronisation... Please wait.":"Cancelling background synchronization... Please wait.","Items that cannot be synchronised":"Items that cannot be synchronized","Coming alarms":"Scheduled alarms","Cannot refresh token: authentication data is missing. Starting the synchronisation again may fix the problem.":"Cannot refresh token: authentication data is missing. Starting the synchronization again may fix the problem.","Could not connect to the Joplin Nextcloud app. Please check the configuration in the Synchronisation config screen. Full error was:\n\n%s":"Could not connect to the Joplin Nextcloud app. Please check the configuration in the Synchronization config screen. Full error was:\n\n%s","The application has been authorised - you may now close this browser tab.":"The application has been authorized - you may now close this browser tab.","The application has been successfully authorised.":"The application has been successfully authorized.","In order to use file system synchronisation your permission to write to external storage is required.":"In order to use file system synchronization your permission to write to external storage is required.","- Storage: to allow attaching files to notes and to enable filesystem synchronisation.":"- Storage: to allow attaching files to notes and to enable filesystem synchronization.","Enabling encryption means *all* your notes and attachments are going to be re-synchronised and sent encrypted to the sync target. Do not lose the password as, for security purposes, this will be the *only* way to decrypt the data! To enable encryption, please enter your password below.":"Enabling encryption means *all* your notes and attachments are going to be re-synchronized and sent encrypted to the sync target. Do not lose the password as, for security purposes, this will be the *only* way to decrypt the data! To enable encryption, please enter your password below.","The master keys with these IDs are used to encrypt some of your items, however the applicatiLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"No notebook selected.":"Neniu notlibro elektita.","Y":"J","n":"n","N":"N","y":"j","%s: %s":"%s: %s","Your choice: ":"Via elekto: ","Invalid answer: %s":"Malvalida respondo: %s","Cannot find \"%s\".":"Ne eblas trovi \"%s\".","%s = %s (%s)":"%s = %s (%s)","%s = %s":"%s = %s","Marks a to-do as done.":"Marki taskon kiel farita.","Note is not a to-do: \"%s\"":"Noto ne estas tasko: \"%s\"","Enter master password:":"Entajpu ĉefan pasvorton:","Operation cancelled":"Operacio nuligita","Confirm password:":"Konfirmi pasvorton:","Passwords do not match!":"Pasvorto ne kongruas!","Enabled":"Ebligita","Disabled":"Malebligita","Edit note.":"Redakti noton.","No active notebook.":"Ne estas aktiva notlibro.","Note does not exist: \"%s\". Create it?":"Noto ne ekzistas: \"%s\". Ĉu krei ĝin?","Exits the application.":"Eliri la aplikaĵon.","The possible commands are:":"Eblaj komandoj estas:","Source format: %s":"Fonta aranĝo: %s","Do not ask for confirmation.":"Ne demandi pri konfirmo.","Found: %d.":"Trovita: %d.","Created: %d.":"Kreita: %d.","Updated: %d.":"Ĝisdatigita: %d.","Importing notes...":"Importante notojn...","The notes have been imported: %s":"La notoj estis importitaj: %s","Either \"text\" or \"json\"":"Aŭ \"teksto\" aŭ \"json\"","Please select a notebook first.":"Bonvolu elekti noton unue.","Creates a new notebook.":"Kreas novan notlibron.","Creates a new note.":"Kreas novan noton.","Notes can only be created within a notebook.":"Nur eblas krei notojn ene de notlibro.","Creates a new to-do.":"Kreas novan taskon.","Deletes the notebook without asking for confirmation.":"Forigi la notlibron sen peti konfirmon.","Delete note?":"Ĉu forigi noton?","Downloading resources...":"Elŝutante risurcojn...","Cancelling... Please wait.":"Nuligante... Atendu.","Invalid command: \"%s\"":"Malvalida komando: \"%s\"","%s %s (%s)":"%s %s (%s)","Type: %s.":"Tipo: %s.","Possible values: %s.":"Eblaj valoroj: %s.","Default: %s":"Defaŭlto: %s","Possible keys/values:":"Eblaj valoroj/klavoj:","Fatal error:":"Neriparebla eraro:","Search:":"Serĉi:","PDF File":"PDF-dosiero","New note":"Nova noto","New to-do":"Nova tasko","New notebook":"Nova notlibro","New sub-notebook":"Nova subnotlibro","Options":"Opcioj","&File":"&Dosiero","About Joplin":"Pri Joplin","Preferences...":"Preferoj...","Check for updates...":"Kontrolu ĝisdatigojn...","Templates":"Modeloj","Import":"Importi","Export":"Eksporti","Synchronise":"Sinkronigi","Hide %s":"Kaŝi %s","Quit":"Eliri","Close Window":"Fermi Fenestron","&Edit":"&Redakti","Copy":"Kopii","Cut":"Eltondi","Paste":"Alglui","Select all":"Elekti ĉiujn","Bold":"Grasa","Italic":"Kursiva","Link":"Ligilo","Code":"Kodo","Tags":"Etikedoj","Search in all the notes":"Ŝerci en ĉiuj notoj","&View":"&Monti","Focus":"Fokusi","&Tools":"&Ilaro","&Help":"&Helpo","Website and documentation":"Retejo kaj dokumentado","Joplin Forum":"Joplin-forumo","Open %s":"Malfermi %s","Exit":"Eliri","OK":"Bone","Cancel":"Nuligi","%s (pre-release)":"%s (antaŭeldono)","Your version: %s":"Via versio: %s","New version: %s":"Nova versio: %s","Yes":"Jes","No":"Ne","Status: %s":"Stato: %s","Advanced options":"Altnivelaj opcioj","Copy token":"Kopii ĵetonon","Notes and settings are stored in: %s":"Notoj kaj agordoj estas konservitaj en: %s","Browse...":"Esplori...","Edit":"Redakti","Back":"Reen","Apply":"Apliki","Submit":"Submeti","Save":"Konservi","Master Keys":"Ĉefaj Klavoj","Active":"Aktiva","ID":"Identigilo","Source":"Fonto","Created":"Kreita","Updated":"Ĝisdatigita","Password":"Pasvorto","Password OK":"Pasvorto bone","Status":"Stato","Get it now:":"Akiri ĝin nun:","Usage":"Konsumado","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Nova notlibro \"%s\" estos kreita kaj dosiero \"%s\" estos importita al ĝi","Please create a notebook first.":"Bonvolu krei notlibron unue.","Please create a notebook first":"Bonvolu krei notlibron unue","Notebook title:":"Notlibra titolo:","Add or remove tags:":"Aldoni aŭ forigi etikedojn:","Rename notebook:":"Renomi notlibron:","Rename tag:":"Renomi etikedon:","Template file:":"Modela dosiero:","Layout":"Aspektigo","Search...":"Serĉi...","View them now":"Vidi ilin nun","Set the password":"Elekti pasvorton","No notes in here. Create one by clicking on \"New note\".":"Neniu noto ĉi tie. Por krei noton, alklaku \"Nova noto\".","Location":"Loko","URL":"URL","Note History":"Nota Historio","Markup":"Markado","Note properties":"Notaj atributoj","This note has no history":"Tiu noto ne havas historion","Restore":"Restaŭri","Open...":"Malfermi...","Save as...":"Konservi kiel...","Attach file":"Aldoni dosieron","In: %s":"En: %s","Hyperlink":"Hiperligilo","Checkbox":"Markobutono","Watching...":"Rigardante...","to-do":"tasko","note":"noto","Creating new %s...":"Kreante novan %s...","Clear":"Klariĝi","Delete":"Forigi","OneDrive Login":"OneDrive-salutnomo","Dropbox Login":"Dropbox-salutnomo","Remove":"Forigi","Delete notebook \"%s\"?\n\nAll notes and sub-notebooks within this notebLine truncated
|
||||
{"OK":"Bone","Cancel":"Nuligi","Yes":"Jes","No":"Ne","%s (pre-release)":"%s (antaŭeldono)","Your version: %s":"Via versio: %s","New version: %s":"Nova versio: %s","Search in all the notes":"Ŝerci en ĉiuj notoj","ID":"Identigilo","Untitled":"Sen titolo","Delete":"Forigi","Clear":"Klariĝi","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Nova notlibro \"%s\" estos kreita kaj dosiero \"%s\" estos importita al ĝi","Found: %d.":"Trovita: %d.","Created: %d.":"Kreita: %d.","Updated: %d.":"Ĝisdatigita: %d.","The notes have been imported: %s":"La notoj estis importitaj: %s","Browse...":"Esplori...","Edit":"Redakti","Back":"Reen","Apply":"Apliki","Retry":"Reprovi","Submit":"Submeti","Attach file":"Aldoni dosieron","Cut":"Eltondi","Copy":"Kopii","Paste":"Alglui","Layout":"Aspektigo","to-do":"tasko","note":"noto","Creating new %s...":"Kreante novan %s...","In: %s":"En: %s","Open...":"Malfermi...","Save as...":"Konservi kiel...","Focus":"Fokusi","Select all":"Elekti ĉiujn","Bold":"Grasa","Italic":"Kursiva","Hyperlink":"Hiperligilo","Code":"Kodo","Checkbox":"Markobutono","View them now":"Vidi ilin nun","Set the password":"Elekti pasvorton","Search...":"Serĉi...","Tags":"Etikedoj","Add or remove tags:":"Aldoni aŭ forigi etikedojn:","Note properties":"Notaj atributoj","Rename":"Renomi","Rename tag:":"Renomi etikedon:","New notebook":"Nova notlibro","Notebook title:":"Notlibra titolo:","Rename notebook:":"Renomi notlibron:","New to-do":"Nova tasko","PDF File":"PDF-dosiero","New note":"Nova noto","Template file:":"Modela dosiero:","Save":"Konservi","Status":"Stato","Enabled":"Ebligita","Disabled":"Malebligita","Created":"Kreita","Updated":"Ĝisdatigita","Location":"Loko","URL":"URL","Note History":"Nota Historio","Markup":"Markado","Remove":"Forigi","Delete notebook \"%s\"?\n\nAll notes and sub-notebooks within this notebook will also be deleted.":"Forigi notlibron \"%s\"?\n\nĈiuj notoj kaj subnotlibroj ene de tiu notlibro estos ankaŭ forigitaj.","Remove tag \"%s\" from all notes?":"Forigi etikedon \"%s\" el ĉiuj notoj?","Remove this search from the sidebar?":"Forigi tiun sercôn el la flankpanelo?","Export":"Eksporti","All notes":"Ĉiuj notoj","Synchronise":"Sinkronigi","Notebooks":"Notlibroj","Status: %s":"Stato: %s","Advanced options":"Altnivelaj opcioj","Copy token":"Kopii ĵetonon","This note has no history":"Tiu noto ne havas historion","Restore":"Restaŭri","Sort notes by":"Ordigi notojn laŭ","No notes in here. Create one by clicking on \"New note\".":"Neniu noto ĉi tie. Por krei noton, alklaku \"Nova noto\".","Duplicate":"Duobligi","%s - Copy":"%s - Kopii","Switch between note and to-do type":"Ŝalti inter nota kaj taska tipo","Switch to note type":"Ŝalti al nota tipo","Switch to to-do type":"Ŝalti al taska tipo","Delete note \"%s\"?":"Forigi noton \"%s\"?","Delete these %d notes?":"Forigi tiujn %d notojn?","Get it now:":"Akiri ĝin nun:","Usage":"Konsumado","Quit":"Eliri","Options":"Opcioj","&File":"&Dosiero","About Joplin":"Pri Joplin","Preferences...":"Preferoj...","Check for updates...":"Kontrolu ĝisdatigojn...","Templates":"Modeloj","Import":"Importi","Hide %s":"Kaŝi %s","Close Window":"Fermi Fenestron","&Edit":"&Redakti","&View":"&Monti","&Tools":"&Ilaro","&Help":"&Helpo","Website and documentation":"Retejo kaj dokumentado","Joplin Forum":"Joplin-forumo","OneDrive Login":"OneDrive-salutnomo","Dropbox Login":"Dropbox-salutnomo","Open %s":"Malfermi %s","Exit":"Eliri","Cannot find \"%s\".":"Ne eblas trovi \"%s\".","Invalid command: \"%s\"":"Malvalida komando: \"%s\"","%s %s (%s)":"%s %s (%s)","Creates a new to-do.":"Kreas novan taskon.","Notes can only be created within a notebook.":"Nur eblas krei notojn ene de notlibro.","The possible commands are:":"Eblaj komandoj estas:","Creates a new note.":"Kreas novan noton.","Downloading resources...":"Elŝutante risurcojn...","Exits the application.":"Eliri la aplikaĵon.","Fatal error:":"Neriparebla eraro:","Marks a to-do as done.":"Marki taskon kiel farita.","Note is not a to-do: \"%s\"":"Noto ne estas tasko: \"%s\"","Either \"text\" or \"json\"":"Aŭ \"teksto\" aŭ \"json\"","Please select a notebook first.":"Bonvolu elekti noton unue.","Delete note?":"Ĉu forigi noton?","Search:":"Serĉi:","Enter master password:":"Entajpu ĉefan pasvorton:","Operation cancelled":"Operacio nuligita","Confirm password:":"Konfirmi pasvorton:","Passwords do not match!":"Pasvorto ne kongruas!","Source format: %s":"Fonta aranĝo: %s","Do not ask for confirmation.":"Ne demandi pri konfirmo.","Importing notes...":"Importante notojn...","Deletes the notebook without asking for confirmation.":"Forigi la notlibron sen peti konfirmon.","Type: %s.":"Tipo: %s.","Possible values: %s.":"Eblaj valoroj: %s.","Default: %s":"Defaŭlto: %s","Possible keys/values:":"Eblaj valoroj/klavoj:","%s = %s (%s)":"%s = %s (%s)","%s = %s":"%s = %s","No notebook selected.":"Neniu notlibro elektita.","Y":"J","n":"n","N":"N","y":"j","Creates a new notebook.":"Kreas novLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"To delete a tag, untag the associated notes.":"Desmarque las notas asociadas para eliminar una etiqueta.","Please select the note or notebook to be deleted first.":"Seleccione primero la nota o libreta que desea eliminar.","Press Ctrl+D or type \"exit\" to exit the application":"Pulse Ctrl+D o escriba «salir» para salir de la aplicación","More than one item match \"%s\". Please narrow down your query.":"Hay más de un elemento que coincide con «%s». Intente mejorar su consulta.","No notebook selected.":"No se ha seleccionado ninguna libreta.","No notebook has been specified.":"Ninguna libreta fue especificada.","Y":"Y","n":"n","N":"N","y":"y","Cancelling background synchronisation... Please wait.":"Cancelando sincronización en segundo plano... Por favor espere.","No such command: %s":"El comando no existe: %s","The command \"%s\" is only available in GUI mode":"El comando «%s» solamente está disponible en modo GUI","Cannot change encrypted item":"No se puede cambiar el elemento cifrado","Missing required argument: %s":"Falta un argumento requerido: %s","%s: %s":"%s: %s","Your choice: ":"Su elección: ","Invalid answer: %s":"Respuesta inválida: %s","Attaches the given file to the note.":"Adjuntar archivo a la nota.","Cannot find \"%s\".":"No se puede encontrar «%s».","Displays the given note.":"Mostrar la nota dada.","Displays the complete information about note.":"Mostrar la información completa acerca de la nota.","Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.":"Obtener o configurar un valor. Si no se provee el [valor], se mostrará el valor de [nombre]. Si no se provee [nombre] ni [valor], se listará la configuración actual.","Also displays unset and hidden config variables.":"También muestra variables ocultas o no configuradas.","%s = %s (%s)":"%s = %s (%s)","%s = %s":"%s = %s","Duplicates the notes matching <note> to [notebook]. If no notebook is specified the note is duplicated in the current notebook.":"Duplica las notas que coincidan con <note> en la libreta. Si no se especifica una libreta la nota se duplica en la libreta actual.","Marks a to-do as done.":"Marca una tarea como hecha.","Note is not a to-do: \"%s\"":"La nota no es una tarea: «%s»","Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file` and `target-status`.":"Gestiona la configuración E2EE. Los comandos disponibles son: `enable`, `disable`, `decrypt`, `status`, `decrypt-file` y `target-status`.","Enter master password:":"Introduzca la contraseña maestra:","Operation cancelled":"Operación cancelada","Confirm password:":"Confirma la contraseña:","Passwords do not match!":"¡Las contraseñas no coinciden!","Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.":"Iniciando descifrado... Por favor espere, puede tardar varios minutos dependiendo de cuanto haya que descifrar.","Completed decryption.":"Descifrado completado.","Enabled":"Habilitado","Disabled":"Deshabilitado","Encryption is: %s":"El cifrado es: %s","Edit note.":"Editar una nota.","No text editor is defined. Please set it using `config editor <editor-path>`":"No hay editor de texto definido. Por favor configure uno usando `config editor <editor-path>`","No active notebook.":"No hay libreta activa.","Note does not exist: \"%s\". Create it?":"La nota no existe: «%s». ¿Crearla?","Exits the application.":"Sale de la aplicación.","Exports Joplin data to the given path. By default, it will export the complete database including notebooks, notes, tags and resources.":"Exporta datos de Joplin al directorio indicado. Por defecto, se exportará la base de datos completa incluyendo libretas, notas, etiquetas y recursos.","Destination format: %s":"Formato de destino: %s","Exports only the given note.":"Exporta únicamente la nota indicada.","Exports only the given notebook.":"Exporta únicamente la libreta indicada.","Displays a geolocation URL for the note.":"Muestra la URL de la geolocalización de la nota.","Displays usage information.":"Muestra información de uso.","For information on how to customise the shortcuts please visit %s":"Para información de cómo personalizar los atajos, por favor visite %s","Shortcuts are not available in CLI mode.":"Atajos no disponibles en modo CLI.","Type `help [command]` for more information about a command; or type `help all` for the complete usage information.":"Escriba `help [comando]` para obtener más información sobre el comando, o escriba `help all` para obtener toda la información acerca del uso del programa.","The possible commands are:":"Los posibles comandos son:","In any command, a note or notebook can be referred to by title or ID, or using the shortcuts `$n` or `$b` for, respectively, the currently selected note or notebook. `$c` can be used to refer to the currently selected item.":"CLine truncated
|
||||
{"OK":"OK","Cancel":"Cancelar","Yes":"Sí","No":"No","Close":"Cerrar","Current version is up-to-date.":"La versión actual está actualizada.","%s (pre-release)":"%s (prelanzamiento)","An update is available, do you want to download it now?":"Hay disponible una actualización. ¿Quiere descargarla ahora?","Your version: %s":"Tu versión: %s","New version: %s":"Nueva versión: %s","Full Release Notes":"Notas completas de la versión","Exporting to \"%s\" as \"%s\" format. Please wait...":"Exportando el formato de «%s» a «%s». Por favor espere...","Could not export notes: %s":"No se pudo exportar las notas: %s","Type a note title or part of its content to jump to it. Or type # followed by a tag name, or @ followed by a notebook name.":"Escriba el título de una nota o una parte de su contenido para abrirla. O escriba # seguido de un nombre de etiqueta, o @ seguido del nombre de una libreta.","Goto Anything...":"Ir a...","Search in all the notes":"Buscar en todas las notas","Title":"Título","Size":"Tamaño","ID":"ID","Action":"Acción","Untitled":"Sin título","Delete":"Eliminar","Delete attachment \"%s\"?":"¿Borrar adjunto «%s»?","This is an advanced tool to show the attachments that are linked to your notes. Please be careful when deleting one of them as they cannot be restored afterwards.":"Esta es una herramienta avanzada para mostrar los archivos adjuntos que están vinculados a sus notas. Por favor, tenga cuidado al eliminar uno de ellos, ya que no pueden ser recuperados después.","Please wait...":"Por favor espere...","No resources!":"¡No hay recursos!","Warning: not all resources shown for performance reasons (limit: %s).":"Aviso: no se muestran todos los recursos por razones de rendimiento (límite: % s).","Clear":"Limpiar","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Se creará la nueva libreta «%s» y se importará en ella el archivo «%s»","Found: %d.":"Encontrado: %d.","Created: %d.":"Creado: %d.","Updated: %d.":"Actualizado: %d.","Skipped: %d.":"Omitido: %d.","Resources: %d.":"Recursos: %d.","Tagged: %d.":"Etiquetado: %d.","The notes have been imported: %s":"Las notas han sido importadas: %s","This will open a new screen. Save your current changes?":"Esto abrirá una nueva pantalla. ¿Quieres salvar los cambios actuales?","Check synchronisation configuration":"Comprobar sincronización","Unknown":"Desconocido","Checking...":"Comprobando...","Error":"Error","The Joplin Nextcloud App is either not installed or misconfigured. Please see the full error message below:":"La aplicación Joplin Nextcloud no está instalada o está mal configurada. Consulte el mensaje de error completo debajo:","Show Log":"Mostrar registro","Joplin Nextcloud App status:":"Estado de la App Joplin Nextcloud:","Check Status":"Comprobar estado","Help":"Ayuda","Show Advanced Settings":"Mostrar opciones avanzadas","Browse...":"Explorar...","Edit":"Editar","Back":"Atrás","Apply":"Aplicar","Please select where the sync status should be exported to":"Seleccione a dónde se debería exportar el estado de sincronización","Retry All":"Reintentar todos","Retry":"Reintento","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"Para permitir a Joplin sincronizar con Dropbox, por favor siga estos pasos:","Step 1: Open this URL in your browser to authorise the application:":"Paso 1: Abra esta dirección en su navegador para autorizar a la aplicación:","Step 2: Enter the code provided by Dropbox:":"Paso 2: Introduzca el código provisto por Dropbox:","Submit":"Aceptar","Synchronising...":"Sincronizando...","Generating link...":"Creando enlace...","Link has been copied to clipboard!":"¡El enlace ha sido copiado al portapapeles!","Note: When a note is shared, it will no longer be encrypted on the server.":"Nota: Cuando se comparte una nota, ya no se cifrará en el servidor.","Share Notes":"Compartir Notas","Copy Shareable Link":"Copiar enlace compartible","Attach file":"Adjuntar archivo","Code Block":"Bloque de Código","Inline Code":"Código Integrado","Insert Date Time":"Introduce fecha","Drop notes or files here":"Suelta notas o archivos aquí","Code View":"Código","Please wait for all attachments to be downloaded and decrypted. You may also switch to %s to edit the note.":"Por favor espere a que todos los adjuntos hayan sido descargados y descifrados. Puede también cambiar a %s para editar la nota.","Checkbox list":"Casilla","strong text":"texto destacado","emphasised text":"texto resaltado","Insert Hyperlink":"Insertar hipervínculo","List item":"Listar elementos","Cut":"Cortar","Copy":"Copiar","Paste":"Pegar","Layout":"Diseño","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"Esta nota no tiene contenido. Pulse en «%s» para cambiar al editor y editar la nota.","to-do":"lista de tareas","note":"nota","Creating new %s...":"Creando nuevo %s...","In: %s":"En: %s","Open...":"Abrir...","Save as...":"Guardar como...","Reveal fiLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"To delete a tag, untag the associated notes.":"Sildi kustutamiseks eemaldage märkmed seotud silt.","Please select the note or notebook to be deleted first.":"Valige esmalt kustutatav märkus või märkmik.","Press Ctrl+D or type \"exit\" to exit the application":"Rakendusest väljumiseks vajutage Ctrl+D või kirjutage \"exit\"","More than one item match \"%s\". Please narrow down your query.":"\"%s\" vastab rohkem kui ühele üksusele. Palun kitsendage oma päringut.","No notebook selected.":"Ühtegi märkmikku pole valitud.","No notebook has been specified.":"Ühtegi märkmikku pole määratud.","Y":"Y","n":"n","N":"N","y":"y","Cancelling background synchronisation... Please wait.":"Tausta sünkroniseerimise tühistamine... Oota.","No such command: %s":"Sellist käsku pole: %s","The command \"%s\" is only available in GUI mode":"Käsk %s on saadaval ainult graafilises kasutajaliideses","Cannot change encrypted item":"Krüpteeritud üksust ei saa muuta","Missing required argument: %s":"Puuduv nõutav argument: %s","%s: %s":"%s: %s","Your choice: ":"Sinu valik: ","Invalid answer: %s":"Sobimatu vastus: %s","Attaches the given file to the note.":"Manustab antud faili märkmele.","Cannot find \"%s\".":"Ei leia \" %s\".","Displays the given note.":"Kuvab antud märkme.","Displays the complete information about note.":"Kuvatakse märkme kohta täielik teave.","Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.":"Saab või seab seadistusväärtuse. Kui väärtust [value] ei ole esitatud, näitab see [name] väärtust. Kui ei ole esitatud [name] ega [value], loetatakse praegune konfiguratsioon.","Also displays unset and hidden config variables.":"Kuvab ka seatud ja peidetud konfiguratsioonimuutujad.","%s = %s (%s)":"%s = %s ( %s)","%s = %s":"%s = %s","Duplicates the notes matching <note> to [notebook]. If no notebook is specified the note is duplicated in the current notebook.":"Kopeerib märkmed, mis vastavad märkusele <note> ja [notebook]. Kui ühtegi märkmikku pole täpsustatud, dubleeritakse see praeguses märkmikus.","Marks a to-do as done.":"Märgib, et ülesannete loetelu on tehtud .","Note is not a to-do: \"%s\"":"Märkus ei ole ülesannete loetelu: %s","Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file` and `target-status`.":"Haldab E2EE konfigureerimist. Käsud on `enable`, `disable`, `decrypt`, `status`, `decrypt-file` and `target-status`.","Enter master password:":"Sisestage põhiparool:","Operation cancelled":"Toiming tühistati","Confirm password:":"Kinnitage parool:","Passwords do not match!":"Paroolid ei kattu!","Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.":"Dekrüpteerimise käivitamine... Palun oodake. See võib võtta mitu minutit sõltuvalt sellest, kui palju on dekrüpteerida.","Completed decryption.":"Dekrüpteerimine on lõpetatud.","Enabled":"Lubatud","Disabled":"Keelatud","Encryption is: %s":"Krüpteerimine on: %s","Edit note.":"Redigeeri märkust.","No text editor is defined. Please set it using `config editor <editor-path>`":"Tekstiredaktorit pole määratletud. Seadistage see kasutades konfiguratsiooniredaktorit <editor-path>","No active notebook.":"Aktiivset märkmikku pole.","Note does not exist: \"%s\". Create it?":"Märget pole olemas: \"%s\". Kas luua?","Exits the application.":"Väljub rakendusest.","Exports Joplin data to the given path. By default, it will export the complete database including notebooks, notes, tags and resources.":"Ekspordib Joplini andmed antud teele. Vaikimisi ekspordime täieliku andmebaasi, sealhulgas märkmikud, märkmed, sildid ja ressursid.","Destination format: %s":"Sihtkoha Formaat: %s","Exports only the given note.":"Ekspordib ainult antud märkuse.","Exports only the given notebook.":"Ekspordib ainult antud märkmiku.","Displays a geolocation URL for the note.":"Kuvatakse märkme geograafilise asukoha URL.","Displays usage information.":"Kuvab kasutusteabe.","For information on how to customise the shortcuts please visit %s":"Teavet selle kohta, kuidas kohandada otseteed Palun külastage %s","Shortcuts are not available in CLI mode.":"Otseteed pole CLI režiimis saadaval.","Type `help [command]` for more information about a command; or type `help all` for the complete usage information.":"Käsu kohta lisateabe saamiseks tippige käsk `help [command]`; või tippige täieliku kasutamise teabe saamiseks `help all`.","The possible commands are:":"Võimalikud käsud on:","In any command, a note or notebook can be referred to by title or ID, or using the shortcuts `$n` or `$b` for, respectively, the currently selected note or notebook. `$c` can be used to refer to the currently selected item.":"Mis tahes käsu, Märkus või märkmiku saab viidatud pealkirja või ID või kasutades otseteed `$n` või `$b` vastavalt praeguLine truncated
|
||||
{"OK":"OK","Cancel":"Tühista","Yes":"Jah","No":"Ei","Close":"Sulge","Current version is up-to-date.":"Praegune versioon on ajakohane.","%s (pre-release)":"%s (väljalaske-eelne)","An update is available, do you want to download it now?":"Saadaval on värskendus, kas soovite selle kohe alla laadida?","Your version: %s":"Teie versioon: %s","New version: %s":"Uus versioon: %s","Full Release Notes":"Täielikud väljalaskemärkmed","Search in all the notes":"Otsi kõigist märkmetest","ID":"ID","Untitled":"Pealkirjata","Delete":"Kustuta","Clear":"Tühjenda","Found: %d.":"Leitud: %d.","Created: %d.":"Loodud: %d.","Updated: %d.":"Värskendatud: %d.","Skipped: %d.":"Vahele jäetud: %d.","Resources: %d.":"Ressursid: %d.","Tagged: %d.":"Sildistatud: %d.","The notes have been imported: %s":"Märkmed on imporditud: %s","This will open a new screen. Save your current changes?":"See avab uue ekraani. Kas salvestada praegused muudatused?","Check synchronisation configuration":"Kontrolli sünkroniseerimise konfiguratsiooni","Unknown":"Tundmatu","Checking...":"Kontrollimine...","Error":"Viga","The Joplin Nextcloud App is either not installed or misconfigured. Please see the full error message below:":"Joplin Nextcloud app ei ole installitud või valesti konfigureeritud. Palun vaadake täielikku tõrketeadet allpool:","Show Log":"Näita Logi","Joplin Nextcloud App status:":"Joplin Nextcloud rakenduse staatus:","Check Status":"Kontrolli olekut","Help":"Abi","Show Advanced Settings":"Kuva täpsemad sätted","Browse...":"Sirvi...","Edit":"Muuda","Back":"Tagasi","Apply":"Rakenda","Please select where the sync status should be exported to":"Palun valige, kus sünkroonimise olekut tuleks eksportida","Retry":"Uuesti","Submit":"Saada","Synchronising...":"Sünkroonimine...","Generating link...":"Lingi loomine...","Link has been copied to clipboard!":"Link on kopeeritud lõikelauale!","Share Notes":"Märkmete ühiskasutus","Copy Shareable Link":"Kopeeri jagatav link","Attach file":"Manusta fail","Insert Date Time":"Lisa kuupäev kellaaeg","Insert Hyperlink":"Lisa hüperlink","Cut":"Lõika","Copy":"Kopeeri","Paste":"Kleebi","Layout":"Paigutus","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"Sellel märkel pole sisu. Klõpsake \" %s\" redaktori vahetamiseks ja märkme redigeerimiseks.","to-do":"ülesande nimekiri","note":"paberraha","Creating new %s...":"Uue %s loomine...","In: %s":"Asukoht: %s","Open...":"Avatud...","Save as...":"Salvesta kui...","Copy path to clipboard":"Kopeeri tee lõikelauale","Copy Link Address":"Kopeeri lingi aadress","There was an error downloading this attachment:":"Selle manuse allalaadimisel ilmnes tõrge:","This attachment is not downloaded or not decrypted yet":"Seda manust ei laadita alla või pole veel dekrüpteeritud","Unsupported link or message: %s":"Toetuseta link või sõnum: %s","Focus":"Fookus","Select all":"Vali kõik","Bold":"Paks","Italic":"Kald","Hyperlink":"Hüperlink","Code":"Kood","Numbered List":"Nummerdatud loend","Bulleted List":"Täpp-loend","Checkbox":"Märkekast","Heading":"Pealkiri","Search in current note":"Otsi praeguses märkuses","Some items cannot be synchronised.":"Mõnda üksust ei saa sünkroonida.","View them now":"Vaata neid nüüd","One or more master keys need a password.":"Üks või mitu Põhivõtit vajavad parooli.","Set the password":"Parooli seadmine","Search...":"Otsi...","Tags":"Sildid","Add or remove tags:":"Siltide lisamine või eemaldamine:","Toggle note list":"Lülita märkuseloend sisse/välja","Note properties":"Märkme atribuudid","Rename":"Nimeta ümber","Rename tag:":"Nimeta silt ümber:","New notebook":"Uus märkmik","Notebook title:":"Märkmiku tiitel:","Share note...":"Jaga märkust...","Rename notebook:":"Märkmiku ümbernimetamine:","Set alarm":"Alarmi seadmine","Set alarm:":"Alarmi seadmine:","PDF File":"PDF-fail","Toggle editor layout":"Lülita redaktori paigutus sisse/välja","New note":"Uus Märkus","Toggle sidebar":"Lülita külgriba sisse/välja","Template file:":"Mallifail:","Save":"Salvesta","Status":"Staatus","Encryption is:":"Krüpteerimine on:","Enabled":"Lubatud","Disabled":"Keelatud","Created":"Loodud","Updated":"Uuendatud","Completed":"Lõpetatud","Location":"Asukoht","URL":"URL","Note History":"Märkmete ajalugu","Previous versions of this note":"Selle märkme eelmised versioonid","Remove":"Eemalda","Delete notebook \"%s\"?\n\nAll notes and sub-notebooks within this notebook will also be deleted.":"Kas soovite märkmiku \"%s\"?\n\nKustutatakse ka kõik selle märkmiku märkmed ja alammärkmikud.","Remove tag \"%s\" from all notes?":"Kas eemaldada silt \"%s\" kõigist märkmetest?","Remove this search from the sidebar?":"Kas soovite selle otsingu külgribalt eemaldada?","Export":"Eksport","All notes":"Kõik märkmed","Synchronise":"Sünkroniseeri","Notebooks":"Sülearvutid","Decrypting items: %d/%d":"Üksuste dekrüpteerimine: %d/%d","Fetching resources: %d/%d":"Ressursside toomine: %d/%d","Token has Line truncated
|
||||
@@ -1 +1 @@
|
||||
{"To delete a tag, untag the associated notes.":"Etiketa ezabatzeko, kendu etiketa duten oharrei","Please select the note or notebook to be deleted first.":"Aurretik aukeratu ezabatzeko oharra edo koadernoa, mesedez.","Press Ctrl+D or type \"exit\" to exit the application":"Sakatu Ktrl+D edo idatzi \"exit\" aplikaziotik irteteko","More than one item match \"%s\". Please narrow down your query.":"Elementu bat baino gehiago bat dator \"%s\" bilaketarekin. Mugatu zure bilaketa, mesedez.","No notebook selected.":"Ez dago koadernorik aukeratuta","No notebook has been specified.":"Ez dago koadernorik aukeratuta.","Y":"B","n":"e","N":"E","y":"b","Cancelling background synchronisation... Please wait.":"Atzeko sinkronizazioa uzten... Mesedez itxaron.","No such command: %s":"Ez dago komandorik: %s","The command \"%s\" is only available in GUI mode":"\"%s\" komandoa soilik eskuragarri GUI moduan","Cannot change encrypted item":"Ezinezkoa zifratutako itema aldatzea","Missing required argument: %s":"Beharrezko argumentua faltan: %s","%s: %s":"%s: %s","Your choice: ":"Zure aukera:","Invalid answer: %s":"Erantzun baliogabea: %s","Attaches the given file to the note.":"Erantsi fitxategia notan","Cannot find \"%s\".":"Ezin aurkitu \"%s\"","Displays the given note.":"Oharra erakutsi","Displays the complete information about note.":"Erakutsi oharrari buruzko informazio guztia.","Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.":"Konfigurazio balioa hartu edo ezartzen du. Baldin eta [balioa] ez bada ematen, [izena]ren balioa erakutsiko du. Ez bada ematen [izena] ez [balioa], oraingo konfigurazioaren zerrenda erakutsiko da.","Also displays unset and hidden config variables.":"Ezkutuko edo zehaztu gabeko konfigurazio aldagaiak ere erakusten ditu.","%s = %s (%s)":"%s = %s (%s)","%s = %s":"%s = %s","Duplicates the notes matching <note> to [notebook]. If no notebook is specified the note is duplicated in the current notebook.":"<oharra>rekin bat datozen oharrak [koaderno]ra kopiatzen ditu. Koadernorik ez bada zehazten, oharra oraingo koadernoan bikoiztuko da","Marks a to-do as done.":"Markatu zeregina egindakotzat.","Note is not a to-do: \"%s\"":"Oharra ez da zeregina: \"%s\"","Enter master password:":"Sartu pasahitz nagusia:","Operation cancelled":" Eragiketa utzita","Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.":"Deszifratzearen hasiera... Mesedez itxaron, prozesua luzea izan daiteke, zenbat dagoen prozesatzeko.","Completed decryption.":"Deszifratuta.","Enabled":"Gaituta","Disabled":"Desgaituta","Encryption is: %s":"Zifratzea da: %s","Edit note.":"Oharra editatu.","No text editor is defined. Please set it using `config editor <editor-path>`":"Testu editorerik ez dago definituta. Egin hau erabilita, mesedez: `config editor <editorearen-helbidea>`","No active notebook.":"Ez dago koadernorik aukeratuta.","Note does not exist: \"%s\". Create it?":"Ez dago oharrik: \"%s\". Sortu?","Exits the application.":"Irten aplikaziotik.","Exports only the given note.":"Esportatu emandako oharra soilik.","Exports only the given notebook.":"Esportatu emandako koadernoa soilik.","Displays a geolocation URL for the note.":"Erakutsi URL geolokalizazioa oharrean.","Displays usage information.":"Erakutsi erabilera datuak.","Shortcuts are not available in CLI mode.":"CLI moduan ez dago lasterbiderik erabilgarri.","Type `help [command]` for more information about a command; or type `help all` for the complete usage information.":"Idatzi `help [command]` komandoari buruzko informazio gehiagorako; edo idatzi `help all` erabilerari buruzko informazio osoa lortzeko.","The possible commands are:":"Litezkeen komandoak hauek dira:","In any command, a note or notebook can be referred to by title or ID, or using the shortcuts `$n` or `$b` for, respectively, the currently selected note or notebook. `$c` can be used to refer to the currently selected item.":"Edozein komandotan, oharra edo koadernoari erreferentzia egin ahal zaio izenburuz edo ID erabilita, edo `$n` edo `$b` lasterbideak erabilita, aukeratuta dagoen oharra edo koadernoa erabiltzeko. `$c` ere erabil daiteke aukeratutako elementua erabiltzeko.","To move from one pane to another, press Tab or Shift+Tab.":"Panel batetik bestera mugitzeko, sakatu Tab edo Shifft + Tab.","Use the arrows and page up/down to scroll the lists and text areas (including this console).":"Erabili geziak edo page up/down list eta testu guneen artean aldatzeko (kontsola hau ere kontuan izanda).","To enter command line mode, press \":\"":"Komando lerroa sartzeko, idatzi \":\"","To exit command line mode, press ESCAPE":"Komando lerrotik irteteko, sakatu ESC, mesedez","Do not ask for confirmation.":"Ez galdetu berresteko.","Found: %d.":"Aurkitua: %d","Created: %d.":"Sortuta: %d.","Updated: %d.":"Eguneratuta: %d.","Skipped: %d.":"Saltatuta: %d.","RLine truncated
|
||||
{"OK":"OK","Cancel":"Utzi","Search in all the notes":"Bilatu ohar guztietan","ID":"ID","Untitled":"Titulu gabekoa","Delete":"Ezabatu","Clear":"Garbitu","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"\"%s\" koaderno berria sortuko da eta \"%s\" Fitxategia inportatuko da bertara","Found: %d.":"Aurkitua: %d","Created: %d.":"Sortuta: %d.","Updated: %d.":"Eguneratuta: %d.","Skipped: %d.":"Saltatuta: %d.","Resources: %d.":"Baliabideak: %d.","Tagged: %d.":"Etiketatuta: %d.","The notes have been imported: %s":"Oharrak inportatu dira: %s","Edit":"Editatu","Back":"Atzera","Attach file":"Erantsi fitxategia","Cut":"Moztu","Copy":"Kopiatu","Paste":"Itsatsi","Layout":"Diseinua","Unsupported link or message: %s":"Esteka edo mezu ez dago onartua: %s","Authentication was not completed (did not receive an authentication token).":"Autentifikazioa ez da egin osorik (ez du token-ik hartu).","Some items cannot be synchronised.":"Zenbait item ezin dira sinkronizatu.","View them now":"Ikusi hori orain","Some items cannot be decrypted.":"Zenbait item ezin dira deszifratu.","Set the password":"Ezarri pasahitza","Tags":"Etiketak","Add or remove tags:":"Gehitu edo ezabatu etiketak:","Rename":"Berrizendatu","New notebook":"Koaderno berria","Notebook title:":"Koadernoaren izenburua: ","Rename notebook:":"Berrizendatu koadernoa:","Set alarm":"Ezarri alarma","Set alarm:":"Ezarri alarma:","New to-do":"Zeregin berria","New note":"Ohar berria","Save":"Gorde","Status":"Egoera","Encryption is:":"Zifratua da:","Enabled":"Gaituta","Disabled":"Desgaituta","Created":"Sortua","Updated":"Eguneratua","Remove this search from the sidebar?":"Kendu bilaketa hori ohar guztietatik?","Synchronise":"Sinkronizatu","Notebooks":"Koadernoak","No notes in here. Create one by clicking on \"New note\".":"Hemen ez dago oharrik. Sortu bat \"Ohar berria\" sakatuta.","There is currently no notebook. Create one by clicking on \"New notebook\".":"Momentuz ez dago koadernorik. Sortu bat \"Koaderno berria\" sakatuta.","Switch between note and to-do type":"Aldatu oharra eta zeregin eren artean.","Quit":"Irten","Synchronisation Status":"Sinkronizazioaren egoera","Options":"Aukerak","About Joplin":"Joplin-i buruz","Import":"Inportatu","Website and documentation":"Web orria eta dokumentazioa (en)","OneDrive Login":"Logeatu OneDriven","Error opening note in editor: %s":"Errorea editorean oharra zabaltzean: %s","Use long list format. Format is ID, NOTE_COUNT (for notebook), DATE, TODO_CHECKED (for to-dos), TITLE":"Zerrenda luzearen formatua erabili. Formatua hau da, ID, NOTE_COUNT (libururako), DATE, TODO_CHECKED (zereginetarako), TITLE","Cannot find \"%s\".":"Ezin aurkitu \"%s\"","Invalid command: \"%s\"":"Komando baliogabea: \"%s\"","Displays version information":"Erakutsi bertsioko informazioa","%s %s (%s)":"%s %s (%s)","Exports only the given note.":"Esportatu emandako oharra soilik.","Exports only the given notebook.":"Esportatu emandako koadernoa soilik.","Duplicates the notes matching <note> to [notebook]. If no notebook is specified the note is duplicated in the current notebook.":"<oharra>rekin bat datozen oharrak [koaderno]ra kopiatzen ditu. Koadernorik ez bada zehazten, oharra oraingo koadernoan bikoiztuko da","Attaches the given file to the note.":"Erantsi fitxategia notan","Creates a new to-do.":"Zeregin berria sortu.","Notes can only be created within a notebook.":"Oharrak soilik sor daitezke koaderno baten barruan.","Displays usage information.":"Erakutsi erabilera datuak.","Shortcuts are not available in CLI mode.":"CLI moduan ez dago lasterbiderik erabilgarri.","Type `help [command]` for more information about a command; or type `help all` for the complete usage information.":"Idatzi `help [command]` komandoari buruzko informazio gehiagorako; edo idatzi `help all` erabilerari buruzko informazio osoa lortzeko.","The possible commands are:":"Litezkeen komandoak hauek dira:","In any command, a note or notebook can be referred to by title or ID, or using the shortcuts `$n` or `$b` for, respectively, the currently selected note or notebook. `$c` can be used to refer to the currently selected item.":"Edozein komandotan, oharra edo koadernoari erreferentzia egin ahal zaio izenburuz edo ID erabilita, edo `$n` edo `$b` lasterbideak erabilita, aukeratuta dagoen oharra edo koadernoa erabiltzeko. `$c` ere erabil daiteke aukeratutako elementua erabiltzeko.","To move from one pane to another, press Tab or Shift+Tab.":"Panel batetik bestera mugitzeko, sakatu Tab edo Shifft + Tab.","Use the arrows and page up/down to scroll the lists and text areas (including this console).":"Erabili geziak edo page up/down list eta testu guneen artean aldatzeko (kontsola hau ere kontuan izanda).","To enter command line mode, press \":\"":"Komando lerroa sartzeko, idatzi \":\"","To exit command line mode, press ESCAPE":"Komando lerrotik irteteko, sakatu ESC, mesedez","Displays a geolocation URL for the note.":"Erakutsi URL geolokalizazioa oharrean.","Creates Line truncated
|
||||
@@ -1 +1 @@
|
||||
{"To delete a tag, untag the associated notes.":"برای حذف یک برچسب، این برچسب را از یادداشت های مرتبط پاک کنید.","Please select the note or notebook to be deleted first.":"برای پاک کردن لطفاً ابتدا یادداشت یا دفترچه را انتخاب کنید.","Press Ctrl+D or type \"exit\" to exit the application":"برای خروج Ctrl+D را فشار دهید یا exit را تایپ کنید","More than one item match \"%s\". Please narrow down your query.":"بیش از یک مورد مطابق «%s» وجود دارد. لطفاعبارت جستجو را محدودتر کنید.","No notebook selected.":"هیچ دفترچهای انتخاب نشده.","No notebook has been specified.":"هیچ دفترچهای مشخص نشده.","Y":"Y","n":"n","N":"N","y":"y","No such command: %s":"این دستور وجود ندارد: %s","The command \"%s\" is only available in GUI mode":"دستور «%s» فقط در حالت گرافیکی (GUI) کاربرد دارد","Cannot change encrypted item":"نمیتوان مورد رمزگذاری شده را تغییر داد","Missing required argument: %s":"کمبود آرگمان در دستور: %s","%s: %s":"%s: %s","Your choice: ":"انتخاب شما: ","Invalid answer: %s":"پاسخ نامعتبر: %s","Attaches the given file to the note.":"فایل مشخص شده را به یادداشت پیوست کن.","Cannot find \"%s\".":"«%s» یافت نشد.","Displays the given note.":"یادداشت مشخص شده را نمایش بده.","Displays the complete information about note.":"مشخصات کامل یادداشت را نمایش بده.","%s = %s (%s)":"%s = %s (%s)","%s = %s":"%s = %s","Marks a to-do as done.":"علامت زدن فهرست کارها به عنوان انجام شده.","Enter master password:":"رمز اصلی را وارد کنید:","Operation cancelled":"عملیات لغو شد","Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.":"شروع رمزگشایی... این کار ممکن است چند دقیقه طول بکشد، لطفا صبر کنید.","Completed decryption.":"رمزگشایی کامل شد.","Enabled":"فعال","Disabled":"غیرفعال","Encryption is: %s":"رمزنگاری: %s","Edit note.":"تغییر یادداشت.","No active notebook.":"دفترچهی فعالی وجود ندارد.","Exits the application.":"خروح از نرمافزار.","Destination format: %s":"فرمت مقصد: %s","Exports only the given note.":"فقط یادداشت مشخص شده را خروجی بده.","Exports only the given notebook.":"فقط دفترجه مشخص شده را خروجی بده.","Displays a geolocation URL for the note.":"آدرس ژئولوکیشن یادداشت را نمایش بده.","Displays usage information.":"نمایش اطلاعات مربوط به استفاده.","Shortcuts are not available in CLI mode.":"کلید میانبر در حالت خط فرمان (CLI) کار نمیکند.","The possible commands are:":"دستور های ممکن عبارتند از:","To enter command line mode, press \":\"":"برای ورود به حالت خط فرمان، : را فشار دهید","To exit command line mode, press ESCAPE":"برای خروج از حالت خط فرمان، دکمه ی Esc را فشار دهید","Imports data into Joplin.":"بارگذاری اطلاعات در جاپلین.","Source format: %s":"فرمت مبدا: %s","Do not ask for confirmation.":"برای تایید سوال نکن.","Found: %d.":"پیدا شده: %d.","Created: %d.":"ایجاد شده: %d.","Updated: %d.":"بهروز شده: %d.","Resources: %d.":"منابع: %d.","Tagged: %d.":"برچسب گذاری شده: %d.","Importing notes...":"بارگذاری یادداشتها...","Reverses the sorting order.":"معکوس کردن ترتیب مرتبسازی.","Either \"text\" or \"json\"":"یا «text» و یا «json»","Please select a notebook first.":"لطفا ابتدا یه دفترچه مشخص کنید.","Creates a new notebook.":"ایجاد دفترچه جدید.","Creates a new note.":"ایجاد یادداشت جدید.","Notes can only be created within a notebook.":"یادداشتها میتوانند در دفترچه ایجاد شوند.","Deletes the given notebook.":"پاک کردن یادداشت مشخص شده.","Delete note?":"پاک کردن یادداشت؟","Cancelling... Please wait.":"در حال لغو... لطفا منتظر بمانید.","%s %s (%s)":"%s %s (%s)","Default: %s":"پیشفرض: %s","Possible keys/values:":"کلید ها یا مقادیر ممکن:","Search:":"جستجو:","Sidebar":"نوار کناری","Note title":"موضوع یادداشت","Note body":"بدنه ی یادداشت","PDF File":"فایل PDF","New note":"یادداشت جدید","New to-do":"فهرست کارهای جدید","New notebook":"دفترچه Line truncated
|
||||
{"OK":"باشه","Cancel":"لغو","Yes":"بله","No":"خیر","Close":"بستن","Current version is up-to-date.":"ورژن فعلی بهروز است.","An update is available, do you want to download it now?":"یک بروزرسانی موجود است، آیا میخواهید هم اکنون بارگیریاش کنید؟","Your version: %s":"ورژن شما: %s","New version: %s":"ورژن جدید: %s","Full Release Notes":"انتشار کامل یادداشتها","Exporting to \"%s\" as \"%s\" format. Please wait...":"در حال استخراج به «%s» با فرمت «%s». لطفا صبر کنید...","Could not export notes: %s":"یادداشتها استخراج نشدند: %s","Type a note title or part of its content to jump to it. Or type # followed by a tag name, or @ followed by a notebook name.":"عنوان یادداشت یا بخشی از محتوای آن را تایپ کنید تا به آن بروید. یا # و به دنبال آن یک نام برچسب تایپ کنید ، یا @ و به دنبال آن یک نام دفترچه یادداشت وارد کنید.","Goto Anything...":"رفنت به هر چیزی...","Search in all the notes":"جستجو در تمام یادداشت ها","Title":"عنوان","Size":"اندازه","ID":"شناسه","Action":"عمل","Untitled":"بدون عنوان","Delete":"حذف","Delete attachment \"%s\"?":"پیوست «%s» حذف شود؟","Please wait...":"لطفا صبر کنید...","No resources!":"منبعی یافت نشد!","Clear":"پاک","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"دفترچه جدید «%s» ساخته خواهد شد و فایل «%s» به آن وارد خواهد شد","Found: %d.":"پیدا شده: %d.","Created: %d.":"ایجاد شده: %d.","Updated: %d.":"بهروز شده: %d.","Skipped: %d.":"رد شده: %d.","Resources: %d.":"منابع: %d.","Tagged: %d.":"برچسب گذاری شده: %d.","The notes have been imported: %s":"یادداشتها وارد شدند: %s","This will open a new screen. Save your current changes?":"این یک صفحه جدید باز میکند. تغییرات فعلی ذخیره شوند؟","Check synchronisation configuration":"بررسی تنظیمات همگامسازی","Unknown":"ناشناس","Checking...":"در حال بررسی...","Error":"خطا","Show Log":"نمایش لاگ","Check Status":"بررسی وضعیت","Help":"کمک","Show Advanced Settings":"نمایش تنظیمات پیشرفته","Browse...":"مرور...","Edit":"ویرایش","Back":"بازگشت","Apply":"اعمال","Please select where the sync status should be exported to":"لطفا محلی که وضعیت همگامسازی باید استخراج شود را مشخص کنید","Retry All":"تلاش مجدد همه","Retry":"تلاش مجدد","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"برای اینکه به Joplin اجازه همگامسازی با Dropbox را بدهید، مراحل زیر را دنبال کنید:","Step 1: Open this URL in your browser to authorise the application:":"مرحله ۱: برای اجازه دادن به برنامه این آدرس اینترنتی را در مرورگر خود باز کنید:","Step 2: Enter the code provided by Dropbox:":"مرحله ۲: کدی که توسط Dropbox داده شده را وارد کنید:","Submit":"ثبت","Synchronising...":"در حال همگام سازی...","Generating link...":"در حال بوجود آوردن پیوندها...","Link has been copied to clipboard!":"پیوندها در کلیپ بورد کپی شدند!","Share Notes":"به اشتراک گذاری یادداشتها","Copy Shareable Link":"کپی کردن پیوند قابل به اشتراک گذاری","Attach file":"پیوست فایل","Code Block":"بلوک کد","Inline Code":"کد درون خطی","Insert Date Time":"درج تاریخ و ساعت","Drop notes or files here":"یادداشتها یا فایلها را اینجا رها کنید","Code View":"نمای کد","Please wait for all attachments to be downloaded and decrypted. You may also switch to %s to edit the note.":"لطفا صبر کنید تا همه پیوست ها بارگیری و رمزگشایی شوند. شما همچنین میتوانید به %s برای ویرایش یادداشت بروید.","Checkbox list":"لیست چکباکس","emphasised text":"متن تأکید شده","Insert Hyperlink":"درج پیوند برجسته","List item":"لیست مورد","Cut":"بریدن","Copy":"کپی","Paste":"چسباندن","Layout":"قالب","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"این یادداشت هیچ محتوایی ندارد. برای تغییر وضعیت ویرایشگر و ویرایش یادداشت ، روی \"%s\" کلیک کنید.","to-do":"فهرست کار","note":"یادداشت","CLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"To delete a tag, untag the associated notes.":"Pour supprimer une vignette, enlever là des notes associées.","Please select the note or notebook to be deleted first.":"Veuillez d'abord sélectionner un carnet.","Press Ctrl+D or type \"exit\" to exit the application":"Appuyez sur Ctrl+D ou tapez \"exit\" pour sortir du logiciel","More than one item match \"%s\". Please narrow down your query.":"Plus d'un objet correspond à \"%s\". Veuillez préciser votre requête.","No notebook selected.":"Aucun carnet n'est sélectionné.","No notebook has been specified.":"Aucun carnet n'est spécifié.","Y":"O","n":"n","N":"N","y":"o","Cancelling background synchronisation... Please wait.":"Annulation de la synchronisation... Veuillez patienter.","No such command: %s":"Commande invalide : %s","The command \"%s\" is only available in GUI mode":"La commande \"%s\" est disponible uniquement en mode d'interface graphique","Cannot change encrypted item":"Un objet chiffré ne peut pas être modifié","Missing required argument: %s":"Paramètre requis manquant : %s","%s: %s":"%s : %s","Your choice: ":"Votre choix : ","Invalid answer: %s":"Réponse invalide : %s","Attaches the given file to the note.":"Joindre le fichier fourni à la note.","Cannot find \"%s\".":"Impossible de trouver \"%s\".","Displays the given note.":"Affiche la note.","Displays the complete information about note.":"Affiche tous les détails de la note.","Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.":"Obtient ou modifie une valeur de configuration. Si la [valeur] n'est pas fournie, la valeur de [nom] sera affichée. Si ni le [nom] ni la [valeur] ne sont fournis, la configuration complète sera affichée.","Also displays unset and hidden config variables.":"Afficher également les variables cachées.","%s = %s (%s)":"%s = %s (%s)","%s = %s":"%s = %s","Duplicates the notes matching <note> to [notebook]. If no notebook is specified the note is duplicated in the current notebook.":"Copier les notes correspondant à <nom> vers [carnet]. Si aucun carnet n'est spécifié, la note est dupliquée sur place.","Marks a to-do as done.":"Marquer la tâche comme complétée.","Note is not a to-do: \"%s\"":"La note n'est pas une tâche : \"%s\"","Manages E2EE configuration. Commands are `enable`, `disable`, `decrypt`, `status`, `decrypt-file` and `target-status`.":"Gérer la configuration E2EE (Chiffrement de bout à bout). Les commandes sont `enable`, `disable`, `decrypt` et `status`, `decrypt-file` et `target-status`.","Enter master password:":"Entrer le mot de passe maître :","Operation cancelled":"Opération annulée","Confirm password:":"Confirmer le mot de passe :","Passwords do not match!":"Les mots de passe ne correspondent pas !","Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.":"Démarrage du déchiffrement... Veuillez patienter car cela pourrait prendre plusieurs minutes selon le nombre d'objets à déchiffrer.","Completed decryption.":"Déchiffrement complété.","Enabled":"Activé","Disabled":"Désactivé","Encryption is: %s":"Le chiffrement est : %s","Edit note.":"Éditer la note.","No text editor is defined. Please set it using `config editor <editor-path>`":"Aucun éditeur de texte n'est défini. Veuillez le définir en utilisant la commande `config editor <chemin-editeur>`","No active notebook.":"Aucun carnet actif.","Note does not exist: \"%s\". Create it?":"Cette note n'existe pas : \"%s\". La créer ?","Exits the application.":"Quitter le logiciel.","Exports Joplin data to the given path. By default, it will export the complete database including notebooks, notes, tags and resources.":"Exporter les données de Joplin. Par défaut, la base de donnée complète sera exportée, y compris les carnets, notes, tags et ressources.","Destination format: %s":"Format de la destination : %s","Exports only the given note.":"Exporter uniquement la note spécifiée.","Exports only the given notebook.":"Exporter uniquement le carnet spécifié.","Displays a geolocation URL for the note.":"Afficher l'URL de l'emplacement de la note.","Displays usage information.":"Affiche les informations d'utilisation.","For information on how to customise the shortcuts please visit %s":"Pour personnaliser les raccourcis veuillez consulter la documentation à %s","Shortcuts are not available in CLI mode.":"Les raccourcis ne sont pas disponible en mode de ligne de commande.","Type `help [command]` for more information about a command; or type `help all` for the complete usage information.":"Tapez `help [command]` pour plus d'information sur une commande ; ou tapez `help all` pour l'aide complète.","The possible commands are:":"Les commandes possibles sont :","In any command, a note or notebook can be referred to by title or ID, or using the shortcuts `$n` or `$b` for, respectively, the curreLine truncated
|
||||
{"OK":"OK","Cancel":"Annuler","Yes":"Oui","No":"Non","Close":"Fermer","Current version is up-to-date.":"La version actuelle est à jour.","%s (pre-release)":"%s (pré-release)","An update is available, do you want to download it now?":"Une mise à jour est disponible, souhaitez vous la télécharger maintenant ?","Your version: %s":"Votre version : %s","New version: %s":"Nouvelle version : %s","Full Release Notes":"Notes de version complètes","Exporting to \"%s\" as \"%s\" format. Please wait...":"Exportation en cours vers \"%s\" au format \"%s\". Veuillez patienter...","Could not export notes: %s":"Impossible d'exporter les notes : %s","Type a note title or part of its content to jump to it. Or type # followed by a tag name, or @ followed by a notebook name.":"Entrez le titre d’une note, ou entrez # suivi du nom d’une étiquette, ou @ suivi du nom d’un carnet.","Goto Anything...":"Navigation rapide…","Search in all the notes":"Chercher dans toutes les notes","Title":"Titre","Size":"Taille","ID":"ID","Action":"Action","Untitled":"Sans titre","Delete":"Supprimer","Delete attachment \"%s\"?":"Supprimer fichier joint \"%s\" ?","This is an advanced tool to show the attachments that are linked to your notes. Please be careful when deleting one of them as they cannot be restored afterwards.":"Ceci est un outil pour lister les fichiers qui sont attachés à vos notes. Veuillez noter que lorsqu'un fichier est supprimé ici, il ne peut pas être restauré par la suite.","Please wait...":"Veuillez patienter...","No resources!":"Pas de fichiers joints !","Warning: not all resources shown for performance reasons (limit: %s).":"Attention : tous les fichiers ne sont pas affichés pour des raisons de performance (limite : %s).","Clear":"Supprimer","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Un nouveau carnet \"%s\" va être créé et le fichier \"%s\" va être importé dedans","Found: %d.":"Trouvés : %d.","Created: %d.":"Créés : %d.","Updated: %d.":"Mis à jour : %d.","Skipped: %d.":"Ignorés : %d.","Resources: %d.":"Ressources : %d.","Tagged: %d.":"Étiquettes : %d.","The notes have been imported: %s":"Les notes ont été importées : %s","This will open a new screen. Save your current changes?":"Sauvegarder vos changements avant de continuer ?","Check synchronisation configuration":"Vérifier config synchronisation","Unknown":"Inconnu","Checking...":"Vérification...","Error":"Erreur","The Joplin Nextcloud App is either not installed or misconfigured. Please see the full error message below:":"L'application Joplin pour Nextcloud n'est pas installée ou est configurée incorrectement. Voir le message d'erreur ci-dessous pour plus d'information :","Show Log":"Afficher le journal","Joplin Nextcloud App status:":"Etat de l'appli Joplin pour Nextcloud :","Check Status":"Vérifier état","Help":"Aide","Show Advanced Settings":"Montrer options avancées","Browse...":"Parcourir…","Edit":"Édition","Back":"Retour","Apply":"Appliquer","Please select where the sync status should be exported to":"Veuillez sélectionner un répertoire ou exporter l'état de la synchronisation","Retry All":"Tout réessayer","Retry":"Réessayer","To allow Joplin to synchronise with Dropbox, please follow the steps below:":"Pour permettre à Joplin de synchroniser avec Dropbox, veuillez suivre les étapes ci-dessous :","Step 1: Open this URL in your browser to authorise the application:":"Étape 1: Veuillez ouvrir cette URL dans votre navigateur internet pour autoriser le logiciel :","Step 2: Enter the code provided by Dropbox:":"Étape 2 : Entrez le code fourni par Dropbox :","Submit":"Envoyer","Synchronising...":"Synchronisation...","Generating link...":"Génération des liens...","Link has been copied to clipboard!":"Le lien a été copié dans le presse-papiers !","Note: When a note is shared, it will no longer be encrypted on the server.":"Note : Lorsqu'une note est partagée, elle ne sera plus chiffrée sur le serveur.","Share Notes":"Partager les notes","Copy Shareable Link":"Copier lien partageable","Attach file":"Attacher un fichier","Code Block":"Bloc de code","Inline Code":"Ligne de code","Insert Date Time":"Insérer la date et l'heure","Drop notes or files here":"Déposez des notes ou fichiers ici","Code View":"Code","Please wait for all attachments to be downloaded and decrypted. You may also switch to %s to edit the note.":"Veuillez patienter jusqu'à ce que tous les fichiers joints soient téléchargés et déchiffrés. Vous pouvez également éditer la note maintenant en passant au mode %s","Checkbox list":"Liste de cases à cocher","strong text":"texte en gras","emphasised text":"texte en italique","Insert Hyperlink":"Insérer lien","List item":"Élément de liste","Cut":"Couper","Copy":"Copier","Paste":"Coller","Layout":"Disposition","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"Cette note n'a pas de contenu. Cliquer sur \"%s\" pour basculer versLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"To delete a tag, untag the associated notes.":"Para eliminar unha etiqueta, retire a etiqueta ás notas asociadas.","Please select the note or notebook to be deleted first.":"Selecciona a nota ou caderno para eliminar primeiro.","Press Ctrl+D or type \"exit\" to exit the application":"Prema Ctrl+D ou escriba «exit» para saír do aplicativo","More than one item match \"%s\". Please narrow down your query.":"Hai máis dun elemento que coincide con «%s». Refine a busca.","No notebook selected.":"Non hai ningún caderno seleccionado.","No notebook has been specified.":"Non se especificou ningún caderno.","Y":"S","n":"n","N":"N","y":"s","Cancelling background synchronisation... Please wait.":"Cancelando sincronización en segundo plano... Agarde.","No such command: %s":"Non hai tal orde: %s","The command \"%s\" is only available in GUI mode":"A orde «%s» só está dispoñíbel no modo interface gráfico de usuario","Cannot change encrypted item":"Non é posíbel cambiar un elemento cifrado","Missing required argument: %s":"Falta un argumento requirido: %s","%s: %s":"%s: %s","Your choice: ":"A súa elección: ","Invalid answer: %s":"Resposta non válida: %s","Attaches the given file to the note.":"Anexa o ficheiro dado á nota.","Cannot find \"%s\".":"Non é posíbel atopar «%s».","Displays the given note.":"Mostra a nota dada.","Displays the complete information about note.":"Mostra toda a información da nota.","Gets or sets a config value. If [value] is not provided, it will show the value of [name]. If neither [name] nor [value] is provided, it will list the current configuration.":"Obtén ou estabelece un valor da configuración. Se non se indica [value], mostrará o valor de [name]. Se non se indica [name] nin [value] listará a configuración actual.","Also displays unset and hidden config variables.":"Mostra tamén variábeis de configuración non estabelecidas e ocultas.","%s = %s (%s)":"%s = %s (%s)","%s = %s":"%s = %s","Duplicates the notes matching <note> to [notebook]. If no notebook is specified the note is duplicated in the current notebook.":"Duplica as notas que corresponden a <note> ao [notebook]. Se non se especifica un, a nota será duplicada no caderno atual.","Marks a to-do as done.":"Marca unha tarefa como feita.","Note is not a to-do: \"%s\"":"A nota non é unha tarefa: «%s»","Enter master password:":"Introducir contrasinal mestre:","Operation cancelled":"Operación cancelada","Starting decryption... Please wait as it may take several minutes depending on how much there is to decrypt.":"Iniciando o descifrado... Agarde xa que pode tardar varios minutos dependendo de canto haxa que descifrar.","Completed decryption.":"Descifrado completado.","Enabled":"Activado","Disabled":"Desactivado","Encryption is: %s":"O cifrado é: %s","Edit note.":"Editar nota.","No text editor is defined. Please set it using `config editor <editor-path>`":"Non se estabeleceu ningún editor de texto. Estabelézao usando «config editor <editor-path>»","No active notebook.":"Ningún caderno activo.","Note does not exist: \"%s\". Create it?":"A nota non existe: «%s». Desexa creala?","Exits the application.":"Sae do aplicativo.","Exports Joplin data to the given path. By default, it will export the complete database including notebooks, notes, tags and resources.":"Exporta os datos do Joplin á ruta dada. De forma predeterminada exportará toda a base de datos incluíndo cadernos, notas, etiquetas e recursos.","Destination format: %s":"Formato de destino: %s","Exports only the given note.":"Exporta só a nota indicada.","Exports only the given notebook.":"Exporta só o caderno indicado.","Displays a geolocation URL for the note.":"Mostra a URL de xeolocalización da nota.","Displays usage information.":"Mostra a información de uso.","For information on how to customise the shortcuts please visit %s":"Para obter máis información sobre como personalizar os atallos, visite %s","Shortcuts are not available in CLI mode.":"Os atallos non están dispoñíbeis no modo CLI.","Type `help [command]` for more information about a command; or type `help all` for the complete usage information.":"Escriba «help [command]» para obter máis información sobre unha orde ou escriba «help all» para ver toda a información de uso.","The possible commands are:":"As ordes posíbeis son:","In any command, a note or notebook can be referred to by title or ID, or using the shortcuts `$n` or `$b` for, respectively, the currently selected note or notebook. `$c` can be used to refer to the currently selected item.":"En calquera orde podemos referirnos a unha nota ou caderno polo título ou identificador usando os atallos «$n» ou «$b» para, respectivamente a nota ou cadernos seleccionados actualmente. «$c» pode usarse para referirse ao elemento seleccionado actualmente.","To move from one pane to another, press Tab or Shift+Tab.":"Para mover dun panel ao outro, prema Tab ou Maiús+Tab.","Use the arrows and page up/down tLine truncated
|
||||
{"OK":"Aceptar","Cancel":"Cancelar","Yes":"Si","No":"Non","Current version is up-to-date.":"A versión actual está actualizada.","An update is available, do you want to download it now?":"Hai unha actualización dispoñíbel, desexa descargala agora?","Exporting to \"%s\" as \"%s\" format. Please wait...":"Exportando a «%s» como formato «%s». Agarde...","Search in all the notes":"Buscar en todas as notas","ID":"ID","Untitled":"Sen título","Delete":"Eliminar","Clear":"Limpar","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Crearase o novo caderno «%s» e o ficheiro «%s» importarse dentro del","Found: %d.":"Atopado: %d.","Created: %d.":"Creado: %d.","Updated: %d.":"Actualizado: %d.","Skipped: %d.":"Ignorado: %d.","Resources: %d.":"Recursos: %d.","Tagged: %d.":"Etiquetado: %d.","The notes have been imported: %s":"As notas foron importadas: %s","Check synchronisation configuration":"Comprobar a configuración da sincronización","Edit":"Edtar","Back":"Anterior","Please select where the sync status should be exported to":"Seleccione onde exportar o estado da sincronización","Attach file":"Anexar un ficheiro","Cut":"Cortar","Copy":"Copiar","Paste":"Pegar","Layout":"Disposición","This note has no content. Click on \"%s\" to toggle the editor and edit the note.":"Esta nota non ten contido. Prema en «%s» para ir ao editor e modificar a nota.","to-do":"tarefas pendentes","note":"nota","Creating new %s...":"Criando novo %s...","Open...":"Abrir…","Save as...":"Gardar como…","Unsupported link or message: %s":"Ligazón ou mensaxe incompatíbeis: %s","Authentication was not completed (did not receive an authentication token).":"A autenticación non foi completada (non recibiu un token de autenticación).","Some items cannot be synchronised.":"Non é posíbel sincronizar algúns elementos.","View them now":"Visualizar agora","Some items cannot be decrypted.":"Non é posíbel descifrar algúns elementos.","Set the password":"Estabelecer un contrasinal","Search...":"Buscar…","Tags":"Etiquetas","Add or remove tags:":"Engadir ou eliminar etiquetas:","Rename":"Renomear","New notebook":"Novo caderno","Notebook title:":"Título do caderno:","Rename notebook:":"Renomear caderno:","Set alarm":"Estabelecer alarma","Set alarm:":"Estabelecer alarma:","New to-do":"Nova tarefa","PDF File":"Ficheiro PDF","Toggle editor layout":"Cambiar a disposición do editor","Print":"Imprimir","New note":"Nova nota","Save":"Gardar","Status":"Estado","Encryption is:":"O cifrado é:","Enabled":"Activado","Disabled":"Desactivado","Created":"Creada","Updated":"Actualizado","Remove this search from the sidebar?":"Desexa eliminar esta busca da barra lateral?","Export":"Exportar","Synchronise":"Sincronizar","Notebooks":"Cadernos","Sort notes by":"Ordenar notas por","No notes in here. Create one by clicking on \"New note\".":"Aquí non hai notas. Cree unha premendo en «Nova nota».","There is currently no notebook. Create one by clicking on \"New notebook\".":"Este no é un caderno. Cree un, premendo en «Novo caderno».","Switch between note and to-do type":"Cambiar entre notas e tarefas","Importing from \"%s\" as \"%s\" format. Please wait...":"Importando de «%s» como formato «%s». Agarde...","Quit":"Saír","Synchronisation Status":"Estado da sincronización","Options":"Opcións","About Joplin":"Sobre o Joplin","Check for updates...":"Buscar actualizacións…","Import":"Importar","Hide %s":"Ocultar %s","Website and documentation":"Sitio web e documentación","Make a donation":"Doar","OneDrive Login":"Inicio de sesión de OneDrive","Open %s":"Abrir %s","Exit":"Saír","Error opening note in editor: %s":"Produciuse un erro abrindo a nota no editor: %s","Use long list format. Format is ID, NOTE_COUNT (for notebook), DATE, TODO_CHECKED (for to-dos), TITLE":"Usar o formato de lista longa. O formato -e ID, NOTE_COUNT (para caderno), DATE, TODO_CHECKED (para tarefas), TITLE","Cannot find \"%s\".":"Non é posíbel atopar «%s».","Invalid command: \"%s\"":"Orde incorrecta: «%s»","Displays version information":"Mostra a información da versión","%s %s (%s)":"%s %s (%s)","Exports Joplin data to the given path. By default, it will export the complete database including notebooks, notes, tags and resources.":"Exporta os datos do Joplin á ruta dada. De forma predeterminada exportará toda a base de datos incluíndo cadernos, notas, etiquetas e recursos.","Destination format: %s":"Formato de destino: %s","Exports only the given note.":"Exporta só a nota indicada.","Exports only the given notebook.":"Exporta só o caderno indicado.","Duplicates the notes matching <note> to [notebook]. If no notebook is specified the note is duplicated in the current notebook.":"Duplica as notas que corresponden a <note> ao [notebook]. Se non se especifica un, a nota será duplicada no caderno atual.","Attaches the given file to the note.":"Anexa o ficheiro dado á nota.","Creates a new to-do.":"Crea unha nova tarefa.","Notes caLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"To delete a tag, untag the associated notes.":"Da bi mogao obrisati oznaku, skini oznaku s povezanih bilješki.","Please select the note or notebook to be deleted first.":"Odaberi bilješku ili bilježnicu za brisanje.","Press Ctrl+D or type \"exit\" to exit the application":"Pritisni Ctrl+D ili napiši \"exit\" za izlazak iz aplikacije","More than one item match \"%s\". Please narrow down your query.":"Više od jednog rezultata odgovara \"%s\". Promijeni upit.","No notebook selected.":"Nije odabrana bilježnica.","No notebook has been specified.":"Nije specificirana bilježnica.","Y":"Y","n":"n","N":"N","y":"y","Cancelling background synchronisation... Please wait.":"Prekid sinkronizacije u pozadini... Pričekaj.","No such command: %s":"Ne postoji naredba: %s","The command \"%s\" is only available in GUI mode":"Naredba \"%s\" postoji samo u inačici s grafičkim sučeljem","Missing required argument: %s":"Nedostaje obavezni argument: %s","%s: %s":"%s: %s","Your choice: ":"Tvoj izbor: ","Invalid answer: %s":"Nevažeći odgovor: %s","Attaches the given file to the note.":"Prilaže datu datoteku bilješci.","Cannot find \"%s\".":"Ne mogu naći \"%s\".","Displays the given note.":"Prikazuje datu bilješku.","Displays the complete information about note.":"Prikazuje potpunu informaciju o bilješci.","Also displays unset and hidden config variables.":"Također prikazuje nepostavljene i skrivene konfiguracijske varijable.","%s = %s (%s)":"%s = %s (%s)","%s = %s":"%s = %s","Marks a to-do as done.":"Označava zadatak završenim.","Note is not a to-do: \"%s\"":"Bilješka nije zadatak: \"%s\"","Disabled":"Onemogućeno","Edit note.":"Uredi bilješku.","No active notebook.":"Nema aktivne bilježnice.","Note does not exist: \"%s\". Create it?":"Bilješka ne postoji: \"%s\". Napravi je?","Exits the application.":"Izlaz iz aplikacije.","Exports only the given note.":"Izvozi samo datu bilješku.","Exports only the given notebook.":"Izvozi samo datu bilježnicu.","Displays a geolocation URL for the note.":"Prikazuje geolokacijski URL bilješke.","Displays usage information.":"Prikazuje informacije o korištenju.","Shortcuts are not available in CLI mode.":"Prečaci nisu podržani u naredbenom retku.","Type `help [command]` for more information about a command; or type `help all` for the complete usage information.":"Upiši `help [naredba]` za više informacija o naredbi ili `help all` za sve informacije o korištenju.","The possible commands are:":"Moguće naredbe su:","To move from one pane to another, press Tab or Shift+Tab.":"Za prijelaz iz jednog okna u drugo, pritisni Tab ili Shift+Tab.","To enter command line mode, press \":\"":"Za ulaz u naredbeni redak, pritisni \":\"","To exit command line mode, press ESCAPE":"Za izlaz iz naredbenog retka, pritisni Esc","Do not ask for confirmation.":"Ne pitaj za potvrdu.","Found: %d.":"Nađeno: %d.","Created: %d.":"Stvoreno: %d.","Updated: %d.":"Ažurirano: %d.","Skipped: %d.":"Preskočeno: %d.","Resources: %d.":"Resursi: %d.","Tagged: %d.":"Označeno: %d.","Importing notes...":"Uvozim bilješke...","The notes have been imported: %s":"Bilješke su uvezene: %s","Displays the notes in the current notebook. Use `ls /` to display the list of notebooks.":"Prikazuje bilješke u trenutnoj bilježnici. Upiši `ls /` za prikaz liste bilježnica.","Displays only the first top <num> notes.":"Prikaži samo prvih <num> bilješki.","Reverses the sorting order.":"Mijenja redoslijed.","Either \"text\" or \"json\"":"Ili \"text\" ili \"json\"","Please select a notebook first.":"Odaberi bilježnicu.","Creates a new notebook.":"Stvara novu bilježnicu.","Creates a new note.":"Stvara novu bilješku.","Notes can only be created within a notebook.":"Bilješke je moguće stvoriti samo u sklopu bilježnice.","Creates a new to-do.":"Stvara novi zadatak.","Moves the notes matching <note> to [notebook].":"Premješta podudarajuće bilješke <note> u [bilježnicu].","Deletes the given notebook.":"Briše datu bilježnicu.","Deletes the notebook without asking for confirmation.":"Briše bilježnicu bez traženja potvrde.","Deletes the notes without asking for confirmation.":"Briše bilješke bez traženja potvrde.","%d notes match this pattern. Delete them?":"%d bilješki se podudara s pojmom pretraživanja. Obriši ih?","Delete note?":"Obrisati bilješku?","Displays summary about the notes and notebooks.":"Prikazuje sažetak o bilješkama i bilježnicama.","Synchronises with remote storage.":"Sinkronizira sa udaljenom pohranom podataka.","Sync to provided target (defaults to sync.target config value)":"Sinkroniziraj sa metom (default je polje sync.target u konfiguraciji)","Synchronisation is already in progress.":"Sinkronizacija je već u toku.","Lock file is already being hold. If you know that no synchronisation is taking place, you may delete the lock file at \"%s\" and resume the operation.":"Ako sinkronizacija nije u toku, obriši lock datoteku u \"%s\" i nastavi...","Synchronisation target: %s (%s)":"MLine truncated
|
||||
{"OK":"U redu","Cancel":"Odustani","Search in all the notes":"Pretraži u svim bilješkama","ID":"ID","Untitled":"Nenaslovljen","Delete":"Obriši","Clear":"Očisti","New notebook \"%s\" will be created and file \"%s\" will be imported into it":"Nova bilježnica \"%s\" će biti stvorena i datoteka \"%s\" će biti uvezena u nju","Found: %d.":"Nađeno: %d.","Created: %d.":"Stvoreno: %d.","Updated: %d.":"Ažurirano: %d.","Skipped: %d.":"Preskočeno: %d.","Resources: %d.":"Resursi: %d.","Tagged: %d.":"Označeno: %d.","The notes have been imported: %s":"Bilješke su uvezene: %s","Edit":"Uredi","Back":"Natrag","Please select where the sync status should be exported to":"Odaberi lokaciju za izvoz statusa sinkronizacije","Attach file":"Priloži datoteku","Cut":"Izreži","Copy":"Kopiraj","Paste":"Zalijepi","Layout":"Izgled","Unsupported link or message: %s":"Nepodržana poveznica ili poruka: %s","Some items cannot be synchronised.":"Neke stavke se ne mogu sinkronizirati.","View them now":"Pogledaj ih sada","Tags":"Oznake","Add or remove tags:":"Dodaj ili makni oznake:","Rename":"Preimenuj","New notebook":"Nova bilježnica","Notebook title:":"Naslov bilježnice:","Rename notebook:":"Preimenuj bilježnicu:","Set alarm":"Postavi upozorenje","Set alarm:":"Postavi upozorenje:","New to-do":"Novi zadatak","New note":"Nova bilješka","Save":"Spremi","Status":"Status","Disabled":"Onemogućeno","Created":"Stvoreno","Updated":"Ažurirano","Remove this search from the sidebar?":"Makni ovu pretragu iz izbornika?","Synchronise":"Sinkroniziraj","Notebooks":"Bilježnice","No notes in here. Create one by clicking on \"New note\".":"Ovdje nema bilješki. Stvori novu pritiskom na \"Nova bilješka\".","There is currently no notebook. Create one by clicking on \"New notebook\".":"Ovdje nema bilježnica. Stvori novu pritiskom na \"Nova bilježnica\".","Switch between note and to-do type":"Zamijeni bilješku i zadatak","Quit":"Izađi","Synchronisation Status":"Status Sinkronizacije","Options":"Opcije","About Joplin":"O Joplinu","Import":"Uvoz","Website and documentation":"Website i dokumentacija","OneDrive Login":"OneDrive Login","Cannot find \"%s\".":"Ne mogu naći \"%s\".","Invalid command: \"%s\"":"Nevažeća naredba: \"%s\"","Displays version information":"Prikazuje verziju","%s %s (%s)":"%s %s (%s)","Exports only the given note.":"Izvozi samo datu bilješku.","Exports only the given notebook.":"Izvozi samo datu bilježnicu.","Attaches the given file to the note.":"Prilaže datu datoteku bilješci.","Creates a new to-do.":"Stvara novi zadatak.","Notes can only be created within a notebook.":"Bilješke je moguće stvoriti samo u sklopu bilježnice.","Displays usage information.":"Prikazuje informacije o korištenju.","Shortcuts are not available in CLI mode.":"Prečaci nisu podržani u naredbenom retku.","Type `help [command]` for more information about a command; or type `help all` for the complete usage information.":"Upiši `help [naredba]` za više informacija o naredbi ili `help all` za sve informacije o korištenju.","The possible commands are:":"Moguće naredbe su:","To move from one pane to another, press Tab or Shift+Tab.":"Za prijelaz iz jednog okna u drugo, pritisni Tab ili Shift+Tab.","To enter command line mode, press \":\"":"Za ulaz u naredbeni redak, pritisni \":\"","To exit command line mode, press ESCAPE":"Za izlaz iz naredbenog retka, pritisni Esc","Displays a geolocation URL for the note.":"Prikazuje geolokacijski URL bilješke.","Creates a new note.":"Stvara novu bilješku.","Moves the notes matching <note> to [notebook].":"Premješta podudarajuće bilješke <note> u [bilježnicu].","Synchronises with remote storage.":"Sinkronizira sa udaljenom pohranom podataka.","Sync to provided target (defaults to sync.target config value)":"Sinkroniziraj sa metom (default je polje sync.target u konfiguraciji)","Synchronisation is already in progress.":"Sinkronizacija je već u toku.","Lock file is already being hold. If you know that no synchronisation is taking place, you may delete the lock file at \"%s\" and resume the operation.":"Ako sinkronizacija nije u toku, obriši lock datoteku u \"%s\" i nastavi...","Synchronisation target: %s (%s)":"Meta sinkronizacije: %s (%s)","Starting synchronisation...":"Započinjem sinkronizaciju...","Exits the application.":"Izlaz iz aplikacije.","Fatal error:":"Fatalna greška:","Displays the given note.":"Prikazuje datu bilješku.","Displays the complete information about note.":"Prikazuje potpunu informaciju o bilješci.","Marks a to-do as done.":"Označava zadatak završenim.","Note is not a to-do: \"%s\"":"Bilješka nije zadatak: \"%s\"","Displays the notes in the current notebook. Use `ls /` to display the list of notebooks.":"Prikazuje bilješke u trenutnoj bilježnici. Upiši `ls /` za prikaz liste bilježnica.","Displays only the first top <num> notes.":"Prikaži samo prvih <num> bilješki.","Reverses the sorting order.":"Mijenja redoslijed.","Either \"text\" or \"json\"":"Ili \"textLine truncated
|
||||