mirror of
https://github.com/zadam/trilium.git
synced 2025-10-26 15:56:29 +01:00
Compare commits
1317 Commits
feat/push-
...
feat/clean
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
64f191b83b | ||
|
|
31c8e96d70 | ||
|
|
1191421388 | ||
|
|
831a184c2a | ||
|
|
c671f91bca | ||
|
|
fa436c7ce6 | ||
|
|
d1367286c9 | ||
|
|
d10b0fa823 | ||
|
|
545c8648b7 | ||
|
|
d6e9acc149 | ||
|
|
26e14aff7b | ||
|
|
280ec5b406 | ||
|
|
26081ffd36 | ||
|
|
f106cbf6c0 | ||
|
|
f3877a52ab | ||
|
|
5becf60a63 | ||
|
|
2ea96dc8f8 | ||
|
|
e48724662e | ||
|
|
745ce7de76 | ||
|
|
997217861c | ||
|
|
44f8e8b833 | ||
|
|
99e2b63ff0 | ||
|
|
0139d90ac7 | ||
|
|
5b7484c27c | ||
|
|
71e64be44c | ||
|
|
639651329a | ||
|
|
a7a0d3584a | ||
|
|
f765441f1e | ||
|
|
10cd5bf130 | ||
|
|
d93c5dfeea | ||
|
|
b58aac1298 | ||
|
|
d662718a4a | ||
|
|
bebd3d430b | ||
|
|
2fca995725 | ||
|
|
caa1ea12f1 | ||
|
|
f25e4ea391 | ||
|
|
6c106300d4 | ||
|
|
05b433edb5 | ||
|
|
69a59f0935 | ||
|
|
fa7575ed00 | ||
|
|
b2174549c7 | ||
|
|
19f16274ab | ||
|
|
7f88ae5494 | ||
|
|
c820b5caa4 | ||
|
|
b1638e1ffc | ||
|
|
f2e60f52d2 | ||
|
|
d845343e97 | ||
|
|
ee2edc92e7 | ||
|
|
332216f5f5 | ||
|
|
4d4cd7d130 | ||
|
|
b3cc51ce63 | ||
|
|
05645d93ef | ||
|
|
a2d09efca4 | ||
|
|
1212f9a9e9 | ||
|
|
75f7986e36 | ||
|
|
2447a6fc8d | ||
|
|
38a4a3e7b6 | ||
|
|
28240d549d | ||
|
|
5da46a1678 | ||
|
|
e592a37799 | ||
|
|
15d00b61dd | ||
|
|
5d0b6f9fad | ||
|
|
2a40ffd164 | ||
|
|
8c687de3c6 | ||
|
|
27415b4e16 | ||
|
|
ce0b39765e | ||
|
|
fafc4af237 | ||
|
|
76a283ed77 | ||
|
|
99500bca8f | ||
|
|
a982fc326f | ||
|
|
b16309d01a | ||
|
|
1bfc3d450f | ||
|
|
37b63d4ea9 | ||
|
|
e7315e7d35 | ||
|
|
718dffa672 | ||
|
|
c3dd9865e7 | ||
|
|
1702ec5644 | ||
|
|
dfddf044cf | ||
|
|
24a632056a | ||
|
|
dc7f4a6cf3 | ||
|
|
cd100f37fe | ||
|
|
984e8bbba0 | ||
|
|
fcc22cc212 | ||
|
|
4101acc2e3 | ||
|
|
f30bdd54b1 | ||
|
|
62bb8ac89a | ||
|
|
33dfcb1c6e | ||
|
|
5969815ed1 | ||
|
|
2b2125c702 | ||
|
|
85a4557bb0 | ||
|
|
0d9e4a1aa2 | ||
|
|
4a01181110 | ||
|
|
89dfc480f3 | ||
|
|
c178fc2957 | ||
|
|
9d8c62caaf | ||
|
|
279f014c42 | ||
|
|
826e9c7114 | ||
|
|
384c8649b4 | ||
|
|
ecc8bc3866 | ||
|
|
bb4d723f18 | ||
|
|
e250510ab1 | ||
|
|
dc630f927f | ||
|
|
e47cb13b89 | ||
|
|
838ae315e3 | ||
|
|
58afa86a2b | ||
|
|
5b90ece12f | ||
|
|
afb2072b97 | ||
|
|
8e0ca56b85 | ||
|
|
8e4cf38840 | ||
|
|
cb872d3638 | ||
|
|
781be26833 | ||
|
|
0ad5f3493d | ||
|
|
15bb3acb31 | ||
|
|
a43ddf3f9f | ||
|
|
8417bfebb0 | ||
|
|
28e8ea2da9 | ||
|
|
393264b4a1 | ||
|
|
9306a28c87 | ||
|
|
77fef38009 | ||
|
|
c14ea42978 | ||
|
|
341cd62b13 | ||
|
|
9e6cfe7c1e | ||
|
|
9695dd404b | ||
|
|
5e6be01251 | ||
|
|
f367a1c776 | ||
|
|
bce987c67a | ||
|
|
e7a9f9c566 | ||
|
|
33150e3a98 | ||
|
|
e1aead098e | ||
|
|
9f9a276a51 | ||
|
|
873df6da6c | ||
|
|
2e353afb98 | ||
|
|
d497688d9a | ||
|
|
2cf3a04482 | ||
|
|
e50fd6f540 | ||
|
|
5096163ae3 | ||
|
|
0d6640ae14 | ||
|
|
52ac93e99c | ||
|
|
674b0a8215 | ||
|
|
ec56b297dc | ||
|
|
a477cc22e6 | ||
|
|
119278b5f5 | ||
|
|
5414fbeacb | ||
|
|
a4b01bba9b | ||
|
|
bab536751a | ||
|
|
7657e17373 | ||
|
|
30f530abdb | ||
|
|
1d373bc7d5 | ||
|
|
9d3c5d04b9 | ||
|
|
ba91fbbe6b | ||
|
|
f6898779bb | ||
|
|
dbb90bdd2b | ||
|
|
f442c56ed6 | ||
|
|
e971a9cb03 | ||
|
|
b450a4faa0 | ||
|
|
9a2440942b | ||
|
|
c3151f9afa | ||
|
|
f277612444 | ||
|
|
1b92ad2f53 | ||
|
|
f96abe0e45 | ||
|
|
142a276cc4 | ||
|
|
a52b0a45fe | ||
|
|
6df40ec80a | ||
|
|
713340a9ba | ||
|
|
ee8b41c81b | ||
|
|
dd477258a9 | ||
|
|
7c30e2b4f6 | ||
|
|
37a3c00214 | ||
|
|
d30cdadb2d | ||
|
|
58f0d01944 | ||
|
|
d4791944b0 | ||
|
|
92a052674f | ||
|
|
d49ce7c289 | ||
|
|
5f38d52f20 | ||
|
|
6286745684 | ||
|
|
4f574f8aa4 | ||
|
|
a3e27248ad | ||
|
|
e48569245d | ||
|
|
473f7a83e6 | ||
|
|
1c622fa848 | ||
|
|
409e650506 | ||
|
|
d461f5474e | ||
|
|
36e731cc2c | ||
|
|
b77fbcb7ad | ||
|
|
7b7dc346ca | ||
|
|
b4f8a02ba6 | ||
|
|
9d6a5d1bb5 | ||
|
|
fa747c5c4b | ||
|
|
bc93f40cdb | ||
|
|
a9975798d7 | ||
|
|
4ea4404aba | ||
|
|
361848b518 | ||
|
|
8c46103f63 | ||
|
|
edcdecb720 | ||
|
|
e1ef02058d | ||
|
|
d9746df16b | ||
|
|
b4c20d9683 | ||
|
|
59955b7414 | ||
|
|
95b1c82ccb | ||
|
|
7cfebbabeb | ||
|
|
f412874c73 | ||
|
|
873c4c6636 | ||
|
|
efcd54be50 | ||
|
|
ae0bb78b1c | ||
|
|
29fa335a27 | ||
|
|
3a84a78cd1 | ||
|
|
df6bb7e6bf | ||
|
|
dfcaebc613 | ||
|
|
1ece35536b | ||
|
|
1a90548622 | ||
|
|
cc7e5bdb80 | ||
|
|
5c73b21ff7 | ||
|
|
e9078107ae | ||
|
|
6c24b18bc1 | ||
|
|
be7ff73142 | ||
|
|
63ac45d369 | ||
|
|
f164a4b786 | ||
|
|
806d601115 | ||
|
|
6b3cf49398 | ||
|
|
b8851565eb | ||
|
|
888d0d1084 | ||
|
|
0a25d4db0d | ||
|
|
4a72f2c6a7 | ||
|
|
446bdd6a5e | ||
|
|
cb26fac2ea | ||
|
|
3a45440c74 | ||
|
|
e115d6e275 | ||
|
|
fc614ccf83 | ||
|
|
17c9db7698 | ||
|
|
d483b6e840 | ||
|
|
032819e812 | ||
|
|
9d7d415756 | ||
|
|
e9d432b4bf | ||
|
|
be35584f9a | ||
|
|
80be4cc6b8 | ||
|
|
c74ba44b91 | ||
|
|
28a79baa01 | ||
|
|
5279601105 | ||
|
|
c2639951a5 | ||
|
|
6bfab1387d | ||
|
|
4212d208fc | ||
|
|
9e5bded4cf | ||
|
|
ce0763f03d | ||
|
|
e860b7aa32 | ||
|
|
0be9310450 | ||
|
|
d870a260e1 | ||
|
|
2de545be1c | ||
|
|
bf04e5a15b | ||
|
|
46d2d7e160 | ||
|
|
1775b22c7a | ||
|
|
ae022b6389 | ||
|
|
d4155102c5 | ||
|
|
3b1a25230f | ||
|
|
d8639793e0 | ||
|
|
06fec88214 | ||
|
|
da93928976 | ||
|
|
2314443d19 | ||
|
|
4b34047324 | ||
|
|
bc1d4de13d | ||
|
|
6bae4c8075 | ||
|
|
84a89fd0ba | ||
|
|
1447fa6f14 | ||
|
|
bc4937f9d2 | ||
|
|
43a7b828d9 | ||
|
|
d611591e1a | ||
|
|
f7a565ec73 | ||
|
|
6b35e909ab | ||
|
|
53b9ce0f3d | ||
|
|
5e1cd7d6ac | ||
|
|
acb98061ce | ||
|
|
979ef6287f | ||
|
|
58a883797d | ||
|
|
f718e87673 | ||
|
|
4c6a742af7 | ||
|
|
848dc51a7a | ||
|
|
44541b66c4 | ||
|
|
3694018441 | ||
|
|
3874e54d76 | ||
|
|
10de141c00 | ||
|
|
806ba320a8 | ||
|
|
09ef24d27d | ||
|
|
236f3cada7 | ||
|
|
c2afef4832 | ||
|
|
b9fa7d70bb | ||
|
|
9ac31f2667 | ||
|
|
639d1befef | ||
|
|
b99c8d5cc1 | ||
|
|
0770398010 | ||
|
|
c3d24451b7 | ||
|
|
4db1a3bdec | ||
|
|
2a0410f597 | ||
|
|
7e79d907be | ||
|
|
c0ea441c59 | ||
|
|
290d134d88 | ||
|
|
517bfd2c9a | ||
|
|
31990a9992 | ||
|
|
151a2c284d | ||
|
|
614a8f177c | ||
|
|
8b5e53e579 | ||
|
|
1ad8b1bf85 | ||
|
|
a393584a2a | ||
|
|
804fc72ed8 | ||
|
|
3f8f05368c | ||
|
|
5a56ba2fd5 | ||
|
|
de7c1329f8 | ||
|
|
6fc5aa0090 | ||
|
|
2eaeccda05 | ||
|
|
56f970ab08 | ||
|
|
d1cb9e4a3f | ||
|
|
992adcab65 | ||
|
|
d3b3a83477 | ||
|
|
98ad371d01 | ||
|
|
3cdae245e1 | ||
|
|
887c78d893 | ||
|
|
e208497d71 | ||
|
|
dd744b4e0d | ||
|
|
647cbc7e7a | ||
|
|
cc93102859 | ||
|
|
5b673e753b | ||
|
|
bd2eb6fdbb | ||
|
|
c25f783980 | ||
|
|
9b37708f0c | ||
|
|
7386bb35e5 | ||
|
|
9274522877 | ||
|
|
1b444686af | ||
|
|
b3dfdacdc3 | ||
|
|
159fab41ce | ||
|
|
093f48f76a | ||
|
|
6998a3593e | ||
|
|
c3250cfd72 | ||
|
|
e52eb9bcb0 | ||
|
|
5ac2892e34 | ||
|
|
a15aab395a | ||
|
|
f991276152 | ||
|
|
1f71ceb611 | ||
|
|
92e14159b9 | ||
|
|
b8419604e5 | ||
|
|
096fd82e64 | ||
|
|
cbaae52a7e | ||
|
|
5905299331 | ||
|
|
2df0763141 | ||
|
|
fb7453f7b0 | ||
|
|
974d20b0ba | ||
|
|
c2f6d9aa07 | ||
|
|
6194386464 | ||
|
|
329ecd6894 | ||
|
|
150f470aee | ||
|
|
83b843f047 | ||
|
|
24043611c3 | ||
|
|
2c99ba64bc | ||
|
|
ffe30bed75 | ||
|
|
b6088f488f | ||
|
|
e04165a184 | ||
|
|
d7aa95ce8e | ||
|
|
28214ec9fb | ||
|
|
28952a5253 | ||
|
|
d66505e5bc | ||
|
|
c4354032b5 | ||
|
|
d23550d3ef | ||
|
|
894ec1e3c1 | ||
|
|
bdb03f8d51 | ||
|
|
61ea27c8f4 | ||
|
|
ac45617d8f | ||
|
|
35853ff988 | ||
|
|
80009f99e8 | ||
|
|
0b1d001c20 | ||
|
|
cb63e88cdc | ||
|
|
a5c7f4221b | ||
|
|
f61010a65e | ||
|
|
b99f5b2cbe | ||
|
|
9919d0cbfa | ||
|
|
fe8099d8d1 | ||
|
|
0da336c8e1 | ||
|
|
37f5d19739 | ||
|
|
2ac0d84cee | ||
|
|
e639961b68 | ||
|
|
adf29b4e6e | ||
|
|
b00cd032a3 | ||
|
|
60e8f46777 | ||
|
|
ef2860770f | ||
|
|
aa562e9c26 | ||
|
|
866ccc1696 | ||
|
|
dbe241dee7 | ||
|
|
bd32a08e11 | ||
|
|
8416dab870 | ||
|
|
6fda669307 | ||
|
|
c21a9223f5 | ||
|
|
4e4e65b462 | ||
|
|
5e07231d78 | ||
|
|
d71d1ce8b4 | ||
|
|
892e84deaa | ||
|
|
7a73af0299 | ||
|
|
65dae511e5 | ||
|
|
55c70b404c | ||
|
|
8117586548 | ||
|
|
3ce9c7ba3d | ||
|
|
ab162efab8 | ||
|
|
babfc3cfb9 | ||
|
|
3d780d7d02 | ||
|
|
5b81aff8be | ||
|
|
86b14a5763 | ||
|
|
14a2794d15 | ||
|
|
eef68aca0f | ||
|
|
f6f7445528 | ||
|
|
f7c0184a6b | ||
|
|
65bc599a16 | ||
|
|
b445bef74c | ||
|
|
93d7ba032d | ||
|
|
334e2c3949 | ||
|
|
a11797fe6e | ||
|
|
3cf0ec5740 | ||
|
|
40f578f43f | ||
|
|
428abb4591 | ||
|
|
4954fa89b5 | ||
|
|
10f7837a7f | ||
|
|
fca310cc31 | ||
|
|
cf58b511df | ||
|
|
9da1f52a71 | ||
|
|
5c8e674ddb | ||
|
|
f027b25bc2 | ||
|
|
cfe71a3426 | ||
|
|
70afb636ca | ||
|
|
818efe7fb0 | ||
|
|
3c2263db86 | ||
|
|
7c30bc9c72 | ||
|
|
ec8d719d41 | ||
|
|
5f884c4440 | ||
|
|
e6c806d462 | ||
|
|
4afceeca79 | ||
|
|
7990c60ce7 | ||
|
|
74c248bce2 | ||
|
|
2df646f80c | ||
|
|
768260782a | ||
|
|
4eff105af5 | ||
|
|
68ef6ea142 | ||
|
|
772d4ac5a1 | ||
|
|
b3e1a79d40 | ||
|
|
d7afa8526d | ||
|
|
b4a2a6c12b | ||
|
|
32c15f5e03 | ||
|
|
b5a491820c | ||
|
|
8a477c87e0 | ||
|
|
8bcae8cdb8 | ||
|
|
ea87161a91 | ||
|
|
f2bb6cb848 | ||
|
|
fecb677552 | ||
|
|
3ba9b56833 | ||
|
|
a329e7d72a | ||
|
|
2568f6bb53 | ||
|
|
23936596fa | ||
|
|
398db56fe7 | ||
|
|
423ef14ca6 | ||
|
|
9921d3e0a7 | ||
|
|
ac22fd8d60 | ||
|
|
ff065964e9 | ||
|
|
951dda50ac | ||
|
|
01bd2f1815 | ||
|
|
570f8fd155 | ||
|
|
5d348e3ad6 | ||
|
|
9573346d55 | ||
|
|
e4570a1bb0 | ||
|
|
b884aba244 | ||
|
|
9c73908560 | ||
|
|
b399d292a9 | ||
|
|
a557d9770f | ||
|
|
a11ebfeb42 | ||
|
|
4695c3726d | ||
|
|
324f79ceb9 | ||
|
|
fc5e459895 | ||
|
|
bdaba67859 | ||
|
|
2b01e2fdaf | ||
|
|
9967da6ea1 | ||
|
|
a56a00ba2f | ||
|
|
82df26031f | ||
|
|
b4af8e7339 | ||
|
|
e6180f427b | ||
|
|
9a95ec170d | ||
|
|
7be0507db5 | ||
|
|
1d324ab3b0 | ||
|
|
9e00ed7e14 | ||
|
|
02a6652b44 | ||
|
|
e19f7b286a | ||
|
|
50301a97f3 | ||
|
|
408e31079c | ||
|
|
bf81e159ca | ||
|
|
b1f89296ff | ||
|
|
1948302a64 | ||
|
|
187585b32f | ||
|
|
d351fd506a | ||
|
|
1cf29c985e | ||
|
|
04374540ad | ||
|
|
ce8f3a4f8f | ||
|
|
acb21b992d | ||
|
|
15f344fe4a | ||
|
|
120324c3f0 | ||
|
|
59ce8b912d | ||
|
|
619888847b | ||
|
|
06b782e91d | ||
|
|
1d7e0a193a | ||
|
|
2d815852e4 | ||
|
|
735a7104f1 | ||
|
|
e3e4772aab | ||
|
|
8bb65b94d0 | ||
|
|
b9edae4fc9 | ||
|
|
27aae18345 | ||
|
|
47db63d909 | ||
|
|
8ebeead32c | ||
|
|
09d43e710f | ||
|
|
7240f64a49 | ||
|
|
ab868d76db | ||
|
|
acdaf6a636 | ||
|
|
6dccef1689 | ||
|
|
f7ec726b15 | ||
|
|
781570f950 | ||
|
|
7774d41457 | ||
|
|
27e6d1b00b | ||
|
|
73ea0cce32 | ||
|
|
a1741b8634 | ||
|
|
a0f1a63fb6 | ||
|
|
7c13373f16 | ||
|
|
239b7b810d | ||
|
|
29c8bcaf6e | ||
|
|
2b3ae94f8d | ||
|
|
e753924c4b | ||
|
|
8080d3b8a7 | ||
|
|
1f4dd04ef0 | ||
|
|
348432bd5b | ||
|
|
d2962b060e | ||
|
|
fae66e555e | ||
|
|
aeb9bfc1fd | ||
|
|
5a15024e59 | ||
|
|
23c2acaab7 | ||
|
|
4cc55b02ab | ||
|
|
71ce9c459e | ||
|
|
97b5ea0798 | ||
|
|
5fd0f79d44 | ||
|
|
2a090c7014 | ||
|
|
126030f17e | ||
|
|
f22fd1d454 | ||
|
|
8d4c656a6f | ||
|
|
3c5a053a2c | ||
|
|
664b7e45e7 | ||
|
|
5c618abc79 | ||
|
|
220cf8aedd | ||
|
|
78f16ddc12 | ||
|
|
0048e95e0c | ||
|
|
13e9fcbfba | ||
|
|
5249911ddb | ||
|
|
59fe1299b2 | ||
|
|
1c9f1ba82c | ||
|
|
311f4aded8 | ||
|
|
ed8df51216 | ||
|
|
5e4d403556 | ||
|
|
f3a9c718ad | ||
|
|
f3733eb341 | ||
|
|
3b06845a71 | ||
|
|
94e20c44e5 | ||
|
|
1638fd8590 | ||
|
|
effe0a4f51 | ||
|
|
bb3ac277f4 | ||
|
|
68aacfea6f | ||
|
|
e0056a457e | ||
|
|
4d6c2fd8cb | ||
|
|
f63b8cef2d | ||
|
|
f19da292c1 | ||
|
|
36003b76e9 | ||
|
|
1c627dec05 | ||
|
|
2dcb67b099 | ||
|
|
de8a090410 | ||
|
|
fc09a41ba0 | ||
|
|
12f461d0ea | ||
|
|
1256338ab5 | ||
|
|
43c761328d | ||
|
|
6f565afd44 | ||
|
|
5c27e96960 | ||
|
|
c0337befa7 | ||
|
|
3bda10caf0 | ||
|
|
a25e376f85 | ||
|
|
1b238a98de | ||
|
|
38659e501e | ||
|
|
113af940c1 | ||
|
|
089ca7fd29 | ||
|
|
529523dd4e | ||
|
|
89417f15dc | ||
|
|
51692aabd5 | ||
|
|
9cde4c26d9 | ||
|
|
c7bce91b67 | ||
|
|
91b6910a9c | ||
|
|
9fb37968f8 | ||
|
|
6cfc6509f6 | ||
|
|
fd054693d9 | ||
|
|
8b65de2442 | ||
|
|
25905ebff7 | ||
|
|
e88b59009a | ||
|
|
3aee1c8546 | ||
|
|
2dd554a8be | ||
|
|
f4fae04327 | ||
|
|
21032d1bb8 | ||
|
|
6745b887fb | ||
|
|
d0d166e426 | ||
|
|
754b95876e | ||
|
|
0bb10cf3ee | ||
|
|
d276cdf519 | ||
|
|
2768b76278 | ||
|
|
d244803501 | ||
|
|
158ca2acf2 | ||
|
|
3ef44febd8 | ||
|
|
5be41ee669 | ||
|
|
b887d4a7d2 | ||
|
|
be1de86a42 | ||
|
|
345d098e5f | ||
|
|
fae5421516 | ||
|
|
934f144bf9 | ||
|
|
5affb837a6 | ||
|
|
188319d2d9 | ||
|
|
fe762577b1 | ||
|
|
f30da3d13b | ||
|
|
053a84483c | ||
|
|
34338a795f | ||
|
|
012aceb7f2 | ||
|
|
a92604e92f | ||
|
|
9a9edf16c4 | ||
|
|
daba190e74 | ||
|
|
8877eded9b | ||
|
|
0b05f597dc | ||
|
|
b26803b627 | ||
|
|
17e87278eb | ||
|
|
79718c7e6e | ||
|
|
0917c25bce | ||
|
|
45c3f6d44a | ||
|
|
90337016e7 | ||
|
|
c0c1c8a9c2 | ||
|
|
42a082f11b | ||
|
|
891e6b9751 | ||
|
|
2be9d71659 | ||
|
|
3f562332c7 | ||
|
|
edd7e43b41 | ||
|
|
6ea1e31350 | ||
|
|
770648619e | ||
|
|
08c3e97a46 | ||
|
|
9a08b864ee | ||
|
|
039d6e6a4e | ||
|
|
36692a5ad7 | ||
|
|
67c7d7575d | ||
|
|
bb51eed0bc | ||
|
|
adce041b02 | ||
|
|
183d11ff72 | ||
|
|
a9f5b44fac | ||
|
|
c4560c2bc8 | ||
|
|
ba740eff9b | ||
|
|
9dcf46cbb3 | ||
|
|
7782b11186 | ||
|
|
e1b8f973d5 | ||
|
|
a51e475095 | ||
|
|
13685d2688 | ||
|
|
8bef36c6c7 | ||
|
|
207807e0c2 | ||
|
|
b5c82af464 | ||
|
|
3fa95d4fee | ||
|
|
ee43b21b0c | ||
|
|
29e091461f | ||
|
|
5b6a2b1f5d | ||
|
|
d657303f2f | ||
|
|
a4d541ae1c | ||
|
|
b38631b04b | ||
|
|
fe0f8ad83d | ||
|
|
46950cbceb | ||
|
|
9893de4642 | ||
|
|
b9055c6810 | ||
|
|
f068b335f5 | ||
|
|
7c750811cc | ||
|
|
2edce23a29 | ||
|
|
3efe628eb7 | ||
|
|
fdbb88ccd1 | ||
|
|
c44395887b | ||
|
|
1ae81abf0a | ||
|
|
74b89098c5 | ||
|
|
ae46798d1d | ||
|
|
b502e999de | ||
|
|
57004ab848 | ||
|
|
fbd47025d6 | ||
|
|
f87d270caa | ||
|
|
2ccaf5f97c | ||
|
|
641c6f4595 | ||
|
|
eb1039d9f7 | ||
|
|
349d946e6f | ||
|
|
170e271bb4 | ||
|
|
adca755598 | ||
|
|
f58cbc64bb | ||
|
|
8d5e8c7ea8 | ||
|
|
411d61d251 | ||
|
|
e7556f7dfa | ||
|
|
3e0f07aa48 | ||
|
|
e5a90662eb | ||
|
|
9886376738 | ||
|
|
73603f6593 | ||
|
|
88bc6739ca | ||
|
|
a4e8e62452 | ||
|
|
78e45d095b | ||
|
|
834c67aeff | ||
|
|
23b798e392 | ||
|
|
bd374bf617 | ||
|
|
87d8bcdde5 | ||
|
|
a840d91379 | ||
|
|
0fcff6639f | ||
|
|
f607c9793d | ||
|
|
06254442c9 | ||
|
|
c5725a5850 | ||
|
|
dbad13c4e2 | ||
|
|
a274da80b7 | ||
|
|
66c05619df | ||
|
|
67c99dea2d | ||
|
|
c77b7f8c74 | ||
|
|
cc51fbe77e | ||
|
|
2e510f9dbb | ||
|
|
e12df98d12 | ||
|
|
d8402755ee | ||
|
|
614b704702 | ||
|
|
fb6e87b0a5 | ||
|
|
80baa31221 | ||
|
|
e2f1f56e06 | ||
|
|
8ed6aeb278 | ||
|
|
7123dc305f | ||
|
|
43cb632528 | ||
|
|
74c5b12a33 | ||
|
|
acebed10b0 | ||
|
|
21f5c36c05 | ||
|
|
35c297e0d1 | ||
|
|
e672890bd4 | ||
|
|
a3f2dc5e76 | ||
|
|
a19db4fd2d | ||
|
|
982d136151 | ||
|
|
377de59df9 | ||
|
|
b394fb1e86 | ||
|
|
a5171ce093 | ||
|
|
c5dbaccea8 | ||
|
|
0c9d1e91bb | ||
|
|
a1ee0cb5d0 | ||
|
|
a2d41247fe | ||
|
|
97bb38e4f3 | ||
|
|
8e8ae26828 | ||
|
|
e241e91a84 | ||
|
|
ea277cf972 | ||
|
|
046e7ac4c3 | ||
|
|
beea8d9edf | ||
|
|
1c928bb139 | ||
|
|
987e6ad4c6 | ||
|
|
b7732e53c6 | ||
|
|
bfb34cf236 | ||
|
|
50b9bebf98 | ||
|
|
e21624ed52 | ||
|
|
86a8085239 | ||
|
|
19c756a971 | ||
|
|
b76c6ed444 | ||
|
|
bd07342689 | ||
|
|
be1d7309fd | ||
|
|
9471fad7bb | ||
|
|
642bf60f45 | ||
|
|
7245e32876 | ||
|
|
dcc1a2dc51 | ||
|
|
2b3874d8e9 | ||
|
|
29f9c311d2 | ||
|
|
adae78e747 | ||
|
|
5b5f3233d8 | ||
|
|
e6889798ff | ||
|
|
a5ae6f7013 | ||
|
|
0ac2df8102 | ||
|
|
ec5e7607f0 | ||
|
|
7588026640 | ||
|
|
ad366ee928 | ||
|
|
1fc38e941e | ||
|
|
b80c4ed921 | ||
|
|
1de9634c44 | ||
|
|
d8386bfbe8 | ||
|
|
3a02ad7836 | ||
|
|
d36716bdb6 | ||
|
|
970f4b028d | ||
|
|
6077da0df8 | ||
|
|
e77e0c54f0 | ||
|
|
4040f8ba89 | ||
|
|
3ac0dfb2ad | ||
|
|
b8e4947adb | ||
|
|
d1f2dfca05 | ||
|
|
c6a9b48aa0 | ||
|
|
fd690592ba | ||
|
|
8a66ee7565 | ||
|
|
f42d375cc7 | ||
|
|
68beb0d419 | ||
|
|
50d2814044 | ||
|
|
8ddd27c258 | ||
|
|
ac78eada0a | ||
|
|
6b0395dec8 | ||
|
|
5bb1432450 | ||
|
|
dc854cbd10 | ||
|
|
3128f2dace | ||
|
|
6ba494999c | ||
|
|
050ff5d8cd | ||
|
|
9c8b0611ea | ||
|
|
777d5ab3b7 | ||
|
|
39fecb3ffe | ||
|
|
4cd0702cbb | ||
|
|
998688573d | ||
|
|
a6833f5a6f | ||
|
|
a162d697da | ||
|
|
f281e9691d | ||
|
|
cbc2ee3cd1 | ||
|
|
4f469d0d3c | ||
|
|
e77a49ace6 | ||
|
|
8bde2092c6 | ||
|
|
7edfaad04e | ||
|
|
ae5576f2a3 | ||
|
|
b934b2b6ca | ||
|
|
87648f340b | ||
|
|
679abc6e3e | ||
|
|
dd930261bf | ||
|
|
92a0faf475 | ||
|
|
3ce6b43018 | ||
|
|
220858926f | ||
|
|
d908a1b0d2 | ||
|
|
b361cc0630 | ||
|
|
cd3663e041 | ||
|
|
c53e927a55 | ||
|
|
7bbb15a535 | ||
|
|
0dddcbcfa1 | ||
|
|
3175b75192 | ||
|
|
6703b78457 | ||
|
|
7a61bbc297 | ||
|
|
dd6003172d | ||
|
|
338f3d536f | ||
|
|
27804384db | ||
|
|
7e5069c7d1 | ||
|
|
0a813f9b53 | ||
|
|
c79c21e965 | ||
|
|
0c0bcb87f9 | ||
|
|
f537852469 | ||
|
|
ff422d112b | ||
|
|
bf92280ed9 | ||
|
|
d1e57e85b6 | ||
|
|
f300b6c8a2 | ||
|
|
4c0addd929 | ||
|
|
a08bc79ae4 | ||
|
|
8ad00084e1 | ||
|
|
0d275b3259 | ||
|
|
ede4b99bcd | ||
|
|
e99748e45f | ||
|
|
114fdd6f91 | ||
|
|
245675d409 | ||
|
|
e156f0a2e8 | ||
|
|
519d76d809 | ||
|
|
b4fa70d1d5 | ||
|
|
3825fb24f4 | ||
|
|
79e51b543a | ||
|
|
54fe9dde70 | ||
|
|
d224ffd6d3 | ||
|
|
1e1a458add | ||
|
|
0844f60343 | ||
|
|
c8f9d6e6df | ||
|
|
95a392ccfa | ||
|
|
2972a23f19 | ||
|
|
f55a39eab6 | ||
|
|
8611328a03 | ||
|
|
08dc05c504 | ||
|
|
174f796b56 | ||
|
|
85949a0464 | ||
|
|
1b711e2c08 | ||
|
|
60ea415361 | ||
|
|
01613da38f | ||
|
|
d6e6e78acc | ||
|
|
0e5e439f69 | ||
|
|
fc78f68fa7 | ||
|
|
2f6d81ce2c | ||
|
|
08a600167a | ||
|
|
9779e706c5 | ||
|
|
b8e9d853e5 | ||
|
|
4041746240 | ||
|
|
c96a65b21d | ||
|
|
d67018b6d7 | ||
|
|
f7e47b5120 | ||
|
|
5bc28b63a6 | ||
|
|
62452b61b1 | ||
|
|
cb84e4c7b6 | ||
|
|
60ef816f0c | ||
|
|
d367cf9972 | ||
|
|
05973672e4 | ||
|
|
c4398e92e1 | ||
|
|
68b8ba691f | ||
|
|
d52cf455a9 | ||
|
|
fee822c689 | ||
|
|
228a1ad0da | ||
|
|
1ce42d1301 | ||
|
|
3d2a4d8c38 | ||
|
|
803164791f | ||
|
|
2b452a18df | ||
|
|
efcdac75e4 | ||
|
|
c30c9a7360 | ||
|
|
ce0da3fb80 | ||
|
|
728c20c184 | ||
|
|
e10475679b | ||
|
|
d9af0461ef | ||
|
|
2e4791d377 | ||
|
|
d1244e02db | ||
|
|
867d1841e9 | ||
|
|
3232900bdc | ||
|
|
077de9f539 | ||
|
|
b37f4bf0df | ||
|
|
64dd83e8fb | ||
|
|
5a615970c2 | ||
|
|
2a5cb85199 | ||
|
|
5f1f27a4f9 | ||
|
|
0d9f398de2 | ||
|
|
b0e84952c8 | ||
|
|
3df8cf3c13 | ||
|
|
975e5a89af | ||
|
|
7102615eaa | ||
|
|
68fa273c75 | ||
|
|
f8ecf0ec0b | ||
|
|
888aba0b04 | ||
|
|
2216136de3 | ||
|
|
4163c5534a | ||
|
|
3ddcaddd79 | ||
|
|
b029e0d790 | ||
|
|
6f2d51f3ff | ||
|
|
ecf8c4ffbe | ||
|
|
4b769da90b | ||
|
|
4247c8fdc6 | ||
|
|
7777cd5238 | ||
|
|
cb959e93f2 | ||
|
|
30979b460b | ||
|
|
901d1ecf4a | ||
|
|
c84a38f2b2 | ||
|
|
ed461bc22f | ||
|
|
28368e6e12 | ||
|
|
8247855330 | ||
|
|
7cd6237f16 | ||
|
|
ca9bdc337a | ||
|
|
e6d2394d54 | ||
|
|
3d43665603 | ||
|
|
f135ffbe49 | ||
|
|
3d99bc7166 | ||
|
|
3789edf53a | ||
|
|
4d57134aa2 | ||
|
|
e3d9a120cb | ||
|
|
043791fc91 | ||
|
|
33a37be378 | ||
|
|
32ce6e7a08 | ||
|
|
3046cfd6ee | ||
|
|
9758632bf0 | ||
|
|
0c7f926421 | ||
|
|
ab6fc9303b | ||
|
|
4e37a5f08e | ||
|
|
426b4dde54 | ||
|
|
d3cc79a28c | ||
|
|
b0a826aaca | ||
|
|
9c0e678e50 | ||
|
|
bbb2571215 | ||
|
|
d2a0d75906 | ||
|
|
e16dc941d2 | ||
|
|
fa61e7bacb | ||
|
|
439a182103 | ||
|
|
7eb478cc6a | ||
|
|
4341c1fbc8 | ||
|
|
e8039715e7 | ||
|
|
3cacfdfd6f | ||
|
|
7b2cd20cff | ||
|
|
79a5fab39e | ||
|
|
b03d687f75 | ||
|
|
61ec341c27 | ||
|
|
22835108be | ||
|
|
1e654fbcd6 | ||
|
|
49c4776dbd | ||
|
|
41c4bc69cc | ||
|
|
6eea921820 | ||
|
|
3d97b317f2 | ||
|
|
7ba24968d8 | ||
|
|
57046d714b | ||
|
|
0526445d3c | ||
|
|
b62d1a303c | ||
|
|
e25c5cc6c7 | ||
|
|
e761cd7c27 | ||
|
|
617548f6b6 | ||
|
|
2f93af4d6f | ||
|
|
c2504bb6db | ||
|
|
145f89eded | ||
|
|
6c0e4b6a48 | ||
|
|
87d1eefc86 | ||
|
|
a87ec6f2e7 | ||
|
|
a9d5478bcd | ||
|
|
5eae51a1b4 | ||
|
|
ac94ab6914 | ||
|
|
38673a85c9 | ||
|
|
d75951c869 | ||
|
|
67d36a9e28 | ||
|
|
de8e8915ff | ||
|
|
2161816ef4 | ||
|
|
d046bdec65 | ||
|
|
cddd7d1562 | ||
|
|
15a3104904 | ||
|
|
e1ca6eca0f | ||
|
|
cc0137bdc9 | ||
|
|
86a620bc08 | ||
|
|
3ba9c3b4a8 | ||
|
|
8dc5ada553 | ||
|
|
9fe744c545 | ||
|
|
cc29eb0f9b | ||
|
|
901edde634 | ||
|
|
44dd6d499d | ||
|
|
375f09cbaf | ||
|
|
d4e5a31de4 | ||
|
|
f3fa3864b2 | ||
|
|
1c978c2497 | ||
|
|
0f4ec2b3e2 | ||
|
|
e30b1abaa4 | ||
|
|
16cbee1fb2 | ||
|
|
56932f2b56 | ||
|
|
6a8f6b8370 | ||
|
|
7fa8e65015 | ||
|
|
4f50b8c7d5 | ||
|
|
eca85d9978 | ||
|
|
f0ea2eb39b | ||
|
|
4c5b229680 | ||
|
|
83251cbc43 | ||
|
|
c2f20cce32 | ||
|
|
ec5ab44519 | ||
|
|
ed6d21a05a | ||
|
|
a2f3913fe5 | ||
|
|
d66c0ef308 | ||
|
|
0f9f6746ed | ||
|
|
9b534a0dc1 | ||
|
|
1ce73c1238 | ||
|
|
3b5b7ca01d | ||
|
|
ce64a7816d | ||
|
|
37e095a93c | ||
|
|
300f6a103f | ||
|
|
e7cb5a6b92 | ||
|
|
67296fabf7 | ||
|
|
d868f7fb26 | ||
|
|
1555d98f7d | ||
|
|
3a02941b38 | ||
|
|
f25de1ffbe | ||
|
|
008e90324f | ||
|
|
73dcc2eb26 | ||
|
|
eae2540a31 | ||
|
|
2a7fc8edb6 | ||
|
|
cd67299b1d | ||
|
|
ff38008207 | ||
|
|
76e903a782 | ||
|
|
25698f5d9b | ||
|
|
c729731c7e | ||
|
|
9d877ec97a | ||
|
|
b4cead757d | ||
|
|
dcc2f28079 | ||
|
|
97aa00e18b | ||
|
|
f076581bed | ||
|
|
5d8f789791 | ||
|
|
4faabb7770 | ||
|
|
1cffff77bf | ||
|
|
8f9b3df681 | ||
|
|
449575e0f7 | ||
|
|
b7d47779d6 | ||
|
|
fe443c8a89 | ||
|
|
f01a772d8d | ||
|
|
76d068aa23 | ||
|
|
b151db0843 | ||
|
|
5a3f432d89 | ||
|
|
8dcef5ea9f | ||
|
|
05299952a9 | ||
|
|
5966b9ff23 | ||
|
|
1917c04baf | ||
|
|
4c20ac0b1c | ||
|
|
6bd548cc22 | ||
|
|
3e7f0ad0a8 | ||
|
|
785f72ecd6 | ||
|
|
62cdb1a797 | ||
|
|
24e17c4e4f | ||
|
|
d664c0166d | ||
|
|
05ebe821f2 | ||
|
|
6c4ac347db | ||
|
|
e8024ce341 | ||
|
|
afc17f41f6 | ||
|
|
49c80f0e0b | ||
|
|
10a6a3056a | ||
|
|
69af62cde0 | ||
|
|
0cc8b5def0 | ||
|
|
fc52e73153 | ||
|
|
ce67e460c6 | ||
|
|
85e5f4d2c0 | ||
|
|
6237afe3cd | ||
|
|
cfddb6f04e | ||
|
|
3bf1a77381 | ||
|
|
c4d430c62d | ||
|
|
d583ee2de3 | ||
|
|
406a381ef4 | ||
|
|
1d82308c43 | ||
|
|
5c1595b1fd | ||
|
|
667cfb999b | ||
|
|
f0b5954c54 | ||
|
|
9b0e817635 | ||
|
|
b93d9a6b6e | ||
|
|
5bb9117fde | ||
|
|
84d35c1a37 | ||
|
|
ba42e90502 | ||
|
|
10d1ec1bb2 | ||
|
|
d6ccd106e6 | ||
|
|
7f7eaea2b1 | ||
|
|
d33b1eb394 | ||
|
|
feb984649f | ||
|
|
aada49e548 | ||
|
|
7f3c34178b | ||
|
|
c79dd43105 | ||
|
|
cb53ff880d | ||
|
|
3d88b3c74b | ||
|
|
d3c66714c2 | ||
|
|
e8ca443697 | ||
|
|
94089113ef | ||
|
|
1847fc2060 | ||
|
|
7ca21b52a0 | ||
|
|
444beb4908 | ||
|
|
791869ca9e | ||
|
|
33c8406b8a | ||
|
|
b6212c4e98 | ||
|
|
fcd2409ee3 | ||
|
|
dad060d0c9 | ||
|
|
9444195de7 | ||
|
|
b25f3094b7 | ||
|
|
ec378a8fc5 | ||
|
|
9adf9a841c | ||
|
|
8bb8e011f3 | ||
|
|
3b66522a5e | ||
|
|
dd2b718974 | ||
|
|
50121153dd | ||
|
|
189b7e20db | ||
|
|
5e572a8c6a | ||
|
|
dd654fcd8d | ||
|
|
0f9a529647 | ||
|
|
5854adb806 | ||
|
|
c60c738c7e | ||
|
|
ec40d20e6a | ||
|
|
3e2b777c30 | ||
|
|
4a02981c09 | ||
|
|
3382ccc7bf | ||
|
|
581303c923 | ||
|
|
63dd79e23c | ||
|
|
2346230d36 | ||
|
|
1c451fb98a | ||
|
|
7eeb43a83b | ||
|
|
fa2188f087 | ||
|
|
df1b87e3ac | ||
|
|
62a0a44049 | ||
|
|
0ae25d2212 | ||
|
|
620e6012da | ||
|
|
330b17bff8 | ||
|
|
1969ce562a | ||
|
|
5ea15cc7eb | ||
|
|
88aa76bcab | ||
|
|
401120fa28 | ||
|
|
534113b303 | ||
|
|
53df7835d3 | ||
|
|
ee9afb7fa0 | ||
|
|
6163ab8c42 | ||
|
|
e73724a576 | ||
|
|
e71284d887 | ||
|
|
11d95b89e1 | ||
|
|
c75d2435fa | ||
|
|
050aa40e20 | ||
|
|
cb6d87302d | ||
|
|
f9e725bcf8 | ||
|
|
a56d622df7 | ||
|
|
4e2ffad70d | ||
|
|
7db3bde933 | ||
|
|
f63f24ac9d | ||
|
|
e7521fe30c | ||
|
|
f6579ac434 | ||
|
|
9c43d661be | ||
|
|
d2d8bff9f7 | ||
|
|
a1beb13094 | ||
|
|
37d66848d6 | ||
|
|
26c7f0b017 | ||
|
|
d058dbe9af | ||
|
|
c1c237402a | ||
|
|
bb20de6c24 | ||
|
|
8d7af7b01d | ||
|
|
fd1c122cd4 | ||
|
|
3925ba3eef | ||
|
|
4306072ca7 | ||
|
|
15fba23ad7 | ||
|
|
04753226e5 | ||
|
|
3fda97a9bd | ||
|
|
26afdd105f | ||
|
|
7c50251c37 | ||
|
|
3de9d07769 | ||
|
|
d60899e362 | ||
|
|
7c8019ac5b | ||
|
|
1258d0cf7d | ||
|
|
2264369e9e | ||
|
|
e18a8556c1 | ||
|
|
5436011f8e | ||
|
|
ce0fd3cec2 | ||
|
|
bd349f5abc | ||
|
|
7fdea613ff | ||
|
|
16beeb2e88 | ||
|
|
ae74f8ea83 | ||
|
|
88b748e67b | ||
|
|
3254069999 | ||
|
|
793102f3ad | ||
|
|
6f29bdf355 | ||
|
|
edf53c8a0f | ||
|
|
24859e33c1 | ||
|
|
ebcf4315f7 | ||
|
|
135e2bb10e | ||
|
|
72a256eccf | ||
|
|
1e991c0526 | ||
|
|
978e6b9dde | ||
|
|
a2acb3cbb7 | ||
|
|
623fcce3d1 | ||
|
|
c99ef4a549 | ||
|
|
c629ce6ef8 | ||
|
|
35743de0df | ||
|
|
5cf182cf98 | ||
|
|
01022546e8 | ||
|
|
4b9688af04 | ||
|
|
897b896c11 | ||
|
|
3600b46824 | ||
|
|
9266fe63b9 | ||
|
|
a3ea52968f | ||
|
|
a06f2aeb8b | ||
|
|
f4a56d4e19 | ||
|
|
f3f7ff5622 | ||
|
|
dbf016adaf | ||
|
|
0e5108bd08 | ||
|
|
cf1180faa9 | ||
|
|
1b25275b2e | ||
|
|
886c694db7 | ||
|
|
3d38a2aa14 | ||
|
|
51d879ba6f | ||
|
|
91ae9d75f7 | ||
|
|
42559364e4 | ||
|
|
c92860ae49 | ||
|
|
b012624b67 | ||
|
|
5f1d2f02ee | ||
|
|
46cb869237 | ||
|
|
054c497678 | ||
|
|
8362424976 | ||
|
|
f7a0dc00e8 | ||
|
|
e49c4655a6 | ||
|
|
1dcb3b1529 | ||
|
|
cc474f39d8 | ||
|
|
113d36f5dd | ||
|
|
63c0841c32 | ||
|
|
4739e2e3b2 | ||
|
|
aa316091e6 | ||
|
|
2297721228 | ||
|
|
5b8394d685 | ||
|
|
34fc30b8db | ||
|
|
6e575df40b | ||
|
|
2689b22674 | ||
|
|
5570f3bdcf | ||
|
|
cc7edbe3a7 | ||
|
|
c49e84efc6 | ||
|
|
98a4a8d8c6 | ||
|
|
5f73532d62 | ||
|
|
d52f9f2a92 | ||
|
|
1cee01a22a | ||
|
|
68dff71512 | ||
|
|
f92948d65c | ||
|
|
c4d771f2c6 | ||
|
|
566ffbdde2 | ||
|
|
5cf18ae17c | ||
|
|
4891721cc0 | ||
|
|
49b189e7a9 | ||
|
|
a9c5a3105f | ||
|
|
c13f5a9b04 | ||
|
|
12f805c020 | ||
|
|
c2a5f437fd | ||
|
|
1c986e2bf6 | ||
|
|
09fd1c7628 | ||
|
|
ecf44deecf | ||
|
|
5fb843268f | ||
|
|
ffb90c2b4b | ||
|
|
979fbe2e76 | ||
|
|
ea5564c6e6 | ||
|
|
6ab8750726 | ||
|
|
923eabd750 | ||
|
|
c52d6a6384 | ||
|
|
519b9648c6 | ||
|
|
b25fd6ca3a | ||
|
|
2bd8c215ff | ||
|
|
34e7901de9 | ||
|
|
30a191cedf | ||
|
|
128d8907c3 | ||
|
|
3b1d7d045e | ||
|
|
0ae9a29e0d | ||
|
|
f4b5ed73ad | ||
|
|
43166dbeb5 | ||
|
|
00b5aef890 | ||
|
|
1b7266f083 | ||
|
|
d1d4b47111 | ||
|
|
c90364bd76 | ||
|
|
6dc687ef43 | ||
|
|
0e31aab1ab | ||
|
|
b0030f89b7 | ||
|
|
9f0a0238cc | ||
|
|
dabdfaddec | ||
|
|
a8901e6dc8 | ||
|
|
ab901a5d32 | ||
|
|
56fc2d9b30 | ||
|
|
df45fa2e1e | ||
|
|
9a11fc13d7 | ||
|
|
d72a0d3c69 | ||
|
|
0be508ed70 | ||
|
|
37f3a9b19d | ||
|
|
81d2fbc057 | ||
|
|
1aecf66cbe | ||
|
|
fbe7d64e00 | ||
|
|
c9d151289c | ||
|
|
bba2f6db64 | ||
|
|
6725f81a00 | ||
|
|
8487c8cd03 |
@@ -1,6 +1,6 @@
|
|||||||
root = true
|
root = true
|
||||||
|
|
||||||
[*.{js,ts,.tsx}]
|
[*.{js,ts,tsx}]
|
||||||
charset = utf-8
|
charset = utf-8
|
||||||
end_of_line = lf
|
end_of_line = lf
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
|
|||||||
5
.github/actions/build-electron/action.yml
vendored
5
.github/actions/build-electron/action.yml
vendored
@@ -74,7 +74,7 @@ runs:
|
|||||||
|
|
||||||
- name: Update build info
|
- name: Update build info
|
||||||
shell: ${{ inputs.shell }}
|
shell: ${{ inputs.shell }}
|
||||||
run: npm run chore:update-build-info
|
run: pnpm run chore:update-build-info
|
||||||
|
|
||||||
# Critical debugging configuration
|
# Critical debugging configuration
|
||||||
- name: Run electron-forge build with enhanced logging
|
- name: Run electron-forge build with enhanced logging
|
||||||
@@ -86,7 +86,8 @@ runs:
|
|||||||
APPLE_ID_PASSWORD: ${{ env.APPLE_ID_PASSWORD }}
|
APPLE_ID_PASSWORD: ${{ env.APPLE_ID_PASSWORD }}
|
||||||
WINDOWS_SIGN_EXECUTABLE: ${{ env.WINDOWS_SIGN_EXECUTABLE }}
|
WINDOWS_SIGN_EXECUTABLE: ${{ env.WINDOWS_SIGN_EXECUTABLE }}
|
||||||
TRILIUM_ARTIFACT_NAME_HINT: TriliumNotes-${{ github.ref_name }}-${{ inputs.os }}-${{ inputs.arch }}
|
TRILIUM_ARTIFACT_NAME_HINT: TriliumNotes-${{ github.ref_name }}-${{ inputs.os }}-${{ inputs.arch }}
|
||||||
run: pnpm nx --project=desktop electron-forge:make -- --arch=${{ inputs.arch }} --platform=${{ inputs.forge_platform }}
|
TARGET_ARCH: ${{ inputs.arch }}
|
||||||
|
run: pnpm run --filter desktop electron-forge:make --arch=${{ inputs.arch }} --platform=${{ inputs.forge_platform }}
|
||||||
|
|
||||||
# Add DMG signing step
|
# Add DMG signing step
|
||||||
- name: Sign DMG
|
- name: Sign DMG
|
||||||
|
|||||||
4
.github/actions/build-server/action.yml
vendored
4
.github/actions/build-server/action.yml
vendored
@@ -10,7 +10,7 @@ runs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: pnpm/action-setup@v4
|
- uses: pnpm/action-setup@v4
|
||||||
- name: Set up node & dependencies
|
- name: Set up node & dependencies
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: 22
|
node-version: 22
|
||||||
cache: "pnpm"
|
cache: "pnpm"
|
||||||
@@ -23,7 +23,7 @@ runs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
pnpm run chore:update-build-info
|
pnpm run chore:update-build-info
|
||||||
pnpm nx --project=server package
|
pnpm run --filter server package
|
||||||
- name: Prepare artifacts
|
- name: Prepare artifacts
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
103
.github/actions/deploy-to-cloudflare-pages/action.yml
vendored
Normal file
103
.github/actions/deploy-to-cloudflare-pages/action.yml
vendored
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
name: "Deploy to Cloudflare Pages"
|
||||||
|
description: "Deploys to Cloudflare Pages on either a temporary branch with preview comment, or on the production version if on the main branch."
|
||||||
|
inputs:
|
||||||
|
project_name:
|
||||||
|
description: "CloudFlare Pages project name"
|
||||||
|
comment_body:
|
||||||
|
description: "The message to display when deployment is ready"
|
||||||
|
default: "Deployment is ready."
|
||||||
|
required: false
|
||||||
|
production_url:
|
||||||
|
description: "The URL to mention as the production URL."
|
||||||
|
required: true
|
||||||
|
deploy_dir:
|
||||||
|
description: "The directory from which to deploy."
|
||||||
|
required: true
|
||||||
|
cloudflare_api_token:
|
||||||
|
description: "The Cloudflare API token to use for deployment."
|
||||||
|
required: true
|
||||||
|
cloudflare_account_id:
|
||||||
|
description: "The Cloudflare account ID to use for deployment."
|
||||||
|
required: true
|
||||||
|
github_token:
|
||||||
|
description: "The GitHub token to use for posting PR comments."
|
||||||
|
required: true
|
||||||
|
runs:
|
||||||
|
using: composite
|
||||||
|
steps:
|
||||||
|
# Install wrangler globally to avoid workspace issues
|
||||||
|
- name: Install Wrangler
|
||||||
|
shell: bash
|
||||||
|
run: npm install -g wrangler
|
||||||
|
|
||||||
|
# Deploy using Wrangler (use pre-installed wrangler)
|
||||||
|
- name: Deploy to Cloudflare Pages
|
||||||
|
id: deploy
|
||||||
|
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
|
||||||
|
uses: cloudflare/wrangler-action@v3
|
||||||
|
with:
|
||||||
|
apiToken: ${{ inputs.cloudflare_api_token }}
|
||||||
|
accountId: ${{ inputs.cloudflare_account_id }}
|
||||||
|
command: pages deploy ${{ inputs.deploy_dir }} --project-name=${{ inputs.project_name}} --branch=${{ github.ref_name }}
|
||||||
|
wranglerVersion: '' # Use pre-installed version
|
||||||
|
|
||||||
|
# Deploy preview for PRs
|
||||||
|
- name: Deploy Preview to Cloudflare Pages
|
||||||
|
id: preview-deployment
|
||||||
|
if: github.event_name == 'pull_request'
|
||||||
|
uses: cloudflare/wrangler-action@v3
|
||||||
|
with:
|
||||||
|
apiToken: ${{ inputs.cloudflare_api_token }}
|
||||||
|
accountId: ${{ inputs.cloudflare_account_id }}
|
||||||
|
command: pages deploy ${{ inputs.deploy_dir }} --project-name=${{ inputs.project_name}} --branch=pr-${{ github.event.pull_request.number }}
|
||||||
|
wranglerVersion: '' # Use pre-installed version
|
||||||
|
|
||||||
|
# Post deployment URL as PR comment
|
||||||
|
- name: Comment PR with Preview URL
|
||||||
|
if: github.event_name == 'pull_request'
|
||||||
|
uses: actions/github-script@v8
|
||||||
|
env:
|
||||||
|
COMMENT_BODY: ${{ inputs.comment_body }}
|
||||||
|
PRODUCTION_URL: ${{ inputs.production_url }}
|
||||||
|
PROJECT_NAME: ${{ inputs.project_name }}
|
||||||
|
with:
|
||||||
|
github-token: ${{ inputs.github_token }}
|
||||||
|
script: |
|
||||||
|
const prNumber = context.issue.number;
|
||||||
|
// Construct preview URL based on Cloudflare Pages pattern
|
||||||
|
const projectName = process.env.PROJECT_NAME;
|
||||||
|
const previewUrl = `https://pr-${prNumber}.${projectName}.pages.dev`;
|
||||||
|
|
||||||
|
// Check if we already commented
|
||||||
|
const comments = await github.rest.issues.listComments({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: prNumber
|
||||||
|
});
|
||||||
|
|
||||||
|
const customMessage = process.env.COMMENT_BODY;
|
||||||
|
const botComment = comments.data.find(comment =>
|
||||||
|
comment.user.type === 'Bot' &&
|
||||||
|
comment.body.includes(customMessage)
|
||||||
|
);
|
||||||
|
|
||||||
|
const mainUrl = process.env.PRODUCTION_URL;
|
||||||
|
const commentBody = `${customMessage}!\n\n🔗 Preview URL: ${previewUrl}\n📖 Production URL: ${mainUrl}\n\n✅ All checks passed\n\n_This preview will be updated automatically with new commits._`;
|
||||||
|
|
||||||
|
if (botComment) {
|
||||||
|
// Update existing comment
|
||||||
|
await github.rest.issues.updateComment({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
comment_id: botComment.id,
|
||||||
|
body: commentBody
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Create new comment
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
issue_number: prNumber,
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
body: commentBody
|
||||||
|
});
|
||||||
|
}
|
||||||
40
.github/instructions/nx.instructions.md
vendored
40
.github/instructions/nx.instructions.md
vendored
@@ -1,40 +0,0 @@
|
|||||||
---
|
|
||||||
applyTo: '**'
|
|
||||||
---
|
|
||||||
|
|
||||||
// This file is automatically generated by Nx Console
|
|
||||||
|
|
||||||
You are in an nx workspace using Nx 21.3.9 and pnpm as the package manager.
|
|
||||||
|
|
||||||
You have access to the Nx MCP server and the tools it provides. Use them. Follow these guidelines in order to best help the user:
|
|
||||||
|
|
||||||
# General Guidelines
|
|
||||||
- When answering questions, use the nx_workspace tool first to gain an understanding of the workspace architecture
|
|
||||||
- For questions around nx configuration, best practices or if you're unsure, use the nx_docs tool to get relevant, up-to-date docs!! Always use this instead of assuming things about nx configuration
|
|
||||||
- If the user needs help with an Nx configuration or project graph error, use the 'nx_workspace' tool to get any errors
|
|
||||||
- To help answer questions about the workspace structure or simply help with demonstrating how tasks depend on each other, use the 'nx_visualize_graph' tool
|
|
||||||
|
|
||||||
# Generation Guidelines
|
|
||||||
If the user wants to generate something, use the following flow:
|
|
||||||
|
|
||||||
- learn about the nx workspace and any specifics the user needs by using the 'nx_workspace' tool and the 'nx_project_details' tool if applicable
|
|
||||||
- get the available generators using the 'nx_generators' tool
|
|
||||||
- decide which generator to use. If no generators seem relevant, check the 'nx_available_plugins' tool to see if the user could install a plugin to help them
|
|
||||||
- get generator details using the 'nx_generator_schema' tool
|
|
||||||
- you may use the 'nx_docs' tool to learn more about a specific generator or technology if you're unsure
|
|
||||||
- decide which options to provide in order to best complete the user's request. Don't make any assumptions and keep the options minimalistic
|
|
||||||
- open the generator UI using the 'nx_open_generate_ui' tool
|
|
||||||
- wait for the user to finish the generator
|
|
||||||
- read the generator log file using the 'nx_read_generator_log' tool
|
|
||||||
- use the information provided in the log file to answer the user's question or continue with what they were doing
|
|
||||||
|
|
||||||
# Running Tasks Guidelines
|
|
||||||
If the user wants help with tasks or commands (which include keywords like "test", "build", "lint", or other similar actions), use the following flow:
|
|
||||||
- Use the 'nx_current_running_tasks_details' tool to get the list of tasks (this can include tasks that were completed, stopped or failed).
|
|
||||||
- If there are any tasks, ask the user if they would like help with a specific task then use the 'nx_current_running_task_output' tool to get the terminal output for that task/command
|
|
||||||
- Use the terminal output from 'nx_current_running_task_output' to see what's wrong and help the user fix their problem. Use the appropriate tools if necessary
|
|
||||||
- If the user would like to rerun the task or command, always use `nx run <taskId>` to rerun in the terminal. This will ensure that the task will run in the nx context and will be run the same way it originally executed
|
|
||||||
- If the task was marked as "continuous" do not offer to rerun the task. This task is already running and the user can see the output in the terminal. You can use 'nx_current_running_task_output' to get the output of the task to verify the output.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
128
.github/workflows/deploy-docs.yml
vendored
Normal file
128
.github/workflows/deploy-docs.yml
vendored
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
# GitHub Actions workflow for deploying MkDocs documentation to Cloudflare Pages
|
||||||
|
# This workflow builds and deploys your MkDocs site when changes are pushed to main
|
||||||
|
name: Deploy MkDocs Documentation
|
||||||
|
|
||||||
|
on:
|
||||||
|
# Trigger on push to main branch
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master # Also support master branch
|
||||||
|
# Only run when docs files change
|
||||||
|
paths:
|
||||||
|
- 'docs/**'
|
||||||
|
- 'README.md' # README is synced to docs/index.md
|
||||||
|
- 'mkdocs.yml'
|
||||||
|
- 'requirements-docs.txt'
|
||||||
|
- '.github/workflows/deploy-docs.yml'
|
||||||
|
- 'scripts/fix-mkdocs-structure.ts'
|
||||||
|
|
||||||
|
# Allow manual triggering from Actions tab
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
# Run on pull requests for preview deployments
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
paths:
|
||||||
|
- 'docs/**'
|
||||||
|
- 'README.md' # README is synced to docs/index.md
|
||||||
|
- 'mkdocs.yml'
|
||||||
|
- 'requirements-docs.txt'
|
||||||
|
- '.github/workflows/deploy-docs.yml'
|
||||||
|
- 'scripts/fix-mkdocs-structure.ts'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-deploy:
|
||||||
|
name: Build and Deploy MkDocs
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 10
|
||||||
|
|
||||||
|
# Required permissions for deployment
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
deployments: write
|
||||||
|
pull-requests: write # For PR preview comments
|
||||||
|
id-token: write # For OIDC authentication (if needed)
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout Repository
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
with:
|
||||||
|
fetch-depth: 0 # Fetch all history for git info and mkdocs-git-revision-date plugin
|
||||||
|
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v6
|
||||||
|
with:
|
||||||
|
python-version: '3.13'
|
||||||
|
cache: 'pip'
|
||||||
|
cache-dependency-path: 'requirements-docs.txt'
|
||||||
|
|
||||||
|
- name: Install MkDocs and Dependencies
|
||||||
|
run: |
|
||||||
|
pip install --upgrade pip
|
||||||
|
pip install -r requirements-docs.txt
|
||||||
|
env:
|
||||||
|
PIP_DISABLE_PIP_VERSION_CHECK: 1
|
||||||
|
|
||||||
|
# Setup pnpm before fixing docs structure
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@v4
|
||||||
|
|
||||||
|
# Setup Node.js with pnpm
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v5
|
||||||
|
with:
|
||||||
|
node-version: '22'
|
||||||
|
cache: 'pnpm'
|
||||||
|
|
||||||
|
# Install Node.js dependencies for the TypeScript script
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: |
|
||||||
|
pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
- name: Fix Documentation Structure
|
||||||
|
run: |
|
||||||
|
# Fix duplicate navigation entries by moving overview pages to index.md
|
||||||
|
pnpm run chore:fix-mkdocs-structure
|
||||||
|
|
||||||
|
- name: Build MkDocs Site
|
||||||
|
run: |
|
||||||
|
# Build with strict mode but allow expected warnings
|
||||||
|
mkdocs build --verbose || {
|
||||||
|
EXIT_CODE=$?
|
||||||
|
# Check if the only issue is expected warnings
|
||||||
|
if mkdocs build 2>&1 | grep -E "WARNING.*(README|not found)" && \
|
||||||
|
[ $(mkdocs build 2>&1 | grep -c "ERROR") -eq 0 ]; then
|
||||||
|
echo "✅ Build succeeded with expected warnings"
|
||||||
|
mkdocs build --verbose
|
||||||
|
else
|
||||||
|
echo "❌ Build failed with unexpected errors"
|
||||||
|
exit $EXIT_CODE
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
- name: Fix HTML Links
|
||||||
|
run: |
|
||||||
|
# Remove .md extensions from links in generated HTML
|
||||||
|
pnpm tsx ./scripts/fix-html-links.ts site
|
||||||
|
|
||||||
|
- name: Validate Built Site
|
||||||
|
run: |
|
||||||
|
# Basic validation that important files exist
|
||||||
|
test -f site/index.html || (echo "ERROR: site/index.html not found" && exit 1)
|
||||||
|
test -f site/sitemap.xml || (echo "ERROR: site/sitemap.xml not found" && exit 1)
|
||||||
|
test -d site/assets || (echo "ERROR: site/assets directory not found" && exit 1)
|
||||||
|
echo "✅ Site validation passed"
|
||||||
|
|
||||||
|
- name: Deploy
|
||||||
|
uses: ./.github/actions/deploy-to-cloudflare-pages
|
||||||
|
with:
|
||||||
|
project_name: "trilium-docs"
|
||||||
|
comment_body: "📚 Documentation preview is ready"
|
||||||
|
production_url: "https://docs.triliumnotes.org"
|
||||||
|
deploy_dir: "site"
|
||||||
|
cloudflare_api_token: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||||
|
cloudflare_account_id: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
37
.github/workflows/dev.yml
vendored
37
.github/workflows/dev.yml
vendored
@@ -19,45 +19,24 @@ permissions:
|
|||||||
pull-requests: write # for PR comments
|
pull-requests: write # for PR comments
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check-affected:
|
|
||||||
name: Check affected jobs (NX)
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout the repository
|
|
||||||
uses: actions/checkout@v5
|
|
||||||
with:
|
|
||||||
fetch-depth: 0 # needed for https://github.com/marketplace/actions/nx-set-shas
|
|
||||||
|
|
||||||
- uses: pnpm/action-setup@v4
|
|
||||||
- name: Set up node & dependencies
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 22
|
|
||||||
cache: 'pnpm'
|
|
||||||
- name: Install dependencies
|
|
||||||
run: pnpm install --frozen-lockfile
|
|
||||||
|
|
||||||
- uses: nrwl/nx-set-shas@v4
|
|
||||||
- name: Check affected
|
|
||||||
run: pnpm nx affected --verbose -t typecheck build rebuild-deps test-build
|
|
||||||
|
|
||||||
test_dev:
|
test_dev:
|
||||||
name: Test development
|
name: Test development
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs:
|
|
||||||
- check-affected
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout the repository
|
- name: Checkout the repository
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- uses: pnpm/action-setup@v4
|
- uses: pnpm/action-setup@v4
|
||||||
- name: Set up node & dependencies
|
- name: Set up node & dependencies
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: 22
|
node-version: 22
|
||||||
cache: "pnpm"
|
cache: "pnpm"
|
||||||
- run: pnpm install --frozen-lockfile
|
- run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
- name: Typecheck
|
||||||
|
run: pnpm typecheck
|
||||||
|
|
||||||
- name: Run the unit tests
|
- name: Run the unit tests
|
||||||
run: pnpm run test:all
|
run: pnpm run test:all
|
||||||
|
|
||||||
@@ -66,7 +45,6 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs:
|
needs:
|
||||||
- test_dev
|
- test_dev
|
||||||
- check-affected
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v5
|
||||||
- uses: pnpm/action-setup@v4
|
- uses: pnpm/action-setup@v4
|
||||||
@@ -75,7 +53,7 @@ jobs:
|
|||||||
- name: Update build info
|
- name: Update build info
|
||||||
run: pnpm run chore:update-build-info
|
run: pnpm run chore:update-build-info
|
||||||
- name: Trigger client build
|
- name: Trigger client build
|
||||||
run: pnpm nx run client:build
|
run: pnpm client:build
|
||||||
- name: Send client bundle stats to RelativeCI
|
- name: Send client bundle stats to RelativeCI
|
||||||
if: false
|
if: false
|
||||||
uses: relative-ci/agent-action@v3
|
uses: relative-ci/agent-action@v3
|
||||||
@@ -83,7 +61,7 @@ jobs:
|
|||||||
webpackStatsFile: ./apps/client/dist/webpack-stats.json
|
webpackStatsFile: ./apps/client/dist/webpack-stats.json
|
||||||
key: ${{ secrets.RELATIVE_CI_CLIENT_KEY }}
|
key: ${{ secrets.RELATIVE_CI_CLIENT_KEY }}
|
||||||
- name: Trigger server build
|
- name: Trigger server build
|
||||||
run: pnpm nx run server:build
|
run: pnpm run server:build
|
||||||
- uses: docker/setup-buildx-action@v3
|
- uses: docker/setup-buildx-action@v3
|
||||||
- uses: docker/build-push-action@v6
|
- uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
@@ -95,7 +73,6 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs:
|
needs:
|
||||||
- build_docker
|
- build_docker
|
||||||
- check-affected
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
@@ -112,7 +89,7 @@ jobs:
|
|||||||
- name: Update build info
|
- name: Update build info
|
||||||
run: pnpm run chore:update-build-info
|
run: pnpm run chore:update-build-info
|
||||||
- name: Trigger build
|
- name: Trigger build
|
||||||
run: pnpm nx run server:build
|
run: pnpm server:build
|
||||||
|
|
||||||
- name: Set IMAGE_NAME to lowercase
|
- name: Set IMAGE_NAME to lowercase
|
||||||
run: echo "IMAGE_NAME=${IMAGE_NAME,,}" >> $GITHUB_ENV
|
run: echo "IMAGE_NAME=${IMAGE_NAME,,}" >> $GITHUB_ENV
|
||||||
|
|||||||
14
.github/workflows/main-docker.yml
vendored
14
.github/workflows/main-docker.yml
vendored
@@ -44,7 +44,7 @@ jobs:
|
|||||||
|
|
||||||
- uses: pnpm/action-setup@v4
|
- uses: pnpm/action-setup@v4
|
||||||
- name: Set up node & dependencies
|
- name: Set up node & dependencies
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: 22
|
node-version: 22
|
||||||
cache: "pnpm"
|
cache: "pnpm"
|
||||||
@@ -82,7 +82,7 @@ jobs:
|
|||||||
require-healthy: true
|
require-healthy: true
|
||||||
|
|
||||||
- name: Run Playwright tests
|
- name: Run Playwright tests
|
||||||
run: TRILIUM_DOCKER=1 TRILIUM_PORT=8082 pnpm exec nx run server-e2e:e2e
|
run: TRILIUM_DOCKER=1 TRILIUM_PORT=8082 pnpm --filter=server-e2e e2e
|
||||||
|
|
||||||
- name: Upload Playwright trace
|
- name: Upload Playwright trace
|
||||||
if: failure()
|
if: failure()
|
||||||
@@ -144,7 +144,7 @@ jobs:
|
|||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v5
|
||||||
- uses: pnpm/action-setup@v4
|
- uses: pnpm/action-setup@v4
|
||||||
- name: Set up node & dependencies
|
- name: Set up node & dependencies
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: 22
|
node-version: 22
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -152,12 +152,12 @@ jobs:
|
|||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install --frozen-lockfile
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
- name: Run the TypeScript build
|
|
||||||
run: pnpm run server:build
|
|
||||||
|
|
||||||
- name: Update build info
|
- name: Update build info
|
||||||
run: pnpm run chore:update-build-info
|
run: pnpm run chore:update-build-info
|
||||||
|
|
||||||
|
- name: Run the TypeScript build
|
||||||
|
run: pnpm run server:build
|
||||||
|
|
||||||
- name: Docker meta
|
- name: Docker meta
|
||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@v5
|
uses: docker/metadata-action@v5
|
||||||
@@ -211,7 +211,7 @@ jobs:
|
|||||||
- name: Upload digest
|
- name: Upload digest
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: digests-${{ env.PLATFORM_PAIR }}
|
name: digests-${{ env.PLATFORM_PAIR }}-${{ matrix.dockerfile }}
|
||||||
path: /tmp/digests/*
|
path: /tmp/digests/*
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
|
|||||||
8
.github/workflows/nightly.yml
vendored
8
.github/workflows/nightly.yml
vendored
@@ -19,7 +19,6 @@ concurrency:
|
|||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
env:
|
env:
|
||||||
GITHUB_UPLOAD_URL: https://uploads.github.com/repos/TriliumNext/Notes/releases/179589950/assets{?name,label}
|
|
||||||
GITHUB_RELEASE_ID: 179589950
|
GITHUB_RELEASE_ID: 179589950
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
@@ -51,13 +50,12 @@ jobs:
|
|||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v5
|
||||||
- uses: pnpm/action-setup@v4
|
- uses: pnpm/action-setup@v4
|
||||||
- name: Set up node & dependencies
|
- name: Set up node & dependencies
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: 22
|
node-version: 22
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install --frozen-lockfile
|
run: pnpm install --frozen-lockfile
|
||||||
- uses: nrwl/nx-set-shas@v4
|
|
||||||
- name: Update nightly version
|
- name: Update nightly version
|
||||||
run: npm run chore:ci-update-nightly-version
|
run: npm run chore:ci-update-nightly-version
|
||||||
- name: Run the build
|
- name: Run the build
|
||||||
@@ -79,7 +77,7 @@ jobs:
|
|||||||
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGN_KEY }}
|
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGN_KEY }}
|
||||||
|
|
||||||
- name: Publish release
|
- name: Publish release
|
||||||
uses: softprops/action-gh-release@v2.3.2
|
uses: softprops/action-gh-release@v2.3.4
|
||||||
if: ${{ github.event_name != 'pull_request' }}
|
if: ${{ github.event_name != 'pull_request' }}
|
||||||
with:
|
with:
|
||||||
make_latest: false
|
make_latest: false
|
||||||
@@ -120,7 +118,7 @@ jobs:
|
|||||||
arch: ${{ matrix.arch }}
|
arch: ${{ matrix.arch }}
|
||||||
|
|
||||||
- name: Publish release
|
- name: Publish release
|
||||||
uses: softprops/action-gh-release@v2.3.2
|
uses: softprops/action-gh-release@v2.3.4
|
||||||
if: ${{ github.event_name != 'pull_request' }}
|
if: ${{ github.event_name != 'pull_request' }}
|
||||||
with:
|
with:
|
||||||
make_latest: false
|
make_latest: false
|
||||||
|
|||||||
24
.github/workflows/playwright.yml
vendored
24
.github/workflows/playwright.yml
vendored
@@ -4,6 +4,8 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
|
paths-ignore:
|
||||||
|
- "apps/website/**"
|
||||||
pull_request:
|
pull_request:
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
@@ -19,14 +21,8 @@ jobs:
|
|||||||
filter: tree:0
|
filter: tree:0
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
# This enables task distribution via Nx Cloud
|
|
||||||
# Run this command as early as possible, before dependencies are installed
|
|
||||||
# Learn more at https://nx.dev/ci/reference/nx-cloud-cli#npx-nxcloud-startcirun
|
|
||||||
# Connect your workspace by running "nx connect" and uncomment this line to enable task distribution
|
|
||||||
# - run: npx nx-cloud start-ci-run --distribute-on="3 linux-medium-js" --stop-agents-after="e2e-ci"
|
|
||||||
|
|
||||||
- uses: pnpm/action-setup@v4
|
- uses: pnpm/action-setup@v4
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: 22
|
node-version: 22
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -34,10 +30,12 @@ jobs:
|
|||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install --frozen-lockfile
|
run: pnpm install --frozen-lockfile
|
||||||
- run: pnpm exec playwright install --with-deps
|
- run: pnpm exec playwright install --with-deps
|
||||||
- uses: nrwl/nx-set-shas@v4
|
|
||||||
|
|
||||||
# Prepend any command with "nx-cloud record --" to record its logs to Nx Cloud
|
- run: pnpm --filter server-e2e e2e
|
||||||
# - run: npx nx-cloud record -- echo Hello World
|
|
||||||
# Nx Affected runs only tasks affected by the changes in this PR/commit. Learn more: https://nx.dev/ci/features/affected
|
- name: Upload test report
|
||||||
# When you enable task distribution, run the e2e-ci task instead of e2e
|
if: failure()
|
||||||
- run: pnpm exec nx affected -t e2e --exclude desktop-e2e
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: e2e report
|
||||||
|
path: apps/server-e2e/test-output
|
||||||
|
|||||||
18
.github/workflows/release.yml
vendored
18
.github/workflows/release.yml
vendored
@@ -30,18 +30,30 @@ jobs:
|
|||||||
image: win-signing
|
image: win-signing
|
||||||
shell: cmd
|
shell: cmd
|
||||||
forge_platform: win32
|
forge_platform: win32
|
||||||
|
# Exclude ARM64 Linux from default matrix to use native runner
|
||||||
|
exclude:
|
||||||
|
- arch: arm64
|
||||||
|
os:
|
||||||
|
name: linux
|
||||||
|
# Add ARM64 Linux with native ubuntu-24.04-arm runner for better-sqlite3 compatibility
|
||||||
|
include:
|
||||||
|
- arch: arm64
|
||||||
|
os:
|
||||||
|
name: linux
|
||||||
|
image: ubuntu-24.04-arm
|
||||||
|
shell: bash
|
||||||
|
forge_platform: linux
|
||||||
runs-on: ${{ matrix.os.image }}
|
runs-on: ${{ matrix.os.image }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v5
|
||||||
- uses: pnpm/action-setup@v4
|
- uses: pnpm/action-setup@v4
|
||||||
- name: Set up node & dependencies
|
- name: Set up node & dependencies
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: 22
|
node-version: 22
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install --frozen-lockfile
|
run: pnpm install --frozen-lockfile
|
||||||
- uses: nrwl/nx-set-shas@v4
|
|
||||||
- name: Run the build
|
- name: Run the build
|
||||||
uses: ./.github/actions/build-electron
|
uses: ./.github/actions/build-electron
|
||||||
with:
|
with:
|
||||||
@@ -115,7 +127,7 @@ jobs:
|
|||||||
path: upload
|
path: upload
|
||||||
|
|
||||||
- name: Publish stable release
|
- name: Publish stable release
|
||||||
uses: softprops/action-gh-release@v2.3.2
|
uses: softprops/action-gh-release@v2.3.4
|
||||||
with:
|
with:
|
||||||
draft: false
|
draft: false
|
||||||
body_path: docs/Release Notes/Release Notes/${{ github.ref_name }}.md
|
body_path: docs/Release Notes/Release Notes/${{ github.ref_name }}.md
|
||||||
|
|||||||
48
.github/workflows/website.yml
vendored
Normal file
48
.github/workflows/website.yml
vendored
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
name: Deploy website
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- "apps/website/**"
|
||||||
|
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- "apps/website/**"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Build & deploy website
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
deployments: write
|
||||||
|
pull-requests: write # For PR preview comments
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- uses: pnpm/action-setup@v4
|
||||||
|
- name: Set up node & dependencies
|
||||||
|
uses: actions/setup-node@v5
|
||||||
|
with:
|
||||||
|
node-version: 22
|
||||||
|
cache: "pnpm"
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pnpm install --filter website --frozen-lockfile
|
||||||
|
|
||||||
|
- name: Build the website
|
||||||
|
run: pnpm website:build
|
||||||
|
|
||||||
|
- name: Deploy
|
||||||
|
uses: ./.github/actions/deploy-to-cloudflare-pages
|
||||||
|
with:
|
||||||
|
project_name: "trilium-homepage"
|
||||||
|
comment_body: "📚 Website preview is ready"
|
||||||
|
production_url: "https://triliumnotes.org"
|
||||||
|
deploy_dir: "apps/website/dist"
|
||||||
|
cloudflare_api_token: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||||
|
cloudflare_account_id: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
11
.gitignore
vendored
11
.gitignore
vendored
@@ -1,4 +1,5 @@
|
|||||||
# See https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files for more about ignoring files.
|
# See https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files for more about ignoring files.
|
||||||
|
/.cache
|
||||||
|
|
||||||
# compiled output
|
# compiled output
|
||||||
dist
|
dist
|
||||||
@@ -32,14 +33,11 @@ testem.log
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
|
|
||||||
.nx/cache
|
|
||||||
.nx/workspace-data
|
|
||||||
|
|
||||||
vite.config.*.timestamp*
|
vite.config.*.timestamp*
|
||||||
vitest.config.*.timestamp*
|
vitest.config.*.timestamp*
|
||||||
test-output
|
test-output
|
||||||
|
|
||||||
apps/*/data
|
apps/*/data*
|
||||||
apps/*/out
|
apps/*/out
|
||||||
upload
|
upload
|
||||||
|
|
||||||
@@ -47,4 +45,7 @@ upload
|
|||||||
*.tsbuildinfo
|
*.tsbuildinfo
|
||||||
|
|
||||||
/result
|
/result
|
||||||
.svelte-kit
|
.svelte-kit
|
||||||
|
|
||||||
|
# docs
|
||||||
|
site/
|
||||||
|
|||||||
1
.vscode/extensions.json
vendored
1
.vscode/extensions.json
vendored
@@ -5,7 +5,6 @@
|
|||||||
"lokalise.i18n-ally",
|
"lokalise.i18n-ally",
|
||||||
"ms-azuretools.vscode-docker",
|
"ms-azuretools.vscode-docker",
|
||||||
"ms-playwright.playwright",
|
"ms-playwright.playwright",
|
||||||
"nrwl.angular-console",
|
|
||||||
"redhat.vscode-yaml",
|
"redhat.vscode-yaml",
|
||||||
"tobermory.es6-string-html",
|
"tobermory.es6-string-html",
|
||||||
"vitest.explorer",
|
"vitest.explorer",
|
||||||
|
|||||||
8
.vscode/mcp.json
vendored
8
.vscode/mcp.json
vendored
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"servers": {
|
|
||||||
"nx-mcp": {
|
|
||||||
"type": "http",
|
|
||||||
"url": "http://localhost:9461/mcp"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@@ -35,6 +35,5 @@
|
|||||||
"docs/**/*.png": true,
|
"docs/**/*.png": true,
|
||||||
"apps/server/src/assets/doc_notes/**": true,
|
"apps/server/src/assets/doc_notes/**": true,
|
||||||
"apps/edit-docs/demo/**": true
|
"apps/edit-docs/demo/**": true
|
||||||
},
|
}
|
||||||
"nxConsole.generateAiAgentRules": true
|
|
||||||
}
|
}
|
||||||
13
CLAUDE.md
13
CLAUDE.md
@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
|||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
Trilium Notes is a hierarchical note-taking application with advanced features like synchronization, scripting, and rich text editing. It's built as a TypeScript monorepo using NX, with multiple applications and shared packages.
|
Trilium Notes is a hierarchical note-taking application with advanced features like synchronization, scripting, and rich text editing. It's built as a TypeScript monorepo using pnpm, with multiple applications and shared packages.
|
||||||
|
|
||||||
## Development Commands
|
## Development Commands
|
||||||
|
|
||||||
@@ -14,12 +14,9 @@ Trilium Notes is a hierarchical note-taking application with advanced features l
|
|||||||
|
|
||||||
### Running Applications
|
### Running Applications
|
||||||
- `pnpm run server:start` - Start development server (http://localhost:8080)
|
- `pnpm run server:start` - Start development server (http://localhost:8080)
|
||||||
- `pnpm nx run server:serve` - Alternative server start command
|
|
||||||
- `pnpm nx run desktop:serve` - Run desktop Electron app
|
|
||||||
- `pnpm run server:start-prod` - Run server in production mode
|
- `pnpm run server:start-prod` - Run server in production mode
|
||||||
|
|
||||||
### Building
|
### Building
|
||||||
- `pnpm nx build <project>` - Build specific project (server, client, desktop, etc.)
|
|
||||||
- `pnpm run client:build` - Build client application
|
- `pnpm run client:build` - Build client application
|
||||||
- `pnpm run server:build` - Build server application
|
- `pnpm run server:build` - Build server application
|
||||||
- `pnpm run electron:build` - Build desktop application
|
- `pnpm run electron:build` - Build desktop application
|
||||||
@@ -28,13 +25,8 @@ Trilium Notes is a hierarchical note-taking application with advanced features l
|
|||||||
- `pnpm test:all` - Run all tests (parallel + sequential)
|
- `pnpm test:all` - Run all tests (parallel + sequential)
|
||||||
- `pnpm test:parallel` - Run tests that can run in parallel
|
- `pnpm test:parallel` - Run tests that can run in parallel
|
||||||
- `pnpm test:sequential` - Run tests that must run sequentially (server, ckeditor5-mermaid, ckeditor5-math)
|
- `pnpm test:sequential` - Run tests that must run sequentially (server, ckeditor5-mermaid, ckeditor5-math)
|
||||||
- `pnpm nx test <project>` - Run tests for specific project
|
|
||||||
- `pnpm coverage` - Generate coverage reports
|
- `pnpm coverage` - Generate coverage reports
|
||||||
|
|
||||||
### Linting & Type Checking
|
|
||||||
- `pnpm nx run <project>:lint` - Lint specific project
|
|
||||||
- `pnpm nx run <project>:typecheck` - Type check specific project
|
|
||||||
|
|
||||||
## Architecture Overview
|
## Architecture Overview
|
||||||
|
|
||||||
### Monorepo Structure
|
### Monorepo Structure
|
||||||
@@ -94,7 +86,6 @@ Frontend uses a widget system (`apps/client/src/widgets/`):
|
|||||||
- `apps/server/src/assets/db/schema.sql` - Core database structure
|
- `apps/server/src/assets/db/schema.sql` - Core database structure
|
||||||
|
|
||||||
4. **Configuration**:
|
4. **Configuration**:
|
||||||
- `nx.json` - NX workspace configuration
|
|
||||||
- `package.json` - Project dependencies and scripts
|
- `package.json` - Project dependencies and scripts
|
||||||
|
|
||||||
## Note Types and Features
|
## Note Types and Features
|
||||||
@@ -154,7 +145,7 @@ Trilium provides powerful user scripting capabilities:
|
|||||||
- Update schema in `apps/server/src/assets/db/schema.sql`
|
- Update schema in `apps/server/src/assets/db/schema.sql`
|
||||||
|
|
||||||
## Build System Notes
|
## Build System Notes
|
||||||
- Uses NX for monorepo management with build caching
|
- Uses pnpm for monorepo management
|
||||||
- Vite for fast development builds
|
- Vite for fast development builds
|
||||||
- ESBuild for production optimization
|
- ESBuild for production optimization
|
||||||
- pnpm workspaces for dependency management
|
- pnpm workspaces for dependency management
|
||||||
|
|||||||
68
README.md
68
README.md
@@ -5,7 +5,7 @@
|
|||||||

|

|
||||||
[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp) [](https://hosted.weblate.org/engage/trilium/)
|
[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp) [](https://hosted.weblate.org/engage/trilium/)
|
||||||
|
|
||||||
[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) | [Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README.ru.md) | [Japanese](./docs/README.ja.md) | [Italian](./docs/README.it.md) | [Spanish](./docs/README.es.md)
|
[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) | [Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md) | [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) | [Spanish](./docs/README-es.md)
|
||||||
|
|
||||||
Trilium Notes is a free and open-source, cross-platform hierarchical note taking application with focus on building large personal knowledge bases.
|
Trilium Notes is a free and open-source, cross-platform hierarchical note taking application with focus on building large personal knowledge bases.
|
||||||
|
|
||||||
@@ -13,6 +13,23 @@ See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for q
|
|||||||
|
|
||||||
<a href="https://triliumnext.github.io/Docs/Wiki/screenshot-tour"><img src="./docs/app.png" alt="Trilium Screenshot" width="1000"></a>
|
<a href="https://triliumnext.github.io/Docs/Wiki/screenshot-tour"><img src="./docs/app.png" alt="Trilium Screenshot" width="1000"></a>
|
||||||
|
|
||||||
|
## 📚 Documentation
|
||||||
|
|
||||||
|
**Visit our comprehensive documentation at [docs.triliumnotes.org](https://docs.triliumnotes.org/)**
|
||||||
|
|
||||||
|
Our documentation is available in multiple formats:
|
||||||
|
- **Online Documentation**: Browse the full documentation at [docs.triliumnotes.org](https://docs.triliumnotes.org/)
|
||||||
|
- **In-App Help**: Press `F1` within Trilium to access the same documentation directly in the application
|
||||||
|
- **GitHub**: Navigate through the [User Guide](./docs/User%20Guide/User%20Guide/) in this repository
|
||||||
|
|
||||||
|
### Quick Links
|
||||||
|
- [Getting Started Guide](https://docs.triliumnotes.org/)
|
||||||
|
- [Installation Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
|
||||||
|
- [Docker Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
|
||||||
|
- [Upgrading TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
|
||||||
|
- [Basic Concepts and Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
|
||||||
|
- [Patterns of Personal Knowledge Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
|
||||||
|
|
||||||
## 🎁 Features
|
## 🎁 Features
|
||||||
|
|
||||||
* Notes can be arranged into arbitrarily deep tree. Single note can be placed into multiple places in the tree (see [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
|
* Notes can be arranged into arbitrarily deep tree. Single note can be placed into multiple places in the tree (see [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
|
||||||
@@ -56,19 +73,6 @@ There are no special migration steps to migrate from a zadam/Trilium instance to
|
|||||||
|
|
||||||
Versions up to and including [v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are compatible with the latest zadam/trilium version of [v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later versions of TriliumNext/Trilium have their sync versions incremented which prevents direct migration.
|
Versions up to and including [v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are compatible with the latest zadam/trilium version of [v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later versions of TriliumNext/Trilium have their sync versions incremented which prevents direct migration.
|
||||||
|
|
||||||
## 📖 Documentation
|
|
||||||
|
|
||||||
We're currently in the progress of moving the documentation to in-app (hit the `F1` key within Trilium). As a result, there may be some missing parts until we've completed the migration. If you'd prefer to navigate through the documentation within GitHub, you can navigate the [User Guide](./docs/User%20Guide/User%20Guide/) documentation.
|
|
||||||
|
|
||||||
Below are some quick links for your convenience to navigate the documentation:
|
|
||||||
- [Server installation](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
|
|
||||||
- [Docker installation](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
|
|
||||||
- [Upgrading TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
|
|
||||||
- [Concepts and Features - Note](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
|
|
||||||
- [Patterns of personal knowledge base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
|
|
||||||
|
|
||||||
Until we finish reorganizing the documentation, you may also want to [browse the old documentation](https://triliumnext.github.io/Docs).
|
|
||||||
|
|
||||||
## 💬 Discuss with us
|
## 💬 Discuss with us
|
||||||
|
|
||||||
Feel free to join our official conversations. We would love to hear what features, suggestions, or issues you may have!
|
Feel free to join our official conversations. We would love to hear what features, suggestions, or issues you may have!
|
||||||
@@ -142,7 +146,7 @@ Download the repository, install dependencies using `pnpm` and then run the envi
|
|||||||
git clone https://github.com/TriliumNext/Trilium.git
|
git clone https://github.com/TriliumNext/Trilium.git
|
||||||
cd Trilium
|
cd Trilium
|
||||||
pnpm install
|
pnpm install
|
||||||
pnpm nx run edit-docs:edit-docs
|
pnpm edit-docs:edit-docs
|
||||||
```
|
```
|
||||||
|
|
||||||
### Building the Executable
|
### Building the Executable
|
||||||
@@ -151,7 +155,7 @@ Download the repository, install dependencies using `pnpm` and then build the de
|
|||||||
git clone https://github.com/TriliumNext/Trilium.git
|
git clone https://github.com/TriliumNext/Trilium.git
|
||||||
cd Trilium
|
cd Trilium
|
||||||
pnpm install
|
pnpm install
|
||||||
pnpm nx --project=desktop electron-forge:make -- --arch=x64 --platform=win32
|
pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
|
||||||
```
|
```
|
||||||
|
|
||||||
For more details, see the [development docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
|
For more details, see the [development docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
|
||||||
@@ -162,16 +166,34 @@ Please view the [documentation guide](https://github.com/TriliumNext/Trilium/blo
|
|||||||
|
|
||||||
## 👏 Shoutouts
|
## 👏 Shoutouts
|
||||||
|
|
||||||
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - best WYSIWYG editor on the market, very interactive and listening team
|
* [zadam](https://github.com/zadam) for the original concept and implementation of the application.
|
||||||
* [FancyTree](https://github.com/mar10/fancytree) - very feature rich tree library without real competition. Trilium Notes would not be the same without it.
|
* [Larsa](https://github.com/LarsaSara) for designing the application icon.
|
||||||
* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with support for huge amount of languages
|
* [nriver](https://github.com/nriver) for his work on internationalization.
|
||||||
* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library without competition. Used in [relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
|
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
|
||||||
|
* [antoniotejada](https://github.com/nriver) for the original syntax highlight widget.
|
||||||
|
* [Dosu](https://dosu.dev/) for providing us with the automated responses to GitHub issues and discussions.
|
||||||
|
* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
|
||||||
|
|
||||||
|
Trilium would not be possible without the technologies behind it:
|
||||||
|
|
||||||
|
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind text notes. We are grateful for being offered a set of the premium features.
|
||||||
|
* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with support for huge amount of languages.
|
||||||
|
* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite whiteboard used in Canvas notes.
|
||||||
|
* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the mind map functionality.
|
||||||
|
* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical maps.
|
||||||
|
* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive table used in collections.
|
||||||
|
* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library without real competition.
|
||||||
|
* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library. Used in [relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
|
||||||
|
|
||||||
## 🤝 Support
|
## 🤝 Support
|
||||||
|
|
||||||
Support for the TriliumNext organization will be possible in the near future. For now, you can:
|
Trilium is built and maintained with [hundreds of hours of work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your support keeps it open-source, improves features, and covers costs such as hosting.
|
||||||
- Support continued development on TriliumNext by supporting our developers: [eliandoran](https://github.com/sponsors/eliandoran) (See the [repository insights]([developers]([url](https://github.com/TriliumNext/trilium/graphs/contributors))) for a full list)
|
|
||||||
- Show a token of gratitude to the original Trilium developer ([zadam](https://github.com/sponsors/zadam)) via [PayPal](https://paypal.me/za4am) or Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2).
|
Consider supporting the main developer ([eliandoran](https://github.com/eliandoran)) of the application via:
|
||||||
|
|
||||||
|
- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
|
||||||
|
- [PayPal](https://paypal.me/eliandoran)
|
||||||
|
- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
|
||||||
|
|
||||||
|
|
||||||
## 🔑 License
|
## 🔑 License
|
||||||
|
|||||||
@@ -35,13 +35,13 @@
|
|||||||
"chore:generate-openapi": "tsx bin/generate-openapi.js"
|
"chore:generate-openapi": "tsx bin/generate-openapi.js"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@playwright/test": "1.55.0",
|
"@playwright/test": "1.56.0",
|
||||||
"@stylistic/eslint-plugin": "5.3.1",
|
"@stylistic/eslint-plugin": "5.4.0",
|
||||||
"@types/express": "5.0.3",
|
"@types/express": "5.0.3",
|
||||||
"@types/node": "22.18.0",
|
"@types/node": "22.18.8",
|
||||||
"@types/yargs": "17.0.33",
|
"@types/yargs": "17.0.33",
|
||||||
"@vitest/coverage-v8": "3.2.4",
|
"@vitest/coverage-v8": "3.2.4",
|
||||||
"eslint": "9.34.0",
|
"eslint": "9.37.0",
|
||||||
"eslint-plugin-simple-import-sort": "12.1.1",
|
"eslint-plugin-simple-import-sort": "12.1.1",
|
||||||
"esm": "3.2.25",
|
"esm": "3.2.25",
|
||||||
"jsdoc": "4.0.4",
|
"jsdoc": "4.0.4",
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
"rcedit": "4.0.1",
|
"rcedit": "4.0.1",
|
||||||
"rimraf": "6.0.1",
|
"rimraf": "6.0.1",
|
||||||
"tslib": "2.8.1",
|
"tslib": "2.8.1",
|
||||||
"typedoc": "0.28.12",
|
"typedoc": "0.28.13",
|
||||||
"typedoc-plugin-missing-exports": "4.1.0"
|
"typedoc-plugin-missing-exports": "4.1.0"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# The development license key for premium CKEditor features.
|
# The development license key for premium CKEditor features.
|
||||||
# Note: This key must only be used for the Trilium Notes project.
|
# Note: This key must only be used for the Trilium Notes project.
|
||||||
# Expires on: 2025-09-13
|
VITE_CKEDITOR_KEY=eyJhbGciOiJFUzI1NiJ9.eyJleHAiOjE3ODcyNzA0MDAsImp0aSI6IjkyMWE1MWNlLTliNDMtNGRlMC1iOTQwLTc5ZjM2MDBkYjg1NyIsImRpc3RyaWJ1dGlvbkNoYW5uZWwiOiJ0cmlsaXVtIiwiZmVhdHVyZXMiOlsiVFJJTElVTSJdLCJ2YyI6ImU4YzRhMjBkIn0.hny77p-U4-jTkoqbwPytrEar5ylGCWBN7Ez3SlB8i6_mJCBIeCSTOlVQk_JMiOEq3AGykUMHzWXzjdMFwgniOw
|
||||||
VITE_CKEDITOR_KEY=eyJhbGciOiJFUzI1NiJ9.eyJleHAiOjE3NTc3MjE1OTksImp0aSI6ImFiN2E0NjZmLWJlZGMtNDNiYy1iMzU4LTk0NGQ0YWJhY2I3ZiIsImRpc3RyaWJ1dGlvbkNoYW5uZWwiOlsic2giLCJkcnVwYWwiXSwid2hpdGVMYWJlbCI6dHJ1ZSwiZmVhdHVyZXMiOlsiRFJVUCIsIkNNVCIsIkRPIiwiRlAiLCJTQyIsIlRPQyIsIlRQTCIsIlBPRSIsIkNDIiwiTUYiLCJTRUUiLCJFQ0giLCJFSVMiXSwidmMiOiI1MzlkOWY5YyJ9.2rvKPql4hmukyXhEtWPZ8MLxKvzPIwzCdykO653g7IxRRZy2QJpeRszElZx9DakKYZKXekVRAwQKgHxwkgbE_w
|
|
||||||
VITE_CKEDITOR_ENABLE_INSPECTOR=false
|
VITE_CKEDITOR_ENABLE_INSPECTOR=false
|
||||||
@@ -1,16 +1,21 @@
|
|||||||
{
|
{
|
||||||
"name": "@triliumnext/client",
|
"name": "@triliumnext/client",
|
||||||
"version": "0.98.1",
|
"version": "0.99.1",
|
||||||
"description": "JQuery-based client for TriliumNext, used for both web and desktop (via Electron)",
|
"description": "JQuery-based client for TriliumNext, used for both web and desktop (via Electron)",
|
||||||
"private": true,
|
"private": true,
|
||||||
"license": "AGPL-3.0-only",
|
"license": "AGPL-3.0-only",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Trilium Notes Team",
|
"name": "Trilium Notes Team",
|
||||||
"email": "contact@eliandoran.me",
|
"email": "contact@eliandoran.me",
|
||||||
"url": "https://github.com/TriliumNext/Notes"
|
"url": "https://github.com/TriliumNext/Trilium"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "cross-env NODE_OPTIONS=--max-old-space-size=4096 vite build",
|
||||||
|
"test": "vitest",
|
||||||
|
"circular-deps": "dpdm -T src/**/*.ts --tree=false --warning=false --skip-dynamic-imports=circular"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint/js": "9.34.0",
|
"@eslint/js": "9.37.0",
|
||||||
"@excalidraw/excalidraw": "0.18.0",
|
"@excalidraw/excalidraw": "0.18.0",
|
||||||
"@fullcalendar/core": "6.1.19",
|
"@fullcalendar/core": "6.1.19",
|
||||||
"@fullcalendar/daygrid": "6.1.19",
|
"@fullcalendar/daygrid": "6.1.19",
|
||||||
@@ -19,7 +24,7 @@
|
|||||||
"@fullcalendar/multimonth": "6.1.19",
|
"@fullcalendar/multimonth": "6.1.19",
|
||||||
"@fullcalendar/timegrid": "6.1.19",
|
"@fullcalendar/timegrid": "6.1.19",
|
||||||
"@maplibre/maplibre-gl-leaflet": "0.1.3",
|
"@maplibre/maplibre-gl-leaflet": "0.1.3",
|
||||||
"@mermaid-js/layout-elk": "0.1.9",
|
"@mermaid-js/layout-elk": "0.2.0",
|
||||||
"@mind-elixir/node-menu": "5.0.0",
|
"@mind-elixir/node-menu": "5.0.0",
|
||||||
"@popperjs/core": "2.11.8",
|
"@popperjs/core": "2.11.8",
|
||||||
"@triliumnext/ckeditor5": "workspace:*",
|
"@triliumnext/ckeditor5": "workspace:*",
|
||||||
@@ -34,25 +39,25 @@
|
|||||||
"dayjs-plugin-utc": "0.1.2",
|
"dayjs-plugin-utc": "0.1.2",
|
||||||
"debounce": "2.2.0",
|
"debounce": "2.2.0",
|
||||||
"draggabilly": "3.0.0",
|
"draggabilly": "3.0.0",
|
||||||
"force-graph": "1.50.1",
|
"force-graph": "1.51.0",
|
||||||
"globals": "16.3.0",
|
"globals": "16.4.0",
|
||||||
"i18next": "25.4.2",
|
"i18next": "25.5.3",
|
||||||
"i18next-http-backend": "3.0.2",
|
"i18next-http-backend": "3.0.2",
|
||||||
"jquery": "3.7.1",
|
"jquery": "3.7.1",
|
||||||
"jquery.fancytree": "2.38.5",
|
"jquery.fancytree": "2.38.5",
|
||||||
"jsplumb": "2.15.6",
|
"jsplumb": "2.15.6",
|
||||||
"katex": "0.16.22",
|
"katex": "0.16.23",
|
||||||
"knockout": "3.5.1",
|
"knockout": "3.5.1",
|
||||||
"leaflet": "1.9.4",
|
"leaflet": "1.9.4",
|
||||||
"leaflet-gpx": "2.2.0",
|
"leaflet-gpx": "2.2.0",
|
||||||
"mark.js": "8.11.1",
|
"mark.js": "8.11.1",
|
||||||
"marked": "16.2.1",
|
"marked": "16.3.0",
|
||||||
"mermaid": "11.10.1",
|
"mermaid": "11.12.0",
|
||||||
"mind-elixir": "5.0.6",
|
"mind-elixir": "5.1.1",
|
||||||
"normalize.css": "8.0.1",
|
"normalize.css": "8.0.1",
|
||||||
"panzoom": "9.4.3",
|
"panzoom": "9.4.3",
|
||||||
"preact": "10.27.1",
|
"preact": "10.27.2",
|
||||||
"react-i18next": "15.7.3",
|
"react-i18next": "16.0.0",
|
||||||
"split.js": "1.6.5",
|
"split.js": "1.6.5",
|
||||||
"svg-pan-zoom": "3.6.2",
|
"svg-pan-zoom": "3.6.2",
|
||||||
"tabulator-tables": "6.3.1",
|
"tabulator-tables": "6.3.1",
|
||||||
@@ -64,25 +69,12 @@
|
|||||||
"@types/bootstrap": "5.2.10",
|
"@types/bootstrap": "5.2.10",
|
||||||
"@types/jquery": "3.5.33",
|
"@types/jquery": "3.5.33",
|
||||||
"@types/leaflet": "1.9.20",
|
"@types/leaflet": "1.9.20",
|
||||||
"@types/leaflet-gpx": "1.3.7",
|
"@types/leaflet-gpx": "1.3.8",
|
||||||
"@types/mark.js": "8.11.12",
|
"@types/mark.js": "8.11.12",
|
||||||
"@types/tabulator-tables": "6.2.10",
|
"@types/tabulator-tables": "6.2.11",
|
||||||
"copy-webpack-plugin": "13.0.1",
|
"copy-webpack-plugin": "13.0.1",
|
||||||
"happy-dom": "18.0.1",
|
"happy-dom": "19.0.2",
|
||||||
"script-loader": "0.7.2",
|
"script-loader": "0.7.2",
|
||||||
"vite-plugin-static-copy": "3.1.2"
|
"vite-plugin-static-copy": "3.1.3"
|
||||||
},
|
|
||||||
"nx": {
|
|
||||||
"name": "client",
|
|
||||||
"targets": {
|
|
||||||
"serve": {
|
|
||||||
"dependsOn": [
|
|
||||||
"^build"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"circular-deps": {
|
|
||||||
"command": "pnpx dpdm -T {projectRoot}/src/**/*.ts --tree=false --warning=false --skip-dynamic-imports=circular"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -7,6 +7,9 @@
|
|||||||
"display": "standalone",
|
"display": "standalone",
|
||||||
"scope": "/",
|
"scope": "/",
|
||||||
"start_url": "/",
|
"start_url": "/",
|
||||||
|
"display_override": [
|
||||||
|
"window-controls-overlay"
|
||||||
|
],
|
||||||
"icons": [
|
"icons": [
|
||||||
{
|
{
|
||||||
"src": "icon.png",
|
"src": "icon.png",
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ export type CommandMappings = {
|
|||||||
openedFileUpdated: CommandData & {
|
openedFileUpdated: CommandData & {
|
||||||
entityType: string;
|
entityType: string;
|
||||||
entityId: string;
|
entityId: string;
|
||||||
lastModifiedMs: number;
|
lastModifiedMs?: number;
|
||||||
filePath: string;
|
filePath: string;
|
||||||
};
|
};
|
||||||
focusAndSelectTitle: CommandData & {
|
focusAndSelectTitle: CommandData & {
|
||||||
@@ -650,7 +650,7 @@ export class AppContext extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getComponentByEl(el: HTMLElement) {
|
getComponentByEl(el: HTMLElement) {
|
||||||
return $(el).closest(".component").prop("component");
|
return $(el).closest("[data-component-id]").prop("component");
|
||||||
}
|
}
|
||||||
|
|
||||||
addBeforeUnloadListener(obj: BeforeUploadListener | (() => boolean)) {
|
addBeforeUnloadListener(obj: BeforeUploadListener | (() => boolean)) {
|
||||||
|
|||||||
@@ -433,6 +433,9 @@ export default class TabManager extends Component {
|
|||||||
$autocompleteEl.autocomplete("close");
|
$autocompleteEl.autocomplete("close");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// close dangling tooltips
|
||||||
|
$("body > div.tooltip").remove();
|
||||||
|
|
||||||
const noteContextsToRemove = noteContextToRemove.getSubContexts();
|
const noteContextsToRemove = noteContextToRemove.getSubContexts();
|
||||||
const ntxIdsToRemove = noteContextsToRemove.map((nc) => nc.ntxId);
|
const ntxIdsToRemove = noteContextsToRemove.map((nc) => nc.ntxId);
|
||||||
|
|
||||||
@@ -600,18 +603,18 @@ export default class TabManager extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async moveTabToNewWindowCommand({ ntxId }: { ntxId: string }) {
|
async moveTabToNewWindowCommand({ ntxId }: { ntxId: string }) {
|
||||||
const { notePath, hoistedNoteId } = this.getNoteContextById(ntxId);
|
const { notePath, hoistedNoteId, viewScope } = this.getNoteContextById(ntxId);
|
||||||
|
|
||||||
const removed = await this.removeNoteContext(ntxId);
|
const removed = await this.removeNoteContext(ntxId);
|
||||||
|
|
||||||
if (removed) {
|
if (removed) {
|
||||||
this.triggerCommand("openInWindow", { notePath, hoistedNoteId });
|
this.triggerCommand("openInWindow", { notePath, hoistedNoteId, viewScope });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async copyTabToNewWindowCommand({ ntxId }: { ntxId: string }) {
|
async copyTabToNewWindowCommand({ ntxId }: { ntxId: string }) {
|
||||||
const { notePath, hoistedNoteId } = this.getNoteContextById(ntxId);
|
const { notePath, hoistedNoteId, viewScope } = this.getNoteContextById(ntxId);
|
||||||
this.triggerCommand("openInWindow", { notePath, hoistedNoteId });
|
this.triggerCommand("openInWindow", { notePath, hoistedNoteId, viewScope });
|
||||||
}
|
}
|
||||||
|
|
||||||
async reopenLastTabCommand() {
|
async reopenLastTabCommand() {
|
||||||
|
|||||||
@@ -23,11 +23,11 @@ export default class TouchBarComponent extends Component {
|
|||||||
this.$widget = $("<div>");
|
this.$widget = $("<div>");
|
||||||
|
|
||||||
$(window).on("focusin", async (e) => {
|
$(window).on("focusin", async (e) => {
|
||||||
const $target = $(e.target);
|
const focusedEl = e.target as unknown as HTMLElement;
|
||||||
|
const $target = $(focusedEl);
|
||||||
|
|
||||||
this.$activeModal = $target.closest(".modal-dialog");
|
this.$activeModal = $target.closest(".modal-dialog");
|
||||||
const parentComponentEl = $target.closest(".component");
|
this.lastFocusedComponent = appContext.getComponentByEl(focusedEl);
|
||||||
this.lastFocusedComponent = appContext.getComponentByEl(parentComponentEl[0]);
|
|
||||||
this.#refreshTouchBar();
|
this.#refreshTouchBar();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { t } from "./services/i18n.js";
|
|||||||
import options from "./services/options.js";
|
import options from "./services/options.js";
|
||||||
import type ElectronRemote from "@electron/remote";
|
import type ElectronRemote from "@electron/remote";
|
||||||
import type Electron from "electron";
|
import type Electron from "electron";
|
||||||
import "./stylesheets/bootstrap.scss";
|
import "bootstrap/dist/css/bootstrap.min.css";
|
||||||
import "boxicons/css/boxicons.min.css";
|
import "boxicons/css/boxicons.min.css";
|
||||||
import "autocomplete.js/index_jquery.js";
|
import "autocomplete.js/index_jquery.js";
|
||||||
|
|
||||||
@@ -45,6 +45,10 @@ if (utils.isElectron()) {
|
|||||||
electronContextMenu.setupContextMenu();
|
electronContextMenu.setupContextMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (utils.isPWA()) {
|
||||||
|
initPWATopbarColor();
|
||||||
|
}
|
||||||
|
|
||||||
function initOnElectron() {
|
function initOnElectron() {
|
||||||
const electron: typeof Electron = utils.dynamicRequire("electron");
|
const electron: typeof Electron = utils.dynamicRequire("electron");
|
||||||
electron.ipcRenderer.on("globalShortcut", async (event, actionName) => appContext.triggerCommand(actionName));
|
electron.ipcRenderer.on("globalShortcut", async (event, actionName) => appContext.triggerCommand(actionName));
|
||||||
@@ -113,3 +117,20 @@ function initDarkOrLightMode(style: CSSStyleDeclaration) {
|
|||||||
const { nativeTheme } = utils.dynamicRequire("@electron/remote") as typeof ElectronRemote;
|
const { nativeTheme } = utils.dynamicRequire("@electron/remote") as typeof ElectronRemote;
|
||||||
nativeTheme.themeSource = themeSource;
|
nativeTheme.themeSource = themeSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function initPWATopbarColor() {
|
||||||
|
const tracker = $("#background-color-tracker");
|
||||||
|
|
||||||
|
if (tracker.length) {
|
||||||
|
const applyThemeColor = () => {
|
||||||
|
let meta = $("meta[name='theme-color']");
|
||||||
|
if (!meta.length) {
|
||||||
|
meta = $(`<meta name="theme-color">`).appendTo($("head"));
|
||||||
|
}
|
||||||
|
meta.attr("content", tracker.css("color"));
|
||||||
|
};
|
||||||
|
|
||||||
|
tracker.on("transitionend", applyThemeColor);
|
||||||
|
applyThemeColor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -256,18 +256,20 @@ export default class FNote {
|
|||||||
return this.children;
|
return this.children;
|
||||||
}
|
}
|
||||||
|
|
||||||
async getSubtreeNoteIds() {
|
async getSubtreeNoteIds(includeArchived = false) {
|
||||||
let noteIds: (string | string[])[] = [];
|
let noteIds: (string | string[])[] = [];
|
||||||
for (const child of await this.getChildNotes()) {
|
for (const child of await this.getChildNotes()) {
|
||||||
|
if (child.isArchived && !includeArchived) continue;
|
||||||
|
|
||||||
noteIds.push(child.noteId);
|
noteIds.push(child.noteId);
|
||||||
noteIds.push(await child.getSubtreeNoteIds());
|
noteIds.push(await child.getSubtreeNoteIds(includeArchived));
|
||||||
}
|
}
|
||||||
return noteIds.flat();
|
return noteIds.flat();
|
||||||
}
|
}
|
||||||
|
|
||||||
async getSubtreeNotes() {
|
async getSubtreeNotes() {
|
||||||
const noteIds = await this.getSubtreeNoteIds();
|
const noteIds = await this.getSubtreeNoteIds();
|
||||||
return this.froca.getNotes(noteIds);
|
return (await this.froca.getNotes(noteIds));
|
||||||
}
|
}
|
||||||
|
|
||||||
async getChildNotes() {
|
async getChildNotes() {
|
||||||
@@ -905,8 +907,8 @@ export default class FNote {
|
|||||||
return this.getBlob();
|
return this.getBlob();
|
||||||
}
|
}
|
||||||
|
|
||||||
async getBlob() {
|
getBlob() {
|
||||||
return await this.froca.getBlob("notes", this.noteId);
|
return this.froca.getBlob("notes", this.noteId);
|
||||||
}
|
}
|
||||||
|
|
||||||
toString() {
|
toString() {
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import NoteTreeWidget from "../widgets/note_tree.js";
|
|||||||
import NoteTitleWidget from "../widgets/note_title.jsx";
|
import NoteTitleWidget from "../widgets/note_title.jsx";
|
||||||
import NoteDetailWidget from "../widgets/note_detail.js";
|
import NoteDetailWidget from "../widgets/note_detail.js";
|
||||||
import PromotedAttributesWidget from "../widgets/promoted_attributes.js";
|
import PromotedAttributesWidget from "../widgets/promoted_attributes.js";
|
||||||
import NoteListWidget from "../widgets/note_list.js";
|
|
||||||
import NoteIconWidget from "../widgets/note_icon.jsx";
|
import NoteIconWidget from "../widgets/note_icon.jsx";
|
||||||
import ScrollingContainer from "../widgets/containers/scrolling_container.js";
|
import ScrollingContainer from "../widgets/containers/scrolling_container.js";
|
||||||
import RootContainer from "../widgets/containers/root_container.js";
|
import RootContainer from "../widgets/containers/root_container.js";
|
||||||
@@ -42,6 +41,7 @@ import LeftPaneToggle from "../widgets/buttons/left_pane_toggle.js";
|
|||||||
import ApiLog from "../widgets/api_log.jsx";
|
import ApiLog from "../widgets/api_log.jsx";
|
||||||
import CloseZenModeButton from "../widgets/close_zen_button.jsx";
|
import CloseZenModeButton from "../widgets/close_zen_button.jsx";
|
||||||
import SharedInfo from "../widgets/shared_info.jsx";
|
import SharedInfo from "../widgets/shared_info.jsx";
|
||||||
|
import NoteList from "../widgets/collections/NoteList.jsx";
|
||||||
|
|
||||||
export default class DesktopLayout {
|
export default class DesktopLayout {
|
||||||
|
|
||||||
@@ -123,10 +123,10 @@ export default class DesktopLayout {
|
|||||||
.child(<NoteIconWidget />)
|
.child(<NoteIconWidget />)
|
||||||
.child(<NoteTitleWidget />)
|
.child(<NoteTitleWidget />)
|
||||||
.child(new SpacerWidget(0, 1))
|
.child(new SpacerWidget(0, 1))
|
||||||
.child(new MovePaneButton(true))
|
.child(<MovePaneButton direction="left" />)
|
||||||
.child(new MovePaneButton(false))
|
.child(<MovePaneButton direction="right" />)
|
||||||
.child(new ClosePaneButton())
|
.child(<ClosePaneButton />)
|
||||||
.child(new CreatePaneButton())
|
.child(<CreatePaneButton />)
|
||||||
)
|
)
|
||||||
.child(<Ribbon />)
|
.child(<Ribbon />)
|
||||||
.child(<SharedInfo />)
|
.child(<SharedInfo />)
|
||||||
@@ -138,7 +138,7 @@ export default class DesktopLayout {
|
|||||||
.child(new PromotedAttributesWidget())
|
.child(new PromotedAttributesWidget())
|
||||||
.child(<SqlTableSchemas />)
|
.child(<SqlTableSchemas />)
|
||||||
.child(new NoteDetailWidget())
|
.child(new NoteDetailWidget())
|
||||||
.child(new NoteListWidget(false))
|
.child(<NoteList />)
|
||||||
.child(<SearchResult />)
|
.child(<SearchResult />)
|
||||||
.child(<SqlResults />)
|
.child(<SqlResults />)
|
||||||
.child(<ScrollPadding />)
|
.child(<ScrollPadding />)
|
||||||
|
|||||||
@@ -27,10 +27,10 @@ import FlexContainer from "../widgets/containers/flex_container.js";
|
|||||||
import NoteIconWidget from "../widgets/note_icon";
|
import NoteIconWidget from "../widgets/note_icon";
|
||||||
import PromotedAttributesWidget from "../widgets/promoted_attributes.js";
|
import PromotedAttributesWidget from "../widgets/promoted_attributes.js";
|
||||||
import NoteDetailWidget from "../widgets/note_detail.js";
|
import NoteDetailWidget from "../widgets/note_detail.js";
|
||||||
import NoteListWidget from "../widgets/note_list.js";
|
|
||||||
import CallToActionDialog from "../widgets/dialogs/call_to_action.jsx";
|
import CallToActionDialog from "../widgets/dialogs/call_to_action.jsx";
|
||||||
import NoteTitleWidget from "../widgets/note_title.jsx";
|
import NoteTitleWidget from "../widgets/note_title.jsx";
|
||||||
import { PopupEditorFormattingToolbar } from "../widgets/ribbon/FormattingToolbar.js";
|
import { PopupEditorFormattingToolbar } from "../widgets/ribbon/FormattingToolbar.js";
|
||||||
|
import NoteList from "../widgets/collections/NoteList.jsx";
|
||||||
|
|
||||||
export function applyModals(rootContainer: RootContainer) {
|
export function applyModals(rootContainer: RootContainer) {
|
||||||
rootContainer
|
rootContainer
|
||||||
@@ -66,6 +66,6 @@ export function applyModals(rootContainer: RootContainer) {
|
|||||||
.child(<PopupEditorFormattingToolbar />)
|
.child(<PopupEditorFormattingToolbar />)
|
||||||
.child(new PromotedAttributesWidget())
|
.child(new PromotedAttributesWidget())
|
||||||
.child(new NoteDetailWidget())
|
.child(new NoteDetailWidget())
|
||||||
.child(new NoteListWidget(true)))
|
.child(<NoteList displayOnlyCollections />))
|
||||||
.child(<CallToActionDialog />);
|
.child(<CallToActionDialog />);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import QuickSearchWidget from "../widgets/quick_search.js";
|
|||||||
import NoteTreeWidget from "../widgets/note_tree.js";
|
import NoteTreeWidget from "../widgets/note_tree.js";
|
||||||
import ScreenContainer from "../widgets/mobile_widgets/screen_container.js";
|
import ScreenContainer from "../widgets/mobile_widgets/screen_container.js";
|
||||||
import ScrollingContainer from "../widgets/containers/scrolling_container.js";
|
import ScrollingContainer from "../widgets/containers/scrolling_container.js";
|
||||||
import NoteListWidget from "../widgets/note_list.js";
|
|
||||||
import GlobalMenuWidget from "../widgets/buttons/global_menu.js";
|
import GlobalMenuWidget from "../widgets/buttons/global_menu.js";
|
||||||
import LauncherContainer from "../widgets/containers/launcher_container.js";
|
import LauncherContainer from "../widgets/containers/launcher_container.js";
|
||||||
import RootContainer from "../widgets/containers/root_container.js";
|
import RootContainer from "../widgets/containers/root_container.js";
|
||||||
@@ -22,7 +21,9 @@ import FloatingButtons from "../widgets/FloatingButtons.jsx";
|
|||||||
import { MOBILE_FLOATING_BUTTONS } from "../widgets/FloatingButtonsDefinitions.jsx";
|
import { MOBILE_FLOATING_BUTTONS } from "../widgets/FloatingButtonsDefinitions.jsx";
|
||||||
import ToggleSidebarButton from "../widgets/mobile_widgets/toggle_sidebar_button.jsx";
|
import ToggleSidebarButton from "../widgets/mobile_widgets/toggle_sidebar_button.jsx";
|
||||||
import CloseZenModeButton from "../widgets/close_zen_button.js";
|
import CloseZenModeButton from "../widgets/close_zen_button.js";
|
||||||
|
import NoteWrapperWidget from "../widgets/note_wrapper.js";
|
||||||
import MobileDetailMenu from "../widgets/mobile_widgets/mobile_detail_menu.js";
|
import MobileDetailMenu from "../widgets/mobile_widgets/mobile_detail_menu.js";
|
||||||
|
import NoteList from "../widgets/collections/NoteList.jsx";
|
||||||
|
|
||||||
const MOBILE_CSS = `
|
const MOBILE_CSS = `
|
||||||
<style>
|
<style>
|
||||||
@@ -131,30 +132,33 @@ export default class MobileLayout {
|
|||||||
.child(new FlexContainer("column").filling().id("mobile-sidebar-wrapper").child(new QuickSearchWidget()).child(new NoteTreeWidget().cssBlock(FANCYTREE_CSS)))
|
.child(new FlexContainer("column").filling().id("mobile-sidebar-wrapper").child(new QuickSearchWidget()).child(new NoteTreeWidget().cssBlock(FANCYTREE_CSS)))
|
||||||
)
|
)
|
||||||
.child(
|
.child(
|
||||||
new ScreenContainer("detail", "column")
|
new ScreenContainer("detail", "row")
|
||||||
.id("detail-container")
|
.id("detail-container")
|
||||||
.class("d-sm-flex d-md-flex d-lg-flex d-xl-flex col-12 col-sm-7 col-md-8 col-lg-9")
|
.class("d-sm-flex d-md-flex d-lg-flex d-xl-flex col-12 col-sm-7 col-md-8 col-lg-9")
|
||||||
.child(
|
.child(
|
||||||
new FlexContainer("row")
|
new NoteWrapperWidget()
|
||||||
.contentSized()
|
.child(
|
||||||
.css("font-size", "larger")
|
new FlexContainer("row")
|
||||||
.css("align-items", "center")
|
.contentSized()
|
||||||
.child(<ToggleSidebarButton />)
|
.css("font-size", "larger")
|
||||||
.child(<NoteTitleWidget />)
|
.css("align-items", "center")
|
||||||
.child(<MobileDetailMenu />)
|
.child(<ToggleSidebarButton />)
|
||||||
|
.child(<NoteTitleWidget />)
|
||||||
|
.child(<MobileDetailMenu />)
|
||||||
|
)
|
||||||
|
.child(<SharedInfoWidget />)
|
||||||
|
.child(<FloatingButtons items={MOBILE_FLOATING_BUTTONS} />)
|
||||||
|
.child(new PromotedAttributesWidget())
|
||||||
|
.child(
|
||||||
|
new ScrollingContainer()
|
||||||
|
.filling()
|
||||||
|
.contentSized()
|
||||||
|
.child(new NoteDetailWidget())
|
||||||
|
.child(<NoteList />)
|
||||||
|
.child(<FilePropertiesWrapper />)
|
||||||
|
)
|
||||||
|
.child(<MobileEditorToolbar />)
|
||||||
)
|
)
|
||||||
.child(<SharedInfoWidget />)
|
|
||||||
.child(<FloatingButtons items={MOBILE_FLOATING_BUTTONS} />)
|
|
||||||
.child(new PromotedAttributesWidget())
|
|
||||||
.child(
|
|
||||||
new ScrollingContainer()
|
|
||||||
.filling()
|
|
||||||
.contentSized()
|
|
||||||
.child(new NoteDetailWidget())
|
|
||||||
.child(new NoteListWidget(false))
|
|
||||||
.child(<FilePropertiesWrapper />)
|
|
||||||
)
|
|
||||||
.child(<MobileEditorToolbar />)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
.child(
|
.child(
|
||||||
@@ -183,4 +187,4 @@ function FilePropertiesWrapper() {
|
|||||||
{note?.type === "file" && <FilePropertiesTab note={note} />}
|
{note?.type === "file" && <FilePropertiesTab note={note} />}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import "./stylesheets/bootstrap.scss";
|
import "bootstrap/dist/css/bootstrap.min.css";
|
||||||
|
|
||||||
// @ts-ignore - module = undefined
|
// @ts-ignore - module = undefined
|
||||||
// Required for correct loading of scripts in Electron
|
// Required for correct loading of scripts in Electron
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import keyboardActionService from "../services/keyboard_actions.js";
|
import { KeyboardActionNames } from "@triliumnext/commons";
|
||||||
|
import keyboardActionService, { getActionSync } from "../services/keyboard_actions.js";
|
||||||
import note_tooltip from "../services/note_tooltip.js";
|
import note_tooltip from "../services/note_tooltip.js";
|
||||||
import utils from "../services/utils.js";
|
import utils from "../services/utils.js";
|
||||||
|
import { should } from "vitest";
|
||||||
|
|
||||||
export interface ContextMenuOptions<T> {
|
export interface ContextMenuOptions<T> {
|
||||||
x: number;
|
x: number;
|
||||||
@@ -13,8 +15,13 @@ export interface ContextMenuOptions<T> {
|
|||||||
onHide?: () => void;
|
onHide?: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface MenuSeparatorItem {
|
export interface MenuSeparatorItem {
|
||||||
title: "----";
|
kind: "separator";
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface MenuHeader {
|
||||||
|
title: string;
|
||||||
|
kind: "header";
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface MenuItemBadge {
|
export interface MenuItemBadge {
|
||||||
@@ -38,12 +45,13 @@ export interface MenuCommandItem<T> {
|
|||||||
handler?: MenuHandler<T>;
|
handler?: MenuHandler<T>;
|
||||||
items?: MenuItem<T>[] | null;
|
items?: MenuItem<T>[] | null;
|
||||||
shortcut?: string;
|
shortcut?: string;
|
||||||
|
keyboardShortcut?: KeyboardActionNames;
|
||||||
spellingSuggestion?: string;
|
spellingSuggestion?: string;
|
||||||
checked?: boolean;
|
checked?: boolean;
|
||||||
columns?: number;
|
columns?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type MenuItem<T> = MenuCommandItem<T> | MenuSeparatorItem;
|
export type MenuItem<T> = MenuCommandItem<T> | MenuSeparatorItem | MenuHeader;
|
||||||
export type MenuHandler<T> = (item: MenuCommandItem<T>, e: JQuery.MouseDownEvent<HTMLElement, undefined, HTMLElement, HTMLElement>) => void;
|
export type MenuHandler<T> = (item: MenuCommandItem<T>, e: JQuery.MouseDownEvent<HTMLElement, undefined, HTMLElement, HTMLElement>) => void;
|
||||||
export type ContextMenuEvent = PointerEvent | MouseEvent | JQuery.ContextMenuEvent;
|
export type ContextMenuEvent = PointerEvent | MouseEvent | JQuery.ContextMenuEvent;
|
||||||
|
|
||||||
@@ -148,14 +156,51 @@ class ContextMenu {
|
|||||||
.addClass("show");
|
.addClass("show");
|
||||||
}
|
}
|
||||||
|
|
||||||
addItems($parent: JQuery<HTMLElement>, items: MenuItem<any>[]) {
|
addItems($parent: JQuery<HTMLElement>, items: MenuItem<any>[], multicolumn = false) {
|
||||||
for (const item of items) {
|
let $group = $parent; // The current group or parent element to which items are being appended
|
||||||
|
let shouldStartNewGroup = false; // If true, the next item will start a new group
|
||||||
|
let shouldResetGroup = false; // If true, the next item will be the last one from the group
|
||||||
|
|
||||||
|
for (let index = 0; index < items.length; index++) {
|
||||||
|
const item = items[index];
|
||||||
if (!item) {
|
if (!item) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.title === "----") {
|
// If the current item is a header, start a new group. This group will contain the
|
||||||
$parent.append($("<div>").addClass("dropdown-divider"));
|
// header and the next item that follows the header.
|
||||||
|
if ("kind" in item && item.kind === "header") {
|
||||||
|
if (multicolumn && !shouldResetGroup) {
|
||||||
|
shouldStartNewGroup = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the next item is a separator, start a new group. This group will contain the
|
||||||
|
// current item, the separator, and the next item after the separator.
|
||||||
|
const nextItem = (index < items.length - 1) ? items[index + 1] : null;
|
||||||
|
if (multicolumn && nextItem && "kind" in nextItem && nextItem.kind === "separator") {
|
||||||
|
if (!shouldResetGroup) {
|
||||||
|
shouldStartNewGroup = true;
|
||||||
|
} else {
|
||||||
|
shouldResetGroup = true; // Continue the current group
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a new group to avoid column breaks before and after the seaparator / header.
|
||||||
|
// This is a workaround for Firefox not supporting break-before / break-after: avoid
|
||||||
|
// for columns.
|
||||||
|
if (shouldStartNewGroup) {
|
||||||
|
$group = $("<div class='dropdown-no-break'>");
|
||||||
|
$parent.append($group);
|
||||||
|
shouldStartNewGroup = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("kind" in item && item.kind === "separator") {
|
||||||
|
$group.append($("<div>").addClass("dropdown-divider"));
|
||||||
|
shouldResetGroup = true; // End the group after the next item
|
||||||
|
} else if ("kind" in item && item.kind === "header") {
|
||||||
|
$group.append($("<h6>").addClass("dropdown-header").text(item.title));
|
||||||
|
shouldResetGroup = true;
|
||||||
} else {
|
} else {
|
||||||
const $icon = $("<span>");
|
const $icon = $("<span>");
|
||||||
|
|
||||||
@@ -185,7 +230,23 @@ class ContextMenu {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("shortcut" in item && item.shortcut) {
|
if ("keyboardShortcut" in item && item.keyboardShortcut) {
|
||||||
|
const shortcuts = getActionSync(item.keyboardShortcut).effectiveShortcuts;
|
||||||
|
if (shortcuts) {
|
||||||
|
const allShortcuts: string[] = [];
|
||||||
|
for (const effectiveShortcut of shortcuts) {
|
||||||
|
allShortcuts.push(effectiveShortcut.split("+")
|
||||||
|
.map(key => `<kbd>${key}</kbd>`)
|
||||||
|
.join("+"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (allShortcuts.length) {
|
||||||
|
const container = $("<span>").addClass("keyboard-shortcut");
|
||||||
|
container.append($(allShortcuts.join(",")));
|
||||||
|
$link.append(container);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if ("shortcut" in item && item.shortcut) {
|
||||||
$link.append($("<kbd>").text(item.shortcut));
|
$link.append($("<kbd>").text(item.shortcut));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -241,16 +302,24 @@ class ContextMenu {
|
|||||||
$link.addClass("dropdown-toggle");
|
$link.addClass("dropdown-toggle");
|
||||||
|
|
||||||
const $subMenu = $("<ul>").addClass("dropdown-menu");
|
const $subMenu = $("<ul>").addClass("dropdown-menu");
|
||||||
if (!this.isMobile && item.columns) {
|
const hasColumns = !!item.columns && item.columns > 1;
|
||||||
$subMenu.css("column-count", item.columns);
|
if (!this.isMobile && hasColumns) {
|
||||||
|
$subMenu.css("column-count", item.columns!);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.addItems($subMenu, item.items);
|
this.addItems($subMenu, item.items, hasColumns);
|
||||||
|
|
||||||
$item.append($subMenu);
|
$item.append($subMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
$parent.append($item);
|
$group.append($item);
|
||||||
|
|
||||||
|
// After adding a menu item, if the previous item was a separator or header,
|
||||||
|
// reset the group so that the next item will be appended directly to the parent.
|
||||||
|
if (shouldResetGroup) {
|
||||||
|
$group = $parent;
|
||||||
|
shouldResetGroup = false;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ function setupContextMenu() {
|
|||||||
handler: () => webContents.session.addWordToSpellCheckerDictionary(params.misspelledWord)
|
handler: () => webContents.session.addWordToSpellCheckerDictionary(params.misspelledWord)
|
||||||
});
|
});
|
||||||
|
|
||||||
items.push({ title: `----` });
|
items.push({ kind: "separator" });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.isEditable) {
|
if (params.isEditable) {
|
||||||
@@ -112,7 +112,7 @@ function setupContextMenu() {
|
|||||||
// Replace the placeholder with the real search keyword.
|
// Replace the placeholder with the real search keyword.
|
||||||
let searchUrl = searchEngineUrl.replace("{keyword}", encodeURIComponent(params.selectionText));
|
let searchUrl = searchEngineUrl.replace("{keyword}", encodeURIComponent(params.selectionText));
|
||||||
|
|
||||||
items.push({ title: "----" });
|
items.push({ kind: "separator" });
|
||||||
|
|
||||||
items.push({
|
items.push({
|
||||||
title: t("electron_context_menu.search_online", { term: shortenedSelection, searchEngine: searchEngineName }),
|
title: t("electron_context_menu.search_online", { term: shortenedSelection, searchEngine: searchEngineName }),
|
||||||
|
|||||||
@@ -45,16 +45,16 @@ export default class LauncherContextMenu implements SelectMenuItemEventListener<
|
|||||||
isVisibleRoot || isAvailableRoot ? { title: t("launcher_context_menu.add-script-launcher"), command: "addScriptLauncher", uiIcon: "bx bx-code-curly" } : null,
|
isVisibleRoot || isAvailableRoot ? { title: t("launcher_context_menu.add-script-launcher"), command: "addScriptLauncher", uiIcon: "bx bx-code-curly" } : null,
|
||||||
isVisibleRoot || isAvailableRoot ? { title: t("launcher_context_menu.add-custom-widget"), command: "addWidgetLauncher", uiIcon: "bx bx-customize" } : null,
|
isVisibleRoot || isAvailableRoot ? { title: t("launcher_context_menu.add-custom-widget"), command: "addWidgetLauncher", uiIcon: "bx bx-customize" } : null,
|
||||||
isVisibleRoot || isAvailableRoot ? { title: t("launcher_context_menu.add-spacer"), command: "addSpacerLauncher", uiIcon: "bx bx-dots-horizontal" } : null,
|
isVisibleRoot || isAvailableRoot ? { title: t("launcher_context_menu.add-spacer"), command: "addSpacerLauncher", uiIcon: "bx bx-dots-horizontal" } : null,
|
||||||
isVisibleRoot || isAvailableRoot ? { title: "----" } : null,
|
isVisibleRoot || isAvailableRoot ? { kind: "separator" } : null,
|
||||||
|
|
||||||
isAvailableItem ? { title: t("launcher_context_menu.move-to-visible-launchers"), command: "moveLauncherToVisible", uiIcon: "bx bx-show", enabled: true } : null,
|
isAvailableItem ? { title: t("launcher_context_menu.move-to-visible-launchers"), command: "moveLauncherToVisible", uiIcon: "bx bx-show", enabled: true } : null,
|
||||||
isVisibleItem ? { title: t("launcher_context_menu.move-to-available-launchers"), command: "moveLauncherToAvailable", uiIcon: "bx bx-hide", enabled: true } : null,
|
isVisibleItem ? { title: t("launcher_context_menu.move-to-available-launchers"), command: "moveLauncherToAvailable", uiIcon: "bx bx-hide", enabled: true } : null,
|
||||||
isVisibleItem || isAvailableItem ? { title: "----" } : null,
|
isVisibleItem || isAvailableItem ? { kind: "separator" } : null,
|
||||||
|
|
||||||
{ title: `${t("launcher_context_menu.duplicate-launcher")}`, command: "duplicateSubtree", uiIcon: "bx bx-outline", enabled: isItem },
|
{ title: `${t("launcher_context_menu.duplicate-launcher")}`, command: "duplicateSubtree", uiIcon: "bx bx-outline", enabled: isItem },
|
||||||
{ title: `${t("launcher_context_menu.delete")}`, command: "deleteNotes", uiIcon: "bx bx-trash destructive-action-icon", enabled: canBeDeleted },
|
{ title: `${t("launcher_context_menu.delete")}`, command: "deleteNotes", uiIcon: "bx bx-trash destructive-action-icon", enabled: canBeDeleted },
|
||||||
|
|
||||||
{ title: "----" },
|
{ kind: "separator" },
|
||||||
|
|
||||||
{ title: t("launcher_context_menu.reset"), command: "resetLauncher", uiIcon: "bx bx-reset destructive-action-icon", enabled: canBeReset }
|
{ title: t("launcher_context_menu.reset"), command: "resetLauncher", uiIcon: "bx bx-reset destructive-action-icon", enabled: canBeReset }
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ import type NoteTreeWidget from "../widgets/note_tree.js";
|
|||||||
import type FAttachment from "../entities/fattachment.js";
|
import type FAttachment from "../entities/fattachment.js";
|
||||||
import type { SelectMenuItemEventListener } from "../components/events.js";
|
import type { SelectMenuItemEventListener } from "../components/events.js";
|
||||||
import utils from "../services/utils.js";
|
import utils from "../services/utils.js";
|
||||||
|
import attributes from "../services/attributes.js";
|
||||||
|
import { executeBulkActions } from "../services/bulk_action.js";
|
||||||
|
|
||||||
// TODO: Deduplicate once client/server is well split.
|
// TODO: Deduplicate once client/server is well split.
|
||||||
interface ConvertToAttachmentResponse {
|
interface ConvertToAttachmentResponse {
|
||||||
@@ -61,6 +63,11 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
|
|||||||
// the only exception is when the only selected note is the one that was right-clicked, then
|
// the only exception is when the only selected note is the one that was right-clicked, then
|
||||||
// it's clear what the user meant to do.
|
// it's clear what the user meant to do.
|
||||||
const selNodes = this.treeWidget.getSelectedNodes();
|
const selNodes = this.treeWidget.getSelectedNodes();
|
||||||
|
const selectedNotes = await froca.getNotes(selNodes.map(node => node.data.noteId));
|
||||||
|
if (note && !selectedNotes.includes(note)) selectedNotes.push(note);
|
||||||
|
const isArchived = selectedNotes.every(note => note.isArchived);
|
||||||
|
const canToggleArchived = !selectedNotes.some(note => note.isArchived !== isArchived);
|
||||||
|
|
||||||
const noSelectedNotes = selNodes.length === 0 || (selNodes.length === 1 && selNodes[0] === this.node);
|
const noSelectedNotes = selNodes.length === 0 || (selNodes.length === 1 && selNodes[0] === this.node);
|
||||||
|
|
||||||
const notSearch = note?.type !== "search";
|
const notSearch = note?.type !== "search";
|
||||||
@@ -69,27 +76,29 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
|
|||||||
const insertNoteAfterEnabled = isNotRoot && !isHoisted && parentNotSearch;
|
const insertNoteAfterEnabled = isNotRoot && !isHoisted && parentNotSearch;
|
||||||
|
|
||||||
const items: (MenuItem<TreeCommandNames> | null)[] = [
|
const items: (MenuItem<TreeCommandNames> | null)[] = [
|
||||||
{ title: `${t("tree-context-menu.open-in-a-new-tab")}`, command: "openInTab", uiIcon: "bx bx-link-external", enabled: noSelectedNotes },
|
{ title: t("tree-context-menu.open-in-a-new-tab"), command: "openInTab", shortcut: "Ctrl+Click", uiIcon: "bx bx-link-external", enabled: noSelectedNotes },
|
||||||
{ title: t("tree-context-menu.open-in-a-new-split"), command: "openNoteInSplit", uiIcon: "bx bx-dock-right", enabled: noSelectedNotes },
|
{ title: t("tree-context-menu.open-in-a-new-split"), command: "openNoteInSplit", uiIcon: "bx bx-dock-right", enabled: noSelectedNotes },
|
||||||
{ title: t("tree-context-menu.open-in-popup"), command: "openNoteInPopup", uiIcon: "bx bx-edit", enabled: noSelectedNotes },
|
{ title: t("tree-context-menu.open-in-popup"), command: "openNoteInPopup", uiIcon: "bx bx-edit", enabled: noSelectedNotes },
|
||||||
|
|
||||||
isHoisted
|
isHoisted
|
||||||
? null
|
? null
|
||||||
: {
|
: {
|
||||||
title: `${t("tree-context-menu.hoist-note")} <kbd data-command="toggleNoteHoisting"></kbd>`,
|
title: `${t("tree-context-menu.hoist-note")}`,
|
||||||
command: "toggleNoteHoisting",
|
command: "toggleNoteHoisting",
|
||||||
|
keyboardShortcut: "toggleNoteHoisting",
|
||||||
uiIcon: "bx bxs-chevrons-up",
|
uiIcon: "bx bxs-chevrons-up",
|
||||||
enabled: noSelectedNotes && notSearch
|
enabled: noSelectedNotes && notSearch
|
||||||
},
|
},
|
||||||
!isHoisted || !isNotRoot
|
!isHoisted || !isNotRoot
|
||||||
? null
|
? null
|
||||||
: { title: `${t("tree-context-menu.unhoist-note")} <kbd data-command="toggleNoteHoisting"></kbd>`, command: "toggleNoteHoisting", uiIcon: "bx bx-door-open" },
|
: { title: t("tree-context-menu.unhoist-note"), command: "toggleNoteHoisting", keyboardShortcut: "toggleNoteHoisting", uiIcon: "bx bx-door-open" },
|
||||||
|
|
||||||
{ title: "----" },
|
{ kind: "separator" },
|
||||||
|
|
||||||
{
|
{
|
||||||
title: `${t("tree-context-menu.insert-note-after")}<kbd data-command="createNoteAfter"></kbd>`,
|
title: t("tree-context-menu.insert-note-after"),
|
||||||
command: "insertNoteAfter",
|
command: "insertNoteAfter",
|
||||||
|
keyboardShortcut: "createNoteAfter",
|
||||||
uiIcon: "bx bx-plus",
|
uiIcon: "bx bx-plus",
|
||||||
items: insertNoteAfterEnabled ? await noteTypesService.getNoteTypeItems("insertNoteAfter") : null,
|
items: insertNoteAfterEnabled ? await noteTypesService.getNoteTypeItems("insertNoteAfter") : null,
|
||||||
enabled: insertNoteAfterEnabled && noSelectedNotes && notOptionsOrHelp,
|
enabled: insertNoteAfterEnabled && noSelectedNotes && notOptionsOrHelp,
|
||||||
@@ -97,21 +106,22 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
|
|||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
title: `${t("tree-context-menu.insert-child-note")}<kbd data-command="createNoteInto"></kbd>`,
|
title: t("tree-context-menu.insert-child-note"),
|
||||||
command: "insertChildNote",
|
command: "insertChildNote",
|
||||||
|
keyboardShortcut: "createNoteInto",
|
||||||
uiIcon: "bx bx-plus",
|
uiIcon: "bx bx-plus",
|
||||||
items: notSearch ? await noteTypesService.getNoteTypeItems("insertChildNote") : null,
|
items: notSearch ? await noteTypesService.getNoteTypeItems("insertChildNote") : null,
|
||||||
enabled: notSearch && noSelectedNotes && notOptionsOrHelp,
|
enabled: notSearch && noSelectedNotes && notOptionsOrHelp,
|
||||||
columns: 2
|
columns: 2
|
||||||
},
|
},
|
||||||
|
|
||||||
{ title: "----" },
|
{ kind: "separator" },
|
||||||
|
|
||||||
{ title: t("tree-context-menu.protect-subtree"), command: "protectSubtree", uiIcon: "bx bx-check-shield", enabled: noSelectedNotes },
|
{ title: t("tree-context-menu.protect-subtree"), command: "protectSubtree", uiIcon: "bx bx-check-shield", enabled: noSelectedNotes },
|
||||||
|
|
||||||
{ title: t("tree-context-menu.unprotect-subtree"), command: "unprotectSubtree", uiIcon: "bx bx-shield", enabled: noSelectedNotes },
|
{ title: t("tree-context-menu.unprotect-subtree"), command: "unprotectSubtree", uiIcon: "bx bx-shield", enabled: noSelectedNotes },
|
||||||
|
|
||||||
{ title: "----" },
|
{ kind: "separator" },
|
||||||
|
|
||||||
{
|
{
|
||||||
title: t("tree-context-menu.advanced"),
|
title: t("tree-context-menu.advanced"),
|
||||||
@@ -120,48 +130,52 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
|
|||||||
items: [
|
items: [
|
||||||
{ title: t("tree-context-menu.apply-bulk-actions"), command: "openBulkActionsDialog", uiIcon: "bx bx-list-plus", enabled: true },
|
{ title: t("tree-context-menu.apply-bulk-actions"), command: "openBulkActionsDialog", uiIcon: "bx bx-list-plus", enabled: true },
|
||||||
|
|
||||||
{ title: "----" },
|
{ kind: "separator" },
|
||||||
|
|
||||||
{
|
{
|
||||||
title: `${t("tree-context-menu.edit-branch-prefix")} <kbd data-command="editBranchPrefix"></kbd>`,
|
title: t("tree-context-menu.edit-branch-prefix"),
|
||||||
command: "editBranchPrefix",
|
command: "editBranchPrefix",
|
||||||
|
keyboardShortcut: "editBranchPrefix",
|
||||||
uiIcon: "bx bx-rename",
|
uiIcon: "bx bx-rename",
|
||||||
enabled: isNotRoot && parentNotSearch && noSelectedNotes && notOptionsOrHelp
|
enabled: isNotRoot && parentNotSearch && noSelectedNotes && notOptionsOrHelp
|
||||||
},
|
},
|
||||||
{ title: t("tree-context-menu.convert-to-attachment"), command: "convertNoteToAttachment", uiIcon: "bx bx-paperclip", enabled: isNotRoot && !isHoisted && notOptionsOrHelp },
|
{ title: t("tree-context-menu.convert-to-attachment"), command: "convertNoteToAttachment", uiIcon: "bx bx-paperclip", enabled: isNotRoot && !isHoisted && notOptionsOrHelp },
|
||||||
|
|
||||||
{ title: "----" },
|
{ kind: "separator" },
|
||||||
|
|
||||||
{ title: `${t("tree-context-menu.expand-subtree")} <kbd data-command="expandSubtree"></kbd>`, command: "expandSubtree", uiIcon: "bx bx-expand", enabled: noSelectedNotes },
|
{ title: t("tree-context-menu.expand-subtree"), command: "expandSubtree", keyboardShortcut: "expandSubtree", uiIcon: "bx bx-expand", enabled: noSelectedNotes },
|
||||||
{ title: `${t("tree-context-menu.collapse-subtree")} <kbd data-command="collapseSubtree"></kbd>`, command: "collapseSubtree", uiIcon: "bx bx-collapse", enabled: noSelectedNotes },
|
{ title: t("tree-context-menu.collapse-subtree"), command: "collapseSubtree", keyboardShortcut: "collapseSubtree", uiIcon: "bx bx-collapse", enabled: noSelectedNotes },
|
||||||
{
|
{
|
||||||
title: `${t("tree-context-menu.sort-by")} <kbd data-command="sortChildNotes"></kbd>`,
|
title: t("tree-context-menu.sort-by"),
|
||||||
command: "sortChildNotes",
|
command: "sortChildNotes",
|
||||||
|
keyboardShortcut: "sortChildNotes",
|
||||||
uiIcon: "bx bx-sort-down",
|
uiIcon: "bx bx-sort-down",
|
||||||
enabled: noSelectedNotes && notSearch
|
enabled: noSelectedNotes && notSearch
|
||||||
},
|
},
|
||||||
|
|
||||||
{ title: "----" },
|
{ kind: "separator" },
|
||||||
|
|
||||||
{ title: t("tree-context-menu.copy-note-path-to-clipboard"), command: "copyNotePathToClipboard", uiIcon: "bx bx-directions", enabled: true },
|
{ title: t("tree-context-menu.copy-note-path-to-clipboard"), command: "copyNotePathToClipboard", uiIcon: "bx bx-directions", enabled: true },
|
||||||
{ title: t("tree-context-menu.recent-changes-in-subtree"), command: "recentChangesInSubtree", uiIcon: "bx bx-history", enabled: noSelectedNotes && notOptionsOrHelp }
|
{ title: t("tree-context-menu.recent-changes-in-subtree"), command: "recentChangesInSubtree", uiIcon: "bx bx-history", enabled: noSelectedNotes && notOptionsOrHelp }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
{ title: "----" },
|
{ kind: "separator" },
|
||||||
|
|
||||||
{
|
{
|
||||||
title: `${t("tree-context-menu.cut")} <kbd data-command="cutNotesToClipboard"></kbd>`,
|
title: t("tree-context-menu.cut"),
|
||||||
command: "cutNotesToClipboard",
|
command: "cutNotesToClipboard",
|
||||||
|
keyboardShortcut: "cutNotesToClipboard",
|
||||||
uiIcon: "bx bx-cut",
|
uiIcon: "bx bx-cut",
|
||||||
enabled: isNotRoot && !isHoisted && parentNotSearch
|
enabled: isNotRoot && !isHoisted && parentNotSearch
|
||||||
},
|
},
|
||||||
|
|
||||||
{ title: `${t("tree-context-menu.copy-clone")} <kbd data-command="copyNotesToClipboard"></kbd>`, command: "copyNotesToClipboard", uiIcon: "bx bx-copy", enabled: isNotRoot && !isHoisted },
|
{ title: t("tree-context-menu.copy-clone"), command: "copyNotesToClipboard", keyboardShortcut: "copyNotesToClipboard", uiIcon: "bx bx-copy", enabled: isNotRoot && !isHoisted },
|
||||||
|
|
||||||
{
|
{
|
||||||
title: `${t("tree-context-menu.paste-into")} <kbd data-command="pasteNotesFromClipboard"></kbd>`,
|
title: t("tree-context-menu.paste-into"),
|
||||||
command: "pasteNotesFromClipboard",
|
command: "pasteNotesFromClipboard",
|
||||||
|
keyboardShortcut: "pasteNotesFromClipboard",
|
||||||
uiIcon: "bx bx-paste",
|
uiIcon: "bx bx-paste",
|
||||||
enabled: !clipboard.isClipboardEmpty() && notSearch && noSelectedNotes
|
enabled: !clipboard.isClipboardEmpty() && notSearch && noSelectedNotes
|
||||||
},
|
},
|
||||||
@@ -174,39 +188,71 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
|
|||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
title: `${t("tree-context-menu.move-to")} <kbd data-command="moveNotesTo"></kbd>`,
|
title: t("tree-context-menu.move-to"),
|
||||||
command: "moveNotesTo",
|
command: "moveNotesTo",
|
||||||
|
keyboardShortcut: "moveNotesTo",
|
||||||
uiIcon: "bx bx-transfer",
|
uiIcon: "bx bx-transfer",
|
||||||
enabled: isNotRoot && !isHoisted && parentNotSearch
|
enabled: isNotRoot && !isHoisted && parentNotSearch
|
||||||
},
|
},
|
||||||
|
|
||||||
{ title: `${t("tree-context-menu.clone-to")} <kbd data-command="cloneNotesTo"></kbd>`, command: "cloneNotesTo", uiIcon: "bx bx-duplicate", enabled: isNotRoot && !isHoisted },
|
{ title: t("tree-context-menu.clone-to"), command: "cloneNotesTo", keyboardShortcut: "cloneNotesTo", uiIcon: "bx bx-duplicate", enabled: isNotRoot && !isHoisted },
|
||||||
|
|
||||||
{
|
{
|
||||||
title: `${t("tree-context-menu.duplicate")} <kbd data-command="duplicateSubtree">`,
|
title: t("tree-context-menu.duplicate"),
|
||||||
command: "duplicateSubtree",
|
command: "duplicateSubtree",
|
||||||
|
keyboardShortcut: "duplicateSubtree",
|
||||||
uiIcon: "bx bx-outline",
|
uiIcon: "bx bx-outline",
|
||||||
enabled: parentNotSearch && isNotRoot && !isHoisted && notOptionsOrHelp
|
enabled: parentNotSearch && isNotRoot && !isHoisted && notOptionsOrHelp
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
title: `${t("tree-context-menu.delete")} <kbd data-command="deleteNotes"></kbd>`,
|
title: !isArchived ? t("tree-context-menu.archive") : t("tree-context-menu.unarchive"),
|
||||||
|
uiIcon: !isArchived ? "bx bx-archive" : "bx bx-archive-out",
|
||||||
|
enabled: canToggleArchived,
|
||||||
|
handler: () => {
|
||||||
|
if (!selectedNotes.length) return;
|
||||||
|
|
||||||
|
if (selectedNotes.length == 1) {
|
||||||
|
const note = selectedNotes[0];
|
||||||
|
if (!isArchived) {
|
||||||
|
attributes.addLabel(note.noteId, "archived");
|
||||||
|
} else {
|
||||||
|
attributes.removeOwnedLabelByName(note, "archived");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const noteIds = selectedNotes.map(note => note.noteId);
|
||||||
|
if (!isArchived) {
|
||||||
|
executeBulkActions(noteIds, [{
|
||||||
|
name: "addLabel", labelName: "archived"
|
||||||
|
}]);
|
||||||
|
} else {
|
||||||
|
executeBulkActions(noteIds, [{
|
||||||
|
name: "deleteLabel", labelName: "archived"
|
||||||
|
}]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t("tree-context-menu.delete"),
|
||||||
command: "deleteNotes",
|
command: "deleteNotes",
|
||||||
|
keyboardShortcut: "deleteNotes",
|
||||||
uiIcon: "bx bx-trash destructive-action-icon",
|
uiIcon: "bx bx-trash destructive-action-icon",
|
||||||
enabled: isNotRoot && !isHoisted && parentNotSearch && notOptionsOrHelp
|
enabled: isNotRoot && !isHoisted && parentNotSearch && notOptionsOrHelp
|
||||||
},
|
},
|
||||||
|
|
||||||
{ title: "----" },
|
{ kind: "separator" },
|
||||||
|
|
||||||
{ title: t("tree-context-menu.import-into-note"), command: "importIntoNote", uiIcon: "bx bx-import", enabled: notSearch && noSelectedNotes && notOptionsOrHelp },
|
{ title: t("tree-context-menu.import-into-note"), command: "importIntoNote", uiIcon: "bx bx-import", enabled: notSearch && noSelectedNotes && notOptionsOrHelp },
|
||||||
|
|
||||||
{ title: t("tree-context-menu.export"), command: "exportNote", uiIcon: "bx bx-export", enabled: notSearch && noSelectedNotes && notOptionsOrHelp },
|
{ title: t("tree-context-menu.export"), command: "exportNote", uiIcon: "bx bx-export", enabled: notSearch && noSelectedNotes && notOptionsOrHelp },
|
||||||
|
|
||||||
{ title: "----" },
|
{ kind: "separator" },
|
||||||
|
|
||||||
{
|
{
|
||||||
title: `${t("tree-context-menu.search-in-subtree")} <kbd data-command="searchInSubtree"></kbd>`,
|
title: t("tree-context-menu.search-in-subtree"),
|
||||||
command: "searchInSubtree",
|
command: "searchInSubtree",
|
||||||
|
keyboardShortcut: "searchInSubtree",
|
||||||
uiIcon: "bx bx-search",
|
uiIcon: "bx bx-search",
|
||||||
enabled: notSearch && noSelectedNotes
|
enabled: notSearch && noSelectedNotes
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import appContext from "./components/app_context.js";
|
import appContext from "./components/app_context.js";
|
||||||
import noteAutocompleteService from "./services/note_autocomplete.js";
|
import noteAutocompleteService from "./services/note_autocomplete.js";
|
||||||
import glob from "./services/glob.js";
|
import glob from "./services/glob.js";
|
||||||
import "./stylesheets/bootstrap.scss";
|
import "bootstrap/dist/css/bootstrap.min.css";
|
||||||
import "boxicons/css/boxicons.min.css";
|
import "boxicons/css/boxicons.min.css";
|
||||||
import "autocomplete.js/index_jquery.js";
|
import "autocomplete.js/index_jquery.js";
|
||||||
|
|
||||||
|
|||||||
@@ -210,7 +210,7 @@ function makeToast(id: string, message: string): ToastOptions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ws.subscribeToMessages(async (message) => {
|
ws.subscribeToMessages(async (message) => {
|
||||||
if (message.taskType !== "deleteNotes") {
|
if (!("taskType" in message) || message.taskType !== "deleteNotes") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -228,7 +228,7 @@ ws.subscribeToMessages(async (message) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
ws.subscribeToMessages(async (message) => {
|
ws.subscribeToMessages(async (message) => {
|
||||||
if (message.taskType !== "undeleteNotes") {
|
if (!("taskType" in message) || message.taskType !== "undeleteNotes") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -256,8 +256,19 @@ function renderFile(entity: FNote | FAttachment, type: string, $renderedContent:
|
|||||||
</button>
|
</button>
|
||||||
`);
|
`);
|
||||||
|
|
||||||
$downloadButton.on("click", () => openService.downloadFileNote(entity.noteId));
|
$downloadButton.on("click", (e) => {
|
||||||
$openButton.on("click", () => openService.openNoteExternally(entity.noteId, entity.mime));
|
e.stopPropagation();
|
||||||
|
openService.downloadFileNote(entity.noteId)
|
||||||
|
});
|
||||||
|
$openButton.on("click", async (e) => {
|
||||||
|
const iconEl = $openButton.find("> .bx");
|
||||||
|
iconEl.removeClass("bx bx-link-external");
|
||||||
|
iconEl.addClass("bx bx-loader spin");
|
||||||
|
e.stopPropagation();
|
||||||
|
await openService.openNoteExternally(entity.noteId, entity.mime)
|
||||||
|
iconEl.removeClass("bx bx-loader spin");
|
||||||
|
iconEl.addClass("bx bx-link-external");
|
||||||
|
});
|
||||||
// open doesn't work for protected notes since it works through a browser which isn't in protected session
|
// open doesn't work for protected notes since it works through a browser which isn't in protected session
|
||||||
$openButton.toggle(!entity.isProtected);
|
$openButton.toggle(!entity.isProtected);
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ async function confirmDeleteNoteBoxWithNote(title: string) {
|
|||||||
return new Promise<ConfirmDialogResult | undefined>((res) => appContext.triggerCommand("showConfirmDeleteNoteBoxWithNoteDialog", { title, callback: res }));
|
return new Promise<ConfirmDialogResult | undefined>((res) => appContext.triggerCommand("showConfirmDeleteNoteBoxWithNoteDialog", { title, callback: res }));
|
||||||
}
|
}
|
||||||
|
|
||||||
async function prompt(props: PromptDialogOptions) {
|
export async function prompt(props: PromptDialogOptions) {
|
||||||
return new Promise<string | null>((res) => appContext.triggerCommand("showPromptDialog", { ...props, callback: res }));
|
return new Promise<string | null>((res) => appContext.triggerCommand("showPromptDialog", { ...props, callback: res }));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -48,6 +48,6 @@ function getUrl(docNameValue: string, language: string) {
|
|||||||
// Cannot have spaces in the URL due to how JQuery.load works.
|
// Cannot have spaces in the URL due to how JQuery.load works.
|
||||||
docNameValue = docNameValue.replaceAll(" ", "%20");
|
docNameValue = docNameValue.replaceAll(" ", "%20");
|
||||||
|
|
||||||
const basePath = window.glob.isDev ? new URL(window.glob.assetPath).pathname : window.glob.assetPath;
|
const basePath = window.glob.isDev ? window.glob.assetPath + "/.." : window.glob.assetPath;
|
||||||
return `${basePath}/doc_notes/${language}/${docNameValue}.html`;
|
return `${basePath}/doc_notes/${language}/${docNameValue}.html`;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,8 @@
|
|||||||
import ws from "./ws.js";
|
import ws from "./ws.js";
|
||||||
import appContext from "../components/app_context.js";
|
import appContext from "../components/app_context.js";
|
||||||
|
import { OpenedFileUpdateStatus } from "@triliumnext/commons";
|
||||||
|
|
||||||
// TODO: Deduplicate
|
const fileModificationStatus: Record<string, Record<string, OpenedFileUpdateStatus>> = {
|
||||||
interface Message {
|
|
||||||
type: string;
|
|
||||||
entityType: string;
|
|
||||||
entityId: string;
|
|
||||||
lastModifiedMs: number;
|
|
||||||
filePath: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
const fileModificationStatus: Record<string, Record<string, Message>> = {
|
|
||||||
notes: {},
|
notes: {},
|
||||||
attachments: {}
|
attachments: {}
|
||||||
};
|
};
|
||||||
@@ -39,7 +31,7 @@ function ignoreModification(entityType: string, entityId: string) {
|
|||||||
delete fileModificationStatus[entityType][entityId];
|
delete fileModificationStatus[entityType][entityId];
|
||||||
}
|
}
|
||||||
|
|
||||||
ws.subscribeToMessages(async (message: Message) => {
|
ws.subscribeToMessages(async message => {
|
||||||
if (message.type !== "openedFileUpdated") {
|
if (message.type !== "openedFileUpdated") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import FAttribute, { type FAttributeRow } from "../entities/fattribute.js";
|
|||||||
import FAttachment, { type FAttachmentRow } from "../entities/fattachment.js";
|
import FAttachment, { type FAttachmentRow } from "../entities/fattachment.js";
|
||||||
import type { default as FNote, FNoteRow } from "../entities/fnote.js";
|
import type { default as FNote, FNoteRow } from "../entities/fnote.js";
|
||||||
import type { EntityChange } from "../server_types.js";
|
import type { EntityChange } from "../server_types.js";
|
||||||
|
import type { OptionNames } from "@triliumnext/commons";
|
||||||
|
|
||||||
async function processEntityChanges(entityChanges: EntityChange[]) {
|
async function processEntityChanges(entityChanges: EntityChange[]) {
|
||||||
const loadResults = new LoadResults(entityChanges);
|
const loadResults = new LoadResults(entityChanges);
|
||||||
@@ -30,9 +31,8 @@ async function processEntityChanges(entityChanges: EntityChange[]) {
|
|||||||
continue; // only noise
|
continue; // only noise
|
||||||
}
|
}
|
||||||
|
|
||||||
options.set(attributeEntity.name, attributeEntity.value);
|
options.set(attributeEntity.name as OptionNames, attributeEntity.value);
|
||||||
|
loadResults.addOption(attributeEntity.name as OptionNames);
|
||||||
loadResults.addOption(attributeEntity.name);
|
|
||||||
} else if (ec.entityName === "attachments") {
|
} else if (ec.entityName === "attachments") {
|
||||||
processAttachment(loadResults, ec);
|
processAttachment(loadResults, ec);
|
||||||
} else if (ec.entityName === "blobs") {
|
} else if (ec.entityName === "blobs") {
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import dayjs from "dayjs";
|
|||||||
import type NoteContext from "../components/note_context.js";
|
import type NoteContext from "../components/note_context.js";
|
||||||
import type NoteDetailWidget from "../widgets/note_detail.js";
|
import type NoteDetailWidget from "../widgets/note_detail.js";
|
||||||
import type Component from "../components/component.js";
|
import type Component from "../components/component.js";
|
||||||
|
import { formatLogMessage } from "@triliumnext/commons";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A whole number
|
* A whole number
|
||||||
@@ -455,7 +456,7 @@ export interface Api {
|
|||||||
/**
|
/**
|
||||||
* Log given message to the log pane in UI
|
* Log given message to the log pane in UI
|
||||||
*/
|
*/
|
||||||
log(message: string): void;
|
log(message: string | object): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -696,7 +697,7 @@ function FrontendScriptApi(this: Api, startNote: FNote, currentNote: FNote, orig
|
|||||||
this.log = (message) => {
|
this.log = (message) => {
|
||||||
const { noteId } = this.startNote;
|
const { noteId } = this.startNote;
|
||||||
|
|
||||||
message = `${utils.now()}: ${message}`;
|
message = `${utils.now()}: ${formatLogMessage(message)}`;
|
||||||
|
|
||||||
console.log(`Script ${noteId}: ${message}`);
|
console.log(`Script ${noteId}: ${message}`);
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import ws from "./ws.js";
|
|||||||
import utils from "./utils.js";
|
import utils from "./utils.js";
|
||||||
import appContext from "../components/app_context.js";
|
import appContext from "../components/app_context.js";
|
||||||
import { t } from "./i18n.js";
|
import { t } from "./i18n.js";
|
||||||
|
import { WebSocketMessage } from "@triliumnext/commons";
|
||||||
|
|
||||||
type BooleanLike = boolean | "true" | "false";
|
type BooleanLike = boolean | "true" | "false";
|
||||||
|
|
||||||
@@ -66,7 +67,7 @@ function makeToast(id: string, message: string): ToastOptions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ws.subscribeToMessages(async (message) => {
|
ws.subscribeToMessages(async (message) => {
|
||||||
if (message.taskType !== "importNotes") {
|
if (!("taskType" in message) || message.taskType !== "importNotes") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,8 +88,8 @@ ws.subscribeToMessages(async (message) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
ws.subscribeToMessages(async (message) => {
|
ws.subscribeToMessages(async (message: WebSocketMessage) => {
|
||||||
if (message.taskType !== "importAttachments") {
|
if (!("taskType" in message) || message.taskType !== "importAttachments") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NoteType } from "@triliumnext/commons";
|
import { NoteType } from "@triliumnext/commons";
|
||||||
import { ViewTypeOptions } from "./note_list_renderer";
|
|
||||||
import FNote from "../entities/fnote";
|
import FNote from "../entities/fnote";
|
||||||
|
import { ViewTypeOptions } from "../widgets/collections/interface";
|
||||||
|
|
||||||
export const byNoteType: Record<Exclude<NoteType, "book">, string | null> = {
|
export const byNoteType: Record<Exclude<NoteType, "book">, string | null> = {
|
||||||
canvas: null,
|
canvas: null,
|
||||||
|
|||||||
@@ -3,16 +3,7 @@ import linkContextMenuService from "../menus/link_context_menu.js";
|
|||||||
import appContext, { type NoteCommandData } from "../components/app_context.js";
|
import appContext, { type NoteCommandData } from "../components/app_context.js";
|
||||||
import froca from "./froca.js";
|
import froca from "./froca.js";
|
||||||
import utils from "./utils.js";
|
import utils from "./utils.js";
|
||||||
|
import { ALLOWED_PROTOCOLS } from "@triliumnext/commons";
|
||||||
// Be consistent with `allowedSchemes` in `src\services\html_sanitizer.ts`
|
|
||||||
// TODO: Deduplicate with server once we can.
|
|
||||||
export const ALLOWED_PROTOCOLS = [
|
|
||||||
'http', 'https', 'ftp', 'ftps', 'mailto', 'data', 'evernote', 'file', 'facetime', 'gemini', 'git',
|
|
||||||
'gopher', 'imap', 'irc', 'irc6', 'jabber', 'jar', 'lastfm', 'ldap', 'ldaps', 'magnet', 'message',
|
|
||||||
'mumble', 'nfs', 'onenote', 'pop', 'rmi', 's3', 'sftp', 'skype', 'sms', 'spotify', 'steam', 'svn', 'udp',
|
|
||||||
'view-source', 'vlc', 'vnc', 'ws', 'wss', 'xmpp', 'jdbc', 'slack', 'tel', 'smb', 'zotero', 'geo',
|
|
||||||
'mid'
|
|
||||||
];
|
|
||||||
|
|
||||||
function getNotePathFromUrl(url: string) {
|
function getNotePathFromUrl(url: string) {
|
||||||
const notePathMatch = /#(root[A-Za-z0-9_/]*)$/.exec(url);
|
const notePathMatch = /#(root[A-Za-z0-9_/]*)$/.exec(url);
|
||||||
@@ -35,8 +26,7 @@ async function getLinkIcon(noteId: string, viewMode: ViewMode | undefined) {
|
|||||||
return icon;
|
return icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Remove `string` once all the view modes have been mapped.
|
export type ViewMode = "default" | "source" | "attachments" | "contextual-help";
|
||||||
type ViewMode = "default" | "source" | "attachments" | "contextual-help" | string;
|
|
||||||
|
|
||||||
export interface ViewScope {
|
export interface ViewScope {
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import type { AttachmentRow, EtapiTokenRow } from "@triliumnext/commons";
|
import type { AttachmentRow, EtapiTokenRow, OptionNames } from "@triliumnext/commons";
|
||||||
import type { AttributeType } from "../entities/fattribute.js";
|
import type { AttributeType } from "../entities/fattribute.js";
|
||||||
import type { EntityChange } from "../server_types.js";
|
import type { EntityChange } from "../server_types.js";
|
||||||
|
|
||||||
@@ -67,7 +67,7 @@ export default class LoadResults {
|
|||||||
private revisionRows: RevisionRow[];
|
private revisionRows: RevisionRow[];
|
||||||
private noteReorderings: string[];
|
private noteReorderings: string[];
|
||||||
private contentNoteIdToComponentId: ContentNoteIdToComponentIdRow[];
|
private contentNoteIdToComponentId: ContentNoteIdToComponentIdRow[];
|
||||||
private optionNames: string[];
|
private optionNames: OptionNames[];
|
||||||
private attachmentRows: AttachmentRow[];
|
private attachmentRows: AttachmentRow[];
|
||||||
public hasEtapiTokenChanges: boolean = false;
|
public hasEtapiTokenChanges: boolean = false;
|
||||||
|
|
||||||
@@ -180,11 +180,11 @@ export default class LoadResults {
|
|||||||
return this.contentNoteIdToComponentId.find((l) => l.noteId === noteId && l.componentId !== componentId);
|
return this.contentNoteIdToComponentId.find((l) => l.noteId === noteId && l.componentId !== componentId);
|
||||||
}
|
}
|
||||||
|
|
||||||
addOption(name: string) {
|
addOption(name: OptionNames) {
|
||||||
this.optionNames.push(name);
|
this.optionNames.push(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
isOptionReloaded(name: string) {
|
isOptionReloaded(name: OptionNames) {
|
||||||
return this.optionNames.includes(name);
|
return this.optionNames.includes(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,71 +0,0 @@
|
|||||||
import type FNote from "../entities/fnote.js";
|
|
||||||
import BoardView from "../widgets/view_widgets/board_view/index.js";
|
|
||||||
import CalendarView from "../widgets/view_widgets/calendar_view.js";
|
|
||||||
import GeoView from "../widgets/view_widgets/geo_view/index.js";
|
|
||||||
import ListOrGridView from "../widgets/view_widgets/list_or_grid_view.js";
|
|
||||||
import TableView from "../widgets/view_widgets/table_view/index.js";
|
|
||||||
import type { ViewModeArgs } from "../widgets/view_widgets/view_mode.js";
|
|
||||||
import type ViewMode from "../widgets/view_widgets/view_mode.js";
|
|
||||||
|
|
||||||
const allViewTypes = ["list", "grid", "calendar", "table", "geoMap", "board"] as const;
|
|
||||||
export type ArgsWithoutNoteId = Omit<ViewModeArgs, "noteIds">;
|
|
||||||
export type ViewTypeOptions = typeof allViewTypes[number];
|
|
||||||
|
|
||||||
export default class NoteListRenderer {
|
|
||||||
|
|
||||||
private viewType: ViewTypeOptions;
|
|
||||||
private args: ArgsWithoutNoteId;
|
|
||||||
public viewMode?: ViewMode<any>;
|
|
||||||
|
|
||||||
constructor(args: ArgsWithoutNoteId) {
|
|
||||||
this.args = args;
|
|
||||||
this.viewType = this.#getViewType(args.parentNote);
|
|
||||||
}
|
|
||||||
|
|
||||||
#getViewType(parentNote: FNote): ViewTypeOptions {
|
|
||||||
const viewType = parentNote.getLabelValue("viewType");
|
|
||||||
|
|
||||||
if (!(allViewTypes as readonly string[]).includes(viewType || "")) {
|
|
||||||
// when not explicitly set, decide based on the note type
|
|
||||||
return parentNote.type === "search" ? "list" : "grid";
|
|
||||||
} else {
|
|
||||||
return viewType as ViewTypeOptions;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
get isFullHeight() {
|
|
||||||
switch (this.viewType) {
|
|
||||||
case "list":
|
|
||||||
case "grid":
|
|
||||||
return false;
|
|
||||||
default:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async renderList() {
|
|
||||||
const args = this.args;
|
|
||||||
const viewMode = this.#buildViewMode(args);
|
|
||||||
this.viewMode = viewMode;
|
|
||||||
await viewMode.beforeRender();
|
|
||||||
return await viewMode.renderList();
|
|
||||||
}
|
|
||||||
|
|
||||||
#buildViewMode(args: ViewModeArgs) {
|
|
||||||
switch (this.viewType) {
|
|
||||||
case "calendar":
|
|
||||||
return new CalendarView(args);
|
|
||||||
case "table":
|
|
||||||
return new TableView(args);
|
|
||||||
case "geoMap":
|
|
||||||
return new GeoView(args);
|
|
||||||
case "board":
|
|
||||||
return new BoardView(args);
|
|
||||||
case "list":
|
|
||||||
case "grid":
|
|
||||||
default:
|
|
||||||
return new ListOrGridView(this.viewType, args);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import { t } from "./i18n.js";
|
import { t } from "./i18n.js";
|
||||||
import froca from "./froca.js";
|
import froca from "./froca.js";
|
||||||
import server from "./server.js";
|
import server from "./server.js";
|
||||||
import type { MenuCommandItem, MenuItem, MenuItemBadge } from "../menus/context_menu.js";
|
import type { MenuCommandItem, MenuItem, MenuItemBadge, MenuSeparatorItem } from "../menus/context_menu.js";
|
||||||
import type { NoteType } from "../entities/fnote.js";
|
import type { NoteType } from "../entities/fnote.js";
|
||||||
import type { TreeCommandNames } from "../menus/tree_context_menu.js";
|
import type { TreeCommandNames } from "../menus/tree_context_menu.js";
|
||||||
|
|
||||||
@@ -73,7 +73,7 @@ const BETA_BADGE = {
|
|||||||
title: t("note_types.beta-feature")
|
title: t("note_types.beta-feature")
|
||||||
};
|
};
|
||||||
|
|
||||||
const SEPARATOR = { title: "----" };
|
const SEPARATOR: MenuSeparatorItem = { kind: "separator" };
|
||||||
|
|
||||||
const creationDateCache = new Map<string, Date>();
|
const creationDateCache = new Map<string, Date>();
|
||||||
let rootCreationDate: Date | undefined;
|
let rootCreationDate: Date | undefined;
|
||||||
@@ -81,8 +81,8 @@ let rootCreationDate: Date | undefined;
|
|||||||
async function getNoteTypeItems(command?: TreeCommandNames) {
|
async function getNoteTypeItems(command?: TreeCommandNames) {
|
||||||
const items: MenuItem<TreeCommandNames>[] = [
|
const items: MenuItem<TreeCommandNames>[] = [
|
||||||
...getBlankNoteTypes(command),
|
...getBlankNoteTypes(command),
|
||||||
...await getBuiltInTemplates(t("note_types.collections"), command, true),
|
|
||||||
...await getBuiltInTemplates(null, command, false),
|
...await getBuiltInTemplates(null, command, false),
|
||||||
|
...await getBuiltInTemplates(t("note_types.collections"), command, true),
|
||||||
...await getUserTemplates(command)
|
...await getUserTemplates(command)
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -121,7 +121,10 @@ async function getUserTemplates(command?: TreeCommandNames) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const items: MenuItem<TreeCommandNames>[] = [
|
const items: MenuItem<TreeCommandNames>[] = [
|
||||||
SEPARATOR
|
{
|
||||||
|
title: t("note_type_chooser.templates"),
|
||||||
|
kind: "header"
|
||||||
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
for (const templateNote of templateNotes) {
|
for (const templateNote of templateNotes) {
|
||||||
@@ -158,8 +161,7 @@ async function getBuiltInTemplates(title: string | null, command: TreeCommandNam
|
|||||||
if (title) {
|
if (title) {
|
||||||
items.push({
|
items.push({
|
||||||
title: title,
|
title: title,
|
||||||
enabled: false,
|
kind: "header"
|
||||||
uiIcon: "bx bx-empty"
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
items.push(SEPARATOR);
|
items.push(SEPARATOR);
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ class Options {
|
|||||||
this.arr = arr;
|
this.arr = arr;
|
||||||
}
|
}
|
||||||
|
|
||||||
get(key: string) {
|
get(key: OptionNames) {
|
||||||
return this.arr?.[key] as string;
|
return this.arr?.[key] as string;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ class Options {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getInt(key: string) {
|
getInt(key: OptionNames) {
|
||||||
const value = this.arr?.[key];
|
const value = this.arr?.[key];
|
||||||
if (typeof value === "number") {
|
if (typeof value === "number") {
|
||||||
return value;
|
return value;
|
||||||
@@ -52,7 +52,7 @@ class Options {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
getFloat(key: string) {
|
getFloat(key: OptionNames) {
|
||||||
const value = this.arr?.[key];
|
const value = this.arr?.[key];
|
||||||
if (typeof value !== "string") {
|
if (typeof value !== "string") {
|
||||||
return null;
|
return null;
|
||||||
@@ -60,15 +60,15 @@ class Options {
|
|||||||
return parseFloat(value);
|
return parseFloat(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
is(key: string) {
|
is(key: OptionNames) {
|
||||||
return this.arr[key] === "true";
|
return this.arr[key] === "true";
|
||||||
}
|
}
|
||||||
|
|
||||||
set(key: string, value: OptionValue) {
|
set(key: OptionNames, value: OptionValue) {
|
||||||
this.arr[key] = value;
|
this.arr[key] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
async save(key: string, value: OptionValue) {
|
async save(key: OptionNames, value: OptionValue) {
|
||||||
this.set(key, value);
|
this.set(key, value);
|
||||||
|
|
||||||
const payload: Record<string, OptionValue> = {};
|
const payload: Record<string, OptionValue> = {};
|
||||||
@@ -85,7 +85,7 @@ class Options {
|
|||||||
await server.put<void>("options", newValues);
|
await server.put<void>("options", newValues);
|
||||||
}
|
}
|
||||||
|
|
||||||
async toggle(key: string) {
|
async toggle(key: OptionNames) {
|
||||||
await this.save(key, (!this.is(key)).toString());
|
await this.save(key, (!this.is(key)).toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,11 +107,11 @@ function makeToast(message: Message, title: string, text: string): ToastOptions
|
|||||||
}
|
}
|
||||||
|
|
||||||
ws.subscribeToMessages(async (message) => {
|
ws.subscribeToMessages(async (message) => {
|
||||||
if (message.taskType !== "protectNotes") {
|
if (!("taskType" in message) || message.taskType !== "protectNotes") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const isProtecting = message.data.protect;
|
const isProtecting = message.data?.protect;
|
||||||
const title = isProtecting ? t("protected_session.protecting-title") : t("protected_session.unprotecting-title");
|
const title = isProtecting ? t("protected_session.protecting-title") : t("protected_session.unprotecting-title");
|
||||||
|
|
||||||
if (message.type === "taskError") {
|
if (message.type === "taskError") {
|
||||||
|
|||||||
@@ -10,6 +10,10 @@ let leftInstance: ReturnType<typeof Split> | null;
|
|||||||
let rightPaneWidth: number;
|
let rightPaneWidth: number;
|
||||||
let rightInstance: ReturnType<typeof Split> | null;
|
let rightInstance: ReturnType<typeof Split> | null;
|
||||||
|
|
||||||
|
const noteSplitMap = new Map<string[], ReturnType<typeof Split> | undefined>(); // key: a group of ntxIds, value: the corresponding Split instance
|
||||||
|
const noteSplitRafMap = new Map<string[], number>();
|
||||||
|
let splitNoteContainer: HTMLElement | undefined;
|
||||||
|
|
||||||
function setupLeftPaneResizer(leftPaneVisible: boolean) {
|
function setupLeftPaneResizer(leftPaneVisible: boolean) {
|
||||||
if (leftInstance) {
|
if (leftInstance) {
|
||||||
leftInstance.destroy();
|
leftInstance.destroy();
|
||||||
@@ -83,7 +87,86 @@ function setupRightPaneResizer() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function findKeyByNtxId(ntxId: string): string[] | undefined {
|
||||||
|
// Find the corresponding key in noteSplitMap based on ntxId
|
||||||
|
for (const key of noteSplitMap.keys()) {
|
||||||
|
if (key.includes(ntxId)) return key;
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setupNoteSplitResizer(ntxIds: string[]) {
|
||||||
|
let targetNtxIds: string[] | undefined;
|
||||||
|
for (const ntxId of ntxIds) {
|
||||||
|
targetNtxIds = findKeyByNtxId(ntxId);
|
||||||
|
if (targetNtxIds) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetNtxIds) {
|
||||||
|
noteSplitMap.get(targetNtxIds)?.destroy();
|
||||||
|
for (const id of ntxIds) {
|
||||||
|
if (!targetNtxIds.includes(id)) {
|
||||||
|
targetNtxIds.push(id)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
targetNtxIds = [...ntxIds];
|
||||||
|
}
|
||||||
|
noteSplitMap.set(targetNtxIds, undefined);
|
||||||
|
createSplitInstance(targetNtxIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function delNoteSplitResizer(ntxIds: string[]) {
|
||||||
|
let targetNtxIds = findKeyByNtxId(ntxIds[0]);
|
||||||
|
if (!targetNtxIds) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
noteSplitMap.get(targetNtxIds)?.destroy();
|
||||||
|
noteSplitMap.delete(targetNtxIds);
|
||||||
|
targetNtxIds = targetNtxIds.filter(id => !ntxIds.includes(id));
|
||||||
|
|
||||||
|
if (targetNtxIds.length >= 2) {
|
||||||
|
noteSplitMap.set(targetNtxIds, undefined);
|
||||||
|
createSplitInstance(targetNtxIds);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function moveNoteSplitResizer(ntxId: string) {
|
||||||
|
const targetNtxIds = findKeyByNtxId(ntxId);
|
||||||
|
if (!targetNtxIds) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
noteSplitMap.get(targetNtxIds)?.destroy();
|
||||||
|
noteSplitMap.set(targetNtxIds, undefined);
|
||||||
|
createSplitInstance(targetNtxIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
function createSplitInstance(targetNtxIds: string[]) {
|
||||||
|
const prevRafId = noteSplitRafMap.get(targetNtxIds);
|
||||||
|
if (prevRafId) {
|
||||||
|
cancelAnimationFrame(prevRafId);
|
||||||
|
}
|
||||||
|
|
||||||
|
const rafId = requestAnimationFrame(() => {
|
||||||
|
splitNoteContainer = splitNoteContainer ?? $("#center-pane").find(".split-note-container-widget")[0];
|
||||||
|
const splitPanels = [...splitNoteContainer.querySelectorAll<HTMLElement>(':scope > .note-split')]
|
||||||
|
.filter(el => targetNtxIds.includes(el.getAttribute('data-ntx-id') ?? ""));
|
||||||
|
const splitInstance = Split(splitPanels, {
|
||||||
|
gutterSize: DEFAULT_GUTTER_SIZE,
|
||||||
|
minSize: 150,
|
||||||
|
});
|
||||||
|
noteSplitMap.set(targetNtxIds, splitInstance);
|
||||||
|
noteSplitRafMap.delete(targetNtxIds);
|
||||||
|
});
|
||||||
|
noteSplitRafMap.set(targetNtxIds, rafId);
|
||||||
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
setupLeftPaneResizer,
|
setupLeftPaneResizer,
|
||||||
setupRightPaneResizer
|
setupRightPaneResizer,
|
||||||
|
setupNoteSplitResizer,
|
||||||
|
delNoteSplitResizer,
|
||||||
|
moveNoteSplitResizer
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { describe, expect, it, vi, beforeEach, afterEach } from "vitest";
|
import { describe, expect, it, vi, beforeEach, afterEach } from "vitest";
|
||||||
import shortcuts, { keyMatches, matchesShortcut } from "./shortcuts.js";
|
import shortcuts, { keyMatches, matchesShortcut, isIMEComposing } from "./shortcuts.js";
|
||||||
|
|
||||||
// Mock utils module
|
// Mock utils module
|
||||||
vi.mock("./utils.js", () => ({
|
vi.mock("./utils.js", () => ({
|
||||||
@@ -119,11 +119,6 @@ describe("shortcuts", () => {
|
|||||||
metaKey: options.metaKey || false
|
metaKey: options.metaKey || false
|
||||||
} as KeyboardEvent);
|
} as KeyboardEvent);
|
||||||
|
|
||||||
it("should match simple key shortcuts", () => {
|
|
||||||
const event = createKeyboardEvent({ key: "a", code: "KeyA" });
|
|
||||||
expect(matchesShortcut(event, "a")).toBe(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should match shortcuts with modifiers", () => {
|
it("should match shortcuts with modifiers", () => {
|
||||||
const event = createKeyboardEvent({ key: "a", code: "KeyA", ctrlKey: true });
|
const event = createKeyboardEvent({ key: "a", code: "KeyA", ctrlKey: true });
|
||||||
expect(matchesShortcut(event, "ctrl+a")).toBe(true);
|
expect(matchesShortcut(event, "ctrl+a")).toBe(true);
|
||||||
@@ -148,6 +143,28 @@ describe("shortcuts", () => {
|
|||||||
expect(matchesShortcut(event, "a")).toBe(false);
|
expect(matchesShortcut(event, "a")).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should not match when no modifiers are used", () => {
|
||||||
|
const event = createKeyboardEvent({ key: "a", code: "KeyA" });
|
||||||
|
expect(matchesShortcut(event, "a")).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should match some keys even with no modifiers", () => {
|
||||||
|
// Bare function keys
|
||||||
|
let event = createKeyboardEvent({ key: "F1", code: "F1" });
|
||||||
|
expect(matchesShortcut(event, "F1")).toBeTruthy();
|
||||||
|
expect(matchesShortcut(event, "f1")).toBeTruthy();
|
||||||
|
|
||||||
|
// Function keys with shift
|
||||||
|
event = createKeyboardEvent({ key: "F1", code: "F1", shiftKey: true });
|
||||||
|
expect(matchesShortcut(event, "Shift+F1")).toBeTruthy();
|
||||||
|
|
||||||
|
// Special keys
|
||||||
|
for (const keyCode of [ "Delete", "Enter" ]) {
|
||||||
|
event = createKeyboardEvent({ key: keyCode, code: keyCode });
|
||||||
|
expect(matchesShortcut(event, keyCode), `Key ${keyCode}`).toBeTruthy();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
it("should handle alternative modifier names", () => {
|
it("should handle alternative modifier names", () => {
|
||||||
const ctrlEvent = createKeyboardEvent({ key: "a", code: "KeyA", ctrlKey: true });
|
const ctrlEvent = createKeyboardEvent({ key: "a", code: "KeyA", ctrlKey: true });
|
||||||
expect(matchesShortcut(ctrlEvent, "control+a")).toBe(true);
|
expect(matchesShortcut(ctrlEvent, "control+a")).toBe(true);
|
||||||
@@ -320,4 +337,36 @@ describe("shortcuts", () => {
|
|||||||
expect(event.preventDefault).not.toHaveBeenCalled();
|
expect(event.preventDefault).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('isIMEComposing', () => {
|
||||||
|
it('should return true when event.isComposing is true', () => {
|
||||||
|
const event = { isComposing: true, keyCode: 65 } as KeyboardEvent;
|
||||||
|
expect(isIMEComposing(event)).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return true when keyCode is 229', () => {
|
||||||
|
const event = { isComposing: false, keyCode: 229 } as KeyboardEvent;
|
||||||
|
expect(isIMEComposing(event)).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return true when both isComposing is true and keyCode is 229', () => {
|
||||||
|
const event = { isComposing: true, keyCode: 229 } as KeyboardEvent;
|
||||||
|
expect(isIMEComposing(event)).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return false for normal keys', () => {
|
||||||
|
const event = { isComposing: false, keyCode: 65 } as KeyboardEvent;
|
||||||
|
expect(isIMEComposing(event)).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return false when isComposing is undefined and keyCode is not 229', () => {
|
||||||
|
const event = { keyCode: 13 } as KeyboardEvent;
|
||||||
|
expect(isIMEComposing(event)).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should handle null/undefined events gracefully', () => {
|
||||||
|
expect(isIMEComposing(null as any)).toBe(false);
|
||||||
|
expect(isIMEComposing(undefined as any)).toBe(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -36,8 +36,35 @@ const keyMap: { [key: string]: string[] } = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Function keys
|
// Function keys
|
||||||
|
const functionKeyCodes: string[] = [];
|
||||||
for (let i = 1; i <= 19; i++) {
|
for (let i = 1; i <= 19; i++) {
|
||||||
keyMap[`f${i}`] = [`F${i}`];
|
const keyCode = `F${i}`;
|
||||||
|
functionKeyCodes.push(keyCode);
|
||||||
|
keyMap[`f${i}`] = [ keyCode ];
|
||||||
|
}
|
||||||
|
|
||||||
|
const KEYCODES_WITH_NO_MODIFIER = new Set([
|
||||||
|
"Delete",
|
||||||
|
"Enter",
|
||||||
|
...functionKeyCodes
|
||||||
|
]);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if IME (Input Method Editor) is composing
|
||||||
|
* This is used to prevent keyboard shortcuts from firing during IME composition
|
||||||
|
* @param e - The keyboard event to check
|
||||||
|
* @returns true if IME is currently composing, false otherwise
|
||||||
|
*/
|
||||||
|
export function isIMEComposing(e: KeyboardEvent): boolean {
|
||||||
|
// Handle null/undefined events gracefully
|
||||||
|
if (!e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Standard check for composition state
|
||||||
|
// e.isComposing is true when IME is actively composing
|
||||||
|
// e.keyCode === 229 is a fallback for older browsers where 229 indicates IME processing
|
||||||
|
return e.isComposing || e.keyCode === 229;
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeGlobalShortcut(namespace: string) {
|
function removeGlobalShortcut(namespace: string) {
|
||||||
@@ -68,6 +95,13 @@ function bindElShortcut($el: JQuery<ElementType | Element>, keyboardShortcut: st
|
|||||||
}
|
}
|
||||||
|
|
||||||
const e = evt as KeyboardEvent;
|
const e = evt as KeyboardEvent;
|
||||||
|
|
||||||
|
// Skip processing if IME is composing to prevent shortcuts from
|
||||||
|
// interfering with text input in CJK languages
|
||||||
|
if (isIMEComposing(e)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (matchesShortcut(e, keyboardShortcut)) {
|
if (matchesShortcut(e, keyboardShortcut)) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
@@ -137,6 +171,12 @@ export function matchesShortcut(e: KeyboardEvent, shortcut: string): boolean {
|
|||||||
const expectedShift = modifiers.includes('shift');
|
const expectedShift = modifiers.includes('shift');
|
||||||
const expectedMeta = modifiers.includes('meta') || modifiers.includes('cmd') || modifiers.includes('command');
|
const expectedMeta = modifiers.includes('meta') || modifiers.includes('cmd') || modifiers.includes('command');
|
||||||
|
|
||||||
|
// Refuse key combinations that don't include modifiers because they interfere with the normal usage of the application.
|
||||||
|
// Some keys such as function keys are an exception.
|
||||||
|
if (!(expectedCtrl || expectedAlt || expectedShift || expectedMeta) && !KEYCODES_WITH_NO_MODIFIER.has(e.code)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return e.ctrlKey === expectedCtrl &&
|
return e.ctrlKey === expectedCtrl &&
|
||||||
e.altKey === expectedAlt &&
|
e.altKey === expectedAlt &&
|
||||||
e.shiftKey === expectedShift &&
|
e.shiftKey === expectedShift &&
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
import ws from "./ws.js";
|
|
||||||
import utils from "./utils.js";
|
import utils from "./utils.js";
|
||||||
|
|
||||||
export interface ToastOptions {
|
export interface ToastOptions {
|
||||||
id?: string;
|
id?: string;
|
||||||
icon: string;
|
icon: string;
|
||||||
title: string;
|
title?: string;
|
||||||
message: string;
|
message: string;
|
||||||
delay?: number;
|
delay?: number;
|
||||||
autohide?: boolean;
|
autohide?: boolean;
|
||||||
@@ -12,20 +11,32 @@ export interface ToastOptions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function toast(options: ToastOptions) {
|
function toast(options: ToastOptions) {
|
||||||
const $toast = $(
|
const $toast = $(options.title
|
||||||
`<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
|
? `\
|
||||||
<div class="toast-header">
|
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
|
||||||
<strong class="me-auto">
|
<div class="toast-header">
|
||||||
|
<strong class="me-auto">
|
||||||
|
<span class="bx bx-${options.icon}"></span>
|
||||||
|
<span class="toast-title"></span>
|
||||||
|
</strong>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="toast-body"></div>
|
||||||
|
</div>`
|
||||||
|
: `
|
||||||
|
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
|
||||||
|
<div class="toast-icon">
|
||||||
<span class="bx bx-${options.icon}"></span>
|
<span class="bx bx-${options.icon}"></span>
|
||||||
<span class="toast-title"></span>
|
</div>
|
||||||
</strong>
|
<div class="toast-body"></div>
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
|
<div class="toast-header">
|
||||||
</div>
|
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
|
||||||
<div class="toast-body"></div>
|
</div>
|
||||||
</div>`
|
</div>`
|
||||||
);
|
);
|
||||||
|
|
||||||
$toast.find(".toast-title").text(options.title);
|
$toast.toggleClass("no-title", !options.title);
|
||||||
|
$toast.find(".toast-title").text(options.title ?? "");
|
||||||
$toast.find(".toast-body").html(options.message);
|
$toast.find(".toast-body").html(options.message);
|
||||||
|
|
||||||
if (options.id) {
|
if (options.id) {
|
||||||
@@ -70,7 +81,6 @@ function showMessage(message: string, delay = 2000) {
|
|||||||
console.debug(utils.now(), "message:", message);
|
console.debug(utils.now(), "message:", message);
|
||||||
|
|
||||||
toast({
|
toast({
|
||||||
title: "Info",
|
|
||||||
icon: "check",
|
icon: "check",
|
||||||
message: message,
|
message: message,
|
||||||
autohide: true,
|
autohide: true,
|
||||||
@@ -82,7 +92,6 @@ export function showError(message: string, delay = 10000) {
|
|||||||
console.log(utils.now(), "error: ", message);
|
console.log(utils.now(), "error: ", message);
|
||||||
|
|
||||||
toast({
|
toast({
|
||||||
title: "Error",
|
|
||||||
icon: "alert",
|
icon: "alert",
|
||||||
message: message,
|
message: message,
|
||||||
autohide: true,
|
autohide: true,
|
||||||
|
|||||||
@@ -47,27 +47,6 @@ function parseDate(str: string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Source: https://stackoverflow.com/a/30465299/4898894
|
|
||||||
function getMonthsInDateRange(startDate: string, endDate: string) {
|
|
||||||
const start = startDate.split("-");
|
|
||||||
const end = endDate.split("-");
|
|
||||||
const startYear = parseInt(start[0]);
|
|
||||||
const endYear = parseInt(end[0]);
|
|
||||||
const dates: string[] = [];
|
|
||||||
|
|
||||||
for (let i = startYear; i <= endYear; i++) {
|
|
||||||
const endMonth = i != endYear ? 11 : parseInt(end[1]) - 1;
|
|
||||||
const startMon = i === startYear ? parseInt(start[1]) - 1 : 0;
|
|
||||||
|
|
||||||
for (let j = startMon; j <= endMonth; j = j > 12 ? j % 12 || 11 : j + 1) {
|
|
||||||
const month = j + 1;
|
|
||||||
const displayMonth = month < 10 ? "0" + month : month;
|
|
||||||
dates.push([i, displayMonth].join("-"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return dates;
|
|
||||||
}
|
|
||||||
|
|
||||||
function padNum(num: number) {
|
function padNum(num: number) {
|
||||||
return `${num <= 9 ? "0" : ""}${num}`;
|
return `${num <= 9 ? "0" : ""}${num}`;
|
||||||
}
|
}
|
||||||
@@ -149,6 +128,18 @@ export function isElectron() {
|
|||||||
return !!(window && window.process && window.process.type);
|
return !!(window && window.process && window.process.type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns `true` if the client is running as a PWA, otherwise `false`.
|
||||||
|
*/
|
||||||
|
export function isPWA() {
|
||||||
|
return (
|
||||||
|
window.matchMedia('(display-mode: standalone)').matches
|
||||||
|
|| window.matchMedia('(display-mode: window-controls-overlay)').matches
|
||||||
|
|| window.navigator.standalone
|
||||||
|
|| window.navigator.windowControlsOverlay
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export function isMac() {
|
export function isMac() {
|
||||||
return navigator.platform.indexOf("Mac") > -1;
|
return navigator.platform.indexOf("Mac") > -1;
|
||||||
}
|
}
|
||||||
@@ -297,6 +288,54 @@ function isHtmlEmpty(html: string) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function formatHtml(html: string) {
|
||||||
|
let indent = "\n";
|
||||||
|
const tab = "\t";
|
||||||
|
let i = 0;
|
||||||
|
let pre: { indent: string; tag: string }[] = [];
|
||||||
|
|
||||||
|
html = html
|
||||||
|
.replace(new RegExp("<pre>([\\s\\S]+?)?</pre>"), function (x) {
|
||||||
|
pre.push({ indent: "", tag: x });
|
||||||
|
return "<--TEMPPRE" + i++ + "/-->";
|
||||||
|
})
|
||||||
|
.replace(new RegExp("<[^<>]+>[^<]?", "g"), function (x) {
|
||||||
|
let ret;
|
||||||
|
const tagRegEx = /<\/?([^\s/>]+)/.exec(x);
|
||||||
|
let tag = tagRegEx ? tagRegEx[1] : "";
|
||||||
|
let p = new RegExp("<--TEMPPRE(\\d+)/-->").exec(x);
|
||||||
|
|
||||||
|
if (p) {
|
||||||
|
const pInd = parseInt(p[1]);
|
||||||
|
pre[pInd].indent = indent;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (["area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "menuitem", "meta", "param", "source", "track", "wbr"].indexOf(tag) >= 0) {
|
||||||
|
// self closing tag
|
||||||
|
ret = indent + x;
|
||||||
|
} else {
|
||||||
|
if (x.indexOf("</") < 0) {
|
||||||
|
//open tag
|
||||||
|
if (x.charAt(x.length - 1) !== ">") ret = indent + x.substr(0, x.length - 1) + indent + tab + x.substr(x.length - 1, x.length);
|
||||||
|
else ret = indent + x;
|
||||||
|
!p && (indent += tab);
|
||||||
|
} else {
|
||||||
|
//close tag
|
||||||
|
indent = indent.substr(0, indent.length - 1);
|
||||||
|
if (x.charAt(x.length - 1) !== ">") ret = indent + x.substr(0, x.length - 1) + indent + x.substr(x.length - 1, x.length);
|
||||||
|
else ret = indent + x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
});
|
||||||
|
|
||||||
|
for (i = pre.length; i--;) {
|
||||||
|
html = html.replace("<--TEMPPRE" + i + "/-->", pre[i].tag.replace("<pre>", "<pre>\n").replace("</pre>", pre[i].indent + "</pre>"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return html.charAt(0) === "\n" ? html.substr(1, html.length - 1) : html;
|
||||||
|
}
|
||||||
|
|
||||||
export async function clearBrowserCache() {
|
export async function clearBrowserCache() {
|
||||||
if (isElectron()) {
|
if (isElectron()) {
|
||||||
const win = dynamicRequire("@electron/remote").getCurrentWindow();
|
const win = dynamicRequire("@electron/remote").getCurrentWindow();
|
||||||
@@ -448,7 +487,7 @@ function sleep(time_ms: number) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function escapeRegExp(str: string) {
|
export function escapeRegExp(str: string) {
|
||||||
return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
|
return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -835,7 +874,6 @@ export default {
|
|||||||
restartDesktopApp,
|
restartDesktopApp,
|
||||||
reloadTray,
|
reloadTray,
|
||||||
parseDate,
|
parseDate,
|
||||||
getMonthsInDateRange,
|
|
||||||
formatDateISO,
|
formatDateISO,
|
||||||
formatDateTime,
|
formatDateTime,
|
||||||
formatTimeInterval,
|
formatTimeInterval,
|
||||||
@@ -843,6 +881,7 @@ export default {
|
|||||||
localNowDateTime,
|
localNowDateTime,
|
||||||
now,
|
now,
|
||||||
isElectron,
|
isElectron,
|
||||||
|
isPWA,
|
||||||
isMac,
|
isMac,
|
||||||
isCtrlKey,
|
isCtrlKey,
|
||||||
assertArguments,
|
assertArguments,
|
||||||
@@ -855,6 +894,7 @@ export default {
|
|||||||
getNoteTypeClass,
|
getNoteTypeClass,
|
||||||
getMimeTypeClass,
|
getMimeTypeClass,
|
||||||
isHtmlEmpty,
|
isHtmlEmpty,
|
||||||
|
formatHtml,
|
||||||
clearBrowserCache,
|
clearBrowserCache,
|
||||||
copySelectionToClipboard,
|
copySelectionToClipboard,
|
||||||
dynamicRequire,
|
dynamicRequire,
|
||||||
|
|||||||
@@ -6,9 +6,11 @@ import frocaUpdater from "./froca_updater.js";
|
|||||||
import appContext from "../components/app_context.js";
|
import appContext from "../components/app_context.js";
|
||||||
import { t } from "./i18n.js";
|
import { t } from "./i18n.js";
|
||||||
import type { EntityChange } from "../server_types.js";
|
import type { EntityChange } from "../server_types.js";
|
||||||
|
import { WebSocketMessage } from "@triliumnext/commons";
|
||||||
|
import toast from "./toast.js";
|
||||||
|
|
||||||
type MessageHandler = (message: any) => void;
|
type MessageHandler = (message: WebSocketMessage) => void;
|
||||||
const messageHandlers: MessageHandler[] = [];
|
let messageHandlers: MessageHandler[] = [];
|
||||||
|
|
||||||
let ws: WebSocket;
|
let ws: WebSocket;
|
||||||
let lastAcceptedEntityChangeId = window.glob.maxEntityChangeIdAtLoad;
|
let lastAcceptedEntityChangeId = window.glob.maxEntityChangeIdAtLoad;
|
||||||
@@ -47,10 +49,14 @@ function logInfo(message: string) {
|
|||||||
window.logError = logError;
|
window.logError = logError;
|
||||||
window.logInfo = logInfo;
|
window.logInfo = logInfo;
|
||||||
|
|
||||||
function subscribeToMessages(messageHandler: MessageHandler) {
|
export function subscribeToMessages(messageHandler: MessageHandler) {
|
||||||
messageHandlers.push(messageHandler);
|
messageHandlers.push(messageHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function unsubscribeToMessage(messageHandler: MessageHandler) {
|
||||||
|
messageHandlers = messageHandlers.filter(handler => handler !== messageHandler);
|
||||||
|
}
|
||||||
|
|
||||||
// used to serialize frontend update operations
|
// used to serialize frontend update operations
|
||||||
let consumeQueuePromise: Promise<void> | null = null;
|
let consumeQueuePromise: Promise<void> | null = null;
|
||||||
|
|
||||||
@@ -273,13 +279,17 @@ function connectWebSocket() {
|
|||||||
|
|
||||||
async function sendPing() {
|
async function sendPing() {
|
||||||
if (Date.now() - lastPingTs > 30000) {
|
if (Date.now() - lastPingTs > 30000) {
|
||||||
console.log(
|
console.warn(utils.now(), "Lost websocket connection to the backend");
|
||||||
utils.now(),
|
toast.showPersistent({
|
||||||
"Lost websocket connection to the backend. If you keep having this issue repeatedly, you might want to check your reverse proxy (nginx, apache) configuration and allow/unblock WebSocket."
|
id: "lost-websocket-connection",
|
||||||
);
|
title: t("ws.lost-websocket-connection-title"),
|
||||||
|
message: t("ws.lost-websocket-connection-message"),
|
||||||
|
icon: "no-signal"
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ws.readyState === ws.OPEN) {
|
if (ws.readyState === ws.OPEN) {
|
||||||
|
toast.closePersistent("lost-websocket-connection");
|
||||||
ws.send(
|
ws.send(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
type: "ping",
|
type: "ping",
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import "./stylesheets/bootstrap.scss";
|
import "bootstrap/dist/css/bootstrap.min.css";
|
||||||
import "./stylesheets/auth.css";
|
import "./stylesheets/auth.css";
|
||||||
|
|
||||||
// @TriliumNextTODO: is this even needed anymore?
|
// @TriliumNextTODO: is this even needed anymore?
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import "jquery";
|
import "jquery";
|
||||||
import utils from "./services/utils.js";
|
import utils from "./services/utils.js";
|
||||||
import ko from "knockout";
|
import ko from "knockout";
|
||||||
import "./stylesheets/bootstrap.scss";
|
import "bootstrap/dist/css/bootstrap.min.css";
|
||||||
|
|
||||||
// TriliumNextTODO: properly make use of below types
|
// TriliumNextTODO: properly make use of below types
|
||||||
// type SetupModelSetupType = "new-document" | "sync-from-desktop" | "sync-from-server" | "";
|
// type SetupModelSetupType = "new-document" | "sync-from-desktop" | "sync-from-server" | "";
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import "normalize.css";
|
import "normalize.css";
|
||||||
import "boxicons/css/boxicons.min.css";
|
import "boxicons/css/boxicons.min.css";
|
||||||
import "@triliumnext/ckeditor5/content.css";
|
import "@triliumnext/ckeditor5/src/theme/ck-content.css";
|
||||||
import "@triliumnext/share-theme/styles/index.css";
|
import "@triliumnext/share-theme/styles/index.css";
|
||||||
import "@triliumnext/share-theme/scripts/index.js";
|
import "@triliumnext/share-theme/scripts/index.js";
|
||||||
|
|
||||||
|
|||||||
2
apps/client/src/stylesheets/bootstrap.scss
vendored
2
apps/client/src/stylesheets/bootstrap.scss
vendored
@@ -1,2 +0,0 @@
|
|||||||
/* Import all of Bootstrap's CSS */
|
|
||||||
@use "bootstrap/scss/bootstrap";
|
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
#center-pane > *:not(.split-note-container-widget),
|
#center-pane > *:not(.split-note-container-widget),
|
||||||
#right-pane,
|
#right-pane,
|
||||||
.title-row .note-icon-widget,
|
.title-row .note-icon-widget,
|
||||||
.title-row .button-widget,
|
.title-row .icon-action,
|
||||||
.ribbon-container,
|
.ribbon-container,
|
||||||
.promoted-attributes-widget,
|
.promoted-attributes-widget,
|
||||||
.scroll-padding-widget,
|
.scroll-padding-widget,
|
||||||
|
|||||||
@@ -161,7 +161,8 @@ textarea,
|
|||||||
color: var(--muted-text-color);
|
color: var(--muted-text-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-group.disabled {
|
.form-group.disabled,
|
||||||
|
.form-checkbox.disabled {
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
@@ -251,10 +252,6 @@ button.close:hover {
|
|||||||
color: var(--main-text-color) !important;
|
color: var(--main-text-color) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.note-title[readonly] {
|
|
||||||
background: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tdialog {
|
.tdialog {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
@@ -293,6 +290,11 @@ button.close:hover {
|
|||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.icon-action.btn {
|
||||||
|
padding: 0 8px;
|
||||||
|
min-width: unset !important;
|
||||||
|
}
|
||||||
|
|
||||||
.ui-widget-content a:not(.ui-tabs-anchor) {
|
.ui-widget-content a:not(.ui-tabs-anchor) {
|
||||||
color: #337ab7 !important;
|
color: #337ab7 !important;
|
||||||
}
|
}
|
||||||
@@ -361,21 +363,17 @@ button kbd {
|
|||||||
.tabulator-popup-container {
|
.tabulator-popup-container {
|
||||||
color: var(--menu-text-color) !important;
|
color: var(--menu-text-color) !important;
|
||||||
font-size: inherit;
|
font-size: inherit;
|
||||||
background-color: var(--menu-background-color) !important;
|
background: var(--menu-background-color) !important;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
-webkit-user-select: none;
|
-webkit-user-select: none;
|
||||||
--bs-dropdown-zindex: 999;
|
--bs-dropdown-zindex: 999;
|
||||||
--bs-dropdown-link-active-bg: var(--active-item-background-color) !important;
|
--bs-dropdown-link-active-bg: var(--active-item-background-color) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-menu .dropdown-divider {
|
|
||||||
break-before: avoid;
|
|
||||||
break-after: avoid;
|
|
||||||
}
|
|
||||||
|
|
||||||
body.desktop .dropdown-menu,
|
body.desktop .dropdown-menu,
|
||||||
body.desktop .tabulator-popup-container {
|
body.desktop .tabulator-popup-container {
|
||||||
border: 1px solid var(--dropdown-border-color);
|
border: 1px solid var(--dropdown-border-color);
|
||||||
|
column-rule: 1px solid var(--dropdown-border-color);
|
||||||
box-shadow: 0px 10px 20px rgba(0, 0, 0, var(--dropdown-shadow-opacity));
|
box-shadow: 0px 10px 20px rgba(0, 0, 0, var(--dropdown-shadow-opacity));
|
||||||
animation: dropdown-menu-opening 100ms ease-in;
|
animation: dropdown-menu-opening 100ms ease-in;
|
||||||
}
|
}
|
||||||
@@ -417,7 +415,7 @@ body.desktop .tabulator-popup-container {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-menu a:hover:not(.disabled),
|
.dropdown-menu a:hover:not(.disabled),
|
||||||
.dropdown-item:hover:not(.disabled, .dropdown-item-container),
|
.dropdown-item:hover:not(.disabled, .dropdown-container-item),
|
||||||
.tabulator-menu-item:hover {
|
.tabulator-menu-item:hover {
|
||||||
color: var(--hover-item-text-color) !important;
|
color: var(--hover-item-text-color) !important;
|
||||||
background-color: var(--hover-item-background-color) !important;
|
background-color: var(--hover-item-background-color) !important;
|
||||||
@@ -425,9 +423,9 @@ body.desktop .tabulator-popup-container {
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-item-container,
|
.dropdown-container-item,
|
||||||
.dropdown-item-container:hover,
|
.dropdown-item.dropdown-container-item:hover,
|
||||||
.dropdown-item-container:active {
|
.dropdown-container-item:active {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
@@ -442,9 +440,11 @@ body #context-menu-container .dropdown-item > span {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-item span.keyboard-shortcut {
|
.dropdown-item span.keyboard-shortcut,
|
||||||
|
.dropdown-item *:not(.keyboard-shortcut) > kbd {
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
|
padding-inline-start: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-menu kbd {
|
.dropdown-menu kbd {
|
||||||
@@ -454,8 +454,6 @@ body #context-menu-container .dropdown-item > span {
|
|||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
padding-bottom: 0;
|
padding-bottom: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
flex-grow: 1;
|
|
||||||
text-align: right;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-item,
|
.dropdown-item,
|
||||||
@@ -464,6 +462,12 @@ body #context-menu-container .dropdown-item > span {
|
|||||||
border: 1px solid transparent !important;
|
border: 1px solid transparent !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* This is a workaround for Firefox not supporting break-before / break-after: avoid on columns.
|
||||||
|
* It usually wraps a menu item followed by a separator / header and another menu item. */
|
||||||
|
.dropdown-no-break {
|
||||||
|
break-inside: avoid;
|
||||||
|
}
|
||||||
|
|
||||||
.dropdown-item.disabled,
|
.dropdown-item.disabled,
|
||||||
.dropdown-item.disabled kbd {
|
.dropdown-item.disabled kbd {
|
||||||
color: #aaa !important;
|
color: #aaa !important;
|
||||||
@@ -471,9 +475,9 @@ body #context-menu-container .dropdown-item > span {
|
|||||||
|
|
||||||
.dropdown-item.active,
|
.dropdown-item.active,
|
||||||
.dropdown-item:focus {
|
.dropdown-item:focus {
|
||||||
color: var(--active-item-text-color) !important;
|
color: var(--active-item-text-color);
|
||||||
background-color: var(--active-item-background-color) !important;
|
background-color: var(--active-item-background-color);
|
||||||
border-color: var(--active-item-border-color) !important;
|
border-color: var(--active-item-border-color);
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1134,6 +1138,27 @@ a.external:not(.no-arrow):after, a[href^="http://"]:not(.no-arrow):after, a[href
|
|||||||
|
|
||||||
.toast-body {
|
.toast-body {
|
||||||
white-space: preserve-breaks;
|
white-space: preserve-breaks;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toast.no-title {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toast.no-title .toast-icon {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);
|
||||||
|
}
|
||||||
|
|
||||||
|
.toast.no-title .toast-body {
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toast.no-title .toast-header {
|
||||||
|
background-color: unset !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ck-mentions .ck-button {
|
.ck-mentions .ck-button {
|
||||||
@@ -1242,6 +1267,10 @@ a.external:not(.no-arrow):after, a[href^="http://"]:not(.no-arrow):after, a[href
|
|||||||
cursor: row-resize;
|
cursor: row-resize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.hidden-ext.note-split + .gutter {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
#context-menu-cover.show {
|
#context-menu-cover.show {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
@@ -1463,7 +1492,7 @@ body:not(.mobile) #launcher-pane.horizontal .dropdown-submenu > .dropdown-menu {
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
border: none;
|
border: none;
|
||||||
color: var(--launcher-pane-text-color);
|
color: var(--launcher-pane-text-color);
|
||||||
background: transparent;
|
background-color: transparent;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1771,7 +1800,6 @@ body:not(.mobile) #launcher-pane.horizontal .dropdown-submenu > .dropdown-menu {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.note-split {
|
.note-split {
|
||||||
flex-basis: 0; /* so that each split has same width */
|
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
@@ -1868,11 +1896,6 @@ textarea {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.jump-to-note-results .aa-dropdown-menu .aa-suggestion:hover,
|
|
||||||
.jump-to-note-results .aa-dropdown-menu .aa-cursor {
|
|
||||||
background-color: var(--hover-item-background-color, #f8f9fa);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Command palette styling */
|
/* Command palette styling */
|
||||||
.jump-to-note-dialog .command-suggestion {
|
.jump-to-note-dialog .command-suggestion {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -2002,12 +2025,16 @@ body.zen .ribbon-container:not(:has(.classic-toolbar-widget.visible)),
|
|||||||
body.zen .ribbon-container:has(.classic-toolbar-widget.visible) .ribbon-top-row,
|
body.zen .ribbon-container:has(.classic-toolbar-widget.visible) .ribbon-top-row,
|
||||||
body.zen .ribbon-container .ribbon-body:not(:has(.classic-toolbar-widget.visible)),
|
body.zen .ribbon-container .ribbon-body:not(:has(.classic-toolbar-widget.visible)),
|
||||||
body.zen .note-icon-widget,
|
body.zen .note-icon-widget,
|
||||||
body.zen .title-row .button-widget,
|
body.zen .title-row .icon-action,
|
||||||
body.zen .floating-buttons-children > *:not(.bx-edit-alt),
|
body.zen .floating-buttons-children > *:not(.bx-edit-alt),
|
||||||
body.zen .action-button {
|
body.zen .action-button {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.zen .split-note-container-widget > .gutter {
|
||||||
|
display: unset !important;
|
||||||
|
}
|
||||||
|
|
||||||
body.zen #launcher-pane {
|
body.zen #launcher-pane {
|
||||||
position: absolute !important;
|
position: absolute !important;
|
||||||
top: 0 !important;
|
top: 0 !important;
|
||||||
@@ -2374,4 +2401,13 @@ footer.webview-footer button {
|
|||||||
max-width: 25vw;
|
max-width: 25vw;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.revision-diff-added {
|
||||||
|
background: rgba(100, 200, 100, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.revision-diff-removed {
|
||||||
|
background: rgba(255, 100, 100, 0.5);
|
||||||
|
text-decoration: line-through;
|
||||||
}
|
}
|
||||||
@@ -1,16 +1,16 @@
|
|||||||
:root {
|
:root {
|
||||||
--theme-style: dark;
|
--theme-style: dark;
|
||||||
|
|
||||||
--main-font-family: Montserrat;
|
--main-font-family: Montserrat, sans-serif;
|
||||||
--main-font-size: normal;
|
--main-font-size: normal;
|
||||||
|
|
||||||
--tree-font-family: Montserrat;
|
--tree-font-family: Montserrat, sans-serif;
|
||||||
--tree-font-size: normal;
|
--tree-font-size: normal;
|
||||||
|
|
||||||
--detail-font-family: Montserrat;
|
--detail-font-family: Montserrat, sans-serif;
|
||||||
--detail-font-size: normal;
|
--detail-font-size: normal;
|
||||||
|
|
||||||
--monospace-font-family: JetBrainsLight;
|
--monospace-font-family: JetBrainsLight, monospace;
|
||||||
--monospace-font-size: normal;
|
--monospace-font-size: normal;
|
||||||
|
|
||||||
--main-background-color: #333;
|
--main-background-color: #333;
|
||||||
|
|||||||
@@ -5,16 +5,16 @@ html {
|
|||||||
/* either light or dark, colored theme with darker tones are also dark, used e.g. for note map node colors */
|
/* either light or dark, colored theme with darker tones are also dark, used e.g. for note map node colors */
|
||||||
--theme-style: light;
|
--theme-style: light;
|
||||||
|
|
||||||
--main-font-family: Montserrat;
|
--main-font-family: Montserrat, sans-serif;
|
||||||
--main-font-size: normal;
|
--main-font-size: normal;
|
||||||
|
|
||||||
--tree-font-family: Montserrat;
|
--tree-font-family: Montserrat, sans-serif;
|
||||||
--tree-font-size: normal;
|
--tree-font-size: normal;
|
||||||
|
|
||||||
--detail-font-family: Montserrat;
|
--detail-font-family: Montserrat, sans-serif;
|
||||||
--detail-font-size: normal;
|
--detail-font-size: normal;
|
||||||
|
|
||||||
--monospace-font-family: JetBrainsLight;
|
--monospace-font-family: JetBrainsLight, monospace;
|
||||||
--monospace-font-size: normal;
|
--monospace-font-size: normal;
|
||||||
|
|
||||||
--main-background-color: white;
|
--main-background-color: white;
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
--theme-style: dark;
|
--theme-style: dark;
|
||||||
--native-titlebar-background: #00000000;
|
--native-titlebar-background: #00000000;
|
||||||
|
--window-background-color-bgfx: transparent; /* When background effects enabled */
|
||||||
|
|
||||||
--main-background-color: #272727;
|
--main-background-color: #272727;
|
||||||
--main-text-color: #ccc;
|
--main-text-color: #ccc;
|
||||||
@@ -147,14 +148,17 @@
|
|||||||
--launcher-pane-vert-button-hover-background: #ffffff1c;
|
--launcher-pane-vert-button-hover-background: #ffffff1c;
|
||||||
--launcher-pane-vert-button-hover-shadow: 4px 4px 4px rgba(0, 0, 0, 0.2);
|
--launcher-pane-vert-button-hover-shadow: 4px 4px 4px rgba(0, 0, 0, 0.2);
|
||||||
--launcher-pane-vert-button-focus-outline-color: var(--input-focus-outline-color);
|
--launcher-pane-vert-button-focus-outline-color: var(--input-focus-outline-color);
|
||||||
|
--launcher-pane-vert-background-color-bgfx: #00000026; /* When background effects enabled */
|
||||||
|
|
||||||
--launcher-pane-horiz-border-color: rgb(22, 22, 22);
|
--launcher-pane-horiz-border-color: rgb(22, 22, 22);
|
||||||
--launcher-pane-horiz-background-color: #282828;
|
--launcher-pane-horiz-background-color: #282828;
|
||||||
--launcher-pane-horiz-text-color: #909090;
|
--launcher-pane-horiz-text-color: #b8b8b8;
|
||||||
--launcher-pane-horiz-button-hover-color: #ffffff;
|
--launcher-pane-horiz-button-hover-color: #ffffff;
|
||||||
--launcher-pane-horiz-button-hover-background: #ffffff1c;
|
--launcher-pane-horiz-button-hover-background: #ffffff1c;
|
||||||
--launcher-pane-horiz-button-hover-shadow: unset;
|
--launcher-pane-horiz-button-hover-shadow: unset;
|
||||||
--launcher-pane-horiz-button-focus-outline-color: var(--input-focus-outline-color);
|
--launcher-pane-horiz-button-focus-outline-color: var(--input-focus-outline-color);
|
||||||
|
--launcher-pane-horiz-background-color-bgfx: #ffffff17; /* When background effects enabled */
|
||||||
|
--launcher-pane-horiz-border-color-bgfx: #00000080; /* When background effects enabled */
|
||||||
|
|
||||||
--protected-session-active-icon-color: #8edd8e;
|
--protected-session-active-icon-color: #8edd8e;
|
||||||
--sync-status-error-pulse-color: #f47871;
|
--sync-status-error-pulse-color: #f47871;
|
||||||
@@ -168,9 +172,10 @@
|
|||||||
|
|
||||||
--tab-close-button-hover-background: #a45353;
|
--tab-close-button-hover-background: #a45353;
|
||||||
--tab-close-button-hover-color: white;
|
--tab-close-button-hover-color: white;
|
||||||
|
|
||||||
--active-tab-background-color: #ffffff1c;
|
--active-tab-background-color: #ffffff1c;
|
||||||
--active-tab-hover-background-color: var(--active-tab-background-color);
|
--active-tab-hover-background-color: var(--active-tab-background-color);
|
||||||
|
--active-tab-icon-color: #a9a9a9;
|
||||||
--active-tab-text-color: #ffffffcd;
|
--active-tab-text-color: #ffffffcd;
|
||||||
--active-tab-shadow: 3px 3px 6px rgba(0, 0, 0, 0.2), -1px -1px 3px rgba(0, 0, 0, 0.4);
|
--active-tab-shadow: 3px 3px 6px rgba(0, 0, 0, 0.2), -1px -1px 3px rgba(0, 0, 0, 0.4);
|
||||||
--active-tab-dragging-shadow: var(--active-tab-shadow), 0 0 20px rgba(0, 0, 0, 0.4);
|
--active-tab-dragging-shadow: var(--active-tab-shadow), 0 0 20px rgba(0, 0, 0, 0.4);
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
--theme-style: light;
|
--theme-style: light;
|
||||||
--native-titlebar-background: #ffffff00;
|
--native-titlebar-background: #ffffff00;
|
||||||
|
--window-background-color-bgfx: transparent; /* When background effects enabled */
|
||||||
|
|
||||||
--main-background-color: white;
|
--main-background-color: white;
|
||||||
--main-text-color: black;
|
--main-text-color: black;
|
||||||
@@ -121,11 +122,11 @@
|
|||||||
--left-pane-collapsed-border-color: #0000000d;
|
--left-pane-collapsed-border-color: #0000000d;
|
||||||
--left-pane-background-color: #f2f2f2;
|
--left-pane-background-color: #f2f2f2;
|
||||||
--left-pane-text-color: #383838;
|
--left-pane-text-color: #383838;
|
||||||
--left-pane-item-hover-background: #eaeaea;
|
--left-pane-item-hover-background: rgba(0, 0, 0, 0.032);
|
||||||
--left-pane-item-selected-background: white;
|
--left-pane-item-selected-background: white;
|
||||||
--left-pane-item-selected-color: black;
|
--left-pane-item-selected-color: black;
|
||||||
--left-pane-item-selected-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
|
--left-pane-item-selected-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
|
||||||
--left-pane-item-action-button-background: #d7d7d7;
|
--left-pane-item-action-button-background: rgba(0, 0, 0, 0.11);
|
||||||
--left-pane-item-action-button-color: inherit;
|
--left-pane-item-action-button-color: inherit;
|
||||||
--left-pane-item-action-button-hover-background: white;
|
--left-pane-item-action-button-hover-background: white;
|
||||||
--left-pane-item-action-button-hover-shadow: 2px 2px 3px rgba(0, 0, 0, 0.15);
|
--left-pane-item-action-button-hover-shadow: 2px 2px 3px rgba(0, 0, 0, 0.15);
|
||||||
@@ -141,6 +142,7 @@
|
|||||||
--launcher-pane-vert-button-hover-background: white;
|
--launcher-pane-vert-button-hover-background: white;
|
||||||
--launcher-pane-vert-button-hover-shadow: 4px 4px 4px rgba(0, 0, 0, 0.075);
|
--launcher-pane-vert-button-hover-shadow: 4px 4px 4px rgba(0, 0, 0, 0.075);
|
||||||
--launcher-pane-vert-button-focus-outline-color: var(--input-focus-outline-color);
|
--launcher-pane-vert-button-focus-outline-color: var(--input-focus-outline-color);
|
||||||
|
--launcher-pane-vert-background-color-bgfx: #00000009; /* When background effects enabled */
|
||||||
|
|
||||||
--launcher-pane-horiz-border-color: rgba(0, 0, 0, 0.1);
|
--launcher-pane-horiz-border-color: rgba(0, 0, 0, 0.1);
|
||||||
--launcher-pane-horiz-background-color: #fafafa;
|
--launcher-pane-horiz-background-color: #fafafa;
|
||||||
@@ -148,6 +150,8 @@
|
|||||||
--launcher-pane-horiz-button-hover-background: var(--icon-button-hover-background);
|
--launcher-pane-horiz-button-hover-background: var(--icon-button-hover-background);
|
||||||
--launcher-pane-horiz-button-hover-shadow: unset;
|
--launcher-pane-horiz-button-hover-shadow: unset;
|
||||||
--launcher-pane-horiz-button-focus-outline-color: var(--input-focus-outline-color);
|
--launcher-pane-horiz-button-focus-outline-color: var(--input-focus-outline-color);
|
||||||
|
--launcher-pane-horiz-background-color-bgfx: #ffffffb3; /* When background effects enabled */
|
||||||
|
--launcher-pane-horiz-border-color-bgfx: #00000026; /* When background effects enabled */
|
||||||
|
|
||||||
--protected-session-active-icon-color: #16b516;
|
--protected-session-active-icon-color: #16b516;
|
||||||
--sync-status-error-pulse-color: #ff5528;
|
--sync-status-error-pulse-color: #ff5528;
|
||||||
@@ -161,9 +165,10 @@
|
|||||||
|
|
||||||
--tab-close-button-hover-background: #c95a5a;
|
--tab-close-button-hover-background: #c95a5a;
|
||||||
--tab-close-button-hover-color: white;
|
--tab-close-button-hover-color: white;
|
||||||
|
|
||||||
--active-tab-background-color: white;
|
--active-tab-background-color: white;
|
||||||
--active-tab-hover-background-color: var(--active-tab-background-color);
|
--active-tab-hover-background-color: var(--active-tab-background-color);
|
||||||
|
--active-tab-icon-color: gray;
|
||||||
--active-tab-text-color: black;
|
--active-tab-text-color: black;
|
||||||
--active-tab-shadow: 3px 3px 6px rgba(0, 0, 0, 0.1), -1px -1px 3px rgba(0, 0, 0, 0.05);
|
--active-tab-shadow: 3px 3px 6px rgba(0, 0, 0, 0.1), -1px -1px 3px rgba(0, 0, 0, 0.05);
|
||||||
--active-tab-dragging-shadow: var(--active-tab-shadow), 0 0 20px rgba(0, 0, 0, 0.1);
|
--active-tab-dragging-shadow: var(--active-tab-shadow), 0 0 20px rgba(0, 0, 0, 0.1);
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
--detail-font-family: var(--main-font-family);
|
--detail-font-family: var(--main-font-family);
|
||||||
--detail-font-size: normal;
|
--detail-font-size: normal;
|
||||||
|
|
||||||
--monospace-font-family: JetBrainsLight;
|
--monospace-font-family: JetBrainsLight, monospace;
|
||||||
--monospace-font-size: normal;
|
--monospace-font-size: normal;
|
||||||
|
|
||||||
--left-pane-item-selected-shadow-size: 2px;
|
--left-pane-item-selected-shadow-size: 2px;
|
||||||
@@ -102,10 +102,6 @@ body.backdrop-effects-disabled {
|
|||||||
font-size: 0.9rem !important;
|
font-size: 0.9rem !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-menu {
|
|
||||||
--scrollbar-background-color: var(--menu-background-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
body.mobile .dropdown-menu {
|
body.mobile .dropdown-menu {
|
||||||
backdrop-filter: var(--dropdown-backdrop-filter);
|
backdrop-filter: var(--dropdown-backdrop-filter);
|
||||||
border-radius: var(--dropdown-border-radius);
|
border-radius: var(--dropdown-border-radius);
|
||||||
@@ -154,12 +150,22 @@ body.desktop .dropdown-submenu .dropdown-menu {
|
|||||||
.dropdown-item,
|
.dropdown-item,
|
||||||
body.mobile .dropdown-submenu .dropdown-toggle {
|
body.mobile .dropdown-submenu .dropdown-toggle {
|
||||||
padding: 2px 2px 2px 8px !important;
|
padding: 2px 2px 2px 8px !important;
|
||||||
padding-inline-end: 16px !important;
|
padding-inline-end: 22px !important;
|
||||||
/* Note: the right padding should also accommodate the submenu arrow. */
|
/* Note: the right padding should also accommodate the submenu arrow. */
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
cursor: default !important;
|
cursor: default !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:root .dropdown-item:focus-visible {
|
||||||
|
outline: 2px solid var(--input-focus-outline-color) !important;
|
||||||
|
background-color: transparent;
|
||||||
|
color: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
:root .dropdown-item:active {
|
||||||
|
background: unset;
|
||||||
|
}
|
||||||
|
|
||||||
body.mobile .dropdown-submenu {
|
body.mobile .dropdown-submenu {
|
||||||
padding: 0 !important;
|
padding: 0 !important;
|
||||||
}
|
}
|
||||||
@@ -289,6 +295,20 @@ body.mobile .dropdown-menu .dropdown-item.submenu-open .dropdown-toggle::after {
|
|||||||
transform: rotate(270deg);
|
transform: rotate(270deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Dropdown item button (used in zoom buttons in global menu) */
|
||||||
|
|
||||||
|
li.dropdown-item a.dropdown-item-button {
|
||||||
|
border: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
li.dropdown-item a.dropdown-item-button.bx {
|
||||||
|
color: var(--menu-text-color) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
li.dropdown-item a.dropdown-item-button:focus-visible {
|
||||||
|
outline: 2px solid var(--input-focus-outline-color) !important;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TOASTS
|
* TOASTS
|
||||||
*/
|
*/
|
||||||
@@ -307,30 +327,49 @@ body.mobile .dropdown-menu .dropdown-item.submenu-open .dropdown-toggle::after {
|
|||||||
--modal-control-button-color: var(--bs-toast-color);
|
--modal-control-button-color: var(--bs-toast-color);
|
||||||
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row-reverse;
|
flex-direction: column;
|
||||||
backdrop-filter: blur(6px);
|
backdrop-filter: blur(6px);
|
||||||
}
|
}
|
||||||
|
|
||||||
#toast-container .toast .toast-header {
|
#toast-container .toast .toast-header {
|
||||||
padding: 0 !important;
|
|
||||||
background: transparent !important;
|
background: transparent !important;
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
|
color: var(--toast-text-color) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
#toast-container .toast .toast-header strong {
|
#toast-container .toast .toast-header strong > * {
|
||||||
/* The title of the toast is no longer displayed */
|
vertical-align: middle;
|
||||||
display: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#toast-container .toast .toast-header .btn-close {
|
#toast-container .toast .toast-header .btn-close {
|
||||||
margin: 0 var(--bs-toast-padding-x) 0 12px;
|
margin: 0 0 0 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toast-container .toast.no-title {
|
||||||
|
flex-direction: row;
|
||||||
}
|
}
|
||||||
|
|
||||||
#toast-container .toast .toast-body {
|
#toast-container .toast .toast-body {
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toast-container .toast:not(.no-title) .bx {
|
||||||
|
margin-right: 0.5em;
|
||||||
|
font-size: 1.1em;
|
||||||
|
opacity: 0.85;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toast-container .toast.no-title .bx {
|
||||||
|
margin-right: 0;
|
||||||
|
font-size: 1.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toast-container .toast.no-title .toast-body {
|
||||||
|
padding-top: var(--bs-toast-padding-x);
|
||||||
|
color: var(--toast-text-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ button.btn.btn-success kbd {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
:root .icon-action:not(.global-menu-button),
|
:root .icon-action:not(.global-menu-button),
|
||||||
:root .btn.tn-tool-button,
|
:root .tn-tool-button,
|
||||||
:root .btn-group .tn-tool-button:not(:last-child),
|
:root .btn-group .tn-tool-button:not(:last-child),
|
||||||
:root .btn-group .tn-tool-button:last-child {
|
:root .btn-group .tn-tool-button:last-child {
|
||||||
width: var(--icon-button-size);
|
width: var(--icon-button-size);
|
||||||
@@ -96,6 +96,11 @@ button.btn.btn-success kbd {
|
|||||||
color: var(--icon-button-color);
|
color: var(--icon-button-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:root .btn-group .icon-action:last-child {
|
||||||
|
border-top-left-radius: unset !important;
|
||||||
|
border-bottom-left-radius: unset !important;
|
||||||
|
}
|
||||||
|
|
||||||
.btn-group .tn-tool-button + .tn-tool-button {
|
.btn-group .tn-tool-button + .tn-tool-button {
|
||||||
margin-left: 4px !important;
|
margin-left: 4px !important;
|
||||||
}
|
}
|
||||||
@@ -192,8 +197,8 @@ input[type="password"]:focus,
|
|||||||
input[type="date"]:focus,
|
input[type="date"]:focus,
|
||||||
input[type="time"]:focus,
|
input[type="time"]:focus,
|
||||||
input[type="datetime-local"]:focus,
|
input[type="datetime-local"]:focus,
|
||||||
:root input.ck.ck-input-text:focus,
|
:root input.ck.ck-input-text:not([readonly="true"]):focus,
|
||||||
:root input.ck.ck-input-number:focus,
|
:root input.ck.ck-input-number:not([readonly="true"]):focus,
|
||||||
textarea.form-control:focus,
|
textarea.form-control:focus,
|
||||||
textarea:focus,
|
textarea:focus,
|
||||||
:root textarea.ck.ck-textarea:focus,
|
:root textarea.ck.ck-textarea:focus,
|
||||||
|
|||||||
@@ -109,6 +109,11 @@
|
|||||||
* NOTE MAP
|
* NOTE MAP
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
.note-detail-note-map .fixnodes-type-switcher .tn-tool-button,
|
||||||
|
.note-map-widget .fixnodes-type-switcher .tn-tool-button {
|
||||||
|
padding: unset;
|
||||||
|
}
|
||||||
|
|
||||||
.note-detail-note-map .fixnodes-type-switcher .tn-tool-button.toggled {
|
.note-detail-note-map .fixnodes-type-switcher .tn-tool-button.toggled {
|
||||||
color: var(--tab-close-button-hover-background);
|
color: var(--tab-close-button-hover-background);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,18 +94,17 @@ div.promoted-attributes-container {
|
|||||||
|
|
||||||
/* Note type dropdown */
|
/* Note type dropdown */
|
||||||
|
|
||||||
div.note-type-dropdown .check {
|
ul.note-type-dropdown .check {
|
||||||
margin-right: 6px;
|
margin-right: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ul.note-type-dropdown li.dropdown-item {
|
||||||
|
--menu-item-icon-vert-offset: 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Editability dropdown */
|
/* Editability dropdown */
|
||||||
|
|
||||||
div.editability-dropdown a.dropdown-item {
|
ul.editability-dropdown li.dropdown-item > div {
|
||||||
padding: 4px 16px 4px 0;
|
|
||||||
align-items: start !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.editability-dropdown .dropdown-item .check {
|
|
||||||
margin-left: 4px;
|
margin-left: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,31 +36,23 @@ body.mobile {
|
|||||||
|
|
||||||
/* #region Mica */
|
/* #region Mica */
|
||||||
body.background-effects.platform-win32 {
|
body.background-effects.platform-win32 {
|
||||||
--launcher-pane-horiz-border-color: rgba(0, 0, 0, 0.15);
|
|
||||||
--launcher-pane-horiz-background-color: rgba(255, 255, 255, 0.7);
|
|
||||||
--launcher-pane-vert-background-color: rgba(255, 255, 255, 0.055);
|
|
||||||
--tab-background-color: transparent;
|
|
||||||
--new-tab-button-background: transparent;
|
|
||||||
--active-tab-background-color: var(--launcher-pane-horiz-background-color);
|
|
||||||
--background-material: tabbed;
|
--background-material: tabbed;
|
||||||
}
|
--launcher-pane-horiz-border-color: var(--launcher-pane-horiz-border-color-bgfx);
|
||||||
|
--launcher-pane-horiz-background-color: var(--launcher-pane-horiz-background-color-bgfx);
|
||||||
@media (prefers-color-scheme: dark) {
|
--launcher-pane-vert-background-color: var(--launcher-pane-vert-background-color-bgfx);
|
||||||
body.background-effects.platform-win32 {
|
--tab-background-color: var(--window-background-color-bgfx);
|
||||||
--launcher-pane-horiz-border-color: rgba(0, 0, 0, 0.5);
|
--new-tab-button-background: var(--window-background-color-bgfx);
|
||||||
--launcher-pane-horiz-background-color: rgba(255, 255, 255, 0.09);
|
--active-tab-background-color: var(--launcher-pane-horiz-background-color);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
body.background-effects.platform-win32.layout-vertical {
|
body.background-effects.platform-win32.layout-vertical {
|
||||||
--left-pane-background-color: transparent;
|
--left-pane-background-color: var(--window-background-color-bgfx);
|
||||||
--left-pane-item-hover-background: rgba(127, 127, 127, 0.05);
|
|
||||||
--background-material: mica;
|
--background-material: mica;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.background-effects.platform-win32,
|
body.background-effects.platform-win32,
|
||||||
body.background-effects.platform-win32 #root-widget {
|
body.background-effects.platform-win32 #root-widget {
|
||||||
background: transparent !important;
|
background: var(--window-background-color-bgfx) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.background-effects.platform-win32.layout-horizontal #horizontal-main-container,
|
body.background-effects.platform-win32.layout-horizontal #horizontal-main-container,
|
||||||
@@ -89,7 +81,7 @@ body.background-effects.zen #root-widget {
|
|||||||
* Gutter
|
* Gutter
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.gutter {
|
.gutter {
|
||||||
background: var(--gutter-color) !important;
|
background: var(--gutter-color) !important;
|
||||||
transition: background 150ms ease-out;
|
transition: background 150ms ease-out;
|
||||||
}
|
}
|
||||||
@@ -231,7 +223,7 @@ body.layout-horizontal > .horizontal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#launcher-pane .launcher-button:focus,
|
#launcher-pane .launcher-button:focus,
|
||||||
#launcher-pane .global-menu button:focus {
|
#launcher-pane .global-menu :focus {
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -312,18 +304,6 @@ body.layout-horizontal > .horizontal {
|
|||||||
color: var(--tooltip-foreground-color) !important;
|
color: var(--tooltip-foreground-color) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Global menu
|
|
||||||
*/
|
|
||||||
|
|
||||||
.global-menu div.zoom-buttons a {
|
|
||||||
border: unset;
|
|
||||||
}
|
|
||||||
|
|
||||||
.global-menu div.zoom-buttons a.bx {
|
|
||||||
color: var(--menu-text-color) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calendar
|
* Calendar
|
||||||
*/
|
*/
|
||||||
@@ -356,6 +336,21 @@ body.layout-horizontal > .horizontal {
|
|||||||
--select-arrow-svg: initial; /* Disable the dropdown arrow */
|
--select-arrow-svg: initial; /* Disable the dropdown arrow */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Week number column */
|
||||||
|
.calendar-dropdown-widget .calendar-week-number {
|
||||||
|
transform: rotate(270deg);
|
||||||
|
justify-content: center;
|
||||||
|
padding: 0;
|
||||||
|
opacity: 0.5;
|
||||||
|
font-size: 1em;
|
||||||
|
font-weight: 700;
|
||||||
|
letter-spacing: .5pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendar-dropdown-widget .calendar-week-number::after {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
@media (max-width: 992px) {
|
@media (max-width: 992px) {
|
||||||
.calendar-dropdown-widget .calendar-header button {
|
.calendar-dropdown-widget .calendar-header button {
|
||||||
margin: 0 !important;
|
margin: 0 !important;
|
||||||
@@ -570,15 +565,21 @@ div.quick-search .search-button.show {
|
|||||||
transition: background-color 100ms ease-out !important;
|
transition: background-color 100ms ease-out !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Quick search results
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.quick-search .dropdown-menu {
|
div.quick-search .dropdown-menu {
|
||||||
--quick-search-item-delimiter-color: transparent;
|
--quick-search-item-delimiter-color: transparent;
|
||||||
--menu-item-icon-vert-offset: -.065em;
|
--menu-item-icon-vert-offset: -.065em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TO FIX: The quick search results dropdown has a backdrop issue with the tree panel
|
||||||
|
* when background effects are enabled in Electron.
|
||||||
|
* As a temporary workaround, the backdrop and transparency are disabled for the
|
||||||
|
* vertical layout.
|
||||||
|
*/
|
||||||
|
body.layout-vertical.background-effects div.quick-search .dropdown-menu {
|
||||||
|
--menu-background-color: var(--menu-background-color-no-backdrop) !important;
|
||||||
|
}
|
||||||
|
|
||||||
/* Item */
|
/* Item */
|
||||||
.quick-search .dropdown-menu *.dropdown-item {
|
.quick-search .dropdown-menu *.dropdown-item {
|
||||||
padding: 8px 12px !important;
|
padding: 8px 12px !important;
|
||||||
@@ -874,7 +875,10 @@ body.mobile .fancytree-node > span {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.tab-row-container .toggle-button {
|
.tab-row-container .toggle-button {
|
||||||
margin: 6px 10px !important;
|
--icon-button-size: 30px;
|
||||||
|
--icon-button-icon-ratio: .6;
|
||||||
|
|
||||||
|
margin: 3px 6px auto 8px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab-row-container {
|
.tab-row-container {
|
||||||
@@ -886,6 +890,80 @@ body.layout-horizontal .tab-row-container {
|
|||||||
border-bottom: 1px solid var(--launcher-pane-horiz-border-color);
|
border-bottom: 1px solid var(--launcher-pane-horiz-border-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.electron.background-effects.layout-horizontal .tab-row-container {
|
||||||
|
border-bottom: unset !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.electron.background-effects.layout-horizontal .note-tab-wrapper {
|
||||||
|
top: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.electron.background-effects.layout-horizontal .tab-row-container .toggle-button {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.electron.background-effects.layout-horizontal .tab-row-container .toggle-button:after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: -10px;
|
||||||
|
right: -10px;
|
||||||
|
top: 32px;
|
||||||
|
height: 1px;
|
||||||
|
border-bottom: 1px solid var(--launcher-pane-horiz-border-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.electron.background-effects.layout-horizontal .tab-row-container .tab-scroll-button-left,
|
||||||
|
body.electron.background-effects.layout-horizontal .tab-row-container .tab-scroll-button-right {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.electron.background-effects.layout-horizontal .tab-row-container .tab-scroll-button-left:after,
|
||||||
|
body.electron.background-effects.layout-horizontal .tab-row-container .tab-scroll-button-right:after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0px;
|
||||||
|
right: 0px;
|
||||||
|
height: 1px;
|
||||||
|
border-bottom: 1px solid var(--launcher-pane-horiz-border-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.electron.background-effects.layout-horizontal .tab-row-container .note-tab[active]:before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: -32768px;
|
||||||
|
top: var(--tab-height);
|
||||||
|
right: calc(100% - 1px);
|
||||||
|
height: 1px;
|
||||||
|
border-bottom: 1px solid var(--launcher-pane-horiz-border-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.electron.background-effects.layout-horizontal .tab-row-container .note-tab[active]:after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 100%;
|
||||||
|
top: var(--tab-height);
|
||||||
|
right: 0;
|
||||||
|
width: 100vw;
|
||||||
|
height: 1px;
|
||||||
|
border-bottom: 1px solid var(--launcher-pane-horiz-border-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.electron.background-effects.layout-horizontal .tab-row-container .note-new-tab:before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: -4px;
|
||||||
|
top: calc(var(--tab-height), -1);
|
||||||
|
right: 0;
|
||||||
|
width: 100vw;
|
||||||
|
height: 1px;
|
||||||
|
border-bottom: 1px solid var(--launcher-pane-horiz-border-color);
|
||||||
|
}
|
||||||
|
|
||||||
body.layout-vertical.electron.platform-darwin .tab-row-container {
|
body.layout-vertical.electron.platform-darwin .tab-row-container {
|
||||||
border-bottom: 1px solid var(--subtle-border-color);
|
border-bottom: 1px solid var(--subtle-border-color);
|
||||||
}
|
}
|
||||||
@@ -977,6 +1055,14 @@ body.layout-horizontal .tab-row-widget .note-tab .note-tab-wrapper {
|
|||||||
transform: translate3d(var(--tab-first-item-horiz-offset), 0, 0);
|
transform: translate3d(var(--tab-first-item-horiz-offset), 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:root .tab-row-widget .note-tab .note-tab-icon {
|
||||||
|
padding-right: 5px; /* The gap between the icon and the title */
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-row-widget .note-tab[active] .note-tab-icon {
|
||||||
|
color: var(--active-tab-icon-color);
|
||||||
|
}
|
||||||
|
|
||||||
.tab-row-widget .note-tab .note-tab-title {
|
.tab-row-widget .note-tab .note-tab-title {
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
}
|
}
|
||||||
@@ -1101,6 +1187,11 @@ body.layout-vertical .tab-row-widget-is-sorting .note-tab.note-tab-is-dragging .
|
|||||||
/* will-change: opacity; -- causes some weird artifacts to the note menu in split view */
|
/* will-change: opacity; -- causes some weird artifacts to the note menu in split view */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.split-note-container-widget > .gutter {
|
||||||
|
background: var(--root-background) !important;
|
||||||
|
transition: background 150ms ease-out;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Ribbon & note header
|
* Ribbon & note header
|
||||||
*/
|
*/
|
||||||
@@ -1109,10 +1200,6 @@ body.layout-vertical .tab-row-widget-is-sorting .note-tab.note-tab-is-dragging .
|
|||||||
margin-bottom: 0 !important;
|
margin-bottom: 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.note-split:not(.hidden-ext) + .note-split:not(.hidden-ext) {
|
|
||||||
border-left: 4px solid var(--root-background);
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes note-entrance {
|
@keyframes note-entrance {
|
||||||
from {
|
from {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
@@ -1323,6 +1410,13 @@ div.promoted-attribute-cell .multiplicity:has(span) {
|
|||||||
margin-left: 8px;
|
margin-left: 8px;
|
||||||
margin-right: calc(var(--pa-card-padding-left) - var(--pa-card-padding-right));
|
margin-right: calc(var(--pa-card-padding-left) - var(--pa-card-padding-right));
|
||||||
font-size: 0; /* Prevent whitespaces creating a gap between buttons */
|
font-size: 0; /* Prevent whitespaces creating a gap between buttons */
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.promoted-attribute-cell .multiplicity:has(span) span {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
5
apps/client/src/translations/ar/translation.json
Normal file
5
apps/client/src/translations/ar/translation.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"about": {
|
||||||
|
"title": "حول تريليوم للملاحظات"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -121,7 +121,7 @@
|
|||||||
"sat": "Ds",
|
"sat": "Ds",
|
||||||
"sun": "Dg",
|
"sun": "Dg",
|
||||||
"january": "Gener",
|
"january": "Gener",
|
||||||
"febuary": "Febrer",
|
"february": "Febrer",
|
||||||
"march": "Març",
|
"march": "Març",
|
||||||
"april": "Abril",
|
"april": "Abril",
|
||||||
"may": "Maig",
|
"may": "Maig",
|
||||||
|
|||||||
@@ -276,7 +276,12 @@
|
|||||||
"mime": "MIME 类型: ",
|
"mime": "MIME 类型: ",
|
||||||
"file_size": "文件大小:",
|
"file_size": "文件大小:",
|
||||||
"preview": "预览:",
|
"preview": "预览:",
|
||||||
"preview_not_available": "无法预览此类型的笔记。"
|
"preview_not_available": "无法预览此类型的笔记。",
|
||||||
|
"diff_on": "显示差异",
|
||||||
|
"diff_off": "显示内容",
|
||||||
|
"diff_on_hint": "点击以显示笔记源代码差异",
|
||||||
|
"diff_off_hint": "点击以显示笔记内容",
|
||||||
|
"diff_not_available": "差异不可用。"
|
||||||
},
|
},
|
||||||
"sort_child_notes": {
|
"sort_child_notes": {
|
||||||
"sort_children_by": "按...排序子笔记",
|
"sort_children_by": "按...排序子笔记",
|
||||||
@@ -577,7 +582,7 @@
|
|||||||
"cannot_find_day_note": "无法找到日记",
|
"cannot_find_day_note": "无法找到日记",
|
||||||
"cannot_find_week_note": "无法找到周记",
|
"cannot_find_week_note": "无法找到周记",
|
||||||
"january": "一月",
|
"january": "一月",
|
||||||
"febuary": "二月",
|
"february": "二月",
|
||||||
"march": "三月",
|
"march": "三月",
|
||||||
"april": "四月",
|
"april": "四月",
|
||||||
"may": "五月",
|
"may": "五月",
|
||||||
@@ -587,7 +592,18 @@
|
|||||||
"september": "九月",
|
"september": "九月",
|
||||||
"october": "十月",
|
"october": "十月",
|
||||||
"november": "十一月",
|
"november": "十一月",
|
||||||
"december": "十二月"
|
"december": "十二月",
|
||||||
|
"week_previous": "上周",
|
||||||
|
"week_next": "下周",
|
||||||
|
"month_previous": "上个月",
|
||||||
|
"month_next": "下个月",
|
||||||
|
"year": "年",
|
||||||
|
"year_previous": "上一年",
|
||||||
|
"year_next": "明年",
|
||||||
|
"today": "今天",
|
||||||
|
"week": "周",
|
||||||
|
"month": "月",
|
||||||
|
"list": "列表"
|
||||||
},
|
},
|
||||||
"close_pane_button": {
|
"close_pane_button": {
|
||||||
"close_this_pane": "关闭此面板"
|
"close_this_pane": "关闭此面板"
|
||||||
@@ -748,7 +764,8 @@
|
|||||||
"book_properties": "集合属性",
|
"book_properties": "集合属性",
|
||||||
"table": "表格",
|
"table": "表格",
|
||||||
"geo-map": "地理地图",
|
"geo-map": "地理地图",
|
||||||
"board": "看板"
|
"board": "看板",
|
||||||
|
"include_archived_notes": "展示归档笔记"
|
||||||
},
|
},
|
||||||
"edited_notes": {
|
"edited_notes": {
|
||||||
"no_edited_notes_found": "今天还没有编辑过的笔记...",
|
"no_edited_notes_found": "今天还没有编辑过的笔记...",
|
||||||
@@ -949,7 +966,9 @@
|
|||||||
"no_attachments": "此笔记没有附件。"
|
"no_attachments": "此笔记没有附件。"
|
||||||
},
|
},
|
||||||
"book": {
|
"book": {
|
||||||
"no_children_help": "此类型为书籍的笔记没有任何子笔记,因此没有内容显示。请参阅 <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> 了解详情。"
|
"no_children_help": "此类型为书籍的笔记没有任何子笔记,因此没有内容显示。请参阅 <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> 了解详情。",
|
||||||
|
"drag_locked_title": "锁定编辑",
|
||||||
|
"drag_locked_message": "无法拖拽,因为集合已被锁定编辑。"
|
||||||
},
|
},
|
||||||
"editable_code": {
|
"editable_code": {
|
||||||
"placeholder": "在这里输入您的代码笔记内容..."
|
"placeholder": "在这里输入您的代码笔记内容..."
|
||||||
@@ -1334,7 +1353,7 @@
|
|||||||
"oauth_title": "OAuth/OpenID 认证",
|
"oauth_title": "OAuth/OpenID 认证",
|
||||||
"oauth_description": "OpenID 是一种标准化方式,允许您使用其他服务(如 Google)的账号登录网站来验证您的身份。默认的身份提供者是 Google,但您可以更改为任何其他 OpenID 提供者。点击<a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">这里</a>了解更多信息。请参阅这些 <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">指南</a> 通过 Google 设置 OpenID 服务。",
|
"oauth_description": "OpenID 是一种标准化方式,允许您使用其他服务(如 Google)的账号登录网站来验证您的身份。默认的身份提供者是 Google,但您可以更改为任何其他 OpenID 提供者。点击<a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">这里</a>了解更多信息。请参阅这些 <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">指南</a> 通过 Google 设置 OpenID 服务。",
|
||||||
"oauth_description_warning": "要启用 OAuth/OpenID,您需要设置 config.ini 文件中的 OAuth/OpenID 基础 URL、客户端 ID 和客户端密钥,并重新启动应用程序。如果要从环境变量设置,请设置 TRILIUM_OAUTH_BASE_URL、TRILIUM_OAUTH_CLIENT_ID 和 TRILIUM_OAUTH_CLIENT_SECRET 环境变量。",
|
"oauth_description_warning": "要启用 OAuth/OpenID,您需要设置 config.ini 文件中的 OAuth/OpenID 基础 URL、客户端 ID 和客户端密钥,并重新启动应用程序。如果要从环境变量设置,请设置 TRILIUM_OAUTH_BASE_URL、TRILIUM_OAUTH_CLIENT_ID 和 TRILIUM_OAUTH_CLIENT_SECRET 环境变量。",
|
||||||
"oauth_missing_vars": "缺少以下设置项:{{variables}}",
|
"oauth_missing_vars": "缺少以下设置项:{{-variables}}",
|
||||||
"oauth_user_account": "用户账号: ",
|
"oauth_user_account": "用户账号: ",
|
||||||
"oauth_user_email": "用户邮箱: ",
|
"oauth_user_email": "用户邮箱: ",
|
||||||
"oauth_user_not_logged_in": "未登录!"
|
"oauth_user_not_logged_in": "未登录!"
|
||||||
@@ -1407,7 +1426,7 @@
|
|||||||
"button-tree-map": "树形地图"
|
"button-tree-map": "树形地图"
|
||||||
},
|
},
|
||||||
"tree-context-menu": {
|
"tree-context-menu": {
|
||||||
"open-in-a-new-tab": "在新标签页中打开 <kbd>Ctrl+Click</kbd>",
|
"open-in-a-new-tab": "在新标签页中打开",
|
||||||
"open-in-a-new-split": "在新分栏中打开",
|
"open-in-a-new-split": "在新分栏中打开",
|
||||||
"insert-note-after": "在后面插入笔记",
|
"insert-note-after": "在后面插入笔记",
|
||||||
"insert-child-note": "插入子笔记",
|
"insert-child-note": "插入子笔记",
|
||||||
@@ -1437,7 +1456,9 @@
|
|||||||
"converted-to-attachments": "{{count}} 个笔记已被转换为附件。",
|
"converted-to-attachments": "{{count}} 个笔记已被转换为附件。",
|
||||||
"convert-to-attachment-confirm": "确定要将选中的笔记转换为其父笔记的附件吗?",
|
"convert-to-attachment-confirm": "确定要将选中的笔记转换为其父笔记的附件吗?",
|
||||||
"duplicate": "复制",
|
"duplicate": "复制",
|
||||||
"open-in-popup": "快速编辑"
|
"open-in-popup": "快速编辑",
|
||||||
|
"archive": "归档",
|
||||||
|
"unarchive": "解压"
|
||||||
},
|
},
|
||||||
"shared_info": {
|
"shared_info": {
|
||||||
"help_link": "访问 <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki</a> 获取帮助。",
|
"help_link": "访问 <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki</a> 获取帮助。",
|
||||||
@@ -1602,7 +1623,9 @@
|
|||||||
"ws": {
|
"ws": {
|
||||||
"sync-check-failed": "同步检查失败!",
|
"sync-check-failed": "同步检查失败!",
|
||||||
"consistency-checks-failed": "一致性检查失败!请查看日志了解详细信息。",
|
"consistency-checks-failed": "一致性检查失败!请查看日志了解详细信息。",
|
||||||
"encountered-error": "遇到错误 \"{{message}}\",请查看控制台。"
|
"encountered-error": "遇到错误 \"{{message}}\",请查看控制台。",
|
||||||
|
"lost-websocket-connection-title": "与服务器的连线中断",
|
||||||
|
"lost-websocket-connection-message": "检查您的反向代理(如 nginx 或 Apache)设置以确保 Websocket 连线没有被阻挡。"
|
||||||
},
|
},
|
||||||
"hoisted_note": {
|
"hoisted_note": {
|
||||||
"confirm_unhoisting": "请求的笔记 '{{requestedNote}}' 位于聚焦的笔记 '{{hoistedNote}}' 的子树之外,您必须取消聚焦才能访问该笔记。是否继续取消聚焦?"
|
"confirm_unhoisting": "请求的笔记 '{{requestedNote}}' 位于聚焦的笔记 '{{hoistedNote}}' 的子树之外,您必须取消聚焦才能访问该笔记。是否继续取消聚焦?"
|
||||||
@@ -1678,7 +1701,7 @@
|
|||||||
"native-title-bar": "原生标题栏",
|
"native-title-bar": "原生标题栏",
|
||||||
"native-title-bar-description": "对于 Windows 和 macOS,关闭原生标题栏可使应用程序看起来更紧凑。在 Linux 上,保留原生标题栏可以更好地与系统集成。",
|
"native-title-bar-description": "对于 Windows 和 macOS,关闭原生标题栏可使应用程序看起来更紧凑。在 Linux 上,保留原生标题栏可以更好地与系统集成。",
|
||||||
"background-effects": "启用背景效果(仅适用于 Windows 11)",
|
"background-effects": "启用背景效果(仅适用于 Windows 11)",
|
||||||
"background-effects-description": "Mica 效果为应用窗口添加模糊且时尚的背景,营造出深度感和现代外观。",
|
"background-effects-description": "Mica 效果为应用窗口添加模糊且时尚的背景,营造出深度感和现代外观。「原生标题栏」必須被禁用。",
|
||||||
"restart-app-button": "重启应用程序以查看更改",
|
"restart-app-button": "重启应用程序以查看更改",
|
||||||
"zoom-factor": "缩放系数"
|
"zoom-factor": "缩放系数"
|
||||||
},
|
},
|
||||||
@@ -1720,9 +1743,17 @@
|
|||||||
"show_login_link": "在共享主题中显示登录链接",
|
"show_login_link": "在共享主题中显示登录链接",
|
||||||
"show_login_link_description": "在共享页面底部添加登录链接",
|
"show_login_link_description": "在共享页面底部添加登录链接",
|
||||||
"check_share_root": "检查共享根状态",
|
"check_share_root": "检查共享根状态",
|
||||||
|
"check_share_root_error": "检查共享根状态时发生意外错误,请检查日志以获取更多信息。",
|
||||||
|
"share_note_title": "'{{noteTitle}}'",
|
||||||
"share_root_found": "共享根笔记 '{{noteTitle}}' 已准备好",
|
"share_root_found": "共享根笔记 '{{noteTitle}}' 已准备好",
|
||||||
"share_root_not_found": "未找到带有 #shareRoot 标签的笔记",
|
"share_root_not_found": "未找到带有 #shareRoot 标签的笔记",
|
||||||
"share_root_not_shared": "笔记 '{{noteTitle}}' 具有 #shareRoot 标签,但未共享"
|
"share_root_not_shared": "笔记 '{{noteTitle}}' 具有 #shareRoot 标签,但未共享",
|
||||||
|
"share_root_multiple_found": "找到多个具有 #shareRoot 标签的共享笔记:{{- foundNoteTitles}}。将使用笔记 {{- activeNoteTitle}} 作为共享根笔记。",
|
||||||
|
"share_path": "共享路径",
|
||||||
|
"share_path_description": "共享笔记的 URL 前缀(例如 '/share' --> '/share/noteId' 或 '/custom-path' --> '/custom-path/noteId')。支持多级嵌套(例如 '/custom-path/sub-path' --> '/custom-path/sub-path/noteId')。刷新页面以应用更改。",
|
||||||
|
"share_path_placeholder": "/share 或 /custom-path",
|
||||||
|
"share_subtree": "共享子树",
|
||||||
|
"share_subtree_description": "共享整个子树,而不是仅共享笔记"
|
||||||
},
|
},
|
||||||
"time_selector": {
|
"time_selector": {
|
||||||
"invalid_input": "输入的时间值不是有效数字。",
|
"invalid_input": "输入的时间值不是有效数字。",
|
||||||
@@ -1931,7 +1962,11 @@
|
|||||||
"editorfeatures": {
|
"editorfeatures": {
|
||||||
"title": "功能",
|
"title": "功能",
|
||||||
"emoji_completion_enabled": "启用表情自动补全",
|
"emoji_completion_enabled": "启用表情自动补全",
|
||||||
"note_completion_enabled": "启用笔记自动补全"
|
"note_completion_enabled": "启用笔记自动补全",
|
||||||
|
"emoji_completion_description": "如果启用,表情可以轻易地经由输入 `:` 加上表情名称来插入。",
|
||||||
|
"note_completion_description": "如果启用,导向笔记的链接可以经由输入 `@` 加上笔记标题来创建。",
|
||||||
|
"slash_commands_enabled": "启用斜杠命令",
|
||||||
|
"slash_commands_description": "如果启用,可以经由输入 `/` 来触发命令,如插入换行符或标题。"
|
||||||
},
|
},
|
||||||
"table_view": {
|
"table_view": {
|
||||||
"new-row": "新增行",
|
"new-row": "新增行",
|
||||||
@@ -1967,14 +2002,21 @@
|
|||||||
"delete_row": "删除行"
|
"delete_row": "删除行"
|
||||||
},
|
},
|
||||||
"board_view": {
|
"board_view": {
|
||||||
"delete-note": "删除笔记",
|
"delete-note": "删除笔记...",
|
||||||
"move-to": "移动到",
|
"move-to": "移动到",
|
||||||
"insert-above": "在上方插入",
|
"insert-above": "在上方插入",
|
||||||
"insert-below": "在下方插入",
|
"insert-below": "在下方插入",
|
||||||
"delete-column": "删除列",
|
"delete-column": "删除列",
|
||||||
"delete-column-confirmation": "确定要删除此列吗?此列下所有笔记中对应的属性也将被删除。",
|
"delete-column-confirmation": "确定要删除此列吗?此列下所有笔记中对应的属性也将被删除。",
|
||||||
"new-item": "新增项目",
|
"new-item": "新增项目",
|
||||||
"add-column": "添加列"
|
"add-column": "添加列",
|
||||||
|
"archive-note": "存档笔记",
|
||||||
|
"unarchive-note": "解压笔记",
|
||||||
|
"new-item-placeholder": "输入笔记标题...",
|
||||||
|
"add-column-placeholder": "请输入列名...",
|
||||||
|
"edit-note-title": "点击编辑笔记标题",
|
||||||
|
"edit-column-title": "点击编辑列标题",
|
||||||
|
"remove-from-board": "从看板上移除"
|
||||||
},
|
},
|
||||||
"command_palette": {
|
"command_palette": {
|
||||||
"tree-action-name": "树形:{{name}}",
|
"tree-action-name": "树形:{{name}}",
|
||||||
@@ -2021,6 +2063,15 @@
|
|||||||
"title": "性能",
|
"title": "性能",
|
||||||
"enable-motion": "启用过渡和动画",
|
"enable-motion": "启用过渡和动画",
|
||||||
"enable-shadows": "启用阴影",
|
"enable-shadows": "启用阴影",
|
||||||
"enable-backdrop-effects": "启用菜单、弹窗和面板的背景效果"
|
"enable-backdrop-effects": "启用菜单、弹窗和面板的背景效果",
|
||||||
|
"enable-smooth-scroll": "启用平滑滚动",
|
||||||
|
"app-restart-required": "(需重启程序以应用更改)"
|
||||||
|
},
|
||||||
|
"pagination": {
|
||||||
|
"page_title": "第 {{startIndex}} 页 - 第 {{endIndex}} 页",
|
||||||
|
"total_notes": "{{count}} 笔记"
|
||||||
|
},
|
||||||
|
"collections": {
|
||||||
|
"rendering_error": "出现错误无法显示内容。"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
41
apps/client/src/translations/cs/translation.json
Normal file
41
apps/client/src/translations/cs/translation.json
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"about": {
|
||||||
|
"title": "O Trilium Notes",
|
||||||
|
"homepage": "Domovská stránka:",
|
||||||
|
"app_version": "Verze aplikace:",
|
||||||
|
"db_version": "Verze DB:",
|
||||||
|
"sync_version": "Verze sync:",
|
||||||
|
"build_date": "Datum sestavení:",
|
||||||
|
"build_revision": "Revize sestavení:",
|
||||||
|
"data_directory": "Datový adresář:"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"critical-error": {
|
||||||
|
"title": "Kritická chyba",
|
||||||
|
"message": "Nastala kritická chyba která aplikaci brání ve spuštění:\n\n{{message}}\n\nPravděpodobně neočekávaným způsobem selhal skript. Pokuste se restartovat aplikaci v safe módu a problém napravit."
|
||||||
|
},
|
||||||
|
"widget-error": {
|
||||||
|
"title": "Nepodařilo se inicializovat widget",
|
||||||
|
"message-custom": "Uživatelský widget z poznámky s ID \"{{id}}\" a názvem \"{{title}}\" nemohl být inicializován z důvodu: \n\n{{message}}",
|
||||||
|
"message-unknown": "Neznámý widget nemohl být inicializován z důvodu:\n\n{{message}}"
|
||||||
|
},
|
||||||
|
"bundle-error": {
|
||||||
|
"title": "Načtení uživatelského skriptu selhalo",
|
||||||
|
"message": "Uživatelský skript z poznámky s ID \"{{id}}\" a názvem \"{{title}}\" nemohl být spuštěn z důvodu: \n\n{{message}}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ai_llm": {
|
||||||
|
"n_notes_queued_0": "{{ count }} poznámka ve frontě k indexaci",
|
||||||
|
"n_notes_queued_1": "{{ count }} poznámky ve frontě k indexaci",
|
||||||
|
"n_notes_queued_2": "{{ count }} poznámek ve frontě k indexaci",
|
||||||
|
"notes_indexed_0": "{{ count }} poznámka indexována",
|
||||||
|
"notes_indexed_1": "{{ count }} poznámky indexovány",
|
||||||
|
"notes_indexed_2": "{{ count }} poznámek indexováno"
|
||||||
|
},
|
||||||
|
"add_link": {
|
||||||
|
"add_link": "Přidat odkaz",
|
||||||
|
"help_on_links": "Nápověda k odkazům",
|
||||||
|
"note": "Poznámka",
|
||||||
|
"search_note": "hledat poznámku podle názvu"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -276,7 +276,12 @@
|
|||||||
"preview": "Vorschau:",
|
"preview": "Vorschau:",
|
||||||
"preview_not_available": "Für diesen Notiztyp ist keine Vorschau verfügbar.",
|
"preview_not_available": "Für diesen Notiztyp ist keine Vorschau verfügbar.",
|
||||||
"restore_button": "Wiederherstellen",
|
"restore_button": "Wiederherstellen",
|
||||||
"delete_button": "Löschen"
|
"delete_button": "Löschen",
|
||||||
|
"diff_on": "Zeige Differenz",
|
||||||
|
"diff_off": "Zeige Inhalt",
|
||||||
|
"diff_on_hint": "Klicke, um die Differenz des Notiz-Quellcodes zu zeigen",
|
||||||
|
"diff_off_hint": "Klicke, um den Notizinhalt zu zeigen",
|
||||||
|
"diff_not_available": "Differenz-Abgleich ist nicht verfügbar."
|
||||||
},
|
},
|
||||||
"sort_child_notes": {
|
"sort_child_notes": {
|
||||||
"sort_children_by": "Unternotizen sortieren nach...",
|
"sort_children_by": "Unternotizen sortieren nach...",
|
||||||
@@ -576,7 +581,7 @@
|
|||||||
"sun": "So",
|
"sun": "So",
|
||||||
"cannot_find_day_note": "Tagesnotiz kann nicht gefunden werden",
|
"cannot_find_day_note": "Tagesnotiz kann nicht gefunden werden",
|
||||||
"january": "Januar",
|
"january": "Januar",
|
||||||
"febuary": "Februar",
|
"february": "Februar",
|
||||||
"march": "März",
|
"march": "März",
|
||||||
"april": "April",
|
"april": "April",
|
||||||
"may": "Mai",
|
"may": "Mai",
|
||||||
@@ -587,7 +592,18 @@
|
|||||||
"october": "Oktober",
|
"october": "Oktober",
|
||||||
"november": "November",
|
"november": "November",
|
||||||
"december": "Dezember",
|
"december": "Dezember",
|
||||||
"cannot_find_week_note": "Wochennotiz kann nicht gefunden werden"
|
"cannot_find_week_note": "Wochennotiz kann nicht gefunden werden",
|
||||||
|
"week": "Woche",
|
||||||
|
"week_previous": "vorherige Woche",
|
||||||
|
"week_next": "nächste Woche",
|
||||||
|
"month": "Monat",
|
||||||
|
"month_previous": "vorheriger Monat",
|
||||||
|
"month_next": "nächster Monat",
|
||||||
|
"year": "Jahr",
|
||||||
|
"year_previous": "vorheriges Jahr",
|
||||||
|
"year_next": "nächstes Jahr",
|
||||||
|
"list": "Liste",
|
||||||
|
"today": "Heute"
|
||||||
},
|
},
|
||||||
"close_pane_button": {
|
"close_pane_button": {
|
||||||
"close_this_pane": "Schließe diesen Bereich"
|
"close_this_pane": "Schließe diesen Bereich"
|
||||||
@@ -745,7 +761,8 @@
|
|||||||
"book_properties": "Sammlungseigenschaften",
|
"book_properties": "Sammlungseigenschaften",
|
||||||
"table": "Tabelle",
|
"table": "Tabelle",
|
||||||
"geo-map": "Weltkarte",
|
"geo-map": "Weltkarte",
|
||||||
"board": "Tafel"
|
"board": "Tafel",
|
||||||
|
"include_archived_notes": "Zeige archivierte Notizen"
|
||||||
},
|
},
|
||||||
"edited_notes": {
|
"edited_notes": {
|
||||||
"no_edited_notes_found": "An diesem Tag wurden noch keine Notizen bearbeitet...",
|
"no_edited_notes_found": "An diesem Tag wurden noch keine Notizen bearbeitet...",
|
||||||
@@ -946,7 +963,9 @@
|
|||||||
"no_attachments": "Diese Notiz enthält keine Anhänge."
|
"no_attachments": "Diese Notiz enthält keine Anhänge."
|
||||||
},
|
},
|
||||||
"book": {
|
"book": {
|
||||||
"no_children_help": "Diese Notiz mit dem Notiztyp Buch besitzt keine Unternotizen, deshalb ist nichts zum Anzeigen vorhanden. Siehe <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">Wiki</a> für mehr Details."
|
"no_children_help": "Diese Notiz mit dem Notiztyp Buch besitzt keine Unternotizen, deshalb ist nichts zum Anzeigen vorhanden. Siehe <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">Wiki</a> für mehr Details.",
|
||||||
|
"drag_locked_title": "Für Bearbeitung gesperrt",
|
||||||
|
"drag_locked_message": "Das Ziehen ist nicht möglich, da die Sammlung für die Bearbeitung gesperrt ist."
|
||||||
},
|
},
|
||||||
"editable_code": {
|
"editable_code": {
|
||||||
"placeholder": "Gebe hier den Inhalt deiner Codenotiz ein..."
|
"placeholder": "Gebe hier den Inhalt deiner Codenotiz ein..."
|
||||||
@@ -1371,7 +1390,7 @@
|
|||||||
"button-tree-map": "Baumkarte"
|
"button-tree-map": "Baumkarte"
|
||||||
},
|
},
|
||||||
"tree-context-menu": {
|
"tree-context-menu": {
|
||||||
"open-in-a-new-tab": "In neuem Tab öffnen <kbd>Strg+Klick</kbd>",
|
"open-in-a-new-tab": "In neuem Tab öffnen",
|
||||||
"open-in-a-new-split": "In neuem Split öffnen",
|
"open-in-a-new-split": "In neuem Split öffnen",
|
||||||
"insert-note-after": "Notiz dahinter einfügen",
|
"insert-note-after": "Notiz dahinter einfügen",
|
||||||
"insert-child-note": "Unternotiz einfügen",
|
"insert-child-note": "Unternotiz einfügen",
|
||||||
@@ -1401,7 +1420,9 @@
|
|||||||
"apply-bulk-actions": "Massenaktionen anwenden",
|
"apply-bulk-actions": "Massenaktionen anwenden",
|
||||||
"converted-to-attachments": "{{count}} Notizen wurden als Anhang konvertiert.",
|
"converted-to-attachments": "{{count}} Notizen wurden als Anhang konvertiert.",
|
||||||
"convert-to-attachment-confirm": "Bist du sicher, dass du die ausgewählten Notizen in Anhänge ihrer übergeordneten Notizen umwandeln möchtest?",
|
"convert-to-attachment-confirm": "Bist du sicher, dass du die ausgewählten Notizen in Anhänge ihrer übergeordneten Notizen umwandeln möchtest?",
|
||||||
"open-in-popup": "Schnellbearbeitung"
|
"open-in-popup": "Schnellbearbeitung",
|
||||||
|
"archive": "Archiviere",
|
||||||
|
"unarchive": "Entarchivieren"
|
||||||
},
|
},
|
||||||
"shared_info": {
|
"shared_info": {
|
||||||
"shared_publicly": "Diese Notiz ist öffentlich geteilt auf {{- link}}.",
|
"shared_publicly": "Diese Notiz ist öffentlich geteilt auf {{- link}}.",
|
||||||
@@ -1566,7 +1587,9 @@
|
|||||||
"ws": {
|
"ws": {
|
||||||
"sync-check-failed": "Synchronisationsprüfung fehlgeschlagen!",
|
"sync-check-failed": "Synchronisationsprüfung fehlgeschlagen!",
|
||||||
"consistency-checks-failed": "Konsistenzprüfung fehlgeschlagen! Siehe Logs für Details.",
|
"consistency-checks-failed": "Konsistenzprüfung fehlgeschlagen! Siehe Logs für Details.",
|
||||||
"encountered-error": "Fehler „{{message}}“ aufgetreten, siehe Konsole für Details."
|
"encountered-error": "Fehler „{{message}}“ aufgetreten, siehe Konsole für Details.",
|
||||||
|
"lost-websocket-connection-title": "Verbindung zum Server verloren",
|
||||||
|
"lost-websocket-connection-message": "Überprüfe die Konfiguration des Reverse-Proxys (z. B. nginx oder Apache), um sicherzustellen, dass WebSocket-Verbindungen zugelassen und nicht blockiert werden."
|
||||||
},
|
},
|
||||||
"hoisted_note": {
|
"hoisted_note": {
|
||||||
"confirm_unhoisting": "Die angeforderte Notiz ‚{{requestedNote}}‘ befindet sich außerhalb des hoisted Bereichs der Notiz ‚{{hoistedNote}}‘. Du musst sie unhoisten, um auf die Notiz zuzugreifen. Möchtest du mit dem Unhoisting fortfahren?"
|
"confirm_unhoisting": "Die angeforderte Notiz ‚{{requestedNote}}‘ befindet sich außerhalb des hoisted Bereichs der Notiz ‚{{hoistedNote}}‘. Du musst sie unhoisten, um auf die Notiz zuzugreifen. Möchtest du mit dem Unhoisting fortfahren?"
|
||||||
@@ -1642,7 +1665,7 @@
|
|||||||
"native-title-bar": "Native Anwendungsleiste",
|
"native-title-bar": "Native Anwendungsleiste",
|
||||||
"native-title-bar-description": "In Windows und macOS, sorgt das Deaktivieren der nativen Anwendungsleiste für ein kompakteres Aussehen. Unter Linux, sorgt das Aktivieren der nativen Anwendungsleiste für eine bessere Integration mit anderen Teilen des Systems.",
|
"native-title-bar-description": "In Windows und macOS, sorgt das Deaktivieren der nativen Anwendungsleiste für ein kompakteres Aussehen. Unter Linux, sorgt das Aktivieren der nativen Anwendungsleiste für eine bessere Integration mit anderen Teilen des Systems.",
|
||||||
"background-effects": "Hintergrundeffekte aktivieren (nur Windows 11)",
|
"background-effects": "Hintergrundeffekte aktivieren (nur Windows 11)",
|
||||||
"background-effects-description": "Der Mica Effekt fügt einen unscharfen, stylischen Hintergrund in Anwendungsfenstern ein. Dieser erzeugt Tiefe und ein modernes Auftreten.",
|
"background-effects-description": "Der Mica Effekt fügt einen unscharfen, stylischen Hintergrund in Anwendungsfenstern ein. Dieser erzeugt Tiefe und ein modernes Auftreten. \"Native Titelleiste\" muss deaktiviert sein.",
|
||||||
"restart-app-button": "Anwendung neustarten um Änderungen anzuwenden",
|
"restart-app-button": "Anwendung neustarten um Änderungen anzuwenden",
|
||||||
"zoom-factor": "Zoomfaktor"
|
"zoom-factor": "Zoomfaktor"
|
||||||
},
|
},
|
||||||
@@ -1839,7 +1862,9 @@
|
|||||||
"title": "Leistung",
|
"title": "Leistung",
|
||||||
"enable-motion": "Aktiviere Übergänge und Animationen",
|
"enable-motion": "Aktiviere Übergänge und Animationen",
|
||||||
"enable-shadows": "Aktiviere Schatten",
|
"enable-shadows": "Aktiviere Schatten",
|
||||||
"enable-backdrop-effects": "Aktiviere Hintergrundeffekte für Menüs, Pop-up Fenster und Panele"
|
"enable-backdrop-effects": "Aktiviere Hintergrundeffekte für Menüs, Pop-up Fenster und Panele",
|
||||||
|
"enable-smooth-scroll": "Aktiviere sanftes Scrollen",
|
||||||
|
"app-restart-required": "(Ein Neustart der Anwendung ist erforderlich, damit die Änderungen wirksam werden)"
|
||||||
},
|
},
|
||||||
"code-editor-options": {
|
"code-editor-options": {
|
||||||
"title": "Editor"
|
"title": "Editor"
|
||||||
@@ -1878,7 +1903,7 @@
|
|||||||
"oauth_title": "OAuth/OpenID",
|
"oauth_title": "OAuth/OpenID",
|
||||||
"oauth_description": "OpenID ist ein standardisiertes Verfahren, mit dem Sie sich über ein Konto eines anderen Dienstes, beispielsweise Google, bei Websites anmelden können, um Ihre Identität zu bestätigen. Der Standardaussteller ist Google, Sie können jedoch jeden anderen OpenID-Anbieter auswählen. Weitere Informationen finden Sie <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">hier</a>. Befolgen Sie diese <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">Anweisungen</a>, um einen OpenID-Dienst über Google einzurichten.",
|
"oauth_description": "OpenID ist ein standardisiertes Verfahren, mit dem Sie sich über ein Konto eines anderen Dienstes, beispielsweise Google, bei Websites anmelden können, um Ihre Identität zu bestätigen. Der Standardaussteller ist Google, Sie können jedoch jeden anderen OpenID-Anbieter auswählen. Weitere Informationen finden Sie <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">hier</a>. Befolgen Sie diese <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">Anweisungen</a>, um einen OpenID-Dienst über Google einzurichten.",
|
||||||
"oauth_description_warning": "Um OAuth/OpenID zu aktivieren, müssen Sie die OAuth/OpenID-Basis-URL, die Client-ID und den Client-Secret in der Datei config.ini festlegen und die Anwendung neu starten. Wenn Sie die Einstellungen über Umgebungsvariablen vornehmen möchten, legen Sie bitte TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID und TRILIUM_OAUTH_CLIENT_SECRET fest.",
|
"oauth_description_warning": "Um OAuth/OpenID zu aktivieren, müssen Sie die OAuth/OpenID-Basis-URL, die Client-ID und den Client-Secret in der Datei config.ini festlegen und die Anwendung neu starten. Wenn Sie die Einstellungen über Umgebungsvariablen vornehmen möchten, legen Sie bitte TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID und TRILIUM_OAUTH_CLIENT_SECRET fest.",
|
||||||
"oauth_missing_vars": "Fehlende Einstellung: {{variables}}",
|
"oauth_missing_vars": "Fehlende Einstellung: {{-variables}}",
|
||||||
"oauth_user_account": "Benutzerkonto: ",
|
"oauth_user_account": "Benutzerkonto: ",
|
||||||
"oauth_user_email": "Benutzer E-Mail: ",
|
"oauth_user_email": "Benutzer E-Mail: ",
|
||||||
"oauth_user_not_logged_in": "Nicht eingeloggt!"
|
"oauth_user_not_logged_in": "Nicht eingeloggt!"
|
||||||
@@ -1943,7 +1968,11 @@
|
|||||||
"editorfeatures": {
|
"editorfeatures": {
|
||||||
"title": "Funktionen",
|
"title": "Funktionen",
|
||||||
"emoji_completion_enabled": "Emoji-Autovervollständigung aktivieren",
|
"emoji_completion_enabled": "Emoji-Autovervollständigung aktivieren",
|
||||||
"note_completion_enabled": "Automatisches Vervollständigen von Notizen aktivieren"
|
"note_completion_enabled": "Automatisches Vervollständigen von Notizen aktivieren",
|
||||||
|
"emoji_completion_description": "Wenn aktiviert, können Emojis ganz einfach in den Text eingefügt werden, indem man \":\" gefolgt vom Namen eines Emojis eingibt.",
|
||||||
|
"note_completion_description": "Wenn aktiviert, können Links zu Notizen erstellt werden, indem man \"@\" gefolgt vom Titel einer Notiz eingibt.",
|
||||||
|
"slash_commands_enabled": "Aktiviere Slash-Befehle",
|
||||||
|
"slash_commands_description": "Wenn aktiviert, können Bearbeitungsbefehle wie das Einfügen von Zeilenumbrüchen oder Überschriften durch Eingabe von \"/\" aktiviert werden."
|
||||||
},
|
},
|
||||||
"table_view": {
|
"table_view": {
|
||||||
"new-row": "Neue Zeile",
|
"new-row": "Neue Zeile",
|
||||||
@@ -1979,14 +2008,21 @@
|
|||||||
"delete_row": "Zeile entfernen"
|
"delete_row": "Zeile entfernen"
|
||||||
},
|
},
|
||||||
"board_view": {
|
"board_view": {
|
||||||
"delete-note": "Lösche Notiz",
|
"delete-note": "Lösche Notiz...",
|
||||||
"move-to": "Verschiebe zu",
|
"move-to": "Verschiebe zu",
|
||||||
"insert-above": "Oberhalb einfügen",
|
"insert-above": "Oberhalb einfügen",
|
||||||
"insert-below": "Unterhalb einfügen",
|
"insert-below": "Unterhalb einfügen",
|
||||||
"delete-column": "Spalte entfernen",
|
"delete-column": "Spalte entfernen",
|
||||||
"delete-column-confirmation": "Soll die Spalte wirklich gelöscht werden? Abhängige Attribute werden auch in den Notizen unter dieser Spalte gelöscht.",
|
"delete-column-confirmation": "Soll die Spalte wirklich gelöscht werden? Abhängige Attribute werden auch in den Notizen unter dieser Spalte gelöscht.",
|
||||||
"new-item": "Neuer Artikel",
|
"new-item": "Neuer Artikel",
|
||||||
"add-column": "Spalte hinzufügen"
|
"add-column": "Spalte hinzufügen",
|
||||||
|
"remove-from-board": "Entferne von Tafel",
|
||||||
|
"archive-note": "archiviere Notiz",
|
||||||
|
"unarchive-note": "entarchiviere Notiz",
|
||||||
|
"new-item-placeholder": "Notiz Titel eingeben...",
|
||||||
|
"add-column-placeholder": "Spaltenname eingeben...",
|
||||||
|
"edit-note-title": "Klicke zum Editieren des Notiz-Titels",
|
||||||
|
"edit-column-title": "Klicke zum Editieren des Spalten-Titels"
|
||||||
},
|
},
|
||||||
"command_palette": {
|
"command_palette": {
|
||||||
"tree-action-name": "Struktur: {{name}}",
|
"tree-action-name": "Struktur: {{name}}",
|
||||||
@@ -2024,5 +2060,12 @@
|
|||||||
},
|
},
|
||||||
"units": {
|
"units": {
|
||||||
"percentage": "%"
|
"percentage": "%"
|
||||||
|
},
|
||||||
|
"pagination": {
|
||||||
|
"page_title": "Seite {{startIndex}} von {{endIndex}}",
|
||||||
|
"total_notes": "{{count}} Notizen"
|
||||||
|
},
|
||||||
|
"collections": {
|
||||||
|
"rendering_error": "Aufgrund eines Fehlers können keine Inhalte angezeigt werden."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -263,6 +263,11 @@
|
|||||||
"confirm_delete_all": "Do you want to delete all revisions of this note?",
|
"confirm_delete_all": "Do you want to delete all revisions of this note?",
|
||||||
"no_revisions": "No revisions for this note yet...",
|
"no_revisions": "No revisions for this note yet...",
|
||||||
"restore_button": "Restore",
|
"restore_button": "Restore",
|
||||||
|
"diff_on": "Show diff",
|
||||||
|
"diff_off": "Show content",
|
||||||
|
"diff_on_hint": "Click to show note source diff",
|
||||||
|
"diff_off_hint": "Click to show note content",
|
||||||
|
"diff_not_available": "Diff isn't available.",
|
||||||
"confirm_restore": "Do you want to restore this revision? This will overwrite the current title and content of the note with this revision.",
|
"confirm_restore": "Do you want to restore this revision? This will overwrite the current title and content of the note with this revision.",
|
||||||
"delete_button": "Delete",
|
"delete_button": "Delete",
|
||||||
"confirm_delete": "Do you want to delete this revision?",
|
"confirm_delete": "Do you want to delete this revision?",
|
||||||
@@ -577,7 +582,7 @@
|
|||||||
"cannot_find_day_note": "Cannot find day note",
|
"cannot_find_day_note": "Cannot find day note",
|
||||||
"cannot_find_week_note": "Cannot find week note",
|
"cannot_find_week_note": "Cannot find week note",
|
||||||
"january": "January",
|
"january": "January",
|
||||||
"febuary": "February",
|
"february": "February",
|
||||||
"march": "March",
|
"march": "March",
|
||||||
"april": "April",
|
"april": "April",
|
||||||
"may": "May",
|
"may": "May",
|
||||||
@@ -587,7 +592,18 @@
|
|||||||
"september": "September",
|
"september": "September",
|
||||||
"october": "October",
|
"october": "October",
|
||||||
"november": "November",
|
"november": "November",
|
||||||
"december": "December"
|
"december": "December",
|
||||||
|
"week": "Week",
|
||||||
|
"week_previous": "Previous week",
|
||||||
|
"week_next": "Next week",
|
||||||
|
"month": "Month",
|
||||||
|
"month_previous": "Previous month",
|
||||||
|
"month_next": "Next month",
|
||||||
|
"year": "Year",
|
||||||
|
"year_previous": "Previous year",
|
||||||
|
"year_next": "Next year",
|
||||||
|
"list": "List",
|
||||||
|
"today": "Today"
|
||||||
},
|
},
|
||||||
"close_pane_button": {
|
"close_pane_button": {
|
||||||
"close_this_pane": "Close this pane"
|
"close_this_pane": "Close this pane"
|
||||||
@@ -748,7 +764,8 @@
|
|||||||
"calendar": "Calendar",
|
"calendar": "Calendar",
|
||||||
"table": "Table",
|
"table": "Table",
|
||||||
"geo-map": "Geo Map",
|
"geo-map": "Geo Map",
|
||||||
"board": "Board"
|
"board": "Board",
|
||||||
|
"include_archived_notes": "Show archived notes"
|
||||||
},
|
},
|
||||||
"edited_notes": {
|
"edited_notes": {
|
||||||
"no_edited_notes_found": "No edited notes on this day yet...",
|
"no_edited_notes_found": "No edited notes on this day yet...",
|
||||||
@@ -949,7 +966,9 @@
|
|||||||
"no_attachments": "This note has no attachments."
|
"no_attachments": "This note has no attachments."
|
||||||
},
|
},
|
||||||
"book": {
|
"book": {
|
||||||
"no_children_help": "This collection doesn't have any child notes so there's nothing to display. See <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> for details."
|
"no_children_help": "This collection doesn't have any child notes so there's nothing to display. See <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> for details.",
|
||||||
|
"drag_locked_title": "Locked for editing",
|
||||||
|
"drag_locked_message": "Dragging not allowed since the collection is locked for editing."
|
||||||
},
|
},
|
||||||
"editable_code": {
|
"editable_code": {
|
||||||
"placeholder": "Type the content of your code note here..."
|
"placeholder": "Type the content of your code note here..."
|
||||||
@@ -1118,7 +1137,9 @@
|
|||||||
"title": "Performance",
|
"title": "Performance",
|
||||||
"enable-motion": "Enable transitions and animations",
|
"enable-motion": "Enable transitions and animations",
|
||||||
"enable-shadows": "Enable shadows",
|
"enable-shadows": "Enable shadows",
|
||||||
"enable-backdrop-effects": "Enable background effects for menus, popups and panels"
|
"enable-backdrop-effects": "Enable background effects for menus, popups and panels",
|
||||||
|
"enable-smooth-scroll": "Enable smooth scrolling",
|
||||||
|
"app-restart-required": "(a restart of the application is required for the change to take effect)"
|
||||||
},
|
},
|
||||||
"ai_llm": {
|
"ai_llm": {
|
||||||
"not_started": "Not started",
|
"not_started": "Not started",
|
||||||
@@ -1496,7 +1517,7 @@
|
|||||||
"oauth_title": "OAuth/OpenID",
|
"oauth_title": "OAuth/OpenID",
|
||||||
"oauth_description": "OpenID is a standardized way to let you log into websites using an account from another service, like Google, to verify your identity. The default issuer is Google, but you can change it to any other OpenID provider. Check <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">here</a> for more information. Follow these <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">instructions</a> to setup an OpenID service through Google.",
|
"oauth_description": "OpenID is a standardized way to let you log into websites using an account from another service, like Google, to verify your identity. The default issuer is Google, but you can change it to any other OpenID provider. Check <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">here</a> for more information. Follow these <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">instructions</a> to setup an OpenID service through Google.",
|
||||||
"oauth_description_warning": "To enable OAuth/OpenID, you need to set the OAuth/OpenID base URL, client ID and client secret in the config.ini file and restart the application. If you want to set from environment variables, please set TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID and TRILIUM_OAUTH_CLIENT_SECRET.",
|
"oauth_description_warning": "To enable OAuth/OpenID, you need to set the OAuth/OpenID base URL, client ID and client secret in the config.ini file and restart the application. If you want to set from environment variables, please set TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID and TRILIUM_OAUTH_CLIENT_SECRET.",
|
||||||
"oauth_missing_vars": "Missing settings: {{variables}}",
|
"oauth_missing_vars": "Missing settings: {{-variables}}",
|
||||||
"oauth_user_account": "User Account: ",
|
"oauth_user_account": "User Account: ",
|
||||||
"oauth_user_email": "User Email: ",
|
"oauth_user_email": "User Email: ",
|
||||||
"oauth_user_not_logged_in": "Not logged in!"
|
"oauth_user_not_logged_in": "Not logged in!"
|
||||||
@@ -1569,10 +1590,12 @@
|
|||||||
"button-tree-map": "Tree map"
|
"button-tree-map": "Tree map"
|
||||||
},
|
},
|
||||||
"tree-context-menu": {
|
"tree-context-menu": {
|
||||||
"open-in-a-new-tab": "Open in a new tab <kbd>Ctrl+Click</kbd>",
|
"open-in-a-new-tab": "Open in a new tab",
|
||||||
"open-in-a-new-split": "Open in a new split",
|
"open-in-a-new-split": "Open in a new split",
|
||||||
"insert-note-after": "Insert note after",
|
"insert-note-after": "Insert note after",
|
||||||
"insert-child-note": "Insert child note",
|
"insert-child-note": "Insert child note",
|
||||||
|
"archive": "Archive",
|
||||||
|
"unarchive": "Unarchive",
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"search-in-subtree": "Search in subtree",
|
"search-in-subtree": "Search in subtree",
|
||||||
"hoist-note": "Hoist note",
|
"hoist-note": "Hoist note",
|
||||||
@@ -1764,7 +1787,9 @@
|
|||||||
"ws": {
|
"ws": {
|
||||||
"sync-check-failed": "Sync check failed!",
|
"sync-check-failed": "Sync check failed!",
|
||||||
"consistency-checks-failed": "Consistency checks failed! See logs for details.",
|
"consistency-checks-failed": "Consistency checks failed! See logs for details.",
|
||||||
"encountered-error": "Encountered error \"{{message}}\", check out the console."
|
"encountered-error": "Encountered error \"{{message}}\", check out the console.",
|
||||||
|
"lost-websocket-connection-title": "Lost connection to the server",
|
||||||
|
"lost-websocket-connection-message": "Check your reverse proxy (e.g. nginx or Apache) configuration to ensure WebSocket connections are properly allowed and not being blocked."
|
||||||
},
|
},
|
||||||
"hoisted_note": {
|
"hoisted_note": {
|
||||||
"confirm_unhoisting": "Requested note '{{requestedNote}}' is outside of hoisted note '{{hoistedNote}}' subtree and you must unhoist to access the note. Do you want to proceed with unhoisting?"
|
"confirm_unhoisting": "Requested note '{{requestedNote}}' is outside of hoisted note '{{hoistedNote}}' subtree and you must unhoist to access the note. Do you want to proceed with unhoisting?"
|
||||||
@@ -1840,7 +1865,7 @@
|
|||||||
"native-title-bar": "Native title bar",
|
"native-title-bar": "Native title bar",
|
||||||
"native-title-bar-description": "For Windows and macOS, keeping the native title bar off makes the application look more compact. On Linux, keeping the native title bar on integrates better with the rest of the system.",
|
"native-title-bar-description": "For Windows and macOS, keeping the native title bar off makes the application look more compact. On Linux, keeping the native title bar on integrates better with the rest of the system.",
|
||||||
"background-effects": "Enable background effects (Windows 11 only)",
|
"background-effects": "Enable background effects (Windows 11 only)",
|
||||||
"background-effects-description": "The Mica effect adds a blurred, stylish background to app windows, creating depth and a modern look.",
|
"background-effects-description": "The Mica effect adds a blurred, stylish background to app windows, creating depth and a modern look. \"Native title bar\" must be disabled.",
|
||||||
"restart-app-button": "Restart the application to view the changes",
|
"restart-app-button": "Restart the application to view the changes",
|
||||||
"zoom-factor": "Zoom factor"
|
"zoom-factor": "Zoom factor"
|
||||||
},
|
},
|
||||||
@@ -1882,9 +1907,17 @@
|
|||||||
"show_login_link": "Show Login link in Share theme",
|
"show_login_link": "Show Login link in Share theme",
|
||||||
"show_login_link_description": "Add a login link to the Share page footer",
|
"show_login_link_description": "Add a login link to the Share page footer",
|
||||||
"check_share_root": "Check Share Root Status",
|
"check_share_root": "Check Share Root Status",
|
||||||
|
"check_share_root_error": "An unexpected error happened while checking the Share Root Status, please check the logs for more information.",
|
||||||
|
"share_note_title": "'{{noteTitle}}'",
|
||||||
"share_root_found": "Share root note '{{noteTitle}}' is ready",
|
"share_root_found": "Share root note '{{noteTitle}}' is ready",
|
||||||
"share_root_not_found": "No note with #shareRoot label found",
|
"share_root_not_found": "No note with #shareRoot label found",
|
||||||
"share_root_not_shared": "Note '{{noteTitle}}' has #shareRoot label but is not shared"
|
"share_root_not_shared": "Note '{{noteTitle}}' has #shareRoot label but is not Shared",
|
||||||
|
"share_root_multiple_found": "Found multiple shared notes with a #shareRoot label: {{- foundNoteTitles}}. The note {{- activeNoteTitle}} will be used as shared root note.",
|
||||||
|
"share_path": "Share path",
|
||||||
|
"share_path_description": "The url prefix for shared notes (e.g. '/share' --> '/share/noteId' or '/custom-path' --> '/custom-path/noteId'). Multiple levels of nesting are supported (e.g. '/custom-path/sub-path' --> '/custom-path/sub-path/noteId'). Refresh the page to apply the changes.",
|
||||||
|
"share_path_placeholder": "/share or /custom-path",
|
||||||
|
"share_subtree": "Share subtree",
|
||||||
|
"share_subtree_description": "Share the entire subtree, not just the note"
|
||||||
},
|
},
|
||||||
"time_selector": {
|
"time_selector": {
|
||||||
"invalid_input": "The entered time value is not a valid number.",
|
"invalid_input": "The entered time value is not a valid number.",
|
||||||
@@ -1939,7 +1972,11 @@
|
|||||||
"editorfeatures": {
|
"editorfeatures": {
|
||||||
"title": "Features",
|
"title": "Features",
|
||||||
"emoji_completion_enabled": "Enable Emoji auto-completion",
|
"emoji_completion_enabled": "Enable Emoji auto-completion",
|
||||||
"note_completion_enabled": "Enable note auto-completion"
|
"emoji_completion_description": "If enabled, emojis can be easily inserted into text by typing `:`, followed by the name of an emoji.",
|
||||||
|
"note_completion_enabled": "Enable note auto-completion",
|
||||||
|
"note_completion_description": "If enabled, links to notes can be created by typing `@` followed by the title of a note.",
|
||||||
|
"slash_commands_enabled": "Enable slash commands",
|
||||||
|
"slash_commands_description": "If enabled, editing commands such as inserting line breaks or headings can be toggled by typing `/`."
|
||||||
},
|
},
|
||||||
"table_view": {
|
"table_view": {
|
||||||
"new-row": "New row",
|
"new-row": "New row",
|
||||||
@@ -1975,14 +2012,21 @@
|
|||||||
"delete_row": "Delete row"
|
"delete_row": "Delete row"
|
||||||
},
|
},
|
||||||
"board_view": {
|
"board_view": {
|
||||||
"delete-note": "Delete Note",
|
"delete-note": "Delete note...",
|
||||||
|
"remove-from-board": "Remove from board",
|
||||||
|
"archive-note": "Archive note",
|
||||||
|
"unarchive-note": "Unarchive note",
|
||||||
"move-to": "Move to",
|
"move-to": "Move to",
|
||||||
"insert-above": "Insert above",
|
"insert-above": "Insert above",
|
||||||
"insert-below": "Insert below",
|
"insert-below": "Insert below",
|
||||||
"delete-column": "Delete column",
|
"delete-column": "Delete column",
|
||||||
"delete-column-confirmation": "Are you sure you want to delete this column? The corresponding attribute will be deleted in the notes under this column as well.",
|
"delete-column-confirmation": "Are you sure you want to delete this column? The corresponding attribute will be deleted in the notes under this column as well.",
|
||||||
"new-item": "New item",
|
"new-item": "New item",
|
||||||
"add-column": "Add Column"
|
"new-item-placeholder": "Enter note title...",
|
||||||
|
"add-column": "Add Column",
|
||||||
|
"add-column-placeholder": "Enter column name...",
|
||||||
|
"edit-note-title": "Click to edit note title",
|
||||||
|
"edit-column-title": "Click to edit column title"
|
||||||
},
|
},
|
||||||
"command_palette": {
|
"command_palette": {
|
||||||
"tree-action-name": "Tree: {{name}}",
|
"tree-action-name": "Tree: {{name}}",
|
||||||
@@ -2024,5 +2068,12 @@
|
|||||||
},
|
},
|
||||||
"units": {
|
"units": {
|
||||||
"percentage": "%"
|
"percentage": "%"
|
||||||
|
},
|
||||||
|
"pagination": {
|
||||||
|
"page_title": "Page of {{startIndex}} - {{endIndex}}",
|
||||||
|
"total_notes": "{{count}} notes"
|
||||||
|
},
|
||||||
|
"collections": {
|
||||||
|
"rendering_error": "Unable to show content due to an error."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -276,7 +276,12 @@
|
|||||||
"mime": "MIME: ",
|
"mime": "MIME: ",
|
||||||
"file_size": "Tamaño del archivo:",
|
"file_size": "Tamaño del archivo:",
|
||||||
"preview": "Vista previa:",
|
"preview": "Vista previa:",
|
||||||
"preview_not_available": "La vista previa no está disponible para este tipo de notas."
|
"preview_not_available": "La vista previa no está disponible para este tipo de notas.",
|
||||||
|
"diff_off": "Mostrar contenido",
|
||||||
|
"diff_on": "Mostrar diferencia",
|
||||||
|
"diff_off_hint": "Haga clic para mostrar el contenido de la nota",
|
||||||
|
"diff_not_available": "Diferencias no disponibles.",
|
||||||
|
"diff_on_hint": "Haga clic para ver las diferencias"
|
||||||
},
|
},
|
||||||
"sort_child_notes": {
|
"sort_child_notes": {
|
||||||
"sort_children_by": "Ordenar hijos por...",
|
"sort_children_by": "Ordenar hijos por...",
|
||||||
@@ -577,7 +582,7 @@
|
|||||||
"cannot_find_day_note": "No se puede encontrar la nota del día",
|
"cannot_find_day_note": "No se puede encontrar la nota del día",
|
||||||
"cannot_find_week_note": "No se puede encontrar la nota de la semana",
|
"cannot_find_week_note": "No se puede encontrar la nota de la semana",
|
||||||
"january": "Enero",
|
"january": "Enero",
|
||||||
"febuary": "Febrero",
|
"february": "Febrero",
|
||||||
"march": "Marzo",
|
"march": "Marzo",
|
||||||
"april": "Abril",
|
"april": "Abril",
|
||||||
"may": "Mayo",
|
"may": "Mayo",
|
||||||
@@ -587,7 +592,18 @@
|
|||||||
"september": "Septiembre",
|
"september": "Septiembre",
|
||||||
"october": "Octubre",
|
"october": "Octubre",
|
||||||
"november": "Noviembre",
|
"november": "Noviembre",
|
||||||
"december": "Diciembre"
|
"december": "Diciembre",
|
||||||
|
"week": "Semana",
|
||||||
|
"week_previous": "Semana anterior",
|
||||||
|
"week_next": "Semana siguiente",
|
||||||
|
"month": "Mes",
|
||||||
|
"month_previous": "Mes anterior",
|
||||||
|
"month_next": "Mes siguiente",
|
||||||
|
"year": "Año",
|
||||||
|
"year_previous": "Año anterior",
|
||||||
|
"year_next": "Año siguiente",
|
||||||
|
"list": "Lista",
|
||||||
|
"today": "Hoy"
|
||||||
},
|
},
|
||||||
"close_pane_button": {
|
"close_pane_button": {
|
||||||
"close_this_pane": "Cerrar este panel"
|
"close_this_pane": "Cerrar este panel"
|
||||||
@@ -748,7 +764,8 @@
|
|||||||
"book_properties": "Propiedades de colección",
|
"book_properties": "Propiedades de colección",
|
||||||
"table": "Tabla",
|
"table": "Tabla",
|
||||||
"geo-map": "Mapa Geo",
|
"geo-map": "Mapa Geo",
|
||||||
"board": "Tablero"
|
"board": "Tablero",
|
||||||
|
"include_archived_notes": "Mostrar notas archivadas"
|
||||||
},
|
},
|
||||||
"edited_notes": {
|
"edited_notes": {
|
||||||
"no_edited_notes_found": "Aún no hay notas editadas en este día...",
|
"no_edited_notes_found": "Aún no hay notas editadas en este día...",
|
||||||
@@ -949,7 +966,9 @@
|
|||||||
"no_attachments": "Esta nota no tiene archivos adjuntos."
|
"no_attachments": "Esta nota no tiene archivos adjuntos."
|
||||||
},
|
},
|
||||||
"book": {
|
"book": {
|
||||||
"no_children_help": "Esta nota de tipo libro no tiene ninguna subnota así que no hay nada que mostrar. Véa la <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> para más detalles."
|
"no_children_help": "Esta nota de tipo libro no tiene ninguna subnota así que no hay nada que mostrar. Véa la <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> para más detalles.",
|
||||||
|
"drag_locked_title": "Bloqueado para edición",
|
||||||
|
"drag_locked_message": "No se permite Arrastrar pues la colección está bloqueada para edición."
|
||||||
},
|
},
|
||||||
"editable_code": {
|
"editable_code": {
|
||||||
"placeholder": "Escriba el contenido de su nota de código aquí..."
|
"placeholder": "Escriba el contenido de su nota de código aquí..."
|
||||||
@@ -1490,7 +1509,7 @@
|
|||||||
"oauth_title": "OAuth/OpenID",
|
"oauth_title": "OAuth/OpenID",
|
||||||
"oauth_description": "OpenID es una forma estandarizada de permitirle iniciar sesión en sitios web utilizando una cuenta de otro servicio, como Google, para verificar su identidad. Siga estas <a href = \"https://developers.google.com/identity/openid-connect/openid-connect\">instrucciones</a> para configurar un servicio OpenID a través de Google.",
|
"oauth_description": "OpenID es una forma estandarizada de permitirle iniciar sesión en sitios web utilizando una cuenta de otro servicio, como Google, para verificar su identidad. Siga estas <a href = \"https://developers.google.com/identity/openid-connect/openid-connect\">instrucciones</a> para configurar un servicio OpenID a través de Google.",
|
||||||
"oauth_description_warning": "Para habilitar OAuth/OpenID, necesita establecer la URL base de OAuth/OpenID, ID de cliente y secreto de cliente en el archivo config.ini y reiniciar la aplicación. Si desea establecerlas desde variables de ambiente, por favor establezca TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID y TRILIUM_OAUTH_CLIENT_SECRET.",
|
"oauth_description_warning": "Para habilitar OAuth/OpenID, necesita establecer la URL base de OAuth/OpenID, ID de cliente y secreto de cliente en el archivo config.ini y reiniciar la aplicación. Si desea establecerlas desde variables de ambiente, por favor establezca TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID y TRILIUM_OAUTH_CLIENT_SECRET.",
|
||||||
"oauth_missing_vars": "Ajustes faltantes: {{variables}}",
|
"oauth_missing_vars": "Ajustes faltantes: {{-variables}}",
|
||||||
"oauth_user_account": "Cuenta de usuario: ",
|
"oauth_user_account": "Cuenta de usuario: ",
|
||||||
"oauth_user_email": "Correo electrónico de usuario: ",
|
"oauth_user_email": "Correo electrónico de usuario: ",
|
||||||
"oauth_user_not_logged_in": "¡No ha iniciado sesión!"
|
"oauth_user_not_logged_in": "¡No ha iniciado sesión!"
|
||||||
@@ -1563,7 +1582,7 @@
|
|||||||
"button-tree-map": "Mapa de Árbol"
|
"button-tree-map": "Mapa de Árbol"
|
||||||
},
|
},
|
||||||
"tree-context-menu": {
|
"tree-context-menu": {
|
||||||
"open-in-a-new-tab": "Abrir en nueva pestaña <kbd>Ctrl+Click</kbd>",
|
"open-in-a-new-tab": "Abrir en nueva pestaña",
|
||||||
"open-in-a-new-split": "Abrir en nueva división",
|
"open-in-a-new-split": "Abrir en nueva división",
|
||||||
"insert-note-after": "Insertar nota después de",
|
"insert-note-after": "Insertar nota después de",
|
||||||
"insert-child-note": "Insertar subnota",
|
"insert-child-note": "Insertar subnota",
|
||||||
@@ -1593,7 +1612,9 @@
|
|||||||
"apply-bulk-actions": "Aplicar acciones en lote",
|
"apply-bulk-actions": "Aplicar acciones en lote",
|
||||||
"converted-to-attachments": "{{count}} notas han sido convertidas en archivos adjuntos.",
|
"converted-to-attachments": "{{count}} notas han sido convertidas en archivos adjuntos.",
|
||||||
"convert-to-attachment-confirm": "¿Está seguro que desea convertir las notas seleccionadas en archivos adjuntos de sus notas padres?",
|
"convert-to-attachment-confirm": "¿Está seguro que desea convertir las notas seleccionadas en archivos adjuntos de sus notas padres?",
|
||||||
"open-in-popup": "Edición rápida"
|
"open-in-popup": "Edición rápida",
|
||||||
|
"archive": "Archivar",
|
||||||
|
"unarchive": "Desarchivar"
|
||||||
},
|
},
|
||||||
"shared_info": {
|
"shared_info": {
|
||||||
"shared_publicly": "Esta nota está compartida públicamente en {{- link}}",
|
"shared_publicly": "Esta nota está compartida públicamente en {{- link}}",
|
||||||
@@ -1676,7 +1697,8 @@
|
|||||||
"hoist-this-note-workspace": "Anclar esta nota (espacio de trabajo)",
|
"hoist-this-note-workspace": "Anclar esta nota (espacio de trabajo)",
|
||||||
"refresh-saved-search-results": "Refrescar resultados de búsqueda guardados",
|
"refresh-saved-search-results": "Refrescar resultados de búsqueda guardados",
|
||||||
"create-child-note": "Crear subnota",
|
"create-child-note": "Crear subnota",
|
||||||
"unhoist": "Desanclar"
|
"unhoist": "Desanclar",
|
||||||
|
"toggle-sidebar": "Alternar barra lateral"
|
||||||
},
|
},
|
||||||
"title_bar_buttons": {
|
"title_bar_buttons": {
|
||||||
"window-on-top": "Mantener esta ventana en la parte superior"
|
"window-on-top": "Mantener esta ventana en la parte superior"
|
||||||
@@ -1751,13 +1773,15 @@
|
|||||||
"undeleting-notes-finished-successfully": "La recuperación de notas finalizó exitosamente."
|
"undeleting-notes-finished-successfully": "La recuperación de notas finalizó exitosamente."
|
||||||
},
|
},
|
||||||
"frontend_script_api": {
|
"frontend_script_api": {
|
||||||
"async_warning": "Está pasando una función asíncrona a `api.runOnBackend ()` que probablemente no funcionará como pretendía.",
|
"async_warning": "Está pasando una función asíncrona a `api.runOnBackend ()` que probablemente no funcionará como pretendía.\\nO haga la función sincrónica (removiendo la palabra `async`), o use `api.runAsyncOnBackendWithManualTransactionHandling()`.",
|
||||||
"sync_warning": "Estás pasando una función sincrónica a `api.runasynconbackendwithmanualTransactionHandling ()`, \\ n while debería usar `api.runonbackend ()` en su lugar."
|
"sync_warning": "Estás pasando una función sincrónica a `api.runasynconbackendwithmanualTransactionHandling ()`, \\n while debería usar `api.runonbackend ()` en su lugar."
|
||||||
},
|
},
|
||||||
"ws": {
|
"ws": {
|
||||||
"sync-check-failed": "¡La comprobación de sincronización falló!",
|
"sync-check-failed": "¡La comprobación de sincronización falló!",
|
||||||
"consistency-checks-failed": "¡Las comprobaciones de consistencia fallaron! Vea los registros para más detalles.",
|
"consistency-checks-failed": "¡Las comprobaciones de consistencia fallaron! Vea los registros para más detalles.",
|
||||||
"encountered-error": "Error encontrado \"{{message}}\", compruebe la consola."
|
"encountered-error": "Error encontrado \"{{message}}\", compruebe la consola.",
|
||||||
|
"lost-websocket-connection-title": "Se ha perdido la conexión con el servidor",
|
||||||
|
"lost-websocket-connection-message": "Compruebe la configuración de su proxy inverso (por ejemplo, nginx o Apache) para asegurarse de que las conexiones WebSocket están correctamente permitidas y no están bloqueadas."
|
||||||
},
|
},
|
||||||
"hoisted_note": {
|
"hoisted_note": {
|
||||||
"confirm_unhoisting": "La nota requerida '{{requestedNote}}' está fuera del subárbol de la nota anclada '{{hoistedNote}}' y debe desanclarla para acceder a la nota. ¿Desea proceder con el desanclaje?"
|
"confirm_unhoisting": "La nota requerida '{{requestedNote}}' está fuera del subárbol de la nota anclada '{{hoistedNote}}' y debe desanclarla para acceder a la nota. ¿Desea proceder con el desanclaje?"
|
||||||
@@ -1833,7 +1857,7 @@
|
|||||||
"native-title-bar": "Barra de título nativa",
|
"native-title-bar": "Barra de título nativa",
|
||||||
"native-title-bar-description": "Para Windows y macOS, quitar la barra de título nativa hace que la aplicación se vea más compacta. En Linux, mantener la barra de título nativa hace que se integre mejor con el resto del sistema.",
|
"native-title-bar-description": "Para Windows y macOS, quitar la barra de título nativa hace que la aplicación se vea más compacta. En Linux, mantener la barra de título nativa hace que se integre mejor con el resto del sistema.",
|
||||||
"background-effects": "Habilitar efectos de fondo (sólo en Windows 11)",
|
"background-effects": "Habilitar efectos de fondo (sólo en Windows 11)",
|
||||||
"background-effects-description": "El efecto Mica agrega un fondo borroso y elegante a las ventanas de aplicaciones, creando profundidad y un aspecto moderno.",
|
"background-effects-description": "El efecto Mica agrega un fondo borroso y elegante a las ventanas de la aplicación, creando profundidad y un aspecto moderno. \"Título nativo de la barra\" debe deshabilitarse.",
|
||||||
"restart-app-button": "Reiniciar la aplicación para ver los cambios",
|
"restart-app-button": "Reiniciar la aplicación para ver los cambios",
|
||||||
"zoom-factor": "Factor de zoom"
|
"zoom-factor": "Factor de zoom"
|
||||||
},
|
},
|
||||||
@@ -1943,14 +1967,20 @@
|
|||||||
"delete_row": "Eliminar fila"
|
"delete_row": "Eliminar fila"
|
||||||
},
|
},
|
||||||
"board_view": {
|
"board_view": {
|
||||||
"delete-note": "Eliminar nota",
|
"delete-note": "Eliminar nota...",
|
||||||
"move-to": "Mover a",
|
"move-to": "Mover a",
|
||||||
"insert-above": "Insertar arriba",
|
"insert-above": "Insertar arriba",
|
||||||
"insert-below": "Insertar abajo",
|
"insert-below": "Insertar abajo",
|
||||||
"delete-column": "Eliminar columna",
|
"delete-column": "Eliminar columna",
|
||||||
"delete-column-confirmation": "¿Seguro que desea eliminar esta columna? El atributo correspondiente también se eliminará de las notas de esta columna.",
|
"delete-column-confirmation": "¿Seguro que desea eliminar esta columna? El atributo correspondiente también se eliminará de las notas de esta columna.",
|
||||||
"add-column": "Añadir columna",
|
"add-column": "Añadir columna",
|
||||||
"new-item": "Nuevo elemento"
|
"new-item": "Nuevo elemento",
|
||||||
|
"archive-note": "Archivar nota",
|
||||||
|
"unarchive-note": "Desarchivar nota",
|
||||||
|
"new-item-placeholder": "Ingresar título de la nota...",
|
||||||
|
"add-column-placeholder": "Ingresar título de la columna...",
|
||||||
|
"edit-note-title": "Haga clic para editar el título de la nota",
|
||||||
|
"edit-column-title": "Haga clic para editar el título de la columna"
|
||||||
},
|
},
|
||||||
"content_renderer": {
|
"content_renderer": {
|
||||||
"open_externally": "Abrir externamente"
|
"open_externally": "Abrir externamente"
|
||||||
@@ -1978,7 +2008,11 @@
|
|||||||
"editorfeatures": {
|
"editorfeatures": {
|
||||||
"note_completion_enabled": "Activar autocompletado de notas",
|
"note_completion_enabled": "Activar autocompletado de notas",
|
||||||
"emoji_completion_enabled": "Activar autocompletado de emojis",
|
"emoji_completion_enabled": "Activar autocompletado de emojis",
|
||||||
"title": "Funciones"
|
"title": "Funciones",
|
||||||
|
"emoji_completion_description": "Si está habilitado, los emojis pueden fácilmente insertarse en el texto escribiendo `:`, seguido del nombre de un emoji.",
|
||||||
|
"note_completion_description": "Si está habilitado, los vínculos a notas pueden crearse escribiendo `@` seguido del título de una nota.",
|
||||||
|
"slash_commands_enabled": "Habilitar comandos de barra",
|
||||||
|
"slash_commands_description": "Si está habilitado, editar comandos como insertar saltos de línea o títulos, puede alternarse escribiendo `/`."
|
||||||
},
|
},
|
||||||
"command_palette": {
|
"command_palette": {
|
||||||
"tree-action-name": "Árbol:{{name}}",
|
"tree-action-name": "Árbol:{{name}}",
|
||||||
@@ -2012,7 +2046,9 @@
|
|||||||
"title": "Rendimiento",
|
"title": "Rendimiento",
|
||||||
"enable-motion": "Habilitar transiciones y animaciones",
|
"enable-motion": "Habilitar transiciones y animaciones",
|
||||||
"enable-shadows": "Activar sombras",
|
"enable-shadows": "Activar sombras",
|
||||||
"enable-backdrop-effects": "Habilitar efectos de fondo para menús, ventanas emergentes y paneles"
|
"enable-backdrop-effects": "Habilitar efectos de fondo para menús, ventanas emergentes y paneles",
|
||||||
|
"enable-smooth-scroll": "Habilitar desplazamiento suave",
|
||||||
|
"app-restart-required": "(es necesario reiniciar la aplicación para que el cambio surta efecto)"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"related_settings": "Configuración relacionada"
|
"related_settings": "Configuración relacionada"
|
||||||
@@ -2023,5 +2059,9 @@
|
|||||||
},
|
},
|
||||||
"units": {
|
"units": {
|
||||||
"percentage": "%"
|
"percentage": "%"
|
||||||
|
},
|
||||||
|
"pagination": {
|
||||||
|
"total_notes": "{{count}} notas",
|
||||||
|
"page_title": "Página de {{startIndex}} - {{endIndex}}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,9 @@
|
|||||||
},
|
},
|
||||||
"widget-error": {
|
"widget-error": {
|
||||||
"title": "Widgetin luonti epäonnistui"
|
"title": "Widgetin luonti epäonnistui"
|
||||||
|
},
|
||||||
|
"bundle-error": {
|
||||||
|
"title": "Mukautetun skriptin lataus epäonnistui"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"add_link": {
|
"add_link": {
|
||||||
|
|||||||
@@ -576,7 +576,7 @@
|
|||||||
"sun": "Dim",
|
"sun": "Dim",
|
||||||
"cannot_find_day_note": "Note journalière introuvable",
|
"cannot_find_day_note": "Note journalière introuvable",
|
||||||
"january": "Janvier",
|
"january": "Janvier",
|
||||||
"febuary": "Février",
|
"february": "Février",
|
||||||
"march": "Mars",
|
"march": "Mars",
|
||||||
"april": "Avril",
|
"april": "Avril",
|
||||||
"may": "Mai",
|
"may": "Mai",
|
||||||
@@ -587,7 +587,18 @@
|
|||||||
"october": "Octobre",
|
"october": "Octobre",
|
||||||
"november": "Novembre",
|
"november": "Novembre",
|
||||||
"december": "Décembre",
|
"december": "Décembre",
|
||||||
"cannot_find_week_note": "Impossible de trouver la note de la semaine"
|
"cannot_find_week_note": "Impossible de trouver la note de la semaine",
|
||||||
|
"week": "Semaine",
|
||||||
|
"week_previous": "Semaine précédente",
|
||||||
|
"week_next": "Semaine suivante",
|
||||||
|
"month": "Mois",
|
||||||
|
"month_previous": "Mois précédent",
|
||||||
|
"month_next": "Mois suivant",
|
||||||
|
"year": "Année",
|
||||||
|
"year_previous": "Année précédente",
|
||||||
|
"year_next": "Année suivante",
|
||||||
|
"list": "Liste",
|
||||||
|
"today": "Aujourd'hui"
|
||||||
},
|
},
|
||||||
"close_pane_button": {
|
"close_pane_button": {
|
||||||
"close_this_pane": "Fermer ce volet"
|
"close_this_pane": "Fermer ce volet"
|
||||||
@@ -732,7 +743,8 @@
|
|||||||
"note_type": "Type de note",
|
"note_type": "Type de note",
|
||||||
"editable": "Modifiable",
|
"editable": "Modifiable",
|
||||||
"basic_properties": "Propriétés de base",
|
"basic_properties": "Propriétés de base",
|
||||||
"language": "Langage"
|
"language": "Langage",
|
||||||
|
"configure_code_notes": "Configurer les notes de code..."
|
||||||
},
|
},
|
||||||
"book_properties": {
|
"book_properties": {
|
||||||
"view_type": "Type d'affichage",
|
"view_type": "Type d'affichage",
|
||||||
@@ -747,7 +759,8 @@
|
|||||||
"book_properties": "Propriétés de la collection",
|
"book_properties": "Propriétés de la collection",
|
||||||
"table": "Tableau",
|
"table": "Tableau",
|
||||||
"geo-map": "Carte géographique",
|
"geo-map": "Carte géographique",
|
||||||
"board": "Tableau de bord"
|
"board": "Tableau de bord",
|
||||||
|
"include_archived_notes": "Afficher les notes archivées"
|
||||||
},
|
},
|
||||||
"edited_notes": {
|
"edited_notes": {
|
||||||
"no_edited_notes_found": "Aucune note modifiée ce jour-là...",
|
"no_edited_notes_found": "Aucune note modifiée ce jour-là...",
|
||||||
@@ -948,7 +961,9 @@
|
|||||||
"no_attachments": "Cette note ne contient aucune pièce jointe."
|
"no_attachments": "Cette note ne contient aucune pièce jointe."
|
||||||
},
|
},
|
||||||
"book": {
|
"book": {
|
||||||
"no_children_help": "Cette note de type Livre n'a aucune note enfant, donc il n'y a rien à afficher. Consultez le <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> pour plus de détails."
|
"no_children_help": "Cette note de type Livre n'a aucune note enfant, donc il n'y a rien à afficher. Consultez le <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> pour plus de détails.",
|
||||||
|
"drag_locked_title": "Edition verrouillée",
|
||||||
|
"drag_locked_message": "Le glisser-déposer n'est pas autorisé car l'édition de cette collection est verrouillé."
|
||||||
},
|
},
|
||||||
"editable_code": {
|
"editable_code": {
|
||||||
"placeholder": "Saisir le contenu de votre note de code ici..."
|
"placeholder": "Saisir le contenu de votre note de code ici..."
|
||||||
@@ -1357,7 +1372,7 @@
|
|||||||
"button-tree-map": "Carte de l'arborescence"
|
"button-tree-map": "Carte de l'arborescence"
|
||||||
},
|
},
|
||||||
"tree-context-menu": {
|
"tree-context-menu": {
|
||||||
"open-in-a-new-tab": "Ouvrir dans un nouvel onglet <kbd>Ctrl+Clic</kbd>",
|
"open-in-a-new-tab": "Ouvrir dans un nouvel onglet",
|
||||||
"open-in-a-new-split": "Ouvrir dans une nouvelle division",
|
"open-in-a-new-split": "Ouvrir dans une nouvelle division",
|
||||||
"insert-note-after": "Insérer une note après",
|
"insert-note-after": "Insérer une note après",
|
||||||
"insert-child-note": "Insérer une note enfant",
|
"insert-child-note": "Insérer une note enfant",
|
||||||
@@ -1690,6 +1705,72 @@
|
|||||||
"anthropic_configuration": "Configuration Anthropic",
|
"anthropic_configuration": "Configuration Anthropic",
|
||||||
"voyage_configuration": "Configuration IA Voyage",
|
"voyage_configuration": "Configuration IA Voyage",
|
||||||
"voyage_url_description": "Défaut: https://api.voyageai.com/v1",
|
"voyage_url_description": "Défaut: https://api.voyageai.com/v1",
|
||||||
"ollama_configuration": "Configuration Ollama"
|
"ollama_configuration": "Configuration Ollama",
|
||||||
|
"total_notes": "Notes totales",
|
||||||
|
"progress": "Progrès",
|
||||||
|
"queued_notes": "Notes dans la file d'attente",
|
||||||
|
"refresh_stats": "Rafraîchir les statistiques",
|
||||||
|
"enable_ai_features": "Activer les fonctionnalités IA/LLM",
|
||||||
|
"enable_ai_description": "Activer les fonctionnalités IA telles que le résumé des notes, la génération de contenu et autres fonctionnalités LLM",
|
||||||
|
"openai_tab": "OpenAI",
|
||||||
|
"anthropic_tab": "Anthropic",
|
||||||
|
"voyage_tab": "Voyage AI",
|
||||||
|
"ollama_tab": "Ollama",
|
||||||
|
"enable_ai": "Activer les fonctionnalités IA/LLM",
|
||||||
|
"enable_ai_desc": "Activer les fonctionnalités IA telles que le résumé des notes, la génération de contenu et autres fonctionnalités LLM",
|
||||||
|
"provider_configuration": "Configuration du fournisseur IA",
|
||||||
|
"provider_precedence_description": "Liste de fournisseurs séparés par virgule, par ordre de préférence (ex. 'openai,anthopic,ollama')",
|
||||||
|
"temperature": "Température",
|
||||||
|
"temperature_description": "Contrôle de l'aléatoirité dans les réponses (0 = déterministe, 2 = hasard maximum)",
|
||||||
|
"system_prompt": "Prompt système",
|
||||||
|
"system_prompt_description": "Prompt système par défaut pour toutes les intéractions IA",
|
||||||
|
"openai_configuration": "Configuration OpenAI",
|
||||||
|
"openai_settings": "Options OpenAI",
|
||||||
|
"api_key": "Clef API",
|
||||||
|
"url": "URL de base",
|
||||||
|
"model": "Modèle",
|
||||||
|
"openai_api_key_description": "Votre clef API OpenAI pour accéder à leurs services IA",
|
||||||
|
"anthropic_api_key_description": "Votre clef API Anthropic pour accéder aux modèles Claude",
|
||||||
|
"default_model": "Modèle par défaut",
|
||||||
|
"openai_model_description": "Exemples : gpt-4o, gpt-4-turbo, gpt-3.5-turbo",
|
||||||
|
"base_url": "URL de base",
|
||||||
|
"openai_url_description": "Défaut : https://api.openai.com/v1",
|
||||||
|
"anthropic_settings": "Réglages Anthropic",
|
||||||
|
"enable_ollama": "Activer Ollama",
|
||||||
|
"enable_ollama_description": "Activer Ollama comme modèle d'IA local",
|
||||||
|
"ollama_url": "URL Ollama",
|
||||||
|
"ollama_model": "Modèle Ollama",
|
||||||
|
"refresh_models": "Rafraîchir les modèles",
|
||||||
|
"refreshing_models": "Mise à jour...",
|
||||||
|
"enable_automatic_indexing": "Activer l'indexage automatique",
|
||||||
|
"rebuild_index": "Rafraîchir l'index",
|
||||||
|
"rebuild_index_error": "Erreur dans le démarrage du rafraichissement de l'index. Veuillez consulter les logs pour plus de détails.",
|
||||||
|
"note_title": "Titre de la note",
|
||||||
|
"error": "Erreur",
|
||||||
|
"last_attempt": "Dernier essai",
|
||||||
|
"actions": "Actions",
|
||||||
|
"retry": "Réessayer",
|
||||||
|
"partial": "Complété à {{ percentage }}%",
|
||||||
|
"retry_queued": "Note ajoutée à la file d'attente",
|
||||||
|
"retry_failed": "Echec de l'ajout de la note à la file d'attente",
|
||||||
|
"max_notes_per_llm_query": "Notes maximum par requête",
|
||||||
|
"max_notes_per_llm_query_description": "Nombre maximum de notes similaires à inclure dans le contexte IA",
|
||||||
|
"active_providers": "Fournisseurs actifs",
|
||||||
|
"disabled_providers": "Fournisseurs désactivés",
|
||||||
|
"remove_provider": "Retirer le fournisseur de la recherche",
|
||||||
|
"similarity_threshold": "Seuil de similarité",
|
||||||
|
"similarity_threshold_description": "Seuil de similarité minimum (0-1) pour que inclure les notes dans le contexte d'une requête IA",
|
||||||
|
"reprocess_index": "Rafraîchir l'index de recherche",
|
||||||
|
"reprocessing_index": "Mise à jour...",
|
||||||
|
"reprocess_index_started": "L'optimisation de l'indice de recherche à commencer en arrière-plan",
|
||||||
|
"reprocess_index_error": "Erreur dans le rafraichissement de l'indice de recherche"
|
||||||
|
},
|
||||||
|
"ui-performance": {
|
||||||
|
"title": "Performance",
|
||||||
|
"enable-motion": "Activer les transitions et animations",
|
||||||
|
"enable-shadows": "Activer les ombres",
|
||||||
|
"enable-backdrop-effects": "Activer les effets d'arrière plan pour les menus, popups et panneaux",
|
||||||
|
"enable-smooth-scroll": "Active le défilement fluide",
|
||||||
|
"app-restart-required": "(redémarrer l'application pour appliquer les changements)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
1
apps/client/src/translations/hr/translation.json
Normal file
1
apps/client/src/translations/hr/translation.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{}
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
"link_title_mirrors": "il titolo del collegamento rispecchia il titolo della nota corrente",
|
"link_title_mirrors": "il titolo del collegamento rispecchia il titolo della nota corrente",
|
||||||
"link_title_arbitrary": "il titolo del collegamento può essere modificato arbitrariamente",
|
"link_title_arbitrary": "il titolo del collegamento può essere modificato arbitrariamente",
|
||||||
"link_title": "Titolo del collegamento",
|
"link_title": "Titolo del collegamento",
|
||||||
"button_add_link": "Aggiungi il collegamento <kbd>invio</kbd>",
|
"button_add_link": "Aggiungi il collegamento",
|
||||||
"help_on_links": "Aiuto sui collegamenti"
|
"help_on_links": "Aiuto sui collegamenti"
|
||||||
},
|
},
|
||||||
"branch_prefix": {
|
"branch_prefix": {
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
"search_for_note_by_its_name": "cerca una nota per nome",
|
"search_for_note_by_its_name": "cerca una nota per nome",
|
||||||
"cloned_note_prefix_title": "Le note clonate saranno mostrate nell'albero delle note con il dato prefisso",
|
"cloned_note_prefix_title": "Le note clonate saranno mostrate nell'albero delle note con il dato prefisso",
|
||||||
"prefix_optional": "Prefisso (opzionale)",
|
"prefix_optional": "Prefisso (opzionale)",
|
||||||
"clone_to_selected_note": "Clona sotto la nota selezionata <kbd>invio</kbd>",
|
"clone_to_selected_note": "Clona verso la nota selezionata <kbd>invio</kbd>",
|
||||||
"no_path_to_clone_to": "Nessun percorso per clonare dentro.",
|
"no_path_to_clone_to": "Nessun percorso per clonare dentro.",
|
||||||
"note_cloned": "La nota \"{{clonedTitle}}\" è stata clonata in \"{{targetTitle}}\""
|
"note_cloned": "La nota \"{{clonedTitle}}\" è stata clonata in \"{{targetTitle}}\""
|
||||||
},
|
},
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"close": "Chiudi",
|
"close": "Chiudi",
|
||||||
"delete_notes_preview": "Anteprima di eliminazione delle note",
|
"delete_notes_preview": "Anteprima di eliminazione delle note",
|
||||||
"delete_all_clones_description": "Elimina anche tutti i cloni (può essere disfatto tramite i cambiamenti recenti)",
|
"delete_all_clones_description": "Elimina anche tutti i cloni (può essere ripristinato nella sezione cambiamenti recenti)",
|
||||||
"erase_notes_description": "L'eliminazione normale (soft) marca le note come eliminate e potranno essere recuperate entro un certo lasso di tempo (dalla finestra dei cambiamenti recenti). Selezionando questa opzione le note si elimineranno immediatamente e non sarà possibile recuperarle.",
|
"erase_notes_description": "L'eliminazione normale (soft) marca le note come eliminate e potranno essere recuperate entro un certo lasso di tempo (dalla finestra dei cambiamenti recenti). Selezionando questa opzione le note si elimineranno immediatamente e non sarà possibile recuperarle.",
|
||||||
"erase_notes_warning": "Elimina le note in modo permanente (non potrà essere disfatto), compresi tutti i cloni. Ciò forzerà un nuovo caricamento dell'applicazione.",
|
"erase_notes_warning": "Elimina le note in modo permanente (non potrà essere disfatto), compresi tutti i cloni. Ciò forzerà un nuovo caricamento dell'applicazione.",
|
||||||
"cancel": "Annulla",
|
"cancel": "Annulla",
|
||||||
@@ -105,7 +105,10 @@
|
|||||||
"format_html": "HTML - raccomandato in quanto mantiene tutti i formati",
|
"format_html": "HTML - raccomandato in quanto mantiene tutti i formati",
|
||||||
"format_html_zip": "HTML in archivio ZIP - questo è raccomandato in quanto conserva tutta la formattazione.",
|
"format_html_zip": "HTML in archivio ZIP - questo è raccomandato in quanto conserva tutta la formattazione.",
|
||||||
"format_markdown": "MArkdown - questo conserva la maggior parte della formattazione.",
|
"format_markdown": "MArkdown - questo conserva la maggior parte della formattazione.",
|
||||||
"export_type_single": "Solo questa nota, senza le sottostanti"
|
"export_type_single": "Solo questa nota, senza le sottostanti",
|
||||||
|
"format_opml": "OPML - formato per scambio informazioni outline. Formattazione, immagini e files non sono inclusi.",
|
||||||
|
"opml_version_1": "OPML v.1.0 - solo testo semplice",
|
||||||
|
"opml_version_2": "OPML v2.0 - supporta anche HTML"
|
||||||
},
|
},
|
||||||
"password_not_set": {
|
"password_not_set": {
|
||||||
"body1": "Le note protette sono crittografate utilizzando una password utente, ma la password non è stata ancora impostata.",
|
"body1": "Le note protette sono crittografate utilizzando una password utente, ma la password non è stata ancora impostata.",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -15,15 +15,39 @@
|
|||||||
"message": "클라이언트 애플리케이션 시작 도중 심각한 오류가 발생했습니다:\n\n{{message}}\n\n이는 스크립트가 예기치 않게 실패하면서 발생한 것일 수 있습니다. 애플리케이션을 안전 모드로 시작한 뒤 문제를 해결해 보세요."
|
"message": "클라이언트 애플리케이션 시작 도중 심각한 오류가 발생했습니다:\n\n{{message}}\n\n이는 스크립트가 예기치 않게 실패하면서 발생한 것일 수 있습니다. 애플리케이션을 안전 모드로 시작한 뒤 문제를 해결해 보세요."
|
||||||
},
|
},
|
||||||
"widget-error": {
|
"widget-error": {
|
||||||
"title": "위젯 초기화 실패"
|
"title": "위젯 초기화 실패",
|
||||||
|
"message-custom": "ID가 \"{{id}}\"고 ,제목이 \"{{title}}\" 인 노트에서 사용자 지정 위젯을 초기화 하는데 실패했습니다:\n\n{{message}}",
|
||||||
|
"message-unknown": "알 수 없는 위젯이 초기화 하는데 실패했습니다:\n\n{{message}}"
|
||||||
|
},
|
||||||
|
"bundle-error": {
|
||||||
|
"title": "사용자 정의 스크립트를 불러오는데 실패했습니다",
|
||||||
|
"message": "ID가 \"{{id}}\"고, 제목이 \"{{title}}\"인 노트에서 스크립트가 실행되지 못했습니다:\n\n{{message}}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"add_link": {
|
"add_link": {
|
||||||
"add_link": "링크 추가",
|
"add_link": "링크 추가",
|
||||||
"note": "노트",
|
"note": "노트",
|
||||||
"search_note": "이름으로 노트 검색하기"
|
"search_note": "이름으로 노트 검색하기",
|
||||||
|
"help_on_links": "링크 관련 도움말",
|
||||||
|
"link_title_mirrors": "링크 제목은 노트의 현재 제목을 반영합니다",
|
||||||
|
"link_title_arbitrary": "링크 제목은 임의로 변경될 수 있습니다",
|
||||||
|
"link_title": "링크 제목",
|
||||||
|
"button_add_link": "링크 추가"
|
||||||
},
|
},
|
||||||
"branch_prefix": {
|
"branch_prefix": {
|
||||||
"save": "저장"
|
"save": "저장",
|
||||||
|
"edit_branch_prefix": "브랜치 접두사 편집",
|
||||||
|
"help_on_tree_prefix": "트리 접두사에 대한 도움말",
|
||||||
|
"prefix": "접두사: ",
|
||||||
|
"branch_prefix_saved": "브랜치 접두사가 저장되었습니다."
|
||||||
|
},
|
||||||
|
"bulk_actions": {
|
||||||
|
"bulk_actions": "대량 작업",
|
||||||
|
"affected_notes": "영향을 받은 노트들",
|
||||||
|
"include_descendants": "선택한 노트의 자손 포함",
|
||||||
|
"available_actions": "가능한 액션들",
|
||||||
|
"chosen_actions": "선택한 액션들",
|
||||||
|
"execute_bulk_actions": "대량 액션들 실행",
|
||||||
|
"bulk_actions_executed": "대량 액션들이 성공적으로 실행되었습니다."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
1
apps/client/src/translations/md/translation.json
Normal file
1
apps/client/src/translations/md/translation.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{}
|
||||||
1
apps/client/src/translations/nb-NO/translation.json
Normal file
1
apps/client/src/translations/nb-NO/translation.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{}
|
||||||
@@ -4,6 +4,67 @@
|
|||||||
"homepage": "Homepagina:",
|
"homepage": "Homepagina:",
|
||||||
"app_version": "App versie:",
|
"app_version": "App versie:",
|
||||||
"db_version": "DB Versie:",
|
"db_version": "DB Versie:",
|
||||||
"sync_version": "Sync Versie:"
|
"sync_version": "Sync Versie:",
|
||||||
|
"build_date": "Build datum:",
|
||||||
|
"build_revision": "Build revisie:",
|
||||||
|
"data_directory": "Gegevensmap:"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"critical-error": {
|
||||||
|
"title": "Kritische Error",
|
||||||
|
"message": "Een kritieke fout heeft plaatsgevonden waardoor de cliënt zich aanmeldt vanaf het begin:\n\n84X\n\nDit is waarschijnlijk veroorzaakt door een script dat op een onverwachte manier faalt. Probeer de sollicitatie in veilige modus te starten en de kwestie aan te spreken."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"add_link": {
|
||||||
|
"add_link": "Voeg link toe",
|
||||||
|
"help_on_links": "Hulp bij links",
|
||||||
|
"note": "notitie",
|
||||||
|
"search_note": "zoek voor notitie op naam",
|
||||||
|
"link_title_mirrors": "De link titel is hetzelfde als de notitie's huidige titel",
|
||||||
|
"link_title": "Link titel",
|
||||||
|
"button_add_link": "Link toevoegen"
|
||||||
|
},
|
||||||
|
"branch_prefix": {
|
||||||
|
"edit_branch_prefix": "Bewerk branch prefix",
|
||||||
|
"save": "Opslaan",
|
||||||
|
"branch_prefix_saved": "Branch prefix is opgeslagen.",
|
||||||
|
"help_on_tree_prefix": "Help bij boomvoorvoegsel",
|
||||||
|
"prefix": "Voorvoegsel: "
|
||||||
|
},
|
||||||
|
"bulk_actions": {
|
||||||
|
"bulk_actions": "Bulk acties",
|
||||||
|
"affected_notes": "Getroffen notities",
|
||||||
|
"available_actions": "Beschikbare acties",
|
||||||
|
"chosen_actions": "Kies acties",
|
||||||
|
"execute_bulk_actions": "Bulk acties uitvoeren",
|
||||||
|
"bulk_actions_executed": "Bulk acties zijn succesvol uitgevoerd.",
|
||||||
|
"none_yet": "Nog niks... voeg een actie toe door een van de beschikbare bovenstaande opties te klikken.",
|
||||||
|
"labels": "Labels",
|
||||||
|
"relations": "Relaties",
|
||||||
|
"notes": "Notities",
|
||||||
|
"other": "Andere"
|
||||||
|
},
|
||||||
|
"calendar": {
|
||||||
|
"april": "April",
|
||||||
|
"may": "Mei",
|
||||||
|
"june": "Juni",
|
||||||
|
"july": "Juli",
|
||||||
|
"august": "Augustus",
|
||||||
|
"september": "September",
|
||||||
|
"october": "Oktober",
|
||||||
|
"november": "November",
|
||||||
|
"december": "December"
|
||||||
|
},
|
||||||
|
"close_pane_button": {
|
||||||
|
"close_this_pane": "Sluit dit paneel"
|
||||||
|
},
|
||||||
|
"create_pane_button": {
|
||||||
|
"create_new_split": "Maak nieuwe split"
|
||||||
|
},
|
||||||
|
"edit_button": {
|
||||||
|
"edit_this_note": "Notitie bewerken"
|
||||||
|
},
|
||||||
|
"show_toc_widget_button": {
|
||||||
|
"show_toc": "Laat Inhoudsopgave zien"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,13 +30,16 @@
|
|||||||
"search_note": "Wyszukaj notatkę po nazwie",
|
"search_note": "Wyszukaj notatkę po nazwie",
|
||||||
"link_title_arbitrary": "Tytuł linku można dowolnie zmieniać",
|
"link_title_arbitrary": "Tytuł linku można dowolnie zmieniać",
|
||||||
"link_title": "Tytuł linku",
|
"link_title": "Tytuł linku",
|
||||||
"button_add_link": "Dodaj link"
|
"button_add_link": "Dodaj link",
|
||||||
|
"help_on_links": "Pomoc dotycząca linków",
|
||||||
|
"link_title_mirrors": "tytuł linku odzwierciedla tytuł obecnej notatki"
|
||||||
},
|
},
|
||||||
"branch_prefix": {
|
"branch_prefix": {
|
||||||
"save": "Zapisz",
|
"save": "Zapisz",
|
||||||
"edit_branch_prefix": "Edytuj prefiks gałęzi",
|
"edit_branch_prefix": "Edytuj prefiks gałęzi",
|
||||||
"prefix": "Prefiks: ",
|
"prefix": "Prefiks: ",
|
||||||
"branch_prefix_saved": "Zapisano prefiks gałęzi."
|
"branch_prefix_saved": "Zapisano prefiks gałęzi.",
|
||||||
|
"help_on_tree_prefix": "Pomoc dotycząca prefiksu drzewa"
|
||||||
},
|
},
|
||||||
"bulk_actions": {
|
"bulk_actions": {
|
||||||
"labels": "Etykiety",
|
"labels": "Etykiety",
|
||||||
@@ -49,7 +52,8 @@
|
|||||||
"chosen_actions": "Wybrane działania",
|
"chosen_actions": "Wybrane działania",
|
||||||
"execute_bulk_actions": "Wykonaj zbiór działań",
|
"execute_bulk_actions": "Wykonaj zbiór działań",
|
||||||
"bulk_actions_executed": "Zbiór działań został wykonany prawidłowo.",
|
"bulk_actions_executed": "Zbiór działań został wykonany prawidłowo.",
|
||||||
"none_yet": "Brak zaznaczonych działań... dodaj działanie poprzez kliknięcie jednej z dostępnych opcji powyżej."
|
"none_yet": "Brak zaznaczonych działań... dodaj działanie poprzez kliknięcie jednej z dostępnych opcji powyżej.",
|
||||||
|
"affected_notes": "Dotyczy notatek"
|
||||||
},
|
},
|
||||||
"confirm": {
|
"confirm": {
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
@@ -98,7 +102,9 @@
|
|||||||
"prefix_optional": "Prefiks (opcjonalne)",
|
"prefix_optional": "Prefiks (opcjonalne)",
|
||||||
"clone_to_selected_note": "Sklonuj do wybranej notatki",
|
"clone_to_selected_note": "Sklonuj do wybranej notatki",
|
||||||
"no_path_to_clone_to": "Brak ścieżki do sklonowania.",
|
"no_path_to_clone_to": "Brak ścieżki do sklonowania.",
|
||||||
"note_cloned": "Notatka \"{{clonedTitle}}\" została sklonowana do \"{{targetTitle}}\""
|
"note_cloned": "Notatka \"{{clonedTitle}}\" została sklonowana do \"{{targetTitle}}\"",
|
||||||
|
"help_on_links": "Pomoc dotycząca linków",
|
||||||
|
"target_parent_note": "Docelowa główna notatka"
|
||||||
},
|
},
|
||||||
"help": {
|
"help": {
|
||||||
"title": "Ściągawka",
|
"title": "Ściągawka",
|
||||||
@@ -134,6 +140,495 @@
|
|||||||
"cutNotes": "przytnij obecną notatkę (lub obecną sekcję) do schowka (zastosowanie dla przenoszenia notatek)",
|
"cutNotes": "przytnij obecną notatkę (lub obecną sekcję) do schowka (zastosowanie dla przenoszenia notatek)",
|
||||||
"pasteNotes": "wklej notatkę jako podnotatka w obecnej notatce (rozumiane jako przenieś lub skopiuj, w zależności czy notatka była skopiowana czy wycięta)",
|
"pasteNotes": "wklej notatkę jako podnotatka w obecnej notatce (rozumiane jako przenieś lub skopiuj, w zależności czy notatka była skopiowana czy wycięta)",
|
||||||
"deleteNotes": "usuń notatkę / gałąź",
|
"deleteNotes": "usuń notatkę / gałąź",
|
||||||
"editingNotes": "Edytowanie notatek"
|
"editingNotes": "Edytowanie notatek",
|
||||||
|
"other": "Inne",
|
||||||
|
"editNoteTitle": "W panelu drzewa nastąpi przejście z panelu drzewa do tytułu notatki. Naciśnięcie klawisza Enter w tytule notatki spowoduje przejście do edytora tekstu. <kbd>Ctrl+.</kbd> spowoduje powrót z edytora do panelu drzewa.",
|
||||||
|
"createEditLink": "stwórz / edytuj zewnętrzny link",
|
||||||
|
"createInternalLink": "stwórz wewnętrzny link",
|
||||||
|
"followLink": "kliknij link pod kursorem",
|
||||||
|
"insertDateTime": "wstaw aktualną datę i godzinę w pozycji kursora",
|
||||||
|
"markdownAutoformat": "Autoformatowanie w stylu Markdown",
|
||||||
|
"headings": "<code>##</code>, <code>###</code>, <code>####</code> itd., po których następuje miejsce na nagłówki",
|
||||||
|
"bulletList": "<code>*</code> lub <code>-</code>, a następnie spacja, aby utworzyć listę",
|
||||||
|
"jumpToTreePane": "przejdź do panelu drzewa i przewiń do aktywnej notatki",
|
||||||
|
"numberedList": "<code>1.</code> or <code>1)</code> po którym następuje miejsce na listę numerowaną",
|
||||||
|
"blockQuote": "zacznij linijkę od <code></code> aby po kliknięciu spacji dodać blok cytatu",
|
||||||
|
"troubleshooting": "Rozwiązywanie błędów",
|
||||||
|
"reloadFrontend": "Załaduj ponownie Frontend Trilium",
|
||||||
|
"showDevTools": "pokaż narzędzia deweloperskie",
|
||||||
|
"showSQLConsole": "pokaż konsolę SQL",
|
||||||
|
"quickSearch": "skup się na szybkim wyszukiwaniu",
|
||||||
|
"inPageSearch": "wyszukiwanie wewnątrz strony"
|
||||||
|
},
|
||||||
|
"book_properties": {
|
||||||
|
"list": "Lista"
|
||||||
|
},
|
||||||
|
"board_view": {
|
||||||
|
"move-to": "Przenieś do",
|
||||||
|
"insert-above": "Umieść nad",
|
||||||
|
"insert-below": "Umieść pod",
|
||||||
|
"delete-column": "Usuń kolumnę",
|
||||||
|
"delete-column-confirmation": "Czy na pewno chcesz usunąć tę kolumnę? Odpowiedni atrybut zostanie również usunięty w notatkach pod tą kolumną.",
|
||||||
|
"new-item": "Nowy element",
|
||||||
|
"new-item-placeholder": "Wpisz tytuł notatki...",
|
||||||
|
"add-column": "Dodaj kolumnę",
|
||||||
|
"add-column-placeholder": "Wpisz tytuł kolumny...",
|
||||||
|
"edit-note-title": "Naciśnij aby edytować tytuł notatki",
|
||||||
|
"edit-column-title": "Naciśnij aby edytować tytuł kolumny",
|
||||||
|
"delete-note": "Usuń notatkę...",
|
||||||
|
"remove-from-board": "Usuń z tablicy",
|
||||||
|
"archive-note": "Archiwalna notatka",
|
||||||
|
"unarchive-note": "Usuń notatkę z archiwum"
|
||||||
|
},
|
||||||
|
"command_palette": {
|
||||||
|
"tree-action-name": "Drzewo: {{name}}",
|
||||||
|
"export_note_title": "Wyeksportuj notatkę",
|
||||||
|
"export_note_description": "Wyeksportuj aktualną notatkę",
|
||||||
|
"show_attachments_title": "Pokaż załączniki",
|
||||||
|
"show_attachments_description": "Zobacz załączniki notatki",
|
||||||
|
"search_notes_title": "Szukaj notatek",
|
||||||
|
"search_notes_description": "Otwórz zaawansowane wyszukiwanie",
|
||||||
|
"search_subtree_title": "Poszukaj w poddrzewie",
|
||||||
|
"search_subtree_description": "poszukaj wewnątrz poddrzewa",
|
||||||
|
"search_history_title": "Pokaż historię wyszukiwania",
|
||||||
|
"search_history_description": "Pokaż poprzednie wyszukiwania",
|
||||||
|
"configure_launch_bar_title": "Ustaw Launch Bar",
|
||||||
|
"configure_launch_bar_description": "Otwórz konfigurację Launch Bar, aby dodać lub usunąć elementy."
|
||||||
|
},
|
||||||
|
"content_renderer": {
|
||||||
|
"open_externally": "Otwórz zewnętrznie"
|
||||||
|
},
|
||||||
|
"modal": {
|
||||||
|
"close": "Zamknij",
|
||||||
|
"help_title": "Pokaż więcej informacji na temat tego ekranu"
|
||||||
|
},
|
||||||
|
"call_to_action": {
|
||||||
|
"next_theme_title": "Spróbuj nowy motyw Trilium",
|
||||||
|
"next_theme_message": "Obecnie używasz starszego motywu. Czy chcesz wypróbować nowy motyw?",
|
||||||
|
"next_theme_button": "Spróbuj nowego motywu",
|
||||||
|
"background_effects_title": "Efekty w tle są już stabilne",
|
||||||
|
"dismiss": "Odrzuć",
|
||||||
|
"background_effects_button": "Włącz efekty w tle"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"related_settings": "Powiązane ustawienia"
|
||||||
|
},
|
||||||
|
"settings_appearance": {
|
||||||
|
"related_code_blocks": "Schemat kolorów dla bloków kodu w notatkach tekstowych",
|
||||||
|
"related_code_notes": "Schemat kolorów dla kodu"
|
||||||
|
},
|
||||||
|
"units": {
|
||||||
|
"percentage": "%"
|
||||||
|
},
|
||||||
|
"pagination": {
|
||||||
|
"page_title": "Strony:{{startIndex}}-{{endIndex}}",
|
||||||
|
"total_notes": "{{count}}notatek"
|
||||||
|
},
|
||||||
|
"collections": {
|
||||||
|
"rendering_error": "Błąd - Nie można pokazać treści."
|
||||||
|
},
|
||||||
|
"add_label": {
|
||||||
|
"add_label": "Dodaj etykietę",
|
||||||
|
"label_name_placeholder": "Nazwa etykiety",
|
||||||
|
"label_name_title": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek.",
|
||||||
|
"to_value": "do wartości",
|
||||||
|
"new_value_placeholder": "nowa wartość",
|
||||||
|
"help_text": "We wszystkich dopasowanych notatkach:",
|
||||||
|
"help_text_item2": "albo zmień wartość istniejącej etykiety"
|
||||||
|
},
|
||||||
|
"attribute_detail": {
|
||||||
|
"delete": "Usuń",
|
||||||
|
"related_notes_title": "Inne notatki z tą etykietą",
|
||||||
|
"more_notes": "Więcej notatek",
|
||||||
|
"label": "Szczegóły etykiety",
|
||||||
|
"label_definition": "Szczegóły definicji etykiety",
|
||||||
|
"relation": "Szczegóły powiązania",
|
||||||
|
"relation_definition": "Szczegóły definicji powiązania",
|
||||||
|
"disable_versioning": "Wyłącza automatyczne wersjonowanie. Przydatne np. w przypadku dużych, ale nieistotnych notatek – np. dużych bibliotek JS używanych do skryptów",
|
||||||
|
"precision": "Prezycja",
|
||||||
|
"digits": "znaki",
|
||||||
|
"inverse_relation_title": "Opcjonalne ustawienie definiujące, do której relacji jest ta relacja przeciwna. Przykład: Główna - podnotatka są relacjami odwrotnymi do siebie.",
|
||||||
|
"inverse_relation": "Odwrócone powiązanie"
|
||||||
|
},
|
||||||
|
"import": {
|
||||||
|
"importIntoNote": "Importuj do notatki",
|
||||||
|
"chooseImportFile": "Wybierz plik do zaimportowania",
|
||||||
|
"importDescription": "Zawartość wybranego pliku(ów) zostanie zaimportowana jako notatka(i) podrzędna(e) do",
|
||||||
|
"options": "Opcje",
|
||||||
|
"shrinkImages": "Zmniejsz obrazy",
|
||||||
|
"safeImport": "Bezpieczny import",
|
||||||
|
"import-status": "Status importu",
|
||||||
|
"in-progress": "Import w trakcie: {{progress}}",
|
||||||
|
"successful": "Importowanie zakończone sukcesem.",
|
||||||
|
"safeImportTooltip": "Pliki eksportu Trilium <code>.zip</code> mogą zawierać skrypty wykonywalne, które mogą powodować szkodliwe zachowania. Bezpieczny import dezaktywuje automatyczne wykonywanie wszystkich importowanych skryptów. Odznacz opcję „Bezpieczny import” tylko wtedy, gdy importowane archiwum ma zawierać skrypty wykonywalne i masz pełne zaufanie do zawartości importowanego pliku.",
|
||||||
|
"import": "Import",
|
||||||
|
"failed": "Błąd importu: {{message}}.",
|
||||||
|
"html_import_tags": {
|
||||||
|
"title": "Tagi importu HTML",
|
||||||
|
"description": "Skonfiguruj, które tagi HTML mają zostać zachowane podczas importowania notatek. Tagi spoza tej listy zostaną usunięte podczas importu. Niektóre tagi (np. „script”) są zawsze usuwane ze względów bezpieczeństwa.",
|
||||||
|
"placeholder": "Wpisz tagi HTML, jedna na linijkę",
|
||||||
|
"reset_button": "Zresetuj do domyślnej listy"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"image_properties": {
|
||||||
|
"title": "Obraz",
|
||||||
|
"original_file_name": "Oryginalna nazwa pliku",
|
||||||
|
"file_type": "Typ pliku",
|
||||||
|
"file_size": "Rozmiar pliku",
|
||||||
|
"download": "Pobierz",
|
||||||
|
"open": "Otwórz",
|
||||||
|
"copy_reference_to_clipboard": "Kopiuj odniesienie do schowka",
|
||||||
|
"upload_new_revision": "Wgraj nową wersję",
|
||||||
|
"upload_success": "Nowa wersja obrazu została wysłana.",
|
||||||
|
"upload_failed": "Wysyłanie nowej wersji obrazu nie powiodło się: {{message}}"
|
||||||
|
},
|
||||||
|
"inherited_attribute_list": {
|
||||||
|
"title": "Odziedziczone atrybuty",
|
||||||
|
"no_inherited_attributes": "Brak odziedziczonych atrybutów."
|
||||||
|
},
|
||||||
|
"note_info_widget": {
|
||||||
|
"note_id": "ID notatki",
|
||||||
|
"created": "Stworzona",
|
||||||
|
"modified": "Zmodyfikowano",
|
||||||
|
"type": "Typ",
|
||||||
|
"note_size": "Rozmiar notatki",
|
||||||
|
"note_size_info": "Rozmiar notatki pozwala oszacować przybliżoną ilość miejsca potrzebnego na przechowanie jej. Uwzględnia ona jej treść oraz treść jej poprawek.",
|
||||||
|
"calculate": "oblicz",
|
||||||
|
"subtree_size": "(rozmiar poddrzewa: {{size}} w {{count}} notatkach)",
|
||||||
|
"title": "Informacje o notatce"
|
||||||
|
},
|
||||||
|
"note_map": {
|
||||||
|
"open_full": "Pełne rozszerzenie",
|
||||||
|
"collapse": "Zmniejsz do normalnego rozmiaru",
|
||||||
|
"title": "Mapa notatki",
|
||||||
|
"fix-nodes": "Napraw węzły",
|
||||||
|
"link-distance": "Odległość linku"
|
||||||
|
},
|
||||||
|
"note_paths": {
|
||||||
|
"title": "Ścieżki notatki",
|
||||||
|
"clone_button": "Sklonuj notatkę do nowej lokalizacji...",
|
||||||
|
"intro_placed": "Ta notatka jest umieszczona w następujących lokalizacjach:",
|
||||||
|
"intro_not_placed": "Ta notatka nie została jeszcze umieszczona w drzewie.",
|
||||||
|
"outside_hoisted": "Ta ścieżka znajduje się poza podniesioną notatką i trzeba ją odwiesić.",
|
||||||
|
"archived": "Zarchiwizowane",
|
||||||
|
"search": "Szukaj"
|
||||||
|
},
|
||||||
|
"note_properties": {
|
||||||
|
"this_note_was_originally_taken_from": "Ta notatka oryginalnie została wzięta z:",
|
||||||
|
"info": "Info"
|
||||||
|
},
|
||||||
|
"owned_attribute_list": {
|
||||||
|
"owned_attributes": "Posiadane atrybuty"
|
||||||
|
},
|
||||||
|
"promoted_attributes": {
|
||||||
|
"promoted_attributes": "Promowane atrybuty",
|
||||||
|
"unset-field-placeholder": "nie ustawione",
|
||||||
|
"url_placeholder": "http://strona...",
|
||||||
|
"open_external_link": "Otwórz link zewnętrzny",
|
||||||
|
"unknown_label_type": "Nieznany typ etykiety \"{{type}}\"",
|
||||||
|
"unknown_attribute_type": "Nieznany typ atrybutu \"{{type}}\"",
|
||||||
|
"add_new_attribute": "Dodaj nowy atrybut",
|
||||||
|
"remove_this_attribute": "Usuń ten atrybut",
|
||||||
|
"remove_color": "Usuń ten kolor etykiety"
|
||||||
|
},
|
||||||
|
"script_executor": {
|
||||||
|
"query": "Zapytanie",
|
||||||
|
"script": "Skrypt",
|
||||||
|
"execute_query": "Wykonaj zapytanie",
|
||||||
|
"execute_script": "Wykonaj skrypt"
|
||||||
|
},
|
||||||
|
"search_definition": {
|
||||||
|
"add_search_option": "Dodaj opcje wyszukiwania:",
|
||||||
|
"search_string": "ciąg wyszukiwania",
|
||||||
|
"search_script": "skrypt wyszukiwania",
|
||||||
|
"ancestor": "przodek",
|
||||||
|
"fast_search": "szybkie wyszukiwanie",
|
||||||
|
"fast_search_description": "Opcja szybkiego wyszukiwania wyłącza pełno tekstowe przeszukiwanie zawartości notatek, co może przyspieszyć przeszukiwanie dużych baz danych.",
|
||||||
|
"include_archived": "dodaj zarchiwizowane",
|
||||||
|
"include_archived_notes_description": "Domyślnie zarchiwizowane notatki są wyłączone z wyszukiwania, z tą opcją zostaną dodane do wyszukiwania.",
|
||||||
|
"order_by": "sortuj",
|
||||||
|
"limit": "limituj",
|
||||||
|
"limit_description": "Limituj liczbę wyników",
|
||||||
|
"save_to_note": "Zapisz do notatki",
|
||||||
|
"search_parameters": "Parametry wyszukiwania",
|
||||||
|
"unknown_search_option": "Nieznana opcja wyszukiwania {{searchOptionName}}",
|
||||||
|
"search_note_saved": "Wyszukiwana notatka została zapisana do {{- notePathTitle}}",
|
||||||
|
"actions_executed": "Akcja została wykonana."
|
||||||
|
},
|
||||||
|
"similar_notes": {
|
||||||
|
"title": "Podobne notatki",
|
||||||
|
"no_similar_notes_found": "Nie znaleziono podobnych notatek."
|
||||||
|
},
|
||||||
|
"abstract_search_option": {
|
||||||
|
"remove_this_search_option": "Usuń tą opcję wyszukiwania",
|
||||||
|
"failed_rendering": "Nieudana opcja wyszukiwania: {{dto}} z błędem: {{error}} {{stack}}"
|
||||||
|
},
|
||||||
|
"ancestor": {
|
||||||
|
"label": "Przodek",
|
||||||
|
"placeholder": "szukaj notatki po jej nazwie",
|
||||||
|
"depth_label": "glębokość",
|
||||||
|
"depth_doesnt_matter": "nie ważne",
|
||||||
|
"depth_eq": "jest dokładnie {{count}}",
|
||||||
|
"direct_children": "bezpośrednie podnotatki",
|
||||||
|
"depth_gt": "jest więcej niż {{count}}",
|
||||||
|
"depth_lt": "jest mniej niż {{count}}"
|
||||||
|
},
|
||||||
|
"debug": {
|
||||||
|
"debug": "Debuguj",
|
||||||
|
"debug_info": "Debugowanie wyświetli dodatkowe informacje debugowania w konsoli, aby ułatwić debugowanie złożonych zapytań."
|
||||||
|
},
|
||||||
|
"fast_search": {
|
||||||
|
"fast_search": "Szybkie wyszukiwanie"
|
||||||
|
},
|
||||||
|
"file_properties": {
|
||||||
|
"download": "Pobierz",
|
||||||
|
"open": "Otwórz",
|
||||||
|
"upload_new_revision": "Wgraj nową wersję",
|
||||||
|
"upload_success": "Nowa wersja pliku nie została wysłana.",
|
||||||
|
"upload_failed": "Wysyłanie nowej wersji pliku się nie udało.",
|
||||||
|
"title": "Plik"
|
||||||
|
},
|
||||||
|
"include_note": {
|
||||||
|
"label_note": "Notatka",
|
||||||
|
"placeholder_search": "szukaj notatki po jej nazwie",
|
||||||
|
"dialog_title": "Dołącz notatkę",
|
||||||
|
"button_include": "Dołącz notatkę"
|
||||||
|
},
|
||||||
|
"info": {
|
||||||
|
"closeButton": "Zamknij",
|
||||||
|
"okButton": "OK",
|
||||||
|
"modalTitle": "Wiadomość"
|
||||||
|
},
|
||||||
|
"jump_to_note": {
|
||||||
|
"search_placeholder": "Szukaj notatki po jej nazwie albo typie > komendy...",
|
||||||
|
"search_button": "Wyszukiwanie pełno tekstowe"
|
||||||
|
},
|
||||||
|
"markdown_import": {
|
||||||
|
"dialog_title": "Zaimportuj Markdown",
|
||||||
|
"import_button": "Import",
|
||||||
|
"import_success": "Treść Markdown została zaimportowana do dokumentu."
|
||||||
|
},
|
||||||
|
"limit": {
|
||||||
|
"limit": "Limit"
|
||||||
|
},
|
||||||
|
"link_context_menu": {
|
||||||
|
"open_note_in_popup": "Szybka edycja",
|
||||||
|
"open_note_in_new_tab": "Otwórz notatkę w nowej karcie",
|
||||||
|
"open_note_in_new_split": "Otwórz notatkę w nowym podziale ekranu",
|
||||||
|
"open_note_in_new_window": "Otwórz notatkę w nowym oknie"
|
||||||
|
},
|
||||||
|
"electron_integration": {
|
||||||
|
"desktop-application": "Aplikacja desktopowa"
|
||||||
|
},
|
||||||
|
"electron_context_menu": {
|
||||||
|
"cut": "Wytnij",
|
||||||
|
"copy": "Kopiuj",
|
||||||
|
"copy-link": "Kopiuj link",
|
||||||
|
"paste": "Wklej",
|
||||||
|
"paste-as-plain-text": "Wklej jako plain text",
|
||||||
|
"search_online": "Szukaj \"{{term}}\" za pomocą {{searchEngine}}"
|
||||||
|
},
|
||||||
|
"image_context_menu": {
|
||||||
|
"copy_reference_to_clipboard": "Skopiuj odnośnik do schowka",
|
||||||
|
"copy_image_to_clipboard": "Skopiuj obraz do schowka"
|
||||||
|
},
|
||||||
|
"note_autocomplete": {
|
||||||
|
"clear-text-field": "Wyczyść pole tekstowe",
|
||||||
|
"show-recent-notes": "Pokaż ostatnie notatki",
|
||||||
|
"full-text-search": "Wyszukiwanie pełnotekstowe"
|
||||||
|
},
|
||||||
|
"note_tooltip": {
|
||||||
|
"note-has-been-deleted": "Notatka została usunięta.",
|
||||||
|
"quick-edit": "Szybka edycja"
|
||||||
|
},
|
||||||
|
"duration": {
|
||||||
|
"seconds": "sekundy",
|
||||||
|
"minutes": "minuty",
|
||||||
|
"hours": "godziny",
|
||||||
|
"days": "dni"
|
||||||
|
},
|
||||||
|
"share": {
|
||||||
|
"title": "Ustawienia udostępniania"
|
||||||
|
},
|
||||||
|
"tasks": {
|
||||||
|
"due": {
|
||||||
|
"today": "Dziś",
|
||||||
|
"tomorrow": "Jutro",
|
||||||
|
"yesterday": "Wczoraj"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"content_widget": {
|
||||||
|
"unknown_widget": "Nieznany widget dla \"{{id}}\"."
|
||||||
|
},
|
||||||
|
"note_language": {
|
||||||
|
"not_set": "Nie ustawione",
|
||||||
|
"configure-languages": "Konfiguracja języków..."
|
||||||
|
},
|
||||||
|
"content_language": {
|
||||||
|
"title": "Język treści",
|
||||||
|
"description": "Wybierz jeden lub więcej języków, które mają być wyświetlane w sekcji Właściwości Podstawowe Notatki Tekstowej tylko do odczytu lub edytowalnej. Umożliwi to korzystanie z takich funkcji, jak sprawdzanie pisowni czy obsługa pisania od prawej do lewej."
|
||||||
|
},
|
||||||
|
"switch_layout_button": {
|
||||||
|
"title_vertical": "Przesuń panel edycji na dół",
|
||||||
|
"title_horizontal": "Przesuń panel edycji do lewej"
|
||||||
|
},
|
||||||
|
"toggle_read_only_button": {
|
||||||
|
"unlock-editing": "Odblokuj edycję",
|
||||||
|
"lock-editing": "Zablokuj edycję"
|
||||||
|
},
|
||||||
|
"png_export_button": {
|
||||||
|
"button_title": "Wyeksportuj diagram jako PNG"
|
||||||
|
},
|
||||||
|
"svg": {
|
||||||
|
"export_to_png": "Diagram nie może zostać wyeksportowany jako PNG."
|
||||||
|
},
|
||||||
|
"code_theme": {
|
||||||
|
"title": "Wygląd",
|
||||||
|
"word_wrapping": "Zawijanie słów",
|
||||||
|
"color-scheme": "Schemat kolorów"
|
||||||
|
},
|
||||||
|
"cpu_arch_warning": {
|
||||||
|
"title": "Proszę o pobranie wersji ARM64",
|
||||||
|
"message_macos": "TriliumNext działa obecnie w oparciu o technologię Rosetta 2, co oznacza, że używasz wersji Intel (x64) na komputerze Mac z procesorem Apple Silicon. Będzie to miało znaczący wpływ na wydajność i czas pracy baterii.",
|
||||||
|
"message_windows": "TriliumNext działa obecnie w trybie emulacji, co oznacza, że używasz wersji Intel (x64) na urządzeniu z systemem Windows na procesorze ARM. Będzie to miało znaczący wpływ na wydajność i czas pracy baterii.",
|
||||||
|
"recommendation": "Aby uzyskać najlepsze wrażenia, pobierz natywną wersję ARM64 aplikacji TriliumNext ze strony poświęconej wydaniom.",
|
||||||
|
"download_link": "Pobierz wersję natywną",
|
||||||
|
"continue_anyway": "Kontynuuj mimo wszystko",
|
||||||
|
"dont_show_again": "Nie pokazuj więcej tego ostrzeżenia"
|
||||||
|
},
|
||||||
|
"editorfeatures": {
|
||||||
|
"title": "Cechy",
|
||||||
|
"emoji_completion_enabled": "Włącz autouzupełnianie Emoji",
|
||||||
|
"note_completion_enabled": "Włącz autouzupełnianie notatki"
|
||||||
|
},
|
||||||
|
"table_view": {
|
||||||
|
"new-row": "Nowy wiersz",
|
||||||
|
"new-column": "Nowa kolumna",
|
||||||
|
"sort-column-by": "Sotuj po \"{{title}}\"",
|
||||||
|
"sort-column-ascending": "Rosnąco",
|
||||||
|
"sort-column-descending": "Malejąco",
|
||||||
|
"sort-column-clear": "Wyczyść sortowanie",
|
||||||
|
"hide-column": "Ukryj kolumnę \"{{title}}\"",
|
||||||
|
"show-hide-columns": "Pokaż/ukryj kolumny",
|
||||||
|
"row-insert-above": "Wstaw wiersz nad",
|
||||||
|
"row-insert-below": "Wstaw wiersz pod",
|
||||||
|
"row-insert-child": "Wstaw podnotatkę",
|
||||||
|
"add-column-to-the-left": "Dodaj kolumnę po lewej",
|
||||||
|
"add-column-to-the-right": "Dodaj kolumnę po prawej",
|
||||||
|
"edit-column": "Edytuj kolumnę",
|
||||||
|
"delete_column_confirmation": "Czy na pewno chcesz usunąć tę kolumnę? Odpowiedni atrybut zostanie usunięty ze wszystkich notatek.",
|
||||||
|
"delete-column": "Usuń kolumnę",
|
||||||
|
"new-column-label": "Etykieta",
|
||||||
|
"new-column-relation": "Relacje"
|
||||||
|
},
|
||||||
|
"book_properties_config": {
|
||||||
|
"hide-weekends": "Ukryj weekendy",
|
||||||
|
"display-week-numbers": "Pokaż numery tygodni",
|
||||||
|
"map-style": "Styl mapy:",
|
||||||
|
"max-nesting-depth": "Maksymalna głębokość zagnieżdżenia:",
|
||||||
|
"raster": "Raster",
|
||||||
|
"vector_light": "Wektor (jasny)",
|
||||||
|
"vector_dark": "Wektor (ciemny)",
|
||||||
|
"show-scale": "Pokaż skalę"
|
||||||
|
},
|
||||||
|
"table_context_menu": {
|
||||||
|
"delete_row": "Usuń wiersz"
|
||||||
|
},
|
||||||
|
"move_to": {
|
||||||
|
"dialog_title": "Przenieś notatki do ...",
|
||||||
|
"notes_to_move": "Notatki do przeniesienia"
|
||||||
|
},
|
||||||
|
"note_type_chooser": {
|
||||||
|
"modal_title": "Wybierz typ notatki",
|
||||||
|
"modal_body": "Wybierz typ / szablon notatki dla nowej notatki:",
|
||||||
|
"templates": "Szablony",
|
||||||
|
"builtin_templates": "Wbudowane szablony"
|
||||||
|
},
|
||||||
|
"password_not_set": {
|
||||||
|
"title": "Hasło nie zostało ustawione"
|
||||||
|
},
|
||||||
|
"add_relation": {
|
||||||
|
"add_relation": "Dodaj powiązanie",
|
||||||
|
"relation_name": "nazwa powiązania",
|
||||||
|
"allowed_characters": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek.",
|
||||||
|
"to": "do",
|
||||||
|
"target_note": "docelowa notatka"
|
||||||
|
},
|
||||||
|
"ai_llm": {
|
||||||
|
"actions": "Akcje",
|
||||||
|
"retry": "Spróbuj ponownie",
|
||||||
|
"partial": "{{ percentage }}% wykonania",
|
||||||
|
"retry_queued": "notatka dodana do kolejki",
|
||||||
|
"retry_failed": "Nieudana próba dodania notatki do kolejki",
|
||||||
|
"max_notes_per_llm_query": "Maksymalna ilość notatek w zapytaniu",
|
||||||
|
"index_all_notes": "Zindeksuj wszystkie notatki",
|
||||||
|
"index_status": "Status indeksowania",
|
||||||
|
"indexed_notes": "Zindeksowane notatki",
|
||||||
|
"indexing_stopped": "Indeksowanie zatrzymane",
|
||||||
|
"indexing_in_progress": "Indeksowanie w trakcie...",
|
||||||
|
"last_indexed": "Ostatnio zindeksowane",
|
||||||
|
"n_notes_queued_0": "{{ count }} notatka zakolejkowana do indeksowania",
|
||||||
|
"n_notes_queued_1": "{{ count }} notatek zakolejkowanych do indeksowania",
|
||||||
|
"n_notes_queued_2": "{{ count }} notatek zakolejkowanych do indeksowania",
|
||||||
|
"note_chat": "Czat notatki",
|
||||||
|
"note_title": "Tytuł notatki",
|
||||||
|
"error": "Błąd",
|
||||||
|
"last_attempt": "Ostatnia próba",
|
||||||
|
"queued_notes": "Zakolejkowane notatki",
|
||||||
|
"failed_notes": "Nieudane notatki",
|
||||||
|
"last_processed": "Ostatnio procesowane",
|
||||||
|
"refresh_stats": "Odśwież Statystyki",
|
||||||
|
"enable_ai_features": "Włącz funkcje AI/LLM",
|
||||||
|
"enable_ai_description": "Włącz funkcje AI, takie jak podsumowywanie notatek, generowanie treści i inne możliwości LLM",
|
||||||
|
"openai_tab": "OpenAI",
|
||||||
|
"anthropic_tab": "Anthropic",
|
||||||
|
"voyage_tab": "Voyage AI",
|
||||||
|
"ollama_tab": "Ollama",
|
||||||
|
"enable_ai": "Włącz funkcje AI/LLM",
|
||||||
|
"enable_ai_desc": "Włącz funkcje AI, takie jak podsumowywanie notatek, generowanie treści i inne możliwości LLM",
|
||||||
|
"provider_configuration": "Konfiguracja dostawcy AI",
|
||||||
|
"provider_precedence": "Pierwszeństwo dostawcy",
|
||||||
|
"provider_precedence_description": "Lista dostawców przedzielonych przecinkami w kolejności (np. „openai,anthropic,ollama”)",
|
||||||
|
"temperature": "Temperatura",
|
||||||
|
"temperature_description": "Kontroluje losowość odpowiedzi (0 = deterministyczna, 2 = maksymalna losowość)",
|
||||||
|
"system_prompt": "Monit systemowy",
|
||||||
|
"system_prompt_description": "Domyślny monit systemowy używany do wszystkich interakcji ze sztuczną inteligencją",
|
||||||
|
"openai_configuration": "Konfiguracja OpenAI",
|
||||||
|
"openai_settings": "Ustawienia OpenAI",
|
||||||
|
"api_key": "Klucz API",
|
||||||
|
"url": "Bazowy URL",
|
||||||
|
"model": "Model",
|
||||||
|
"openai_api_key_description": "Klucz API OpenAI umożliwiający dostęp do usług AI",
|
||||||
|
"anthropic_api_key_description": "Klucz API Anthropic umożliwiający dostęp do usług AI",
|
||||||
|
"default_model": "Domyślny Model",
|
||||||
|
"openai_model_description": "Przykłady: gpt-4o, gpt-4-turbo, gpt-3.5-turbo",
|
||||||
|
"base_url": "Bazowy URL",
|
||||||
|
"openai_url_description": "Domyślny: https://api.openai.com/v1",
|
||||||
|
"anthropic_settings": "Ustawienia Anthropic",
|
||||||
|
"anthropic_url_description": "Bazowy URL dla Anthropic API (domyślny: https://api.anthropic.com)",
|
||||||
|
"anthropic_model_description": "Modele Anthropic Claude'a do uzupełniania czatów",
|
||||||
|
"voyage_settings": "Ustawienia Voyage AI",
|
||||||
|
"ollama_settings": "Ustawienia Ollama",
|
||||||
|
"ollama_url_description": "URL dla Ollama API (domyślny: http://localhost:11434)",
|
||||||
|
"ollama_model_description": "Model Ollama używany do uzupełniania czatów",
|
||||||
|
"anthropic_configuration": "Konfiguracja Anthropic",
|
||||||
|
"voyage_configuration": "Konfiguracja Voyage AI",
|
||||||
|
"voyage_url_description": "Domyślny: https://api.voyageai.com/v1",
|
||||||
|
"ollama_configuration": "Konfiguracja Ollama",
|
||||||
|
"enable_ollama": "Włącz Ollama",
|
||||||
|
"enable_ollama_description": "Włącz Ollama dla lokalnego modelu AI",
|
||||||
|
"ollama_url": "Ollama URL",
|
||||||
|
"ollama_model": "Model Ollama",
|
||||||
|
"refresh_models": "Odśwież modele",
|
||||||
|
"refreshing_models": "Odświeżanie...",
|
||||||
|
"enable_automatic_indexing": "Włącz automatyczne indeksowanie",
|
||||||
|
"rebuild_index": "Odbuduj indeks",
|
||||||
|
"rebuild_index_error": "Błąd uruchomienia odbudowy indeksu. Sprawdź logi.",
|
||||||
|
"max_notes_per_llm_query_description": "Maksymalna liczba podobnych notatek do uwzględnienia w kontekście sztucznej inteligencji",
|
||||||
|
"active_providers": "Aktywni dostawcy",
|
||||||
|
"disabled_providers": "Wyłączeni dostawcy",
|
||||||
|
"remove_provider": "Usuń dostawcę z wyszukiwania",
|
||||||
|
"restore_provider": "Przywróć dostawcę do wyszukiwania",
|
||||||
|
"similarity_threshold": "Próg podobieństwa"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
6
apps/client/src/translations/pt/translation.json
Normal file
6
apps/client/src/translations/pt/translation.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"about": {
|
||||||
|
"title": "Acerca de \"Trillium Notes\"",
|
||||||
|
"app_version": "Versão da aplicação:"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -432,7 +432,12 @@
|
|||||||
"mime": "MIME: ",
|
"mime": "MIME: ",
|
||||||
"file_size": "Tamanho do arquivo:",
|
"file_size": "Tamanho do arquivo:",
|
||||||
"preview": "Visualizar:",
|
"preview": "Visualizar:",
|
||||||
"preview_not_available": "A visualização não está disponível para este tipo de nota."
|
"preview_not_available": "A visualização não está disponível para este tipo de nota.",
|
||||||
|
"diff_on": "Exibir diferença",
|
||||||
|
"diff_off": "Exibir conteúdo",
|
||||||
|
"diff_on_hint": "Clique para exibir a diferença de fonte da nota",
|
||||||
|
"diff_off_hint": "Clique para exibir o conteúdo da nota",
|
||||||
|
"diff_not_available": "A diferença não está disponível."
|
||||||
},
|
},
|
||||||
"sort_child_notes": {
|
"sort_child_notes": {
|
||||||
"sort_children_by": "Ordenar notas filhas por...",
|
"sort_children_by": "Ordenar notas filhas por...",
|
||||||
@@ -744,7 +749,7 @@
|
|||||||
"button-tree-map": "Mapa em Árvore"
|
"button-tree-map": "Mapa em Árvore"
|
||||||
},
|
},
|
||||||
"tree-context-menu": {
|
"tree-context-menu": {
|
||||||
"open-in-a-new-tab": "Abrir em uma nova aba <kbd>Ctrl+Click</kbd>",
|
"open-in-a-new-tab": "Abrir em uma nova aba",
|
||||||
"open-in-a-new-split": "Abrir em um novo painel dividido",
|
"open-in-a-new-split": "Abrir em um novo painel dividido",
|
||||||
"insert-note-after": "Inserir nota após",
|
"insert-note-after": "Inserir nota após",
|
||||||
"insert-child-note": "Inserir nota filha",
|
"insert-child-note": "Inserir nota filha",
|
||||||
@@ -774,7 +779,9 @@
|
|||||||
"apply-bulk-actions": "Aplicar ações em massa",
|
"apply-bulk-actions": "Aplicar ações em massa",
|
||||||
"converted-to-attachments": "{{count}} notas foram convertidas em anexos.",
|
"converted-to-attachments": "{{count}} notas foram convertidas em anexos.",
|
||||||
"convert-to-attachment-confirm": "Tem certeza de que deseja converter as notas selecionadas em anexos de suas notas-pai?",
|
"convert-to-attachment-confirm": "Tem certeza de que deseja converter as notas selecionadas em anexos de suas notas-pai?",
|
||||||
"open-in-popup": "Edição rápida"
|
"open-in-popup": "Edição rápida",
|
||||||
|
"archive": "Ficheiro",
|
||||||
|
"unarchive": "Desarquivar"
|
||||||
},
|
},
|
||||||
"command_palette": {
|
"command_palette": {
|
||||||
"search_subtree_title": "Buscar na Subárvore",
|
"search_subtree_title": "Buscar na Subárvore",
|
||||||
@@ -833,7 +840,7 @@
|
|||||||
"cannot_find_day_note": "Nota do dia não encontrada",
|
"cannot_find_day_note": "Nota do dia não encontrada",
|
||||||
"cannot_find_week_note": "Nota semanal não encontrada",
|
"cannot_find_week_note": "Nota semanal não encontrada",
|
||||||
"january": "Janeiro",
|
"january": "Janeiro",
|
||||||
"febuary": "Fevereiro",
|
"february": "Fevereiro",
|
||||||
"march": "Março",
|
"march": "Março",
|
||||||
"april": "Abril",
|
"april": "Abril",
|
||||||
"may": "Maio",
|
"may": "Maio",
|
||||||
@@ -843,7 +850,18 @@
|
|||||||
"september": "Setembro",
|
"september": "Setembro",
|
||||||
"october": "Outubro",
|
"october": "Outubro",
|
||||||
"november": "Novembro",
|
"november": "Novembro",
|
||||||
"december": "Dezembro"
|
"december": "Dezembro",
|
||||||
|
"week": "Semana",
|
||||||
|
"week_previous": "Semana passada",
|
||||||
|
"week_next": "Próxima semana",
|
||||||
|
"month": "Mês",
|
||||||
|
"month_previous": "Mês passado",
|
||||||
|
"month_next": "Próximo mês",
|
||||||
|
"year": "Ano",
|
||||||
|
"year_previous": "Ano passado",
|
||||||
|
"year_next": "Próximo ano",
|
||||||
|
"list": "Lista",
|
||||||
|
"today": "Hoje"
|
||||||
},
|
},
|
||||||
"close_pane_button": {
|
"close_pane_button": {
|
||||||
"close_this_pane": "Fechar este painel"
|
"close_this_pane": "Fechar este painel"
|
||||||
@@ -995,7 +1013,8 @@
|
|||||||
"calendar": "Calendário",
|
"calendar": "Calendário",
|
||||||
"table": "Tabela",
|
"table": "Tabela",
|
||||||
"geo-map": "Mapa geográfico",
|
"geo-map": "Mapa geográfico",
|
||||||
"board": "Quadro"
|
"board": "Quadro",
|
||||||
|
"include_archived_notes": "Exibir notas arquivadas"
|
||||||
},
|
},
|
||||||
"edited_notes": {
|
"edited_notes": {
|
||||||
"no_edited_notes_found": "Ainda não há nenhuma nota editada neste dia…",
|
"no_edited_notes_found": "Ainda não há nenhuma nota editada neste dia…",
|
||||||
@@ -1350,7 +1369,9 @@
|
|||||||
"title": "Desempenho",
|
"title": "Desempenho",
|
||||||
"enable-motion": "Habilitar transições e animações",
|
"enable-motion": "Habilitar transições e animações",
|
||||||
"enable-shadows": "Habilitar sombras",
|
"enable-shadows": "Habilitar sombras",
|
||||||
"enable-backdrop-effects": "Habilitar efeitos de fundo para menus, popups e painéis"
|
"enable-backdrop-effects": "Habilitar efeitos de fundo para menus, popups e painéis",
|
||||||
|
"enable-smooth-scroll": "Habilitar rolagem suave",
|
||||||
|
"app-restart-required": "(é necessário reiniciar o programa para que a mudança tenha efeito)"
|
||||||
},
|
},
|
||||||
"zoom_factor": {
|
"zoom_factor": {
|
||||||
"title": "Fator do Zoom (apenas versão de área de trabalho)",
|
"title": "Fator do Zoom (apenas versão de área de trabalho)",
|
||||||
@@ -1730,7 +1751,7 @@
|
|||||||
"native-title-bar": "Barra de título nativa",
|
"native-title-bar": "Barra de título nativa",
|
||||||
"native-title-bar-description": "Para Windows e macOS, manter a barra de título nativa desabilitada faz a aplicação parecer mais compacta. No Linux, manter a barra de título nativa habilitada faz a aplicação se integrar melhor com o restante do sistema.",
|
"native-title-bar-description": "Para Windows e macOS, manter a barra de título nativa desabilitada faz a aplicação parecer mais compacta. No Linux, manter a barra de título nativa habilitada faz a aplicação se integrar melhor com o restante do sistema.",
|
||||||
"background-effects": "Habilitar efeitos de fundo (apenas Windows 11)",
|
"background-effects": "Habilitar efeitos de fundo (apenas Windows 11)",
|
||||||
"background-effects-description": "O efeito Mica adicionar um fundo borrado e estilizado às janelas da aplicação, criando profundidade e um visual moderno.",
|
"background-effects-description": "O efeito Mica adiciona um fundo borrado e estilizado às janelas da aplicação, criando profundidade e um visual moderno. \"Barra de título nativa\" precisa ser desativada.",
|
||||||
"restart-app-button": "Reiniciar a aplicação para ver as alterações",
|
"restart-app-button": "Reiniciar a aplicação para ver as alterações",
|
||||||
"zoom-factor": "Fator de Zoom"
|
"zoom-factor": "Fator de Zoom"
|
||||||
},
|
},
|
||||||
@@ -1865,14 +1886,21 @@
|
|||||||
"delete_row": "Excluir linha"
|
"delete_row": "Excluir linha"
|
||||||
},
|
},
|
||||||
"board_view": {
|
"board_view": {
|
||||||
"delete-note": "Excluir Nota",
|
"delete-note": "Deletar nota...",
|
||||||
"move-to": "Mover para",
|
"move-to": "Mover para",
|
||||||
"insert-above": "Inserir acima",
|
"insert-above": "Inserir acima",
|
||||||
"insert-below": "Inserir abaixo",
|
"insert-below": "Inserir abaixo",
|
||||||
"delete-column": "Excluir coluna",
|
"delete-column": "Excluir coluna",
|
||||||
"delete-column-confirmation": "Tem certeza de que deseja excluir esta coluna? O atributo correspondente também será removido de todas as notas abaixo desta coluna.",
|
"delete-column-confirmation": "Tem certeza de que deseja excluir esta coluna? O atributo correspondente também será removido de todas as notas abaixo desta coluna.",
|
||||||
"new-item": "Novo item",
|
"new-item": "Novo item",
|
||||||
"add-column": "Adicionar Coluna"
|
"add-column": "Adicionar Coluna",
|
||||||
|
"remove-from-board": "Remover do quadro",
|
||||||
|
"archive-note": "Arquivar nota",
|
||||||
|
"unarchive-note": "Desarquivar nota",
|
||||||
|
"new-item-placeholder": "Escreva o título da nota...",
|
||||||
|
"add-column-placeholder": "Escreva o nome da coluna...",
|
||||||
|
"edit-note-title": "Clique para editar o título da nota",
|
||||||
|
"edit-column-title": "Clique para editar o título da coluna"
|
||||||
},
|
},
|
||||||
"call_to_action": {
|
"call_to_action": {
|
||||||
"next_theme_title": "Testar no novo tema do Trilium",
|
"next_theme_title": "Testar no novo tema do Trilium",
|
||||||
@@ -1894,7 +1922,9 @@
|
|||||||
"percentage": "%"
|
"percentage": "%"
|
||||||
},
|
},
|
||||||
"book": {
|
"book": {
|
||||||
"no_children_help": "Esta coleção não possui nenhum nota filha, então não há nada para exibir. Veja <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> para detalhes."
|
"no_children_help": "Esta coleção não possui nenhum nota filha, então não há nada para exibir. Veja <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> para detalhes.",
|
||||||
|
"drag_locked_title": "Bloqueado para edição",
|
||||||
|
"drag_locked_message": "Arrastar não é permitido pois a coleção está bloqueada para edição."
|
||||||
},
|
},
|
||||||
"render": {
|
"render": {
|
||||||
"note_detail_render_help_1": "Esta nota de ajuda é mostrada porque esta nota do tipo Renderizar HTML não possui a relação necessária para funcionar corretamente.",
|
"note_detail_render_help_1": "Esta nota de ajuda é mostrada porque esta nota do tipo Renderizar HTML não possui a relação necessária para funcionar corretamente.",
|
||||||
@@ -1978,7 +2008,7 @@
|
|||||||
"oauth_title": "OAuth/OpenID",
|
"oauth_title": "OAuth/OpenID",
|
||||||
"oauth_description": "OpenID é uma forma padronizada de permitir que você faça login em sites usando uma conta de outro serviço, como o Google, para verificar sua identidade. O emissor padrão é o Google, mas você pode alterá-lo para qualquer outro provedor OpenID. Consulte <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">aqui</a> para mais informações. Siga estas <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">instruções</a> para configurar um serviço OpenID através do Google.",
|
"oauth_description": "OpenID é uma forma padronizada de permitir que você faça login em sites usando uma conta de outro serviço, como o Google, para verificar sua identidade. O emissor padrão é o Google, mas você pode alterá-lo para qualquer outro provedor OpenID. Consulte <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">aqui</a> para mais informações. Siga estas <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">instruções</a> para configurar um serviço OpenID através do Google.",
|
||||||
"oauth_description_warning": "Para habilitar o OAuth/OpenID, você precisa definir a URL base do OAuth/OpenID, o client ID e o client secret no arquivo config.ini e reiniciar a aplicação. Se quiser configurar via variáveis de ambiente, defina TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID e TRILIUM_OAUTH_CLIENT_SECRET.",
|
"oauth_description_warning": "Para habilitar o OAuth/OpenID, você precisa definir a URL base do OAuth/OpenID, o client ID e o client secret no arquivo config.ini e reiniciar a aplicação. Se quiser configurar via variáveis de ambiente, defina TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID e TRILIUM_OAUTH_CLIENT_SECRET.",
|
||||||
"oauth_missing_vars": "Configurações ausentes: {{variables}}",
|
"oauth_missing_vars": "Configurações ausentes: {{-variables}}",
|
||||||
"oauth_user_account": "Conta do Usuário: ",
|
"oauth_user_account": "Conta do Usuário: ",
|
||||||
"oauth_user_email": "E-mail do Usuário: ",
|
"oauth_user_email": "E-mail do Usuário: ",
|
||||||
"oauth_user_not_logged_in": "Não está logado!"
|
"oauth_user_not_logged_in": "Não está logado!"
|
||||||
@@ -2026,5 +2056,12 @@
|
|||||||
"help_link": "Para ajuda, visite a <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki</a>.",
|
"help_link": "Para ajuda, visite a <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki</a>.",
|
||||||
"shared_publicly": "Esta nota é compartilhada publicamente em {{- link}}.",
|
"shared_publicly": "Esta nota é compartilhada publicamente em {{- link}}.",
|
||||||
"shared_locally": "Esta nota é compartilhada localmente em {{- link}}."
|
"shared_locally": "Esta nota é compartilhada localmente em {{- link}}."
|
||||||
|
},
|
||||||
|
"pagination": {
|
||||||
|
"page_title": "Página de {{startIndex}} - {{endIndex}}",
|
||||||
|
"total_notes": "{{count}} notas"
|
||||||
|
},
|
||||||
|
"collections": {
|
||||||
|
"rendering_error": "Não foi possível exibir o conteúdo devido a um erro."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -267,10 +267,13 @@
|
|||||||
"basic_properties": "Proprietăți de bază",
|
"basic_properties": "Proprietăți de bază",
|
||||||
"editable": "Editabil",
|
"editable": "Editabil",
|
||||||
"note_type": "Tipul notiței",
|
"note_type": "Tipul notiței",
|
||||||
"language": "Limbă"
|
"language": "Limbă",
|
||||||
|
"configure_code_notes": "Configurează notițele de tip cod..."
|
||||||
},
|
},
|
||||||
"book": {
|
"book": {
|
||||||
"no_children_help": "Această notiță de tip Carte nu are nicio subnotiță așadar nu este nimic de afișat. Vedeți <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> pentru detalii."
|
"no_children_help": "Această notiță de tip Carte nu are nicio subnotiță așadar nu este nimic de afișat. Vedeți <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> pentru detalii.",
|
||||||
|
"drag_locked_title": "Blocat pentru editare",
|
||||||
|
"drag_locked_message": "Glisarea notițelor nu este permisă deoarece colecția este blocată pentru editare."
|
||||||
},
|
},
|
||||||
"book_properties": {
|
"book_properties": {
|
||||||
"collapse": "Minimizează",
|
"collapse": "Minimizează",
|
||||||
@@ -285,7 +288,8 @@
|
|||||||
"book_properties": "Proprietăți colecție",
|
"book_properties": "Proprietăți colecție",
|
||||||
"table": "Tabel",
|
"table": "Tabel",
|
||||||
"geo-map": "Hartă geografică",
|
"geo-map": "Hartă geografică",
|
||||||
"board": "Tablă Kanban"
|
"board": "Tablă Kanban",
|
||||||
|
"include_archived_notes": "Afișează notițele arhivate"
|
||||||
},
|
},
|
||||||
"bookmark_switch": {
|
"bookmark_switch": {
|
||||||
"bookmark": "Semn de carte",
|
"bookmark": "Semn de carte",
|
||||||
@@ -318,7 +322,7 @@
|
|||||||
"august": "August",
|
"august": "August",
|
||||||
"cannot_find_day_note": "Nu se poate găsi notița acelei zile",
|
"cannot_find_day_note": "Nu se poate găsi notița acelei zile",
|
||||||
"december": "Decembrie",
|
"december": "Decembrie",
|
||||||
"febuary": "Februarie",
|
"february": "Februarie",
|
||||||
"fri": "Vin",
|
"fri": "Vin",
|
||||||
"january": "Ianuarie",
|
"january": "Ianuarie",
|
||||||
"july": "Iulie",
|
"july": "Iulie",
|
||||||
@@ -334,7 +338,18 @@
|
|||||||
"thu": "Joi",
|
"thu": "Joi",
|
||||||
"tue": "Mar",
|
"tue": "Mar",
|
||||||
"wed": "Mie",
|
"wed": "Mie",
|
||||||
"cannot_find_week_note": "Nu s-a putut găsi notița săptămânală"
|
"cannot_find_week_note": "Nu s-a putut găsi notița săptămânală",
|
||||||
|
"week": "Săptămână",
|
||||||
|
"week_previous": "Săptămâna trecută",
|
||||||
|
"week_next": "Următoarea săptămână",
|
||||||
|
"month": "Lună",
|
||||||
|
"month_previous": "Luna anterioară",
|
||||||
|
"month_next": "Următoarea lună",
|
||||||
|
"year": "An",
|
||||||
|
"year_previous": "Anul trecut",
|
||||||
|
"year_next": "Anul următor",
|
||||||
|
"list": "Agendă",
|
||||||
|
"today": "Astăzi"
|
||||||
},
|
},
|
||||||
"clone_to": {
|
"clone_to": {
|
||||||
"clone_notes_to": "Clonează notițele către...",
|
"clone_notes_to": "Clonează notițele către...",
|
||||||
@@ -1070,7 +1085,12 @@
|
|||||||
"revisions_deleted": "Notița reviziei a fost ștearsă.",
|
"revisions_deleted": "Notița reviziei a fost ștearsă.",
|
||||||
"maximum_revisions": "Numărul maxim de revizii pentru notița curentă: {{number}}.",
|
"maximum_revisions": "Numărul maxim de revizii pentru notița curentă: {{number}}.",
|
||||||
"settings": "Setări revizii ale notițelor",
|
"settings": "Setări revizii ale notițelor",
|
||||||
"snapshot_interval": "Intervalul de creare a reviziilor pentru notițe: {{seconds}}s."
|
"snapshot_interval": "Intervalul de creare a reviziilor pentru notițe: {{seconds}}s.",
|
||||||
|
"diff_on": "Evidențiază diferențele",
|
||||||
|
"diff_off": "Afișează conținutul",
|
||||||
|
"diff_on_hint": "Clic pentru a afișa diferențele față de revizia anterioară, la nivel de cod sursă",
|
||||||
|
"diff_off_hint": "Clic pentru a afișa întregul conținut al reviziei",
|
||||||
|
"diff_not_available": "Diferențele nu pot fi evidențiate."
|
||||||
},
|
},
|
||||||
"revisions_button": {
|
"revisions_button": {
|
||||||
"note_revisions": "Revizii ale notiței"
|
"note_revisions": "Revizii ale notiței"
|
||||||
@@ -1357,7 +1377,7 @@
|
|||||||
"insert-note-after": "Inserează după notiță",
|
"insert-note-after": "Inserează după notiță",
|
||||||
"move-to": "Mutare la...",
|
"move-to": "Mutare la...",
|
||||||
"open-in-a-new-split": "Deschide în lateral",
|
"open-in-a-new-split": "Deschide în lateral",
|
||||||
"open-in-a-new-tab": "Deschide în tab nou <kbd>Ctrl+Clic</kbd>",
|
"open-in-a-new-tab": "Deschide în tab nou",
|
||||||
"paste-after": "Lipește după notiță",
|
"paste-after": "Lipește după notiță",
|
||||||
"paste-into": "Lipește în notiță",
|
"paste-into": "Lipește în notiță",
|
||||||
"protect-subtree": "Protejează ierarhia",
|
"protect-subtree": "Protejează ierarhia",
|
||||||
@@ -1369,12 +1389,14 @@
|
|||||||
"unhoist-note": "Defocalizează notița",
|
"unhoist-note": "Defocalizează notița",
|
||||||
"converted-to-attachments": "{{count}} notițe au fost convertite în atașamente.",
|
"converted-to-attachments": "{{count}} notițe au fost convertite în atașamente.",
|
||||||
"convert-to-attachment-confirm": "Doriți convertirea notițelor selectate în atașamente ale notiței părinte?",
|
"convert-to-attachment-confirm": "Doriți convertirea notițelor selectate în atașamente ale notiței părinte?",
|
||||||
"open-in-popup": "Editare rapidă"
|
"open-in-popup": "Editare rapidă",
|
||||||
|
"archive": "Arhivează",
|
||||||
|
"unarchive": "Dezarhivează"
|
||||||
},
|
},
|
||||||
"shared_info": {
|
"shared_info": {
|
||||||
"help_link": "Pentru informații vizitați <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki-ul</a>.",
|
"help_link": "Pentru informații vizitați <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki-ul</a>.",
|
||||||
"shared_locally": "Această notiță este partajată local la {{- link}}",
|
"shared_locally": "Această notiță este partajată local la {{- link}}.",
|
||||||
"shared_publicly": "Această notiță este partajată public la {{- link}}"
|
"shared_publicly": "Această notiță este partajată public la {{- link}}."
|
||||||
},
|
},
|
||||||
"note_types": {
|
"note_types": {
|
||||||
"book": "Colecție",
|
"book": "Colecție",
|
||||||
@@ -1472,7 +1494,8 @@
|
|||||||
"create-child-note": "Crează subnotiță",
|
"create-child-note": "Crează subnotiță",
|
||||||
"hoist-this-note-workspace": "Focalizează spațiul de lucru",
|
"hoist-this-note-workspace": "Focalizează spațiul de lucru",
|
||||||
"refresh-saved-search-results": "Reîmprospătează căutarea salvată",
|
"refresh-saved-search-results": "Reîmprospătează căutarea salvată",
|
||||||
"unhoist": "Defocalizează notița"
|
"unhoist": "Defocalizează notița",
|
||||||
|
"toggle-sidebar": "Comută bara laterală"
|
||||||
},
|
},
|
||||||
"title_bar_buttons": {
|
"title_bar_buttons": {
|
||||||
"window-on-top": "Menține fereastra mereu vizibilă"
|
"window-on-top": "Menține fereastra mereu vizibilă"
|
||||||
@@ -1564,7 +1587,9 @@
|
|||||||
"ws": {
|
"ws": {
|
||||||
"consistency-checks-failed": "Au fost identificate erori de consistență! Vedeți mai multe detalii în loguri.",
|
"consistency-checks-failed": "Au fost identificate erori de consistență! Vedeți mai multe detalii în loguri.",
|
||||||
"encountered-error": "A fost întâmpinată o eroare: „{{message}}”. Vedeți în loguri pentru mai multe detalii.",
|
"encountered-error": "A fost întâmpinată o eroare: „{{message}}”. Vedeți în loguri pentru mai multe detalii.",
|
||||||
"sync-check-failed": "Verificările de sincronizare au eșuat!"
|
"sync-check-failed": "Verificările de sincronizare au eșuat!",
|
||||||
|
"lost-websocket-connection-title": "S-a pierdut conexiunea la server",
|
||||||
|
"lost-websocket-connection-message": "Verificați configurația reverse proxy-ului (e.g. nginx sau Apache) astfel încât să permită comunicarea prin WebSocket."
|
||||||
},
|
},
|
||||||
"hoisted_note": {
|
"hoisted_note": {
|
||||||
"confirm_unhoisting": "Notița dorită „{{requestedNote}}” este în afara ierarhiei notiței focalizate „{{hoistedNote}}”. Doriți defocalizarea pentru a accesa notița?"
|
"confirm_unhoisting": "Notița dorită „{{requestedNote}}” este în afara ierarhiei notiței focalizate „{{hoistedNote}}”. Doriți defocalizarea pentru a accesa notița?"
|
||||||
@@ -1645,7 +1670,7 @@
|
|||||||
},
|
},
|
||||||
"electron_integration": {
|
"electron_integration": {
|
||||||
"background-effects": "Activează efectele de fundal (doar pentru Windows 11)",
|
"background-effects": "Activează efectele de fundal (doar pentru Windows 11)",
|
||||||
"background-effects-description": "Efectul Mica adaugă un fundal estompat și elegant ferestrelor aplicațiilor, creând profunzime și un aspect modern.",
|
"background-effects-description": "Efectul Mica adaugă un fundal estompat și elegant ferestrelor aplicațiilor, creând profunzime și un aspect modern. Opțiunea „Bară de titlu nativă” trebuie să fie dezactivată.",
|
||||||
"desktop-application": "Aplicația desktop",
|
"desktop-application": "Aplicația desktop",
|
||||||
"native-title-bar": "Bară de titlu nativă",
|
"native-title-bar": "Bară de titlu nativă",
|
||||||
"native-title-bar-description": "Pentru Windows și macOS, dezactivarea bării de titlu native face aplicația să pară mai compactă. Pe Linux, păstrarea bării integrează mai bine aplicația cu restul sistemului de operare.",
|
"native-title-bar-description": "Pentru Windows și macOS, dezactivarea bării de titlu native face aplicația să pară mai compactă. Pe Linux, păstrarea bării integrează mai bine aplicația cu restul sistemului de operare.",
|
||||||
@@ -1908,7 +1933,7 @@
|
|||||||
"oauth_title": "OAuth/OpenID",
|
"oauth_title": "OAuth/OpenID",
|
||||||
"oauth_description": "OpenID este o cale standardizată ce permite autentificarea într-un site folosind un cont dintr-un alt serviciu, precum Google, pentru a verifica identitatea. În mod implicit furnizorul este Google, dar se poate schimba cu orice furnizor OpenID. Pentru mai multe informații, consultați <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">ghidul</a>. Urmați <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">aceste instrucțiuni</a> pentru a putea configura OpenID prin Google.",
|
"oauth_description": "OpenID este o cale standardizată ce permite autentificarea într-un site folosind un cont dintr-un alt serviciu, precum Google, pentru a verifica identitatea. În mod implicit furnizorul este Google, dar se poate schimba cu orice furnizor OpenID. Pentru mai multe informații, consultați <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">ghidul</a>. Urmați <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">aceste instrucțiuni</a> pentru a putea configura OpenID prin Google.",
|
||||||
"oauth_description_warning": "Pentru a activa OAuth sau OpenID, trebuie să configurați URL-ul de bază, ID-ul de client și secretul de client în fișierul config.ini și să reporniți aplicația. Dacă doriți să utilizați variabile de environment, puteți seta TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID și TRILIUM_OAUTH_CLIENT_SECRET.",
|
"oauth_description_warning": "Pentru a activa OAuth sau OpenID, trebuie să configurați URL-ul de bază, ID-ul de client și secretul de client în fișierul config.ini și să reporniți aplicația. Dacă doriți să utilizați variabile de environment, puteți seta TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID și TRILIUM_OAUTH_CLIENT_SECRET.",
|
||||||
"oauth_missing_vars": "Setări lipsă: {{variables}}",
|
"oauth_missing_vars": "Setări lipsă: {{-variables}}",
|
||||||
"oauth_user_account": "Cont: ",
|
"oauth_user_account": "Cont: ",
|
||||||
"oauth_user_email": "Email: ",
|
"oauth_user_email": "Email: ",
|
||||||
"oauth_user_not_logged_in": "Neautentificat!"
|
"oauth_user_not_logged_in": "Neautentificat!"
|
||||||
@@ -1933,7 +1958,11 @@
|
|||||||
"editorfeatures": {
|
"editorfeatures": {
|
||||||
"title": "Funcții",
|
"title": "Funcții",
|
||||||
"emoji_completion_enabled": "Activează auto-completarea pentru emoji-uri",
|
"emoji_completion_enabled": "Activează auto-completarea pentru emoji-uri",
|
||||||
"note_completion_enabled": "Activează auto-completarea pentru notițe"
|
"note_completion_enabled": "Activează auto-completarea pentru notițe",
|
||||||
|
"emoji_completion_description": "Dacă această funcție este pornită, emoji-urile pot fi inserate rapid prin tastarea caracterului „:”, urmat de denumirea emoji-ului.",
|
||||||
|
"note_completion_description": "Dacă această funcție este pornită, se pot crea ușor legături către notițe prin tastarea „@”, urmată de titlul notiței dorite.",
|
||||||
|
"slash_commands_enabled": "Activează comenzi rapide prin tasta slash",
|
||||||
|
"slash_commands_description": "Dacă această funcție este pornită, se poate folosi tasta „/” pentru a rula rapid comenzi de editare precum inserarea de întreruperi de pagină sau titluri."
|
||||||
},
|
},
|
||||||
"table_view": {
|
"table_view": {
|
||||||
"new-row": "Rând nou",
|
"new-row": "Rând nou",
|
||||||
@@ -1969,14 +1998,21 @@
|
|||||||
"delete_row": "Șterge rândul"
|
"delete_row": "Șterge rândul"
|
||||||
},
|
},
|
||||||
"board_view": {
|
"board_view": {
|
||||||
"delete-note": "Șterge notița",
|
"delete-note": "Șterge notița...",
|
||||||
"move-to": "Mută la",
|
"move-to": "Mută la",
|
||||||
"insert-above": "Inserează deasupra",
|
"insert-above": "Inserează deasupra",
|
||||||
"insert-below": "Inserează dedesubt",
|
"insert-below": "Inserează dedesubt",
|
||||||
"delete-column": "Șterge coloana",
|
"delete-column": "Șterge coloana",
|
||||||
"delete-column-confirmation": "Doriți ștergerea acestei coloane? Atributul corespunzător va fi șters din notițele din acest tabel.",
|
"delete-column-confirmation": "Doriți ștergerea acestei coloane? Atributul corespunzător va fi șters din notițele din acest tabel.",
|
||||||
"new-item": "Intrare nouă",
|
"new-item": "Intrare nouă",
|
||||||
"add-column": "Adaugă coloană"
|
"add-column": "Adaugă coloană",
|
||||||
|
"remove-from-board": "Înlătură de pe tablă",
|
||||||
|
"archive-note": "Arhivează notița",
|
||||||
|
"unarchive-note": "Dezarhivează notița",
|
||||||
|
"new-item-placeholder": "Introduceți titlul notiței...",
|
||||||
|
"add-column-placeholder": "Introduceți denumirea coloanei...",
|
||||||
|
"edit-note-title": "Clic pentru a edita titlul notiței",
|
||||||
|
"edit-column-title": "Clic pentru a edita titlul coloanei"
|
||||||
},
|
},
|
||||||
"command_palette": {
|
"command_palette": {
|
||||||
"tree-action-name": "Listă de notițe: {{name}}",
|
"tree-action-name": "Listă de notițe: {{name}}",
|
||||||
@@ -2013,7 +2049,9 @@
|
|||||||
"title": "Setări de performanță",
|
"title": "Setări de performanță",
|
||||||
"enable-motion": "Activează tranzițiile și animațiile",
|
"enable-motion": "Activează tranzițiile și animațiile",
|
||||||
"enable-shadows": "Activează umbrirea elementelor",
|
"enable-shadows": "Activează umbrirea elementelor",
|
||||||
"enable-backdrop-effects": "Activează efectele de fundal pentru meniuri, popup-uri și panouri"
|
"enable-backdrop-effects": "Activează efectele de fundal pentru meniuri, popup-uri și panouri",
|
||||||
|
"enable-smooth-scroll": "Activează derularea lină",
|
||||||
|
"app-restart-required": "(este necesară repornirea aplicației pentru ca modificarea să aibă efect)"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"related_settings": "Setări similare"
|
"related_settings": "Setări similare"
|
||||||
@@ -2024,5 +2062,12 @@
|
|||||||
},
|
},
|
||||||
"units": {
|
"units": {
|
||||||
"percentage": "%"
|
"percentage": "%"
|
||||||
|
},
|
||||||
|
"pagination": {
|
||||||
|
"page_title": "Pagina pentru {{startIndex}} - {{endIndex}}",
|
||||||
|
"total_notes": "{{count}} notițe"
|
||||||
|
},
|
||||||
|
"collections": {
|
||||||
|
"rendering_error": "Nu a putut fi afișat conținutul din cauza unei erori."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -282,13 +282,13 @@
|
|||||||
"editBranchPrefix": "изменить <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/tree-concepts.html#prefix\">префикс</a> клона активной заметки",
|
"editBranchPrefix": "изменить <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/tree-concepts.html#prefix\">префикс</a> клона активной заметки",
|
||||||
"multiSelectNote": "множественный выбор заметки выше/ниже",
|
"multiSelectNote": "множественный выбор заметки выше/ниже",
|
||||||
"selectNote": "выбрать заметку",
|
"selectNote": "выбрать заметку",
|
||||||
"copyNotes": "скопировать активную заметку (или выделение) в буфер обмер (используется для <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/cloning-notes.html#cloning-notes\">клонирования</a>)",
|
"copyNotes": "скопировать активную заметку (или выделение) в буфер обмена (используется для <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/cloning-notes.html#cloning-notes\">клонирования</a>)",
|
||||||
"createEditLink": "создать/редактировать внешнюю ссылку",
|
"createEditLink": "создать/редактировать внешнюю ссылку",
|
||||||
"headings": "<code>##</code>, <code>###</code>, <code>####</code> и т. д., за которыми следует пробел для заголовков",
|
"headings": "<code>##</code>, <code>###</code>, <code>####</code> и т. д., за которыми следует пробел для заголовков",
|
||||||
"bulletList": "<code>*</code> или <code>-</code> с последующим пробелом для маркированного списка",
|
"bulletList": "<code>*</code> или <code>-</code> с последующим пробелом для маркированного списка",
|
||||||
"numberedList": "<code>1.</code> или <code>1)</code> с последующим пробелом для нумерованного списка",
|
"numberedList": "<code>1.</code> или <code>1)</code> с последующим пробелом для нумерованного списка",
|
||||||
"blockQuote": "начните строку с <code>></code>, а затем пробела для блока цитаты",
|
"blockQuote": "начните строку с <code>></code>, а затем пробела для блока цитаты",
|
||||||
"quickSearch": "сфокусироваться на полее ввода быстрого поиска",
|
"quickSearch": "сфокусироваться на поле ввода быстрого поиска",
|
||||||
"editNoteTitle": "в области дерева переключится с области дерева на заголовок заметки. Сочетание клавиш Enter из области заголовка заметки переключит фокус на текстовый редактор. <kbd>Ctrl+.</kbd> переключит обратно с редактора на область дерева.",
|
"editNoteTitle": "в области дерева переключится с области дерева на заголовок заметки. Сочетание клавиш Enter из области заголовка заметки переключит фокус на текстовый редактор. <kbd>Ctrl+.</kbd> переключит обратно с редактора на область дерева.",
|
||||||
"title": "Справка"
|
"title": "Справка"
|
||||||
},
|
},
|
||||||
@@ -301,7 +301,7 @@
|
|||||||
"chooseImportFile": "Выберите файл импорта",
|
"chooseImportFile": "Выберите файл импорта",
|
||||||
"safeImport": "Безопасный импорт",
|
"safeImport": "Безопасный импорт",
|
||||||
"shrinkImages": "Уменьшить изображения",
|
"shrinkImages": "Уменьшить изображения",
|
||||||
"textImportedAsText": "Импортировать HTML, Markdown и TXT как текстовые заметки, если из метаданные не позволяют определить тип заметки",
|
"textImportedAsText": "Импортировать HTML, Markdown и TXT как текстовые заметки, если их метаданные не позволяют определить тип заметки",
|
||||||
"replaceUnderscoresWithSpaces": "Заменить подчеркивания пробелами в названиях импортированных заметок",
|
"replaceUnderscoresWithSpaces": "Заменить подчеркивания пробелами в названиях импортированных заметок",
|
||||||
"import": "Импорт",
|
"import": "Импорт",
|
||||||
"failed": "Сбой при импорте: {{message}}.",
|
"failed": "Сбой при импорте: {{message}}.",
|
||||||
@@ -370,7 +370,7 @@
|
|||||||
"confirm_delete": "Вы хотите удалить эту версию?",
|
"confirm_delete": "Вы хотите удалить эту версию?",
|
||||||
"revisions_deleted": "Версии заметки были удалены.",
|
"revisions_deleted": "Версии заметки были удалены.",
|
||||||
"revision_restored": "Версия заметки была восстановлена.",
|
"revision_restored": "Версия заметки была восстановлена.",
|
||||||
"revision_deleted": "Версия заметки были удалены.",
|
"revision_deleted": "Версия заметки была удалена.",
|
||||||
"download_button": "Скачать",
|
"download_button": "Скачать",
|
||||||
"file_size": "Размер файла:",
|
"file_size": "Размер файла:",
|
||||||
"preview": "Предпросмотр:",
|
"preview": "Предпросмотр:",
|
||||||
@@ -379,7 +379,12 @@
|
|||||||
"settings": "Настройка версионирования заметок",
|
"settings": "Настройка версионирования заметок",
|
||||||
"no_revisions": "У этой заметки еще нет версий...",
|
"no_revisions": "У этой заметки еще нет версий...",
|
||||||
"snapshot_interval": "Интервал создания версии заметки: {{seconds}} с.",
|
"snapshot_interval": "Интервал создания версии заметки: {{seconds}} с.",
|
||||||
"maximum_revisions": "Максимальное количество версий заметки: {{number}}."
|
"maximum_revisions": "Максимальное количество версий заметки: {{number}}.",
|
||||||
|
"diff_on": "Сравнить",
|
||||||
|
"diff_off": "Показать содержимое",
|
||||||
|
"diff_on_hint": "Отобразить сравнение исходного кода заметки",
|
||||||
|
"diff_off_hint": "Отобразить контент заметки",
|
||||||
|
"diff_not_available": "Сравнение недоступно."
|
||||||
},
|
},
|
||||||
"sort_child_notes": {
|
"sort_child_notes": {
|
||||||
"sort_children_by": "Сортировать дочерние заметки по...",
|
"sort_children_by": "Сортировать дочерние заметки по...",
|
||||||
@@ -458,7 +463,7 @@
|
|||||||
"run_at_hour": "В какой час это должно выполняться? Следует использовать вместе с <code>#run=hourly</code>. Можно задать несколько раз для большего количества запусков в течение дня.",
|
"run_at_hour": "В какой час это должно выполняться? Следует использовать вместе с <code>#run=hourly</code>. Можно задать несколько раз для большего количества запусков в течение дня.",
|
||||||
"disable_inclusion": "скрипты с этой меткой не будут включены в выполнение родительского скрипта.",
|
"disable_inclusion": "скрипты с этой меткой не будут включены в выполнение родительского скрипта.",
|
||||||
"sorted": "сохраняет алфавитную сортировку дочерних заметок",
|
"sorted": "сохраняет алфавитную сортировку дочерних заметок",
|
||||||
"sort_direction": "ASC (по возрастани, по умолчанию) или DESC (по убыванию)",
|
"sort_direction": "ASC (по возрастанию, по умолчанию) или DESC (по убыванию)",
|
||||||
"sort_folders_first": "Папки (заметки, включая дочерние) должны быть отсортированы вверх",
|
"sort_folders_first": "Папки (заметки, включая дочерние) должны быть отсортированы вверх",
|
||||||
"top": "закрепить заданную заметку наверху в ее родителе (применяется только к отсортированным родительским заметкам)",
|
"top": "закрепить заданную заметку наверху в ее родителе (применяется только к отсортированным родительским заметкам)",
|
||||||
"hide_promoted_attributes": "Скрыть продвигаемых атрибуты в этой заметке",
|
"hide_promoted_attributes": "Скрыть продвигаемых атрибуты в этой заметке",
|
||||||
@@ -474,7 +479,7 @@
|
|||||||
"workspace_search_home": "новые заметки поиска будут созданы как дочерние записи этой заметки при перемещении их к какому-либо предку этой заметки рабочей области",
|
"workspace_search_home": "новые заметки поиска будут созданы как дочерние записи этой заметки при перемещении их к какому-либо предку этой заметки рабочей области",
|
||||||
"workspace_calendar_root": "Определяет корень календаря для каждого рабочего пространства",
|
"workspace_calendar_root": "Определяет корень календаря для каждого рабочего пространства",
|
||||||
"hide_highlight_widget": "Скрыть виджет «Выделенное»",
|
"hide_highlight_widget": "Скрыть виджет «Выделенное»",
|
||||||
"is_owned_by_note": "принадлежит записке",
|
"is_owned_by_note": "принадлежит заметке",
|
||||||
"and_more": "... и ещё {{count}}.",
|
"and_more": "... и ещё {{count}}.",
|
||||||
"app_theme": "отмечает заметки CSS, которые являются полноценными темами Trilium и, таким образом, доступны в опциях Trilium.",
|
"app_theme": "отмечает заметки CSS, которые являются полноценными темами Trilium и, таким образом, доступны в опциях Trilium.",
|
||||||
"title_template": "Заголовок по умолчанию для заметок, создаваемых как дочерние элементы данной заметки. Значение вычисляется как строка JavaScript\n и, таким образом, может быть дополнено динамическим контентом с помощью внедренных переменных <code>now</code> и <code>parentNote</code>. Примеры:\n \n <ul>\n <li><code>Литературные произведения ${parentNote.getLabelValue('authorName')}</code></li>\n <li><code>Лог для ${now.format('YYYY-MM-DD HH:mm:ss')}</code></li>\n </ul>\n \n Подробности см. в <a href=\"https://triliumnext.github.io/Docs/Wiki/default-note-title.html\">вики</a>, документации API для <a href=\"https://zadam.github.io/trilium/backend_api/Note.html\">parentNote</a> и <a href=\"https://day.js.org/docs/en/display/format\">now</a>.",
|
"title_template": "Заголовок по умолчанию для заметок, создаваемых как дочерние элементы данной заметки. Значение вычисляется как строка JavaScript\n и, таким образом, может быть дополнено динамическим контентом с помощью внедренных переменных <code>now</code> и <code>parentNote</code>. Примеры:\n \n <ul>\n <li><code>Литературные произведения ${parentNote.getLabelValue('authorName')}</code></li>\n <li><code>Лог для ${now.format('YYYY-MM-DD HH:mm:ss')}</code></li>\n </ul>\n \n Подробности см. в <a href=\"https://triliumnext.github.io/Docs/Wiki/default-note-title.html\">вики</a>, документации API для <a href=\"https://zadam.github.io/trilium/backend_api/Note.html\">parentNote</a> и <a href=\"https://day.js.org/docs/en/display/format\">now</a>.",
|
||||||
@@ -523,7 +528,7 @@
|
|||||||
"run_on_note_deletion": "выполняется при удалении заметки",
|
"run_on_note_deletion": "выполняется при удалении заметки",
|
||||||
"run_on_branch_creation": "выполняется при создании ветви. Ветвь — это связующее звено между родительской и дочерней заметками и создаётся, например, при клонировании или перемещении заметки.",
|
"run_on_branch_creation": "выполняется при создании ветви. Ветвь — это связующее звено между родительской и дочерней заметками и создаётся, например, при клонировании или перемещении заметки.",
|
||||||
"run_on_branch_change": "выполняется при обновлении ветки.",
|
"run_on_branch_change": "выполняется при обновлении ветки.",
|
||||||
"run_on_attribute_creation": "выполняется, когда создается новый атрибут для заметка, определяющей это отношение",
|
"run_on_attribute_creation": "выполняется, когда создается новый атрибут для заметки, определяющей это отношение",
|
||||||
"run_on_attribute_change": " выполняется при изменении атрибута заметки, определяющей это отношение. Также срабатывает при удалении атрибута",
|
"run_on_attribute_change": " выполняется при изменении атрибута заметки, определяющей это отношение. Также срабатывает при удалении атрибута",
|
||||||
"relation_template": "атрибуты заметки будут унаследованы даже без родительско-дочерних отношений. Содержимое заметки и её поддерево будут добавлены к экземпляру заметки, если оно пустое. Подробности см. в документации.",
|
"relation_template": "атрибуты заметки будут унаследованы даже без родительско-дочерних отношений. Содержимое заметки и её поддерево будут добавлены к экземпляру заметки, если оно пустое. Подробности см. в документации.",
|
||||||
"inherit": "атрибуты заметки будут унаследованы даже без родительско-дочерних отношений. См. описание шаблонных отношений для получения аналогичной информации. См. раздел «Наследование атрибутов» в документации.",
|
"inherit": "атрибуты заметки будут унаследованы даже без родительско-дочерних отношений. См. описание шаблонных отношений для получения аналогичной информации. См. раздел «Наследование атрибутов» в документации.",
|
||||||
@@ -555,7 +560,14 @@
|
|||||||
"insert-below": "Вставить ниже",
|
"insert-below": "Вставить ниже",
|
||||||
"insert-above": "Вставить выше",
|
"insert-above": "Вставить выше",
|
||||||
"move-to": "Переместить",
|
"move-to": "Переместить",
|
||||||
"delete-note": "Удалить заметку"
|
"delete-note": "Удалить заметку...",
|
||||||
|
"remove-from-board": "Удалить из доски",
|
||||||
|
"archive-note": "Архивировать заметку",
|
||||||
|
"unarchive-note": "Разархивировать заметку",
|
||||||
|
"edit-column-title": "Нажмите, чтобы изменить заголовок столбца",
|
||||||
|
"edit-note-title": "Нажмите, чтобы изменить название заметки",
|
||||||
|
"add-column-placeholder": "Введите имя столбца...",
|
||||||
|
"new-item-placeholder": "Введите название заметки..."
|
||||||
},
|
},
|
||||||
"table_context_menu": {
|
"table_context_menu": {
|
||||||
"delete_row": "Удалить строку"
|
"delete_row": "Удалить строку"
|
||||||
@@ -573,7 +585,11 @@
|
|||||||
"editorfeatures": {
|
"editorfeatures": {
|
||||||
"note_completion_enabled": "Включить автодополнение",
|
"note_completion_enabled": "Включить автодополнение",
|
||||||
"emoji_completion_enabled": "Включить автодополнение эмодзи",
|
"emoji_completion_enabled": "Включить автодополнение эмодзи",
|
||||||
"title": "Особенности"
|
"title": "Особенности",
|
||||||
|
"slash_commands_description": "Если эта опция включена, команды редактирования, такие как вставка переносов строк или заголовков, можно переключать, вводя `/`.",
|
||||||
|
"slash_commands_enabled": "Включить слэш-команды",
|
||||||
|
"note_completion_description": "Если эта опция включена, ссылки на заметки можно создавать, вводя `@`, а затем название заметки.",
|
||||||
|
"emoji_completion_description": "Если эта функция включена, эмодзи можно легко вставлять в текст, набрав `:`, а затем название эмодзи."
|
||||||
},
|
},
|
||||||
"cpu_arch_warning": {
|
"cpu_arch_warning": {
|
||||||
"dont_show_again": "Больше не показывать это предупреждение",
|
"dont_show_again": "Больше не показывать это предупреждение",
|
||||||
@@ -653,10 +669,10 @@
|
|||||||
"electron_integration": {
|
"electron_integration": {
|
||||||
"zoom-factor": "Коэффициент масштабирования",
|
"zoom-factor": "Коэффициент масштабирования",
|
||||||
"restart-app-button": "Применить изменения и перезапустить приложение",
|
"restart-app-button": "Применить изменения и перезапустить приложение",
|
||||||
"background-effects-description": "Эффект Mica добавляет размытый, стильный фон окнам приложений, создавая глубину и современный вид.",
|
"background-effects-description": "Эффект Mica добавляет размытый, стильный фон окнам приложений, создавая глубину и современный вид. Опция \"Системная строка заголовка\" должна быть отключена.",
|
||||||
"background-effects": "Включить фоновые эффекты (только Windows 11)",
|
"background-effects": "Включить фоновые эффекты (только Windows 11)",
|
||||||
"native-title-bar-description": "В Windows и macOS отключение нативной строки заголовка делает приложение более компактным. В Linux включение нативной строки заголовка улучшает интеграцию с остальной частью системы.",
|
"native-title-bar-description": "В Windows и macOS отключение системной строки заголовка делает приложение более компактным. В Linux включение системной строки заголовка улучшает интеграцию с остальной частью системы.",
|
||||||
"native-title-bar": "Нативная панель заголовка",
|
"native-title-bar": "Системная панель заголовка",
|
||||||
"desktop-application": "Десктопное приложение"
|
"desktop-application": "Десктопное приложение"
|
||||||
},
|
},
|
||||||
"link_context_menu": {
|
"link_context_menu": {
|
||||||
@@ -700,7 +716,7 @@
|
|||||||
},
|
},
|
||||||
"code_block": {
|
"code_block": {
|
||||||
"copy_title": "Копировать в буфер обмена",
|
"copy_title": "Копировать в буфер обмена",
|
||||||
"theme_group_dark": "Темныце темы",
|
"theme_group_dark": "Темные темы",
|
||||||
"theme_group_light": "Светлые темы",
|
"theme_group_light": "Светлые темы",
|
||||||
"theme_none": "Нет подсветки синтаксиса",
|
"theme_none": "Нет подсветки синтаксиса",
|
||||||
"word_wrapping": "Перенос слов"
|
"word_wrapping": "Перенос слов"
|
||||||
@@ -771,7 +787,7 @@
|
|||||||
"beta-feature": "Бета",
|
"beta-feature": "Бета",
|
||||||
"widget": "Виджет",
|
"widget": "Виджет",
|
||||||
"image": "Изображение",
|
"image": "Изображение",
|
||||||
"file": "Файд",
|
"file": "Файл",
|
||||||
"canvas": "Холст",
|
"canvas": "Холст",
|
||||||
"mermaid-diagram": "Диаграмма Mermaid",
|
"mermaid-diagram": "Диаграмма Mermaid",
|
||||||
"book": "Коллекция",
|
"book": "Коллекция",
|
||||||
@@ -797,9 +813,9 @@
|
|||||||
"cut": "Вырезать",
|
"cut": "Вырезать",
|
||||||
"duplicate": "Создать дубликат",
|
"duplicate": "Создать дубликат",
|
||||||
"export": "Экспорт",
|
"export": "Экспорт",
|
||||||
"open-in-a-new-tab": "Открыть в новой вкладке <kbd>Ctrl+Click</kbd>",
|
"open-in-a-new-tab": "Открыть в новой вкладке",
|
||||||
"open-in-a-new-split": "Открыть в новой панели",
|
"open-in-a-new-split": "Открыть в новой панели",
|
||||||
"unhoist-note": "Отрепить заметку",
|
"unhoist-note": "Открепить заметку",
|
||||||
"hoist-note": "Закрепить заметку",
|
"hoist-note": "Закрепить заметку",
|
||||||
"protect-subtree": "Защитить поддерево",
|
"protect-subtree": "Защитить поддерево",
|
||||||
"unprotect-subtree": "Снять защиту с поддерева",
|
"unprotect-subtree": "Снять защиту с поддерева",
|
||||||
@@ -812,7 +828,7 @@
|
|||||||
"expand-subtree": "Развернуть поддерево",
|
"expand-subtree": "Развернуть поддерево",
|
||||||
"collapse-subtree": "Свернуть поддерево",
|
"collapse-subtree": "Свернуть поддерево",
|
||||||
"sort-by": "Сортировать по...",
|
"sort-by": "Сортировать по...",
|
||||||
"insert-note-after": "Вставить замтку после",
|
"insert-note-after": "Вставить заметку после",
|
||||||
"insert-child-note": "Вставить дочернюю заметку",
|
"insert-child-note": "Вставить дочернюю заметку",
|
||||||
"search-in-subtree": "Поиск в поддереве",
|
"search-in-subtree": "Поиск в поддереве",
|
||||||
"edit-branch-prefix": "Изменить префикс ветки",
|
"edit-branch-prefix": "Изменить префикс ветки",
|
||||||
@@ -821,7 +837,9 @@
|
|||||||
"recent-changes-in-subtree": "Последние изменения в поддереве",
|
"recent-changes-in-subtree": "Последние изменения в поддереве",
|
||||||
"copy-note-path-to-clipboard": "Копировать путь к заметке в буфер обмена",
|
"copy-note-path-to-clipboard": "Копировать путь к заметке в буфер обмена",
|
||||||
"convert-to-attachment-confirm": "Вы уверены, что хотите преобразовать выбранные заметки во вложения их родительских заметок?",
|
"convert-to-attachment-confirm": "Вы уверены, что хотите преобразовать выбранные заметки во вложения их родительских заметок?",
|
||||||
"converted-to-attachments": "{{count}} заметок были преобразованы во вложения."
|
"converted-to-attachments": "{{count}} заметок были преобразованы во вложения.",
|
||||||
|
"archive": "Архивировать",
|
||||||
|
"unarchive": "Разархивировать"
|
||||||
},
|
},
|
||||||
"info": {
|
"info": {
|
||||||
"closeButton": "Закрыть",
|
"closeButton": "Закрыть",
|
||||||
@@ -850,7 +868,7 @@
|
|||||||
"to": "в",
|
"to": "в",
|
||||||
"move_note": "Переместить заметку",
|
"move_note": "Переместить заметку",
|
||||||
"target_parent_note": "целевая версии заметки",
|
"target_parent_note": "целевая версии заметки",
|
||||||
"on_all_matched_notes": "На всех совпадающих нотах",
|
"on_all_matched_notes": "На всех совпадающих заметках",
|
||||||
"move_note_new_parent": "переместить заметку в новый родительский элемент, если у заметки есть только один родительский элемент (т. е. старая ветвь удаляется и создается новая ветвь в новом родительском элементе)",
|
"move_note_new_parent": "переместить заметку в новый родительский элемент, если у заметки есть только один родительский элемент (т. е. старая ветвь удаляется и создается новая ветвь в новом родительском элементе)",
|
||||||
"clone_note_new_parent": "клонировать заметку в новый родительский элемент, если у заметки есть несколько клонов/ветвей (неясно, какую ветвь следует удалить)",
|
"clone_note_new_parent": "клонировать заметку в новый родительский элемент, если у заметки есть несколько клонов/ветвей (неясно, какую ветвь следует удалить)",
|
||||||
"nothing_will_happen": "ничего не произойдет, если эту заметку невозможно переместить в целевую заметку (т.е. это создаст цикл дерева)"
|
"nothing_will_happen": "ничего не произойдет, если эту заметку невозможно переместить в целевую заметку (т.е. это создаст цикл дерева)"
|
||||||
@@ -888,7 +906,7 @@
|
|||||||
"delete_attachment": "Удалить вложение",
|
"delete_attachment": "Удалить вложение",
|
||||||
"upload_new_revision": "Загрузить новую версию",
|
"upload_new_revision": "Загрузить новую версию",
|
||||||
"open_custom": "Открыть как...",
|
"open_custom": "Открыть как...",
|
||||||
"open_custom_client_only": "Иной способ открытие вложений возможен только из десктопного приложения.",
|
"open_custom_client_only": "Открытие вложений другим способом возможно только в десктопном приложении.",
|
||||||
"open_externally_detail_page": "Открытие вложения извне доступно только из детальной страницы. Для этого сначала нажмите на сведения о вложении и повторите действие.",
|
"open_externally_detail_page": "Открытие вложения извне доступно только из детальной страницы. Для этого сначала нажмите на сведения о вложении и повторите действие.",
|
||||||
"open_custom_title": "Файл будет открыт во внешнем приложении и отслеживаться на наличие изменений. После этого вы сможете загрузить изменённую версию обратно в Trilium.",
|
"open_custom_title": "Файл будет открыт во внешнем приложении и отслеживаться на наличие изменений. После этого вы сможете загрузить изменённую версию обратно в Trilium.",
|
||||||
"open_externally_title": "Файл будет открыт во внешнем приложении и отслеживаться на наличие изменений. После этого вы сможете загрузить изменённую версию обратно в Trilium.",
|
"open_externally_title": "Файл будет открыт во внешнем приложении и отслеживаться на наличие изменений. После этого вы сможете загрузить изменённую версию обратно в Trilium.",
|
||||||
@@ -911,7 +929,7 @@
|
|||||||
"sat": "Сбт",
|
"sat": "Сбт",
|
||||||
"sun": "Вс",
|
"sun": "Вс",
|
||||||
"january": "Январь",
|
"january": "Январь",
|
||||||
"febuary": "Февраль",
|
"february": "Февраль",
|
||||||
"march": "Март",
|
"march": "Март",
|
||||||
"april": "Апрель",
|
"april": "Апрель",
|
||||||
"may": "Май",
|
"may": "Май",
|
||||||
@@ -923,7 +941,18 @@
|
|||||||
"november": "Ноябрь",
|
"november": "Ноябрь",
|
||||||
"december": "Декабрь",
|
"december": "Декабрь",
|
||||||
"cannot_find_week_note": "Не удалось найти заметку недели",
|
"cannot_find_week_note": "Не удалось найти заметку недели",
|
||||||
"cannot_find_day_note": "Не удалось найти заметку дня"
|
"cannot_find_day_note": "Не удалось найти заметку дня",
|
||||||
|
"week": "Неделя",
|
||||||
|
"week_previous": "Прошлая неделя",
|
||||||
|
"week_next": "Следующая неделя",
|
||||||
|
"month": "Месяц",
|
||||||
|
"month_previous": "Предыдущий месяц",
|
||||||
|
"month_next": "Следующий месяц",
|
||||||
|
"year": "Год",
|
||||||
|
"year_previous": "Предыдущий год",
|
||||||
|
"year_next": "Следующий год",
|
||||||
|
"list": "Список",
|
||||||
|
"today": "Сегодня"
|
||||||
},
|
},
|
||||||
"global_menu": {
|
"global_menu": {
|
||||||
"menu": "Меню",
|
"menu": "Меню",
|
||||||
@@ -984,7 +1013,8 @@
|
|||||||
"geo-map": "Карта",
|
"geo-map": "Карта",
|
||||||
"invalid_view_type": "Недопустимый тип представления '{{type}}'",
|
"invalid_view_type": "Недопустимый тип представления '{{type}}'",
|
||||||
"expand_all_children": "Развернуть все дочерние элементы",
|
"expand_all_children": "Развернуть все дочерние элементы",
|
||||||
"collapse_all_notes": "Свернуть все заметки"
|
"collapse_all_notes": "Свернуть все заметки",
|
||||||
|
"include_archived_notes": "Показать заархивированные заметки"
|
||||||
},
|
},
|
||||||
"edited_notes": {
|
"edited_notes": {
|
||||||
"deleted": "(удалено)",
|
"deleted": "(удалено)",
|
||||||
@@ -994,8 +1024,8 @@
|
|||||||
"file_properties": {
|
"file_properties": {
|
||||||
"download": "Скачать",
|
"download": "Скачать",
|
||||||
"open": "Открыть",
|
"open": "Открыть",
|
||||||
"title": "Файд",
|
"title": "Файл",
|
||||||
"upload_success": "Загрузка новой версии файла не удалась.",
|
"upload_success": "Новая версия файла успешно загружена.",
|
||||||
"upload_new_revision": "Загрузить новую версию",
|
"upload_new_revision": "Загрузить новую версию",
|
||||||
"file_size": "Размер файла",
|
"file_size": "Размер файла",
|
||||||
"file_type": "Тип файла",
|
"file_type": "Тип файла",
|
||||||
@@ -1127,7 +1157,7 @@
|
|||||||
"label_abc": "возвращает заметки с меткой abc",
|
"label_abc": "возвращает заметки с меткой abc",
|
||||||
"label_year": "ищет заметки с меткой year, имеющей значение 2019",
|
"label_year": "ищет заметки с меткой year, имеющей значение 2019",
|
||||||
"label_rock_pop": "соответствует заметкам с метками как rock, так и pop",
|
"label_rock_pop": "соответствует заметкам с метками как rock, так и pop",
|
||||||
"label_rock_or_pop": "должна присутствовать только одна из vtnjr",
|
"label_rock_or_pop": "должна присутствовать только одна из меток",
|
||||||
"label_year_comparison": "числовое сравнение (также >, >=, <).",
|
"label_year_comparison": "числовое сравнение (также >, >=, <).",
|
||||||
"label_date_created": "заметки, созданные за последний месяц",
|
"label_date_created": "заметки, созданные за последний месяц",
|
||||||
"error": "Ошибка поиска: {{error}}",
|
"error": "Ошибка поиска: {{error}}",
|
||||||
@@ -1181,7 +1211,7 @@
|
|||||||
"native_title_bar": {
|
"native_title_bar": {
|
||||||
"enabled": "включено",
|
"enabled": "включено",
|
||||||
"disabled": "выключено",
|
"disabled": "выключено",
|
||||||
"title": "Нативная панель заголовка (требует перезапуска приложения)"
|
"title": "Системная панель заголовка (требует перезапуска приложения)"
|
||||||
},
|
},
|
||||||
"ai_llm": {
|
"ai_llm": {
|
||||||
"progress": "Прогресс",
|
"progress": "Прогресс",
|
||||||
@@ -1387,7 +1417,7 @@
|
|||||||
"first-week-contains-first-day": "Первая неделя содержит первый день года",
|
"first-week-contains-first-day": "Первая неделя содержит первый день года",
|
||||||
"first-week-contains-first-thursday": "Первая неделя содержит первый четверг года",
|
"first-week-contains-first-thursday": "Первая неделя содержит первый четверг года",
|
||||||
"first-week-has-minimum-days": "Первая неделя имеет минимальное количество дней",
|
"first-week-has-minimum-days": "Первая неделя имеет минимальное количество дней",
|
||||||
"min-days-in-first-week": "Минимальное количество дней в первую неделю",
|
"min-days-in-first-week": "Минимальное количество дней в первой неделе",
|
||||||
"first-week-info": "Первая неделя содержит первый четверг года в соответствии со стандартом <a href=\"https://en.wikipedia.org/wiki/ISO_week_date#First_week\">ISO 8601</a>.",
|
"first-week-info": "Первая неделя содержит первый четверг года в соответствии со стандартом <a href=\"https://en.wikipedia.org/wiki/ISO_week_date#First_week\">ISO 8601</a>.",
|
||||||
"first-week-warning": "Изменение параметров первой недели может привести к дублированию существующих недельных заметок, и существующие недельные заметки не будут обновлены соответствующим образом.",
|
"first-week-warning": "Изменение параметров первой недели может привести к дублированию существующих недельных заметок, и существующие недельные заметки не будут обновлены соответствующим образом.",
|
||||||
"formatting-locale": "Формат даты и числа"
|
"formatting-locale": "Формат даты и числа"
|
||||||
@@ -1449,7 +1479,7 @@
|
|||||||
"totp_secret_generated": "Создан секрет TOTP",
|
"totp_secret_generated": "Создан секрет TOTP",
|
||||||
"recovery_keys_generate": "Генерация кодов восстановления",
|
"recovery_keys_generate": "Генерация кодов восстановления",
|
||||||
"recovery_keys_regenerate": "Регенерация кодов восстановления",
|
"recovery_keys_regenerate": "Регенерация кодов восстановления",
|
||||||
"oauth_missing_vars": "Отсутствуют настройки: {{variables}}",
|
"oauth_missing_vars": "Отсутствуют настройки: {{-variables}}",
|
||||||
"oauth_user_not_logged_in": "Не выполнен вход!",
|
"oauth_user_not_logged_in": "Не выполнен вход!",
|
||||||
"totp_title": "Одноразовый пароль с ограничением по времени (TOTP)",
|
"totp_title": "Одноразовый пароль с ограничением по времени (TOTP)",
|
||||||
"recovery_keys_title": "Ключи восстановления единого входа",
|
"recovery_keys_title": "Ключи восстановления единого входа",
|
||||||
@@ -1693,7 +1723,7 @@
|
|||||||
"database_vacuumed": "База данных была сжата"
|
"database_vacuumed": "База данных была сжата"
|
||||||
},
|
},
|
||||||
"vim_key_bindings": {
|
"vim_key_bindings": {
|
||||||
"use_vim_keybindings_in_code_notes": "Раскладка клавиш VIM",
|
"use_vim_keybindings_in_code_notes": "Сочетания клавиш Vim",
|
||||||
"enable_vim_keybindings": "Включить сочетания клавиш Vim в заметках кода (без режима ex)"
|
"enable_vim_keybindings": "Включить сочетания клавиш Vim в заметках кода (без режима ex)"
|
||||||
},
|
},
|
||||||
"network_connections": {
|
"network_connections": {
|
||||||
@@ -1776,7 +1806,7 @@
|
|||||||
"button_title": "Экспортировать диаграмму как SVG"
|
"button_title": "Экспортировать диаграмму как SVG"
|
||||||
},
|
},
|
||||||
"copy_image_reference_button": {
|
"copy_image_reference_button": {
|
||||||
"button_title": "Скопировать ссылку на изображение в буфер обмена, можент быть вставлена в текстовую заметку."
|
"button_title": "Скопировать ссылку на изображение в буфер обмена, может быть вставлена в текстовую заметку."
|
||||||
},
|
},
|
||||||
"note_launcher": {
|
"note_launcher": {
|
||||||
"this_launcher_doesnt_define_target_note": "Этот лаунчер не определяет целевую заметку."
|
"this_launcher_doesnt_define_target_note": "Этот лаунчер не определяет целевую заметку."
|
||||||
@@ -1947,7 +1977,9 @@
|
|||||||
"ws": {
|
"ws": {
|
||||||
"sync-check-failed": "Проверка синхронизации не удалась!",
|
"sync-check-failed": "Проверка синхронизации не удалась!",
|
||||||
"encountered-error": "Обнаружена ошибка \"{{message}}\", проверьте консоль.",
|
"encountered-error": "Обнаружена ошибка \"{{message}}\", проверьте консоль.",
|
||||||
"consistency-checks-failed": "Проверка целостности не пройдена! Подробности смотрите в логах."
|
"consistency-checks-failed": "Проверка целостности не пройдена! Подробности смотрите в логах.",
|
||||||
|
"lost-websocket-connection-title": "Потеряно соединение с сервером",
|
||||||
|
"lost-websocket-connection-message": "Проверьте конфигурацию обратного прокси (например, nginx или Apache), чтобы убедиться, что соединения WebSocket должным образом разрешены и не заблокированы."
|
||||||
},
|
},
|
||||||
"attachment_detail_2": {
|
"attachment_detail_2": {
|
||||||
"role_and_size": "Роль: {{role}}, Размер: {{size}}",
|
"role_and_size": "Роль: {{role}}, Размер: {{size}}",
|
||||||
@@ -2019,12 +2051,23 @@
|
|||||||
"could_not_find_typewidget": "Не удалось найти typeWidget для типа '{{type}}'"
|
"could_not_find_typewidget": "Не удалось найти typeWidget для типа '{{type}}'"
|
||||||
},
|
},
|
||||||
"book": {
|
"book": {
|
||||||
"no_children_help": "В этой коллекции нет дочерних заметок, поэтому отображать нечего. Подробности см. на <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a>."
|
"no_children_help": "В этой коллекции нет дочерних заметок, поэтому отображать нечего. Подробности см. в <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a>.",
|
||||||
|
"drag_locked_title": "Защищено от изменения",
|
||||||
|
"drag_locked_message": "Перетаскивание не допускается, так как коллекция защищена от редактирования."
|
||||||
},
|
},
|
||||||
"ui-performance": {
|
"ui-performance": {
|
||||||
"title": "Производительность",
|
"title": "Производительность",
|
||||||
"enable-motion": "Включить визуальные эффекты и анимации",
|
"enable-motion": "Включить визуальные эффекты и анимации",
|
||||||
"enable-shadows": "Включить тени",
|
"enable-shadows": "Включить тени",
|
||||||
"enable-backdrop-effects": "Включить эффекты размытия фона меню, всплывающих окон и панелей"
|
"enable-backdrop-effects": "Включить эффекты размытия фона меню, всплывающих окон и панелей",
|
||||||
|
"enable-smooth-scroll": "Включить плавную прокрутку",
|
||||||
|
"app-restart-required": "(для вступления изменений в силу требуется перезапуск приложения)"
|
||||||
|
},
|
||||||
|
"collections": {
|
||||||
|
"rendering_error": "Невозможно отобразить содержимое из-за ошибки."
|
||||||
|
},
|
||||||
|
"pagination": {
|
||||||
|
"total_notes": "{{count}} заметок",
|
||||||
|
"page_title": "Страница {{startIndex}} - {{endIndex}}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,26 +1,96 @@
|
|||||||
{
|
{
|
||||||
"about": {
|
"about": {
|
||||||
"homepage": "Giriş sayfası:",
|
"homepage": "Anasayfa:",
|
||||||
"app_version": "Uygulama versiyonu:",
|
"app_version": "Uygulama versiyonu:",
|
||||||
"db_version": "Veritabanı versiyonu:"
|
"db_version": "Veritabanı versiyonu:",
|
||||||
|
"title": "Trilium Notes Hakkında",
|
||||||
|
"sync_version": "Eşleştirme versiyonu:",
|
||||||
|
"data_directory": "Veri dizini:"
|
||||||
|
},
|
||||||
|
"branch_prefix": {
|
||||||
|
"save": "Kaydet",
|
||||||
|
"edit_branch_prefix": "Dalın önekini düzenle",
|
||||||
|
"prefix": "Önek: ",
|
||||||
|
"branch_prefix_saved": "Dal öneki kaydedildi."
|
||||||
|
},
|
||||||
|
"delete_notes": {
|
||||||
|
"close": "Kapat",
|
||||||
|
"delete_notes_preview": "Not önizlemesini sil",
|
||||||
|
"delete_all_clones_description": "Tüm klonları da sil (son değişikliklerden geri alınabilir)"
|
||||||
|
},
|
||||||
|
"export": {
|
||||||
|
"close": "Kapat"
|
||||||
|
},
|
||||||
|
"import": {
|
||||||
|
"chooseImportFile": "İçe aktarım dosyası",
|
||||||
|
"importDescription": "Seçilen dosya(lar) alt not olarak içe aktarılacaktır"
|
||||||
|
},
|
||||||
|
"info": {
|
||||||
|
"closeButton": "Kapat"
|
||||||
|
},
|
||||||
|
"protected_session_password": {
|
||||||
|
"close_label": "Kapat"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"critical-error": {
|
||||||
|
"title": "Kritik hata",
|
||||||
|
"message": "İstemci uygulamasının başlatılmasını engelleyen kritik bir hata meydana geldi\n\n{{message}}\n\nBu muhtemelen bir betiğin beklenmedik şekilde başarısız olmasından kaynaklanıyor. Uygulamayı güvenli modda başlatarak sorunu ele almayı deneyin."
|
||||||
},
|
},
|
||||||
"branch_prefix": {
|
"widget-error": {
|
||||||
"save": "Kaydet"
|
"title": "Bir widget başlatılamadı",
|
||||||
|
"message-unknown": "Bilinmeyen widget aşağıdaki sebeple başlatılamadı\n\n{{message}}"
|
||||||
},
|
},
|
||||||
"delete_notes": {
|
"bundle-error": {
|
||||||
"close": "Kapat"
|
"title": "Özel bir betik yüklenemedi"
|
||||||
},
|
|
||||||
"export": {
|
|
||||||
"close": "Kapat"
|
|
||||||
},
|
|
||||||
"import": {
|
|
||||||
"chooseImportFile": "İçe aktarım dosyası",
|
|
||||||
"importDescription": "Seçilen dosya(lar) alt not olarak içe aktarılacaktır"
|
|
||||||
},
|
|
||||||
"info": {
|
|
||||||
"closeButton": "Kapat"
|
|
||||||
},
|
|
||||||
"protected_session_password": {
|
|
||||||
"close_label": "Kapat"
|
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"add_link": {
|
||||||
|
"add_link": "Bağlantı ekle",
|
||||||
|
"help_on_links": "Bağlantılar konusunda yardım",
|
||||||
|
"note": "Not",
|
||||||
|
"search_note": "isimle not ara",
|
||||||
|
"link_title_mirrors": "bağlantı adı notun şu anki adıyla aynı",
|
||||||
|
"link_title_arbitrary": "bağlantı adı isteğe bağlı olarak değiştirilebilir",
|
||||||
|
"link_title": "Bağlantı adı",
|
||||||
|
"button_add_link": "Bağlantı ekle"
|
||||||
|
},
|
||||||
|
"bulk_actions": {
|
||||||
|
"bulk_actions": "Toplu eylemler",
|
||||||
|
"affected_notes": "Etkilenen notlar",
|
||||||
|
"include_descendants": "Seçili notların alt notlarını da ekle",
|
||||||
|
"available_actions": "Mevcut eylemler",
|
||||||
|
"chosen_actions": "Seçili eylemler",
|
||||||
|
"execute_bulk_actions": "Toplu eylemleri uygula",
|
||||||
|
"bulk_actions_executed": "Toplu eylemler başarıyla uygulandı.",
|
||||||
|
"none_yet": "Henüz yok... yukarıda mevcut eylemler arasından birine tıklayarak eylem ekle.",
|
||||||
|
"labels": "Etiketler",
|
||||||
|
"relations": "İlişkiler",
|
||||||
|
"notes": "Notlar",
|
||||||
|
"other": "Diğer"
|
||||||
|
},
|
||||||
|
"clone_to": {
|
||||||
|
"clone_notes_to": "Notları klonla...",
|
||||||
|
"help_on_links": "Bağlantılar konusunda yardım",
|
||||||
|
"notes_to_clone": "Klonlanacak notlar",
|
||||||
|
"target_parent_note": "Hedef üst not",
|
||||||
|
"search_for_note_by_its_name": "isme göre not ara",
|
||||||
|
"cloned_note_prefix_title": "Klonlanan not, not ağacında belirtilen önek ile gösterilecektir",
|
||||||
|
"prefix_optional": "önek (opsiyonel)",
|
||||||
|
"clone_to_selected_note": "Seçili nota klonla",
|
||||||
|
"no_path_to_clone_to": "Klonlanacak bir yol yok.",
|
||||||
|
"note_cloned": "\"{{clonedTitle}}\" notu \"{{targetTitle}}\"'a klonlandı"
|
||||||
|
},
|
||||||
|
"confirm": {
|
||||||
|
"confirmation": "Onay",
|
||||||
|
"cancel": "İptal",
|
||||||
|
"ok": "OK",
|
||||||
|
"are_you_sure_remove_note": "\"{{title}}\" notunu ilişki haritasından kaldırmak istediğinize emin misiniz?. ",
|
||||||
|
"also_delete_note": "Notu da sil"
|
||||||
|
},
|
||||||
|
"ai_llm": {
|
||||||
|
"n_notes_queued": "{{ count }} not dizinleme için sıraya alındı",
|
||||||
|
"n_notes_queued_plural": "{{ count }} not dizinleme için sıraya alındı",
|
||||||
|
"notes_indexed": "{{ count }} not dizinlendi",
|
||||||
|
"notes_indexed_plural": "{{ count }} not dizinlendi"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -276,7 +276,12 @@
|
|||||||
"preview": "預覽:",
|
"preview": "預覽:",
|
||||||
"preview_not_available": "無法預覽此類型的筆記。",
|
"preview_not_available": "無法預覽此類型的筆記。",
|
||||||
"restore_button": "還原",
|
"restore_button": "還原",
|
||||||
"delete_button": "刪除"
|
"delete_button": "刪除",
|
||||||
|
"diff_on": "顯示差異",
|
||||||
|
"diff_off": "顯示內容",
|
||||||
|
"diff_on_hint": "點擊以顯示筆記原始碼差異",
|
||||||
|
"diff_off_hint": "點擊以顯示筆記內容",
|
||||||
|
"diff_not_available": "差異不可用。"
|
||||||
},
|
},
|
||||||
"sort_child_notes": {
|
"sort_child_notes": {
|
||||||
"sort_children_by": "依…排序子筆記",
|
"sort_children_by": "依…排序子筆記",
|
||||||
@@ -576,7 +581,7 @@
|
|||||||
"sun": "日",
|
"sun": "日",
|
||||||
"cannot_find_day_note": "無法找到日記",
|
"cannot_find_day_note": "無法找到日記",
|
||||||
"january": "一月",
|
"january": "一月",
|
||||||
"febuary": "二月",
|
"february": "二月",
|
||||||
"march": "三月",
|
"march": "三月",
|
||||||
"april": "四月",
|
"april": "四月",
|
||||||
"may": "五月",
|
"may": "五月",
|
||||||
@@ -587,7 +592,18 @@
|
|||||||
"october": "十月",
|
"october": "十月",
|
||||||
"november": "十一月",
|
"november": "十一月",
|
||||||
"december": "十二月",
|
"december": "十二月",
|
||||||
"cannot_find_week_note": "無法找到週記"
|
"cannot_find_week_note": "無法找到週記",
|
||||||
|
"week": "週",
|
||||||
|
"week_previous": "上週",
|
||||||
|
"week_next": "下週",
|
||||||
|
"month": "月",
|
||||||
|
"month_previous": "上個月",
|
||||||
|
"month_next": "下個月",
|
||||||
|
"year": "年",
|
||||||
|
"year_previous": "前一年",
|
||||||
|
"year_next": "後一年",
|
||||||
|
"list": "列表",
|
||||||
|
"today": "今天"
|
||||||
},
|
},
|
||||||
"close_pane_button": {
|
"close_pane_button": {
|
||||||
"close_this_pane": "關閉此面板"
|
"close_this_pane": "關閉此面板"
|
||||||
@@ -745,7 +761,8 @@
|
|||||||
"calendar": "日曆",
|
"calendar": "日曆",
|
||||||
"table": "表格",
|
"table": "表格",
|
||||||
"geo-map": "地理地圖",
|
"geo-map": "地理地圖",
|
||||||
"board": "看板"
|
"board": "看板",
|
||||||
|
"include_archived_notes": "顯示已封存筆記"
|
||||||
},
|
},
|
||||||
"edited_notes": {
|
"edited_notes": {
|
||||||
"no_edited_notes_found": "今天還沒有編輯過的筆記...",
|
"no_edited_notes_found": "今天還沒有編輯過的筆記...",
|
||||||
@@ -946,7 +963,9 @@
|
|||||||
"no_attachments": "此筆記沒有附件。"
|
"no_attachments": "此筆記沒有附件。"
|
||||||
},
|
},
|
||||||
"book": {
|
"book": {
|
||||||
"no_children_help": "此類型為書籍的筆記沒有任何子筆記,因此沒有內容可顯示。請參閱 <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> 以了解詳情。"
|
"no_children_help": "此類型為書籍的筆記沒有任何子筆記,因此沒有內容可顯示。請參閱 <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> 以了解詳情。",
|
||||||
|
"drag_locked_title": "鎖定編輯",
|
||||||
|
"drag_locked_message": "無法拖曳,因為此集合已被鎖定編輯。"
|
||||||
},
|
},
|
||||||
"editable_code": {
|
"editable_code": {
|
||||||
"placeholder": "在這裡輸入您的程式碼筆記內容…"
|
"placeholder": "在這裡輸入您的程式碼筆記內容…"
|
||||||
@@ -1366,7 +1385,7 @@
|
|||||||
"button-tree-map": "樹狀地圖"
|
"button-tree-map": "樹狀地圖"
|
||||||
},
|
},
|
||||||
"tree-context-menu": {
|
"tree-context-menu": {
|
||||||
"open-in-a-new-tab": "在新分頁中打開 <kbd>Ctrl+Click</kbd>",
|
"open-in-a-new-tab": "在新分頁中打開",
|
||||||
"open-in-a-new-split": "在新頁面分割中打開",
|
"open-in-a-new-split": "在新頁面分割中打開",
|
||||||
"insert-note-after": "在後面插入筆記",
|
"insert-note-after": "在後面插入筆記",
|
||||||
"insert-child-note": "插入子筆記",
|
"insert-child-note": "插入子筆記",
|
||||||
@@ -1396,7 +1415,9 @@
|
|||||||
"converted-to-attachments": "{{count}} 個筆記已被轉換為附件。",
|
"converted-to-attachments": "{{count}} 個筆記已被轉換為附件。",
|
||||||
"convert-to-attachment-confirm": "確定要將所選的筆記轉換為其父級筆記的附件嗎?",
|
"convert-to-attachment-confirm": "確定要將所選的筆記轉換為其父級筆記的附件嗎?",
|
||||||
"duplicate": "複製副本",
|
"duplicate": "複製副本",
|
||||||
"open-in-popup": "快速編輯"
|
"open-in-popup": "快速編輯",
|
||||||
|
"archive": "封存",
|
||||||
|
"unarchive": "解除封存"
|
||||||
},
|
},
|
||||||
"shared_info": {
|
"shared_info": {
|
||||||
"help_link": "如需幫助,請訪問 <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki</a>。",
|
"help_link": "如需幫助,請訪問 <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki</a>。",
|
||||||
@@ -1561,7 +1582,9 @@
|
|||||||
"ws": {
|
"ws": {
|
||||||
"sync-check-failed": "同步檢查失敗!",
|
"sync-check-failed": "同步檢查失敗!",
|
||||||
"consistency-checks-failed": "一致性檢查失敗!請查看日誌以了解詳細資訊。",
|
"consistency-checks-failed": "一致性檢查失敗!請查看日誌以了解詳細資訊。",
|
||||||
"encountered-error": "遇到錯誤 \"{{message}}\",請查看控制台。"
|
"encountered-error": "遇到錯誤 \"{{message}}\",請查看控制台。",
|
||||||
|
"lost-websocket-connection-title": "與伺服器的連線中斷",
|
||||||
|
"lost-websocket-connection-message": "檢查您的反向代理(如 nginx 或 Apache)設定以確保 Websocket 連線沒有被阻擋。"
|
||||||
},
|
},
|
||||||
"hoisted_note": {
|
"hoisted_note": {
|
||||||
"confirm_unhoisting": "請求的筆記 '{{requestedNote}}' 位於聚焦的筆記 '{{hoistedNote}}' 的子階層之外,您必須取消聚焦才能訪問該筆記。是否繼續取消聚焦?"
|
"confirm_unhoisting": "請求的筆記 '{{requestedNote}}' 位於聚焦的筆記 '{{hoistedNote}}' 的子階層之外,您必須取消聚焦才能訪問該筆記。是否繼續取消聚焦?"
|
||||||
@@ -1822,7 +1845,7 @@
|
|||||||
"oauth_title": "OAuth / OpenID 驗證",
|
"oauth_title": "OAuth / OpenID 驗證",
|
||||||
"oauth_description": "OpenID 是一種標準化的方式,可讓您使用其他服務(如 Google)的帳號登入網站,以驗證您的身份。預設的提供者是 Google,但您可以將其變更為任何其他 OpenID 提供者。查看<a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">此處</a>以瞭解更多資訊。依照這些 <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">指示</a>以透過 Google 設定 OpenID 服務。",
|
"oauth_description": "OpenID 是一種標準化的方式,可讓您使用其他服務(如 Google)的帳號登入網站,以驗證您的身份。預設的提供者是 Google,但您可以將其變更為任何其他 OpenID 提供者。查看<a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">此處</a>以瞭解更多資訊。依照這些 <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">指示</a>以透過 Google 設定 OpenID 服務。",
|
||||||
"oauth_description_warning": "要啟用 OAuth / OpenID,您需要設定 config.ini 文件中的 OAuth / OpenID 基礎 URL、客戶端 ID 和客戶端金鑰,並重新啟動應用程式。如果要從環境變數設置,請設定 TRILIUM_OAUTH_BASE_URL、TRILIUM_OAUTH_CLIENT_ID 和 TRILIUM_OAUTH_CLIENT_SECRET 環境變數。",
|
"oauth_description_warning": "要啟用 OAuth / OpenID,您需要設定 config.ini 文件中的 OAuth / OpenID 基礎 URL、客戶端 ID 和客戶端金鑰,並重新啟動應用程式。如果要從環境變數設置,請設定 TRILIUM_OAUTH_BASE_URL、TRILIUM_OAUTH_CLIENT_ID 和 TRILIUM_OAUTH_CLIENT_SECRET 環境變數。",
|
||||||
"oauth_missing_vars": "缺少以下設定:{{variables}}",
|
"oauth_missing_vars": "缺少以下設定:{{-variables}}",
|
||||||
"oauth_user_account": "用戶帳號: ",
|
"oauth_user_account": "用戶帳號: ",
|
||||||
"oauth_user_email": "用戶信箱: ",
|
"oauth_user_email": "用戶信箱: ",
|
||||||
"oauth_user_not_logged_in": "尚未登入!"
|
"oauth_user_not_logged_in": "尚未登入!"
|
||||||
@@ -1832,7 +1855,7 @@
|
|||||||
"native-title-bar": "原生標題列",
|
"native-title-bar": "原生標題列",
|
||||||
"native-title-bar-description": "對於 Windows 和 macOS,關閉原生標題列會讓應用程式看起來更緊湊。在 Linux 上,開啟原生標題列可以與系統的其他部分整合得更好。",
|
"native-title-bar-description": "對於 Windows 和 macOS,關閉原生標題列會讓應用程式看起來更緊湊。在 Linux 上,開啟原生標題列可以與系統的其他部分整合得更好。",
|
||||||
"background-effects": "啟用背景效果(僅適用於 Windows 11)",
|
"background-effects": "啟用背景效果(僅適用於 Windows 11)",
|
||||||
"background-effects-description": "Mica 效果為程式視窗新增模糊且時尚的背景,營造出深度感和現代化外觀。",
|
"background-effects-description": "Mica 效果為程式視窗新增模糊且時尚的背景,營造出深度感和現代化外觀。「原生標題列」必須被禁用。",
|
||||||
"restart-app-button": "重新啟動應用程式以查看更改",
|
"restart-app-button": "重新啟動應用程式以查看更改",
|
||||||
"zoom-factor": "縮放係數"
|
"zoom-factor": "縮放係數"
|
||||||
},
|
},
|
||||||
@@ -1931,7 +1954,11 @@
|
|||||||
"editorfeatures": {
|
"editorfeatures": {
|
||||||
"title": "功能",
|
"title": "功能",
|
||||||
"emoji_completion_enabled": "啟用 Emoji 自動完成",
|
"emoji_completion_enabled": "啟用 Emoji 自動完成",
|
||||||
"note_completion_enabled": "啟用筆記自動完成"
|
"note_completion_enabled": "啟用筆記自動完成",
|
||||||
|
"emoji_completion_description": "如果啟用,emoji 可以輕易地經由輸入 `:` 加上 emoji 名稱來插入。",
|
||||||
|
"note_completion_description": "如果啟用,導向筆記的連結可以經由輸入 `@` 加上筆記標題來建立。",
|
||||||
|
"slash_commands_enabled": "啟用斜線命令",
|
||||||
|
"slash_commands_description": "如果啟用,可以經由輸入 `/` 來觸發命令,如插入換行符或標題。"
|
||||||
},
|
},
|
||||||
"table_view": {
|
"table_view": {
|
||||||
"new-row": "新增列",
|
"new-row": "新增列",
|
||||||
@@ -1967,14 +1994,21 @@
|
|||||||
"delete_row": "刪除列"
|
"delete_row": "刪除列"
|
||||||
},
|
},
|
||||||
"board_view": {
|
"board_view": {
|
||||||
"delete-note": "刪除筆記",
|
"delete-note": "刪除筆記…",
|
||||||
"move-to": "移動至",
|
"move-to": "移動至",
|
||||||
"insert-above": "在上方插入",
|
"insert-above": "在上方插入",
|
||||||
"insert-below": "在下方插入",
|
"insert-below": "在下方插入",
|
||||||
"delete-column": "刪除行",
|
"delete-column": "刪除行",
|
||||||
"delete-column-confirmation": "您確定要刪除此行嗎?此行中所有筆記對應的屬性也將被移除。",
|
"delete-column-confirmation": "您確定要刪除此行嗎?此行中所有筆記對應的屬性也將被移除。",
|
||||||
"new-item": "新增項目",
|
"new-item": "新增項目",
|
||||||
"add-column": "新增行"
|
"add-column": "新增行",
|
||||||
|
"remove-from-board": "從看板上移除",
|
||||||
|
"archive-note": "封存筆記",
|
||||||
|
"unarchive-note": "解除封存筆記",
|
||||||
|
"new-item-placeholder": "輸入筆記標題…",
|
||||||
|
"add-column-placeholder": "輸入行名…",
|
||||||
|
"edit-note-title": "點擊以編輯筆記標題",
|
||||||
|
"edit-column-title": "點擊以編輯行標題"
|
||||||
},
|
},
|
||||||
"command_palette": {
|
"command_palette": {
|
||||||
"tree-action-name": "樹:{{name}}",
|
"tree-action-name": "樹:{{name}}",
|
||||||
@@ -2021,6 +2055,15 @@
|
|||||||
"title": "效能",
|
"title": "效能",
|
||||||
"enable-motion": "啟用轉場與動畫",
|
"enable-motion": "啟用轉場與動畫",
|
||||||
"enable-shadows": "啟用陰影",
|
"enable-shadows": "啟用陰影",
|
||||||
"enable-backdrop-effects": "啟用選單、彈出視窗和面板的背景特效"
|
"enable-backdrop-effects": "啟用選單、彈出視窗和面板的背景特效",
|
||||||
|
"enable-smooth-scroll": "啟用平滑滾動",
|
||||||
|
"app-restart-required": "(需要重啟程式以套用更改)"
|
||||||
|
},
|
||||||
|
"pagination": {
|
||||||
|
"page_title": "第 {{startIndex}} - {{endIndex}} 頁",
|
||||||
|
"total_notes": "{{count}} 筆記"
|
||||||
|
},
|
||||||
|
"collections": {
|
||||||
|
"rendering_error": "發現錯誤,無法顯示內容。"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -326,7 +326,12 @@
|
|||||||
"mime": "МІМЕ: ",
|
"mime": "МІМЕ: ",
|
||||||
"file_size": "Розмір файлу:",
|
"file_size": "Розмір файлу:",
|
||||||
"preview": "Попередній перегляд:",
|
"preview": "Попередній перегляд:",
|
||||||
"preview_not_available": "Попередній перегляд недоступний для цього типу нотатки."
|
"preview_not_available": "Попередній перегляд недоступний для цього типу нотатки.",
|
||||||
|
"diff_on": "Показати різницю",
|
||||||
|
"diff_off": "Показати вміст",
|
||||||
|
"diff_on_hint": "Натисніть, щоб показати різницю в джерелі нотатки",
|
||||||
|
"diff_off_hint": "Натисніть, щоб показати вміст нотатки",
|
||||||
|
"diff_not_available": "Різниця недоступна."
|
||||||
},
|
},
|
||||||
"include_note": {
|
"include_note": {
|
||||||
"dialog_title": "Включити нотатку",
|
"dialog_title": "Включити нотатку",
|
||||||
@@ -555,7 +560,7 @@
|
|||||||
"oauth_title": "OAuth/OpenID",
|
"oauth_title": "OAuth/OpenID",
|
||||||
"oauth_description": "OpenID – це стандартизований спосіб входу на веб-сайти за допомогою облікового запису з іншого сервісу, такого як Google, для підтвердження вашої особи. Емітентом за замовчуванням є Google, але ви можете змінити його на будь-якого іншого постачальника OpenID. Перегляньте <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">тут</a> для отримання додаткової інформації. Дотримуйтесь цих <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">інструкцій</a>, щоб налаштувати сервіс OpenID через Google.",
|
"oauth_description": "OpenID – це стандартизований спосіб входу на веб-сайти за допомогою облікового запису з іншого сервісу, такого як Google, для підтвердження вашої особи. Емітентом за замовчуванням є Google, але ви можете змінити його на будь-якого іншого постачальника OpenID. Перегляньте <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">тут</a> для отримання додаткової інформації. Дотримуйтесь цих <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">інструкцій</a>, щоб налаштувати сервіс OpenID через Google.",
|
||||||
"oauth_description_warning": "Щоб увімкнути OAuth/OpenID, потрібно встановити базову URL-адресу OAuth/OpenID, ідентифікатор клієнта та секрет клієнта у файлі config.ini та перезапустити програму. Якщо ви хочете встановити зі змінних середовища, встановіть TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID та TRILIUM_OAUTH_CLIENT_SECRET.",
|
"oauth_description_warning": "Щоб увімкнути OAuth/OpenID, потрібно встановити базову URL-адресу OAuth/OpenID, ідентифікатор клієнта та секрет клієнта у файлі config.ini та перезапустити програму. Якщо ви хочете встановити зі змінних середовища, встановіть TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID та TRILIUM_OAUTH_CLIENT_SECRET.",
|
||||||
"oauth_missing_vars": "Відсутні налаштування: {{variables}}",
|
"oauth_missing_vars": "Відсутні налаштування: {{-variables}}",
|
||||||
"oauth_user_account": "Обліковий запис користувача: ",
|
"oauth_user_account": "Обліковий запис користувача: ",
|
||||||
"oauth_user_email": "Електронна пошта користувача: ",
|
"oauth_user_email": "Електронна пошта користувача: ",
|
||||||
"oauth_user_not_logged_in": "Ви не ввійшли в систему!"
|
"oauth_user_not_logged_in": "Ви не ввійшли в систему!"
|
||||||
@@ -717,7 +722,7 @@
|
|||||||
"cannot_find_day_note": "Не вдається знайти денну нотатку",
|
"cannot_find_day_note": "Не вдається знайти денну нотатку",
|
||||||
"cannot_find_week_note": "Не вдається знайти тижневу нотатку",
|
"cannot_find_week_note": "Не вдається знайти тижневу нотатку",
|
||||||
"january": "Січень",
|
"january": "Січень",
|
||||||
"febuary": "Лютий",
|
"february": "Лютий",
|
||||||
"march": "Березень",
|
"march": "Березень",
|
||||||
"april": "Квітень",
|
"april": "Квітень",
|
||||||
"may": "Травень",
|
"may": "Травень",
|
||||||
@@ -727,7 +732,18 @@
|
|||||||
"september": "Вересень",
|
"september": "Вересень",
|
||||||
"october": "Жовтень",
|
"october": "Жовтень",
|
||||||
"november": "Листопад",
|
"november": "Листопад",
|
||||||
"december": "Грудень"
|
"december": "Грудень",
|
||||||
|
"week": "Тиждень",
|
||||||
|
"week_previous": "Попередній тиждень",
|
||||||
|
"week_next": "Наступний тиждень",
|
||||||
|
"month": "Місяць",
|
||||||
|
"month_previous": "Попередній місяць",
|
||||||
|
"month_next": "Наступний місяць",
|
||||||
|
"year": "Рік",
|
||||||
|
"year_previous": "Попередній рік",
|
||||||
|
"year_next": "Наступний рік",
|
||||||
|
"list": "Список",
|
||||||
|
"today": "Сьогодні"
|
||||||
},
|
},
|
||||||
"close_pane_button": {
|
"close_pane_button": {
|
||||||
"close_this_pane": "Закрити цю панель"
|
"close_this_pane": "Закрити цю панель"
|
||||||
@@ -860,7 +876,8 @@
|
|||||||
"calendar": "Календар",
|
"calendar": "Календар",
|
||||||
"table": "Таблиця",
|
"table": "Таблиця",
|
||||||
"geo-map": "Географічна карта",
|
"geo-map": "Географічна карта",
|
||||||
"board": "Дошка"
|
"board": "Дошка",
|
||||||
|
"include_archived_notes": "Показати архівовані нотатки"
|
||||||
},
|
},
|
||||||
"edited_notes": {
|
"edited_notes": {
|
||||||
"no_edited_notes_found": "Цього дня ще немає редагованих нотаток...",
|
"no_edited_notes_found": "Цього дня ще немає редагованих нотаток...",
|
||||||
@@ -1052,7 +1069,9 @@
|
|||||||
"no_attachments": "Ця нотатка не має вкладень."
|
"no_attachments": "Ця нотатка не має вкладень."
|
||||||
},
|
},
|
||||||
"book": {
|
"book": {
|
||||||
"no_children_help": "Ця колекція не має дочірніх нотаток, тому нічого відображати. Див. <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">вікі</a> для отримання детальної інформації."
|
"no_children_help": "Ця колекція не має дочірніх нотаток, тому нічого відображати. Див. <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">вікі</a> для отримання детальної інформації.",
|
||||||
|
"drag_locked_title": "Заблоковано для редагування",
|
||||||
|
"drag_locked_message": "Перетягування заборонено, оскільки колекцію заблоковано для редагування."
|
||||||
},
|
},
|
||||||
"editable_code": {
|
"editable_code": {
|
||||||
"placeholder": "Введіть тут вміст вашої нотатки з кодом..."
|
"placeholder": "Введіть тут вміст вашої нотатки з кодом..."
|
||||||
@@ -1650,7 +1669,9 @@
|
|||||||
"ws": {
|
"ws": {
|
||||||
"sync-check-failed": "Перевірка синхронізації не вдалася!",
|
"sync-check-failed": "Перевірка синхронізації не вдалася!",
|
||||||
"consistency-checks-failed": "Перевірка узгодженості не вдалася! Див. logs для отримання інформації.",
|
"consistency-checks-failed": "Перевірка узгодженості не вдалася! Див. logs для отримання інформації.",
|
||||||
"encountered-error": "Виникла помилка \"{{message}}\", перевірте консоль."
|
"encountered-error": "Виникла помилка \"{{message}}\", перевірте консоль.",
|
||||||
|
"lost-websocket-connection-title": "Втрачено з'єднання із сервером",
|
||||||
|
"lost-websocket-connection-message": "Перевірте конфігурацію вашого зворотного проксі-сервера (наприклад, nginx або Apache), щоб переконатися, що з’єднання WebSocket належним чином дозволені та не блокуються."
|
||||||
},
|
},
|
||||||
"hoisted_note": {
|
"hoisted_note": {
|
||||||
"confirm_unhoisting": "Запитана нотатка '{{requestedNote}}' знаходиться поза піддеревом закріплених нотаток '{{hoistedNote}}', і вам потрібно відкріпити нотатку, щоб отримати до неї доступ. Ви хочете продовжити відкріплення?"
|
"confirm_unhoisting": "Запитана нотатка '{{requestedNote}}' знаходиться поза піддеревом закріплених нотаток '{{hoistedNote}}', і вам потрібно відкріпити нотатку, щоб отримати до неї доступ. Ви хочете продовжити відкріплення?"
|
||||||
@@ -1679,7 +1700,7 @@
|
|||||||
"native-title-bar": "Нативний рядок заголовка",
|
"native-title-bar": "Нативний рядок заголовка",
|
||||||
"native-title-bar-description": "У Windows та macOS вимкнення рядка заголовка робить програму компактнішою. У Linux увімкнення рядка заголовка краще інтегрується з рештою системи.",
|
"native-title-bar-description": "У Windows та macOS вимкнення рядка заголовка робить програму компактнішою. У Linux увімкнення рядка заголовка краще інтегрується з рештою системи.",
|
||||||
"background-effects": "Увімкнення фонових ефектів (лише для Windows 11)",
|
"background-effects": "Увімкнення фонових ефектів (лише для Windows 11)",
|
||||||
"background-effects-description": "Ефект слюди додає розмитий, стильний фон вікнам програм, створюючи глибину та сучасний вигляд.",
|
"background-effects-description": "Ефект слюди додає розмитий, стильний фон вікнам програм, створюючи глибину та сучасний вигляд. \"Нативний рядок заголовка\" має бути вимкнено.",
|
||||||
"restart-app-button": "Перезапустіть програму, щоб переглянути зміни",
|
"restart-app-button": "Перезапустіть програму, щоб переглянути зміни",
|
||||||
"zoom-factor": "Коефіцієнт масштабування"
|
"zoom-factor": "Коефіцієнт масштабування"
|
||||||
},
|
},
|
||||||
@@ -1778,7 +1799,11 @@
|
|||||||
"editorfeatures": {
|
"editorfeatures": {
|
||||||
"title": "Особливості",
|
"title": "Особливості",
|
||||||
"emoji_completion_enabled": "Увімкнути автозаповнення емодзі",
|
"emoji_completion_enabled": "Увімкнути автозаповнення емодзі",
|
||||||
"note_completion_enabled": "Увімкнути автозаповнення нотаток"
|
"note_completion_enabled": "Увімкнути автозаповнення нотаток",
|
||||||
|
"emoji_completion_description": "Якщо цю функцію ввімкнено, емодзі можна легко вставляти в текст, ввівши `:`, а потім назву емодзі.",
|
||||||
|
"note_completion_description": "Якщо ввімкнено, посилання на нотатки можна створювати, вводячи `@`, а потім назву нотатки.",
|
||||||
|
"slash_commands_enabled": "Увімкнути команди зі слеш",
|
||||||
|
"slash_commands_description": "Якщо ввімкнено, команди редагування, такі як вставка розривів рядків або заголовків, можна перемикати, натискаючи `/`."
|
||||||
},
|
},
|
||||||
"table_view": {
|
"table_view": {
|
||||||
"new-row": "Новий рядок",
|
"new-row": "Новий рядок",
|
||||||
@@ -1878,7 +1903,7 @@
|
|||||||
"button-tree-map": "Карта дерева"
|
"button-tree-map": "Карта дерева"
|
||||||
},
|
},
|
||||||
"tree-context-menu": {
|
"tree-context-menu": {
|
||||||
"open-in-a-new-tab": "Відкрити в новій вкладці <kbd>Ctrl+Клік</kbd>",
|
"open-in-a-new-tab": "Відкрити в новій вкладці",
|
||||||
"open-in-a-new-split": "Відкрити в новому розділі",
|
"open-in-a-new-split": "Відкрити в новому розділі",
|
||||||
"insert-note-after": "Вставити нотатку після",
|
"insert-note-after": "Вставити нотатку після",
|
||||||
"insert-child-note": "Вставити дочірню нотатку",
|
"insert-child-note": "Вставити дочірню нотатку",
|
||||||
@@ -1908,7 +1933,9 @@
|
|||||||
"apply-bulk-actions": "Застосувати масові дії",
|
"apply-bulk-actions": "Застосувати масові дії",
|
||||||
"converted-to-attachments": "({{count}}) нотаток перетворено на вкладення.",
|
"converted-to-attachments": "({{count}}) нотаток перетворено на вкладення.",
|
||||||
"convert-to-attachment-confirm": "Ви впевнені, що хочете конвертувати вибрані нотатки у вкладення до їхніх батьківських нотаток?",
|
"convert-to-attachment-confirm": "Ви впевнені, що хочете конвертувати вибрані нотатки у вкладення до їхніх батьківських нотаток?",
|
||||||
"open-in-popup": "Швидке редагування"
|
"open-in-popup": "Швидке редагування",
|
||||||
|
"archive": "Архівувати",
|
||||||
|
"unarchive": "Розархівувати"
|
||||||
},
|
},
|
||||||
"shared_info": {
|
"shared_info": {
|
||||||
"shared_publicly": "Ця нотатка опублікована на {{- link}}.",
|
"shared_publicly": "Ця нотатка опублікована на {{- link}}.",
|
||||||
@@ -1975,14 +2002,21 @@
|
|||||||
"delete_row": "Видалити рядок"
|
"delete_row": "Видалити рядок"
|
||||||
},
|
},
|
||||||
"board_view": {
|
"board_view": {
|
||||||
"delete-note": "Видалити нотатку",
|
"delete-note": "Видалити нотатку...",
|
||||||
"move-to": "Перемістити до",
|
"move-to": "Перемістити до",
|
||||||
"insert-above": "Вставити вище",
|
"insert-above": "Вставити вище",
|
||||||
"insert-below": "Вставити нижче",
|
"insert-below": "Вставити нижче",
|
||||||
"delete-column": "Видалити стовпець",
|
"delete-column": "Видалити стовпець",
|
||||||
"delete-column-confirmation": "Ви впевнені, що хочете видалити цей стовпець? Відповідний атрибут також буде видалено в нотатках під цим стовпцем.",
|
"delete-column-confirmation": "Ви впевнені, що хочете видалити цей стовпець? Відповідний атрибут також буде видалено в нотатках під цим стовпцем.",
|
||||||
"new-item": "Новий елемент",
|
"new-item": "Новий елемент",
|
||||||
"add-column": "Додати стовпець"
|
"add-column": "Додати стовпець",
|
||||||
|
"remove-from-board": "Видалити з дошки",
|
||||||
|
"archive-note": "Архівувати нотатка",
|
||||||
|
"unarchive-note": "Розархівувати нотатку",
|
||||||
|
"new-item-placeholder": "Введіть заголовок нотатки...",
|
||||||
|
"add-column-placeholder": "Введіть назву стовпця...",
|
||||||
|
"edit-note-title": "Натисніть, щоб редагувати заголовок нотатки",
|
||||||
|
"edit-column-title": "Натисніть, щоб редагувати заголовок стовпця"
|
||||||
},
|
},
|
||||||
"command_palette": {
|
"command_palette": {
|
||||||
"tree-action-name": "Дерево: {{name}}",
|
"tree-action-name": "Дерево: {{name}}",
|
||||||
@@ -2025,6 +2059,15 @@
|
|||||||
"title": "Продуктивність",
|
"title": "Продуктивність",
|
||||||
"enable-motion": "Увімкнути переходи та анімацію",
|
"enable-motion": "Увімкнути переходи та анімацію",
|
||||||
"enable-shadows": "Увімкнути тіні",
|
"enable-shadows": "Увімкнути тіні",
|
||||||
"enable-backdrop-effects": "Увімкнути фонові ефекти для меню, спливаючих вікон та панелей"
|
"enable-backdrop-effects": "Увімкнути фонові ефекти для меню, спливаючих вікон та панелей",
|
||||||
|
"enable-smooth-scroll": "Увімкнути плавне прокручування",
|
||||||
|
"app-restart-required": "(щоб зміни набули чинності, потрібен перезапуск програми)"
|
||||||
|
},
|
||||||
|
"pagination": {
|
||||||
|
"page_title": "Сторінка {{startIndex}} - {{endIndex}}",
|
||||||
|
"total_notes": "{{count}} нотаток"
|
||||||
|
},
|
||||||
|
"collections": {
|
||||||
|
"rendering_error": "Не вдалося показати вміст через помилку."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
9
apps/client/src/types-lib.d.ts
vendored
9
apps/client/src/types-lib.d.ts
vendored
@@ -51,3 +51,12 @@ declare module "leaflet" {
|
|||||||
markers?: GPXMarker | undefined;
|
markers?: GPXMarker | undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare global {
|
||||||
|
interface Navigator {
|
||||||
|
/** Returns a boolean indicating whether the browser is running in standalone mode. Available on Apple's iOS Safari only. */
|
||||||
|
standalone?: boolean;
|
||||||
|
/** Returns the WindowControlsOverlay interface which exposes information about the geometry of the title bar in desktop Progressive Web Apps, and an event to know whenever it changes. */
|
||||||
|
windowControlsOverlay?: unknown;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
.floating-buttons-children,
|
.floating-buttons-children,
|
||||||
.show-floating-buttons {
|
.show-floating-buttons {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 10px;
|
top: var(--floating-buttons-vert-offset, 10px);
|
||||||
right: 10px;
|
right: var(--floating-buttons-horiz-offset, 10px);
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
z-index: 100;
|
z-index: 100;
|
||||||
@@ -28,8 +28,8 @@
|
|||||||
transform: rotate(180deg);
|
transform: rotate(180deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.type-canvas .floating-buttons-children {
|
.type-canvas {
|
||||||
top: 70px;
|
--floating-buttons-vert-offset: 70px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.type-canvas .floating-buttons-children > * {
|
.type-canvas .floating-buttons-children > * {
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user