Compare commits
658 Commits
v0.92.4
...
v0.92.5-be
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
78c8b17e33 | ||
|
|
60becbc38c | ||
|
|
d69ff1e3cf | ||
|
|
2d3a1e9023 | ||
|
|
7b2bbdd52a | ||
|
|
93dc16de45 | ||
|
|
85000a2b7f | ||
|
|
a9c3c98fa5 | ||
|
|
fb800eb96b | ||
|
|
095fbb7015 | ||
|
|
11dc52f0ce | ||
|
|
e01dc5751a | ||
|
|
283229d597 | ||
|
|
30c14297d0 | ||
|
|
a0d562e01b | ||
|
|
10bc7a8bd6 | ||
|
|
4c063251e0 | ||
|
|
9c291e3d41 | ||
|
|
bc4918ed5b | ||
|
|
fcd7df52ee | ||
|
|
fbb010edf4 | ||
|
|
66f7ba0065 | ||
|
|
b9ae39a3d1 | ||
|
|
fd53e35f6f | ||
|
|
766b0723f7 | ||
|
|
a9193fdcd4 | ||
|
|
eb097ec1ea | ||
|
|
a44bf7fb49 | ||
|
|
04a7ad8d4e | ||
|
|
9a3f765d42 | ||
|
|
fd76f8dac9 | ||
|
|
0982a0e503 | ||
|
|
5ae6b18762 | ||
|
|
49c41850ad | ||
|
|
644d79b1ce | ||
|
|
80cfd73cae | ||
|
|
fbfeb7d2bf | ||
|
|
7be71fc6fa | ||
|
|
ed58be1578 | ||
|
|
17b4bfca39 | ||
|
|
96d3d661c2 | ||
|
|
e62137f245 | ||
|
|
4dd300b702 | ||
|
|
ce9a2a258e | ||
|
|
a8e37b5b92 | ||
|
|
02c4a269be | ||
|
|
77f62b94cc | ||
|
|
c18e56d12f | ||
|
|
d84e8c347a | ||
|
|
c7c8af28f7 | ||
|
|
2eeb376d24 | ||
|
|
d8b9448b91 | ||
|
|
ce66397257 | ||
|
|
608378193f | ||
|
|
bd092e0119 | ||
|
|
f743cfc35c | ||
|
|
4cde9253ed | ||
|
|
9c835d0f7f | ||
|
|
68e1e68cfe | ||
|
|
534c146542 | ||
|
|
47a363be0f | ||
|
|
25aa08bb4c | ||
|
|
797ed2a494 | ||
|
|
df6c6647c7 | ||
|
|
83890ba130 | ||
|
|
041c801065 | ||
|
|
9585c6a55f | ||
|
|
4ac52e17da | ||
|
|
bf1896f4fa | ||
|
|
597874250a | ||
|
|
4a2c075935 | ||
|
|
accf245179 | ||
|
|
b30035834a | ||
|
|
3dc7636910 | ||
|
|
2476e0b504 | ||
|
|
94bc550c67 | ||
|
|
121f297fcb | ||
|
|
b51814abeb | ||
|
|
cb3627ed50 | ||
|
|
f19ec9b3c4 | ||
|
|
aaecb43f8a | ||
|
|
bde58e5836 | ||
|
|
5987dedff8 | ||
|
|
2bd408cf8a | ||
|
|
44c8b7d9ea | ||
|
|
7929aaf91a | ||
|
|
def9bbeac7 | ||
|
|
9fe40e2ce6 | ||
|
|
bc76ba4149 | ||
|
|
332de4e67f | ||
|
|
c217ccd347 | ||
|
|
243d7d0ee9 | ||
|
|
c921982ae7 | ||
|
|
ea7fbb154f | ||
|
|
5742d3068e | ||
|
|
687d506ca5 | ||
|
|
18a417addd | ||
|
|
04cbe9d3d1 | ||
|
|
d4cd0e8eff | ||
|
|
d92fa82ad0 | ||
|
|
d42b839c32 | ||
|
|
73fa06a06a | ||
|
|
c81fb5dd14 | ||
|
|
98df7bcd83 | ||
|
|
db959aa997 | ||
|
|
1c49cb0569 | ||
|
|
ee2ee2c291 | ||
|
|
7b6f04e30d | ||
|
|
1a312bf01c | ||
|
|
e95172e2db | ||
|
|
cdc6ce2118 | ||
|
|
f965be9f8f | ||
|
|
1c04aa9963 | ||
|
|
6336699618 | ||
|
|
91242b6cab | ||
|
|
1b6ab7e7f2 | ||
|
|
10f044aced | ||
|
|
cbf3ee9f6e | ||
|
|
04a41ca5f4 | ||
|
|
63efa8ffe4 | ||
|
|
b6565c3b13 | ||
|
|
b9c4d83223 | ||
|
|
66cebf4ebf | ||
|
|
25d83752e5 | ||
|
|
10ea58a368 | ||
|
|
4ab70fcb8a | ||
|
|
01004ac425 | ||
|
|
99bdf33236 | ||
|
|
2ce1858d40 | ||
|
|
8c4e504cd4 | ||
|
|
a7d6f1e4d1 | ||
|
|
5a2c5d8047 | ||
|
|
9fe37465c7 | ||
|
|
6218ae6cd7 | ||
|
|
fa0358662a | ||
|
|
d5bc9841e3 | ||
|
|
e9fa37c4ee | ||
|
|
75431ca634 | ||
|
|
cd5bfcf136 | ||
|
|
683bf64100 | ||
|
|
cdcfab1011 | ||
|
|
b95dca71db | ||
|
|
733293c09a | ||
|
|
dcd64554eb | ||
|
|
84d75c3ee8 | ||
|
|
51913ecccf | ||
|
|
40e990d39a | ||
|
|
be9b19d81c | ||
|
|
4b1551f5ec | ||
|
|
fd0018677c | ||
|
|
4b9ea651a1 | ||
|
|
e85b7f5e79 | ||
|
|
c2d917b926 | ||
|
|
0cedd697cc | ||
|
|
647226858d | ||
|
|
0741c8546f | ||
|
|
347c644f23 | ||
|
|
0b428035ae | ||
|
|
51f2e23c2f | ||
|
|
1528703ed9 | ||
|
|
1150f78b15 | ||
|
|
6fe23f9a13 | ||
|
|
b457fa2e87 | ||
|
|
83da24b38d | ||
|
|
57ee61938d | ||
|
|
f79b925e49 | ||
|
|
3e3344b329 | ||
|
|
1ceaafa1e8 | ||
|
|
cd8401089d | ||
|
|
6749d8084b | ||
|
|
8275f3c867 | ||
|
|
a9643174cc | ||
|
|
6260ea1532 | ||
|
|
bee7793d32 | ||
|
|
8feb201d3d | ||
|
|
6fb270e4f8 | ||
|
|
8977492981 | ||
|
|
1640000291 | ||
|
|
17d5fdb4b0 | ||
|
|
1e713469e7 | ||
|
|
b97c28bc13 | ||
|
|
5ec3d58f6f | ||
|
|
d010e6cc73 | ||
|
|
7024166fc0 | ||
|
|
ce053323a9 | ||
|
|
e2ea6f96ce | ||
|
|
4959dbf126 | ||
|
|
e0522fcd48 | ||
|
|
979000c5c8 | ||
|
|
f2a29653b2 | ||
|
|
d4b657e4d8 | ||
|
|
4762287d61 | ||
|
|
886e63f128 | ||
|
|
a30695b9fb | ||
|
|
e957a17f1c | ||
|
|
083ee5d23b | ||
|
|
8f157e04d4 | ||
|
|
c1ed471403 | ||
|
|
c2a6d517f0 | ||
|
|
1afccb4129 | ||
|
|
ae794a562f | ||
|
|
3fa89b2eba | ||
|
|
924044ae52 | ||
|
|
94cd54f17e | ||
|
|
8d7339b50a | ||
|
|
5148ce64ae | ||
|
|
03fd34eeb0 | ||
|
|
e408cc5b10 | ||
|
|
f0b4acd15a | ||
|
|
90794fed88 | ||
|
|
ab58671625 | ||
|
|
a5a7a30cd5 | ||
|
|
45208c8039 | ||
|
|
b923a23d95 | ||
|
|
c4559749f1 | ||
|
|
73fc7304c7 | ||
|
|
90ab31329e | ||
|
|
ec7b645d36 | ||
|
|
3dbce19301 | ||
|
|
4aa834b23a | ||
|
|
efb0bf9e21 | ||
|
|
19287f6474 | ||
|
|
9506d0774e | ||
|
|
269cfc4689 | ||
|
|
d0549ebdf9 | ||
|
|
9b96cb61cc | ||
|
|
220bcbd12c | ||
|
|
042172cd53 | ||
|
|
19389e4ea0 | ||
|
|
bb1143e582 | ||
|
|
4ac57c6b46 | ||
|
|
06e1b0f720 | ||
|
|
0686c81a81 | ||
|
|
76550b761e | ||
|
|
9108ea9b8a | ||
|
|
b0e584924b | ||
|
|
2c694fe5d7 | ||
|
|
a7d6bf1bd8 | ||
|
|
4108f7f353 | ||
|
|
2e15c926c5 | ||
|
|
7a2eb81a81 | ||
|
|
6f26f4d798 | ||
|
|
9aef24eecc | ||
|
|
3e14ffe1e7 | ||
|
|
e0007f7578 | ||
|
|
04a8bb94b6 | ||
|
|
c25d42cf5d | ||
|
|
3159b19c46 | ||
|
|
9f3fee2d06 | ||
|
|
2045865df2 | ||
|
|
3acb5dad30 | ||
|
|
6a2818cea6 | ||
|
|
d942daea94 | ||
|
|
283b8e9bc8 | ||
|
|
9aaada3f6e | ||
|
|
8cc7d02f36 | ||
|
|
34043a8a70 | ||
|
|
3413c5e401 | ||
|
|
d4e8d9e942 | ||
|
|
308632ea51 | ||
|
|
18a5a55384 | ||
|
|
d5a8387c06 | ||
|
|
53860c4885 | ||
|
|
6f54ac7446 | ||
|
|
10d8cd95a6 | ||
|
|
58e9c7e389 | ||
|
|
bfdb3e2add | ||
|
|
ad8b5c7c9d | ||
|
|
728d2ccfaf | ||
|
|
cb7de2430d | ||
|
|
40f4fdab47 | ||
|
|
ad0f844681 | ||
|
|
dd26762b1f | ||
|
|
5d2ea4337c | ||
|
|
fae9a1f796 | ||
|
|
a709f68af9 | ||
|
|
8e2a95b5c4 | ||
|
|
b4dc493a5f | ||
|
|
ab927ad885 | ||
|
|
d128e9df25 | ||
|
|
9358f90b48 | ||
|
|
a13c9790bd | ||
|
|
c477e728ea | ||
|
|
98013bc725 | ||
|
|
c50a67f36b | ||
|
|
d77b3a07e2 | ||
|
|
89efc55d52 | ||
|
|
6aee38337e | ||
|
|
6312bd8817 | ||
|
|
8f25d4c810 | ||
|
|
3173062f48 | ||
|
|
f341bb3547 | ||
|
|
d52ca626e9 | ||
|
|
27875c4622 | ||
|
|
613a7d72ad | ||
|
|
f815420d1f | ||
|
|
0994e33933 | ||
|
|
be2b8d2080 | ||
|
|
87c70cb46e | ||
|
|
4af586e237 | ||
|
|
d2406a7574 | ||
|
|
25c66e7c57 | ||
|
|
0313b4b9c9 | ||
|
|
f5a4acc097 | ||
|
|
bc41deea14 | ||
|
|
c97f6da615 | ||
|
|
81e250f5c5 | ||
|
|
f42ecb2e83 | ||
|
|
e3fb871e4f | ||
|
|
ccb98d69fa | ||
|
|
ab4e9db864 | ||
|
|
67bfeda3d9 | ||
|
|
7cc8dd082d | ||
|
|
717ad3b97d | ||
|
|
047c4dc4ca | ||
|
|
9e75c32ded | ||
|
|
5282f9f0bf | ||
|
|
858ad91708 | ||
|
|
54a5f8164a | ||
|
|
3dae771e90 | ||
|
|
c3d3ab4330 | ||
|
|
9d49546bc9 | ||
|
|
16cbd2f793 | ||
|
|
6ab820f172 | ||
|
|
60d3bafc8e | ||
|
|
7c9a7c9ff6 | ||
|
|
1463411ad1 | ||
|
|
26fa1ec420 | ||
|
|
985b1b7fce | ||
|
|
87209285df | ||
|
|
5bea0680fb | ||
|
|
5a72d66321 | ||
|
|
82cb31da53 | ||
|
|
72c024fc26 | ||
|
|
b777e916c4 | ||
|
|
3bbb2c3e80 | ||
|
|
c8164c81be | ||
|
|
b320553d18 | ||
|
|
0871d16fbc | ||
|
|
fd46cd7529 | ||
|
|
fdc10d0120 | ||
|
|
8df1e3263b | ||
|
|
77fbeb4351 | ||
|
|
68b3c06c95 | ||
|
|
2bbd9a4362 | ||
|
|
831cd19d0b | ||
|
|
cd6ef4d3ab | ||
|
|
8996a56680 | ||
|
|
ef9bec9dd4 | ||
|
|
b54603b7d7 | ||
|
|
afa865765b | ||
|
|
4860594758 | ||
|
|
cf874b5ee8 | ||
|
|
007817bbdb | ||
|
|
88e0aec3d6 | ||
|
|
cc9b0987b2 | ||
|
|
e8242e87fb | ||
|
|
91dca2df35 | ||
|
|
acf6d9dc4f | ||
|
|
98e4d563ad | ||
|
|
373c0799fe | ||
|
|
9985e9b623 | ||
|
|
f42a89a548 | ||
|
|
d4cd550b7a | ||
|
|
8b08e67fdc | ||
|
|
5d8ac3b9f7 | ||
|
|
44db1545a1 | ||
|
|
c416fca88a | ||
|
|
1fb2b5341d | ||
|
|
b8a560354f | ||
|
|
28c51cb38a | ||
|
|
f4d5b9fc29 | ||
|
|
8cab2aec0f | ||
|
|
2b19675d1a | ||
|
|
ae18b4b634 | ||
|
|
cbc6efdad2 | ||
|
|
e0a8b64b4d | ||
|
|
67ab91267d | ||
|
|
8952ff512f | ||
|
|
395d76a156 | ||
|
|
56da5f7761 | ||
|
|
7a16774cdc | ||
|
|
592a7fe771 | ||
|
|
4292d67b95 | ||
|
|
44419b7cb5 | ||
|
|
eab644248b | ||
|
|
1299e0c855 | ||
|
|
058983e98d | ||
|
|
772d07a60f | ||
|
|
eab10acc98 | ||
|
|
7008acf511 | ||
|
|
c2a7b92660 | ||
|
|
8e3a75ad57 | ||
|
|
b876f98d69 | ||
|
|
1ab87be0e6 | ||
|
|
ebbf29b1a5 | ||
|
|
08df7e6484 | ||
|
|
7277c10f38 | ||
|
|
6569a72bc4 | ||
|
|
cb630337ca | ||
|
|
60d5497a6c | ||
|
|
98d3b54c5e | ||
|
|
da59dd2ece | ||
|
|
21b17889ac | ||
|
|
be2064fbf0 | ||
|
|
90cdb5d641 | ||
|
|
0e8cd3b4ba | ||
|
|
1b5d665fbc | ||
|
|
8755c84dea | ||
|
|
f9878962b8 | ||
|
|
cf70dd0b4f | ||
|
|
6d82905ad4 | ||
|
|
99bd803d81 | ||
|
|
6b71efbfd3 | ||
|
|
c1e8542f74 | ||
|
|
5f26a503af | ||
|
|
5b82b750dc | ||
|
|
1f69259a93 | ||
|
|
7202afab8e | ||
|
|
b44bb4053c | ||
|
|
3047957239 | ||
|
|
4cb866c0e6 | ||
|
|
480292dc01 | ||
|
|
b705e24a97 | ||
|
|
e682f01c47 | ||
|
|
c27d5afdf2 | ||
|
|
bd06d1d7b2 | ||
|
|
861f1efa5b | ||
|
|
a2b6bb7ecf | ||
|
|
0086d645ef | ||
|
|
af0db5d508 | ||
|
|
113b42f32d | ||
|
|
e8a745c11a | ||
|
|
947dea5e3a | ||
|
|
48e9e30efe | ||
|
|
5e6fc5b183 | ||
|
|
772b69eebe | ||
|
|
4f3bc20bac | ||
|
|
65ee564518 | ||
|
|
de7b7e3d8f | ||
|
|
bec15fb9c3 | ||
|
|
7288757777 | ||
|
|
d189f2b66b | ||
|
|
57b5e47b5a | ||
|
|
d70cf14947 | ||
|
|
8f6fcee67d | ||
|
|
3527ab2c5d | ||
|
|
8d14092a91 | ||
|
|
ffa463f1fc | ||
|
|
7c805eb427 | ||
|
|
ef59b636b1 | ||
|
|
7ea6c97c6f | ||
|
|
911e112964 | ||
|
|
5f12ddaa14 | ||
|
|
2191b1b9fd | ||
|
|
431ffa7820 | ||
|
|
ea467c392d | ||
|
|
f6e0e93629 | ||
|
|
7fe594d4ad | ||
|
|
6d9c41f524 | ||
|
|
3e7d41c738 | ||
|
|
7fda0dd572 | ||
|
|
60a33d8279 | ||
|
|
50b9120bdc | ||
|
|
bce4cfe731 | ||
|
|
419d5ffd1b | ||
|
|
b26555604c | ||
|
|
1e5f7ef6dd | ||
|
|
3b9fcede0d | ||
|
|
0ae705b925 | ||
|
|
49a77790f2 | ||
|
|
2031882c0d | ||
|
|
9eec7237de | ||
|
|
d0e33f8aaa | ||
|
|
fac575bd4a | ||
|
|
119bb38062 | ||
|
|
89d51a9c4f | ||
|
|
90d0c859fc | ||
|
|
feb9fa03c3 | ||
|
|
7f87318f8f | ||
|
|
83d6e329ba | ||
|
|
d6d08cbb89 | ||
|
|
68f212a679 | ||
|
|
d0948727df | ||
|
|
716f8ecc17 | ||
|
|
83afecdced | ||
|
|
80066fd2f5 | ||
|
|
957642caaa | ||
|
|
33922c52f8 | ||
|
|
0408b3d260 | ||
|
|
a4ae0ba628 | ||
|
|
7315d38cb6 | ||
|
|
18a50c6339 | ||
|
|
909b7f5d39 | ||
|
|
f23b45318d | ||
|
|
884c5986ec | ||
|
|
f14c101d6d | ||
|
|
2021c8f751 | ||
|
|
d3423127d8 | ||
|
|
c93ac0445e | ||
|
|
eb13b34429 | ||
|
|
ebebdd0b07 | ||
|
|
be5e2f529f | ||
|
|
28cb621bea | ||
|
|
f2f5af1c4b | ||
|
|
a0c025014c | ||
|
|
20bbb80805 | ||
|
|
43ef9415d2 | ||
|
|
1aa6c17b56 | ||
|
|
91a963fafd | ||
|
|
606e6bcca2 | ||
|
|
49d7fa1735 | ||
|
|
ae1a4b7a80 | ||
|
|
b18cfb5d20 | ||
|
|
e12be14dc9 | ||
|
|
0858f531e4 | ||
|
|
c9c18146f4 | ||
|
|
a9d8d7d3c5 | ||
|
|
469c2c3ce9 | ||
|
|
96e2cc29e0 | ||
|
|
475374a04b | ||
|
|
b66677720d | ||
|
|
eeb88ea559 | ||
|
|
b524f7876a | ||
|
|
3fe8fede9a | ||
|
|
4e81e1e5a8 | ||
|
|
6f15169b18 | ||
|
|
464084ebf4 | ||
|
|
16cc543d59 | ||
|
|
165b5ad251 | ||
|
|
2f42fee9b3 | ||
|
|
71188ab98d | ||
|
|
ab38005817 | ||
|
|
a07b734a91 | ||
|
|
1e3d7ce5df | ||
|
|
48d987d25d | ||
|
|
0cfeeac4e3 | ||
|
|
5ed25cbce7 | ||
|
|
ce97d36500 | ||
|
|
7ae1f6e02b | ||
|
|
611d93cf20 | ||
|
|
a5fe3788a4 | ||
|
|
f68347f92c | ||
|
|
4f7f7c460a | ||
|
|
74064c8d49 | ||
|
|
e34817d89f | ||
|
|
2544294811 | ||
|
|
e4bb8cb233 | ||
|
|
d67dd27568 | ||
|
|
ceddc1b497 | ||
|
|
4d55374784 | ||
|
|
2b24673019 | ||
|
|
d7e31f94fd | ||
|
|
ccd9bfc1e7 | ||
|
|
55ccbfe1cc | ||
|
|
680729de63 | ||
|
|
9412cfc19f | ||
|
|
9083c18392 | ||
|
|
7570205059 | ||
|
|
4e7572cf04 | ||
|
|
7f4f8bcc75 | ||
|
|
2b1bbd4ad3 | ||
|
|
3734f81752 | ||
|
|
103894f733 | ||
|
|
bd9fce0a50 | ||
|
|
73305a5327 | ||
|
|
ae1ef55522 | ||
|
|
a5a66a12e2 | ||
|
|
2a5ac80c05 | ||
|
|
c2aae45456 | ||
|
|
cd9d90323c | ||
|
|
c2b75a6421 | ||
|
|
bdc829198c | ||
|
|
9136f07968 | ||
|
|
bd39f38d1a | ||
|
|
2e436cdd46 | ||
|
|
0916d87e3d | ||
|
|
e20e53f606 | ||
|
|
2eb4d4fb66 | ||
|
|
120f1677e8 | ||
|
|
d92820280d | ||
|
|
2e21a45fc1 | ||
|
|
fa5c5ce183 | ||
|
|
953f539dcc | ||
|
|
d8c8fe0a6d | ||
|
|
55b0f0e3f4 | ||
|
|
06da11ff41 | ||
|
|
ede7bbd8ed | ||
|
|
9dd185e37e | ||
|
|
13937a2568 | ||
|
|
d76396056a | ||
|
|
df3cbf85e1 | ||
|
|
c74da18e23 | ||
|
|
1a8625b558 | ||
|
|
494721f38f | ||
|
|
37b4bf6b58 | ||
|
|
e232c6634e | ||
|
|
9c748f326a | ||
|
|
0f43299c17 | ||
|
|
d160d5c8d5 | ||
|
|
0b2f3dc10a | ||
|
|
9a12000eb0 | ||
|
|
4368e08c32 | ||
|
|
4304c3ad92 | ||
|
|
c00d538f88 | ||
|
|
6fb98621ce | ||
|
|
a120d4ec9c | ||
|
|
3358d85996 | ||
|
|
b33431774b | ||
|
|
7051ce787c | ||
|
|
1452200c79 | ||
|
|
54f84c12fd | ||
|
|
118a856ee7 | ||
|
|
11225771b6 | ||
|
|
18e93d7c0b | ||
|
|
ec895d31fb | ||
|
|
59153ece46 | ||
|
|
44aa7353f0 | ||
|
|
ecb6142c5a | ||
|
|
a2d99a266b | ||
|
|
36179a8394 | ||
|
|
90cff86ac0 | ||
|
|
a1fa10e997 | ||
|
|
7af39b57f0 | ||
|
|
d1563a336a | ||
|
|
0f64fe53cb | ||
|
|
36263e6295 | ||
|
|
616cc129e2 | ||
|
|
9bcb5ec3a9 | ||
|
|
813b9a61b0 | ||
|
|
e77328fb23 | ||
|
|
61a981b8c6 | ||
|
|
22f423429c | ||
|
|
93d5aed1fe | ||
|
|
7eeb773b6b | ||
|
|
cbe8dc5e5c | ||
|
|
aa1b4789ca | ||
|
|
b80a6dcb27 | ||
|
|
27e789a749 | ||
|
|
1830087ab8 | ||
|
|
874b9c7ecb | ||
|
|
77c6234c2f | ||
|
|
81077a68dd | ||
|
|
20bde1cef6 | ||
|
|
4730ad37bc | ||
|
|
a999761fa0 | ||
|
|
ac25f96d4c | ||
|
|
37fadbdcf1 | ||
|
|
7354350a22 | ||
|
|
abd6a18b50 | ||
|
|
5603573b6d | ||
|
|
5663b4e006 | ||
|
|
b2f021ee9e | ||
|
|
611f0f037c | ||
|
|
a4ef6870b7 | ||
|
|
42e4a09b57 | ||
|
|
216791b9da | ||
|
|
202027774a |
@@ -34,9 +34,11 @@ npm-debug.log
|
||||
|
||||
# exceptions
|
||||
!/bin/copy-dist.ts
|
||||
!/bin/cleanupNodeModules.ts
|
||||
|
||||
# temporary exception to make copy-dist inside Docker build not fail
|
||||
# TriliumNextTODO: make copy-dist *not* requiring to copy this file for builds other than electron-forge
|
||||
# TriliumNextTODO: make copy-dist *not* requiring to copy these file for builds other than electron-forge
|
||||
!forge.config.cjs
|
||||
!/bin/tpl
|
||||
!/bin/electron-forge/desktop.ejs
|
||||
!/bin/electron-forge/sign-windows.cjs
|
||||
44
.dprint.json
Normal file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"typescript": {
|
||||
"indentWidth": 4,
|
||||
"quoteStyle": "preferDouble",
|
||||
"semiColons": "prefer",
|
||||
"quoteProps": "asNeeded",
|
||||
"newLineKind": "lf",
|
||||
"lineWidth": 200,
|
||||
"trailingCommas": "never",
|
||||
"arrayPattern.spaceAround": true,
|
||||
"arrayExpression.spaceAround": true
|
||||
},
|
||||
"json": {
|
||||
},
|
||||
"markdown": {
|
||||
},
|
||||
"dockerfile": {
|
||||
},
|
||||
"malva": {
|
||||
},
|
||||
"markup": {
|
||||
},
|
||||
"yaml": {
|
||||
},
|
||||
"excludes": [
|
||||
"**/node_modules",
|
||||
"**/*-lock.json",
|
||||
"*.html",
|
||||
"*.md",
|
||||
"*.yml",
|
||||
"libraries/*",
|
||||
"docs/*",
|
||||
"src/public/app/doc_notes"
|
||||
],
|
||||
"plugins": [
|
||||
"https://plugins.dprint.dev/typescript-0.94.0.wasm",
|
||||
"https://plugins.dprint.dev/json-0.20.0.wasm",
|
||||
"https://plugins.dprint.dev/markdown-0.18.0.wasm",
|
||||
"https://plugins.dprint.dev/dockerfile-0.3.2.wasm",
|
||||
"https://plugins.dprint.dev/g-plane/malva-v0.11.1.wasm",
|
||||
"https://plugins.dprint.dev/g-plane/markup_fmt-v0.19.0.wasm",
|
||||
"https://plugins.dprint.dev/g-plane/pretty_yaml-v0.5.0.wasm"
|
||||
]
|
||||
}
|
||||
1
.gitattributes
vendored
@@ -1,4 +1,5 @@
|
||||
package-lock.json linguist-generated=true
|
||||
**/package-lock.json linguist-generated=true
|
||||
src/public/app/doc_notes/en/User[[:space:]]Guide/** linguist-generated=true
|
||||
src/public/app/doc_notes/en/User[[:space:]]Guide/**/*.md eol=lf
|
||||
libraries/** linguist-vendored
|
||||
82
.github/actions/build-electron/action.yml
vendored
@@ -8,8 +8,11 @@ inputs:
|
||||
arch:
|
||||
description: "The architecture to build for: x64, arm64"
|
||||
required: true
|
||||
extension:
|
||||
description: "Platform specific extensions to copy in the output: dmg, deb, rpm, exe, zip"
|
||||
shell:
|
||||
description: "Which shell to use"
|
||||
required: true
|
||||
forge_platform:
|
||||
description: "The --platform to pass to Electron Forge"
|
||||
required: true
|
||||
|
||||
runs:
|
||||
@@ -38,21 +41,21 @@ runs:
|
||||
|
||||
- name: Verify certificates
|
||||
if: inputs.os == 'macos'
|
||||
shell: bash
|
||||
shell: ${{ inputs.shell }}
|
||||
run: |
|
||||
echo "Available signing identities:"
|
||||
security find-identity -v -p codesigning build.keychain
|
||||
|
||||
- name: Set up Python and other macOS dependencies
|
||||
if: ${{ inputs.os == 'macos' }}
|
||||
shell: bash
|
||||
shell: ${{ inputs.shell }}
|
||||
run: |
|
||||
brew install python-setuptools
|
||||
brew install create-dmg
|
||||
|
||||
- name: Install dependencies for RPM and Flatpak package building
|
||||
if: ${{ inputs.os == 'linux' }}
|
||||
shell: bash
|
||||
shell: ${{ inputs.shell }}
|
||||
run: |
|
||||
sudo apt-get update && sudo apt-get install rpm flatpak-builder elfutils
|
||||
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||
@@ -62,39 +65,32 @@ runs:
|
||||
|
||||
# Build setup
|
||||
- name: Install dependencies
|
||||
shell: bash
|
||||
shell: ${{ inputs.shell }}
|
||||
run: npm ci
|
||||
|
||||
- name: Update build info
|
||||
shell: bash
|
||||
shell: ${{ inputs.shell }}
|
||||
run: npm run chore:update-build-info
|
||||
|
||||
# Critical debugging configuration
|
||||
- name: Run electron-forge build with enhanced logging
|
||||
shell: bash
|
||||
shell: ${{ inputs.shell }}
|
||||
env:
|
||||
# Pass through required environment variables for signing and notarization
|
||||
APPLE_TEAM_ID: ${{ env.APPLE_TEAM_ID }}
|
||||
APPLE_ID: ${{ env.APPLE_ID }}
|
||||
APPLE_ID_PASSWORD: ${{ env.APPLE_ID_PASSWORD }}
|
||||
WINDOWS_SIGN_EXECUTABLE: ${{ env.WINDOWS_SIGN_EXECUTABLE }}
|
||||
TRILIUM_ARTIFACT_NAME_HINT: TriliumNextNotes-${{ github.ref_name }}-${{ inputs.os }}-${{ inputs.arch }}
|
||||
run: |
|
||||
# Map OS names to Electron Forge platform names
|
||||
if [ "${{ inputs.os }}" = "macos" ]; then
|
||||
PLATFORM="darwin"
|
||||
elif [ "${{ inputs.os }}" = "windows" ]; then
|
||||
PLATFORM="win32"
|
||||
else
|
||||
PLATFORM="${{ inputs.os }}"
|
||||
fi
|
||||
|
||||
npm run electron-forge:make -- \
|
||||
--arch=${{ inputs.arch }} \
|
||||
--platform=$PLATFORM
|
||||
--platform=${{ inputs.forge_platform }}
|
||||
|
||||
# Add DMG signing step
|
||||
- name: Sign DMG
|
||||
if: inputs.os == 'macos'
|
||||
shell: bash
|
||||
shell: ${{ inputs.shell }}
|
||||
run: |
|
||||
echo "Signing DMG file..."
|
||||
dmg_file=$(find ./dist -name "*.dmg" -print -quit)
|
||||
@@ -119,7 +115,7 @@ runs:
|
||||
|
||||
- name: Verify code signing
|
||||
if: inputs.os == 'macos'
|
||||
shell: bash
|
||||
shell: ${{ inputs.shell }}
|
||||
run: |
|
||||
echo "Verifying code signing for all artifacts..."
|
||||
|
||||
@@ -165,49 +161,3 @@ runs:
|
||||
echo "Found ZIP: $zip_file"
|
||||
echo "Note: ZIP files are not code signed, but their contents should be"
|
||||
fi
|
||||
|
||||
- name: Prepare artifacts
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p upload
|
||||
|
||||
if [ "${{ inputs.os }}" = "macos" ]; then
|
||||
# For macOS, we need to look in specific directories based on the maker
|
||||
echo "Collecting macOS artifacts..."
|
||||
|
||||
# Look for DMG files recursively
|
||||
echo "Looking for DMG files..."
|
||||
dmg_file=$(find ./dist -name "*.dmg" -print -quit)
|
||||
if [ -n "$dmg_file" ]; then
|
||||
echo "Found DMG: $dmg_file"
|
||||
cp "$dmg_file" "upload/TriliumNextNotes-${{ github.ref_name }}-macos-${{ inputs.arch }}.dmg"
|
||||
else
|
||||
echo "Warning: No DMG file found"
|
||||
fi
|
||||
|
||||
# Look for ZIP files recursively
|
||||
echo "Looking for ZIP files..."
|
||||
zip_file=$(find ./dist -name "*.zip" -print -quit)
|
||||
if [ -n "$zip_file" ]; then
|
||||
echo "Found ZIP: $zip_file"
|
||||
cp "$zip_file" "upload/TriliumNextNotes-${{ github.ref_name }}-macos-${{ inputs.arch }}.zip"
|
||||
else
|
||||
echo "Warning: No ZIP file found"
|
||||
fi
|
||||
else
|
||||
# For other platforms, use the existing logic but with better error handling
|
||||
echo "Collecting artifacts for ${{ inputs.os }}..."
|
||||
for ext in ${{ inputs.extension }}; do
|
||||
echo "Looking for .$ext files..."
|
||||
file=$(find ./dist -name "*.$ext" -print -quit)
|
||||
if [ -n "$file" ]; then
|
||||
echo "Found $file for extension $ext"
|
||||
cp "$file" "upload/TriliumNextNotes-${{ github.ref_name }}-${{ inputs.os }}-${{ inputs.arch }}.$ext"
|
||||
else
|
||||
echo "Warning: No file found with extension .$ext"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
echo "Final contents of upload directory:"
|
||||
ls -la upload/
|
||||
|
||||
2
.github/actions/build-server/action.yml
vendored
@@ -11,7 +11,7 @@ runs:
|
||||
- name: Set up node & dependencies
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
node-version: 22
|
||||
cache: "npm"
|
||||
- name: Install dependencies
|
||||
shell: bash
|
||||
|
||||
2
.github/workflows/dev.yml
vendored
@@ -26,7 +26,7 @@ jobs:
|
||||
- name: Set up node & dependencies
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
node-version: 22
|
||||
cache: "npm"
|
||||
|
||||
- run: npm ci
|
||||
|
||||
2
.github/workflows/main-docker.yml
vendored
@@ -45,7 +45,7 @@ jobs:
|
||||
- name: Set up node & dependencies
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
node-version: 22
|
||||
cache: "npm"
|
||||
|
||||
- name: Install npm dependencies
|
||||
|
||||
93
.github/workflows/main.yml
vendored
@@ -1,93 +0,0 @@
|
||||
name: Main
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "feature/update**"
|
||||
- "feature/server_esm**"
|
||||
paths-ignore:
|
||||
- "docs/**"
|
||||
- ".github/workflows/main-docker.yml"
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
make-electron:
|
||||
name: Make Electron
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
arch: [x64, arm64]
|
||||
os:
|
||||
- name: macos
|
||||
image: macos-latest
|
||||
extension: [dmg, zip]
|
||||
- name: linux
|
||||
image: ubuntu-latest
|
||||
extension: [deb, rpm, zip, flatpak]
|
||||
- name: windows
|
||||
image: windows-latest
|
||||
extension: [exe, zip]
|
||||
runs-on: ${{ matrix.os.image }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up node & dependencies
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
- name: Run the build
|
||||
uses: ./.github/actions/build-electron
|
||||
with:
|
||||
os: ${{ matrix.os.name }}
|
||||
arch: ${{ matrix.arch }}
|
||||
extension: ${{ matrix.os.extension }}
|
||||
env:
|
||||
APPLE_APP_CERTIFICATE_BASE64: ${{ secrets.APPLE_APP_CERTIFICATE_BASE64 }}
|
||||
APPLE_APP_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_APP_CERTIFICATE_PASSWORD }}
|
||||
APPLE_INSTALLER_CERTIFICATE_BASE64: ${{ secrets.APPLE_INSTALLER_CERTIFICATE_BASE64 }}
|
||||
APPLE_INSTALLER_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_INSTALLER_CERTIFICATE_PASSWORD }}
|
||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
|
||||
# Clean up keychain after build
|
||||
- name: Clean up keychain
|
||||
if: matrix.os.name == 'macos' && always()
|
||||
run: |
|
||||
security delete-keychain build.keychain
|
||||
|
||||
- name: Publish artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: TriliumNextNotes ${{ matrix.os.name }} ${{ matrix.arch }}.zip
|
||||
path: upload/*.zip
|
||||
- name: Publish installer artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: TriliumNextNotes ${{ matrix.os.name }} ${{ matrix.arch }}.${{matrix.os.extension}}
|
||||
path: upload/*.${{ matrix.os.extension }}
|
||||
|
||||
build_linux_server:
|
||||
name: Build Linux Server
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
arch: [x64, arm64]
|
||||
include:
|
||||
- arch: x64
|
||||
runs-on: ubuntu-latest
|
||||
- arch: arm64
|
||||
runs-on: ubuntu-24.04-arm
|
||||
runs-on: ${{ matrix.runs-on }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Run the build
|
||||
uses: ./.github/actions/build-server
|
||||
with:
|
||||
arch: ${{ matrix.arch }}
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: TriliumNextNotes linux server ${{ matrix.arch }}
|
||||
path: upload/TriliumNextNotes-linux-${{ matrix.arch }}-${{ github.ref_name }}.tar.xz
|
||||
61
.github/workflows/nightly.yml
vendored
@@ -5,6 +5,13 @@ on:
|
||||
- cron: "0 2 * * *" # run at 2 AM UTC
|
||||
# This can be used to allow manually triggering nightlies from the web interface
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- renovate/electron-forge*
|
||||
pull_request:
|
||||
paths:
|
||||
- .github/actions/build-electron/*
|
||||
- forge.config.cjs
|
||||
env:
|
||||
GITHUB_UPLOAD_URL: https://uploads.github.com/repos/TriliumNext/Notes/releases/179589950/assets{?name,label}
|
||||
GITHUB_RELEASE_ID: 179589950
|
||||
@@ -20,22 +27,24 @@ jobs:
|
||||
os:
|
||||
- name: macos
|
||||
image: macos-latest
|
||||
extension: [dmg, zip]
|
||||
shell: bash
|
||||
forge_platform: darwin
|
||||
- name: linux
|
||||
image: ubuntu-latest
|
||||
extension: [deb, rpm, zip, flatpak]
|
||||
shell: bash
|
||||
forge_platform: linux
|
||||
- name: windows
|
||||
image: windows-latest
|
||||
extension: [exe, zip]
|
||||
image: win-signing
|
||||
shell: cmd
|
||||
forge_platform: win32
|
||||
runs-on: ${{ matrix.os.image }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up node & dependencies
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
node-version: 22
|
||||
- name: Install dependencies
|
||||
shell: bash
|
||||
run: npm ci
|
||||
- name: Update nightly version
|
||||
run: npm run chore:ci-update-nightly-version
|
||||
@@ -44,7 +53,8 @@ jobs:
|
||||
with:
|
||||
os: ${{ matrix.os.name }}
|
||||
arch: ${{ matrix.arch }}
|
||||
extension: ${{ join(matrix.os.extension, ' ') }}
|
||||
shell: ${{ matrix.os.shell }}
|
||||
forge_platform: ${{ matrix.os.forge_platform }}
|
||||
env:
|
||||
APPLE_APP_CERTIFICATE_BASE64: ${{ secrets.APPLE_APP_CERTIFICATE_BASE64 }}
|
||||
APPLE_APP_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_APP_CERTIFICATE_PASSWORD }}
|
||||
@@ -53,9 +63,11 @@ jobs:
|
||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
WINDOWS_SIGN_EXECUTABLE: ${{ vars.WINDOWS_SIGN_EXECUTABLE }}
|
||||
|
||||
- name: Publish release
|
||||
uses: softprops/action-gh-release@v2
|
||||
if: ${{ github.event_name != 'pull_request' }}
|
||||
with:
|
||||
make_latest: false
|
||||
prerelease: true
|
||||
@@ -65,34 +77,9 @@ jobs:
|
||||
tag_name: nightly
|
||||
name: Nightly Build
|
||||
|
||||
nightly-server:
|
||||
name: Deploy server nightly
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
arch: [x64, arm64]
|
||||
include:
|
||||
- arch: x64
|
||||
runs-on: ubuntu-latest
|
||||
- arch: arm64
|
||||
runs-on: ubuntu-24.04-arm
|
||||
runs-on: ${{ matrix.runs-on }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Run the build
|
||||
uses: ./.github/actions/build-server
|
||||
- name: Publish artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ github.event_name == 'pull_request' }}
|
||||
with:
|
||||
os: linux
|
||||
arch: ${{ matrix.arch }}
|
||||
|
||||
- name: Publish release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
make_latest: false
|
||||
prerelease: true
|
||||
draft: false
|
||||
fail_on_unmatched_files: true
|
||||
files: upload/*.*
|
||||
tag_name: nightly
|
||||
name: Nightly Build
|
||||
name: TriliumNextNotes ${{ matrix.os.name }} ${{ matrix.arch }}
|
||||
path: upload
|
||||
|
||||
17
.github/workflows/release.yml
vendored
@@ -20,26 +20,30 @@ jobs:
|
||||
os:
|
||||
- name: macos
|
||||
image: macos-latest
|
||||
extension: [dmg, zip]
|
||||
shell: bash
|
||||
forge_platform: darwin
|
||||
- name: linux
|
||||
image: ubuntu-latest
|
||||
extension: [deb, rpm, zip, flatpak]
|
||||
shell: bash
|
||||
forge_platform: linux
|
||||
- name: windows
|
||||
image: windows-latest
|
||||
extension: [exe, zip]
|
||||
image: win-signing
|
||||
shell: cmd
|
||||
forge_platform: win32
|
||||
runs-on: ${{ matrix.os.image }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up node & dependencies
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
node-version: 22
|
||||
- name: Run the build
|
||||
uses: ./.github/actions/build-electron
|
||||
with:
|
||||
os: ${{ matrix.os.name }}
|
||||
arch: ${{ matrix.arch }}
|
||||
extension: ${{ join(matrix.os.extension, ' ') }}
|
||||
shell: ${{ matrix.os.shell }}
|
||||
forge_platform: ${{ matrix.os.forge_platform }}
|
||||
env:
|
||||
APPLE_APP_CERTIFICATE_BASE64: ${{ secrets.APPLE_APP_CERTIFICATE_BASE64 }}
|
||||
APPLE_APP_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_APP_CERTIFICATE_PASSWORD }}
|
||||
@@ -48,6 +52,7 @@ jobs:
|
||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
WINDOWS_SIGN_EXECUTABLE: ${{ vars.WINDOWS_SIGN_EXECUTABLE }}
|
||||
|
||||
- name: Publish release
|
||||
uses: softprops/action-gh-release@v2
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
*.html
|
||||
*.md
|
||||
*.yml
|
||||
libraries/*
|
||||
docs/*
|
||||
src/public/app/doc_notes/**/*
|
||||
22
.prettierrc
@@ -1,22 +0,0 @@
|
||||
{
|
||||
"printWidth": 200,
|
||||
"tabWidth": 4,
|
||||
"useTabs": false,
|
||||
"semi": true,
|
||||
"singleQuote": false,
|
||||
"quoteProps": "as-needed",
|
||||
"trailingComma": "none",
|
||||
"bracketSpacing": true,
|
||||
"arrowParens": "always",
|
||||
"proseWrap": "preserve",
|
||||
"htmlWhitespaceSensitivity": "css",
|
||||
"endOfLine": "lf",
|
||||
"overrides": [
|
||||
{
|
||||
"files": ["*.json"],
|
||||
"options": {
|
||||
"tabWidth": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
3
.vscode/extensions.json
vendored
@@ -2,6 +2,7 @@
|
||||
"recommendations": [
|
||||
"lokalise.i18n-ally",
|
||||
"editorconfig.editorconfig",
|
||||
"vitest.explorer"
|
||||
"vitest.explorer",
|
||||
"ms-playwright.playwright"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -39,8 +39,11 @@ COPY --from=builder /usr/src/app ./
|
||||
|
||||
RUN sed -i "/electron/d" package.json && \
|
||||
npm ci --omit=dev && \
|
||||
node --experimental-strip-types ./bin/cleanupNodeModules.ts . --skip-prune-dev-deps && \
|
||||
npm cache clean --force && \
|
||||
rm -rf /tmp/node-compile-cache
|
||||
rm -rf \
|
||||
/tmp/node-compile-cache \
|
||||
/usr/src/app/bin/cleanupNodeModules.ts
|
||||
|
||||
# Configure container
|
||||
EXPOSE 8080
|
||||
|
||||
@@ -34,8 +34,11 @@ COPY --from=builder /usr/src/app ./
|
||||
|
||||
RUN sed -i "/electron/d" package.json && \
|
||||
npm ci --omit=dev && \
|
||||
node --experimental-strip-types ./bin/cleanupNodeModules.ts . --skip-prune-dev-deps && \
|
||||
npm cache clean --force && \
|
||||
rm -rf /tmp/node-compile-cache
|
||||
rm -rf \
|
||||
/tmp/node-compile-cache \
|
||||
/usr/src/app/bin/cleanupNodeModules.ts
|
||||
|
||||
# Add application user
|
||||
RUN adduser -s /bin/false node; exit 0
|
||||
|
||||
11
README.md
@@ -37,6 +37,7 @@ Feel free to join our official conversations. We would love to hear what feature
|
||||
* Fast and easy [navigation between notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text search and [note hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
|
||||
* Seamless [note versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
|
||||
* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be used for note organization, querying and advanced [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
|
||||
* Direct OpenID and TOTP integration for more secure login
|
||||
* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization) with self-hosted sync server
|
||||
* there's a [3rd party service for hosting synchronisation server](https://trilium.cc/paid-hosting)
|
||||
* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes to public internet
|
||||
@@ -79,10 +80,11 @@ xattr -c "/path/to/Trilium Next.app"
|
||||
|
||||
### Mobile
|
||||
|
||||
To use TriliumNext on a mobile device:
|
||||
To use TriliumNext on a mobile device, you can use a mobile web browser to access the mobile interface of a server installation (see below).
|
||||
|
||||
* Use a mobile web browser to access the mobile interface of a server installation (see below)
|
||||
* Use of a mobile app is not yet supported ([see here](https://github.com/TriliumNext/Notes/issues/72)) to track mobile improvements.
|
||||
If you prefer a native Android app, you can use [TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid). Report bugs and missing features at [their repository](https://github.com/FliegendeWurst/TriliumDroid).
|
||||
|
||||
See issue https://github.com/TriliumNext/Notes/issues/72 for more information on mobile app support.
|
||||
|
||||
### Server
|
||||
|
||||
@@ -107,7 +109,8 @@ npm run server:start
|
||||
|
||||
### Documentation
|
||||
|
||||
Head on over to our [Docs repo](https://github.com/TriliumNext/Docs)
|
||||
We are currently transitioning to a new documentation mechanism.
|
||||
Meanwhile you can still view the [archived Docs repository](https://github.com/TriliumNext/Docs).
|
||||
|
||||
## 👏 Shoutouts
|
||||
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
cd src/public
|
||||
echo Summary
|
||||
cloc HEAD \
|
||||
--git --md \
|
||||
--include-lang=javascript,typescript
|
||||
|
||||
echo By file
|
||||
cloc HEAD \
|
||||
--git --md \
|
||||
--include-lang=javascript,typescript \
|
||||
--by-file | grep \.js\|
|
||||
@@ -21,12 +21,20 @@ fi
|
||||
echo "Selected Arch: $ARCH"
|
||||
|
||||
# Set Node.js version and architecture-specific filename
|
||||
NODE_VERSION=20.15.1
|
||||
NODE_VERSION=22.14.0
|
||||
|
||||
BUILD_DIR="./build"
|
||||
DIST_DIR="./dist"
|
||||
CLEANUP_SCRIPT="./bin/cleanupNodeModules.ts"
|
||||
|
||||
./bin/copy-trilium.sh
|
||||
|
||||
# Trigger the build
|
||||
echo "Build start"
|
||||
npm run build:prepare-dist
|
||||
echo "Build finished"
|
||||
|
||||
# pruning of unnecessary files and devDeps in node_modules
|
||||
node --experimental-strip-types $CLEANUP_SCRIPT $BUILD_DIR
|
||||
|
||||
NODE_FILENAME=node-v${NODE_VERSION}-linux-${ARCH}
|
||||
|
||||
@@ -37,7 +45,9 @@ mv $NODE_FILENAME node
|
||||
cd ..
|
||||
|
||||
|
||||
rm -r $BUILD_DIR/node/lib/node_modules/npm \
|
||||
rm -r $BUILD_DIR/node/lib/node_modules/{npm,corepack} \
|
||||
$BUILD_DIR/node/bin/{npm,npx,corepack} \
|
||||
$BUILD_DIR/node/CHANGELOG.md \
|
||||
$BUILD_DIR/node/include/node \
|
||||
$BUILD_DIR/node_modules/electron* \
|
||||
$BUILD_DIR/electron*.{js,map}
|
||||
|
||||
109
bin/cleanupNodeModules.ts
Normal file
@@ -0,0 +1,109 @@
|
||||
import fs from "fs-extra";
|
||||
import path from "path";
|
||||
import type { Dirent } from "fs-extra";
|
||||
import { execSync } from "node:child_process";
|
||||
|
||||
/**
|
||||
* Example usage with node >= v22:
|
||||
* node --experimental-strip-types bin/cleanupNodeModules.ts /path/to/build/folder [--skip-prune-dev-deps]
|
||||
* Example usage with tsx:
|
||||
* tsx bin/cleanupNodeModules.ts /path/to/build/folder [--skip-prune-dev-deps]
|
||||
*/
|
||||
function main() {
|
||||
|
||||
if (process.argv.length > 4 || process.argv.length < 3) {
|
||||
console.error("Usage: cleanupNodeModules.ts [path-to-build-folder] [--skip-prune-dev-deps]");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const basePath = process.argv[2];
|
||||
const pruneDevDeps = process.argv[3] !== "--skip-prune-dev-deps";
|
||||
|
||||
if (!fs.existsSync(basePath)) {
|
||||
console.error(`Supplied path '${basePath}' does not exist. Aborting.`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
console.log(`Starting pruning of node_modules ${!pruneDevDeps ? '(skipping npm pruning)' : ''} in '${basePath}'...`);
|
||||
cleanupNodeModules(basePath, pruneDevDeps);
|
||||
console.log("Successfully pruned node_modules.");
|
||||
}
|
||||
|
||||
function cleanupNodeModules(basePath: string, pruneDevDeps: boolean = true) {
|
||||
|
||||
// This needs to run for the server and Docker build,
|
||||
// but needs to be skipped for electron-forge: its
|
||||
// built-in pruning takes care of it already
|
||||
if (pruneDevDeps) {
|
||||
execSync(`npm ci --omit=dev --prefix ${basePath}`);
|
||||
}
|
||||
|
||||
const nodeModulesDirPath = path.join(basePath, "node_modules");
|
||||
const nodeModulesContent = fs.readdirSync(nodeModulesDirPath, { recursive: true, withFileTypes: true });
|
||||
//const libDir = fs.readdirSync(path.join(basePath, "./libraries"), { recursive: true, withFileTypes: true });
|
||||
|
||||
/**
|
||||
* Delete unnecessary folders
|
||||
*/
|
||||
const filterableDirs = new Set([
|
||||
"demo",
|
||||
"demos",
|
||||
"doc",
|
||||
"docs",
|
||||
"example",
|
||||
"examples",
|
||||
"test",
|
||||
"tests"
|
||||
]);
|
||||
|
||||
nodeModulesContent
|
||||
.filter(el => el.isDirectory() && filterableDirs.has(el.name))
|
||||
.forEach(dir => removeDirent(dir));
|
||||
|
||||
/**
|
||||
* Delete unnecessary files based on file extension
|
||||
* TODO filter out useless (README).md files
|
||||
*/
|
||||
const filterableFileExt = new Set([
|
||||
"ts",
|
||||
"map"
|
||||
]);
|
||||
|
||||
nodeModulesContent
|
||||
// TriliumNextTODO: check if we can improve this naive file ext matching, without introducing any additional dependency
|
||||
.filter(el => el.isFile() && filterableFileExt.has(el.name.split(".").at(-1) || ""))
|
||||
.forEach(dir => removeDirent(dir));
|
||||
|
||||
|
||||
/**
|
||||
* Delete specific unnecessary folders
|
||||
* TODO: check if we want removeSync to throw an error, if path does not exist anymore -> currently it will silently fail
|
||||
*/
|
||||
const extraFoldersDelete = new Set([
|
||||
path.join(nodeModulesDirPath, ".bin"),
|
||||
path.join(nodeModulesDirPath, "@excalidraw", "excalidraw", "dist", "dev"),
|
||||
path.join(nodeModulesDirPath, "boxicons", "svg"),
|
||||
path.join(nodeModulesDirPath, "boxicons", "node_modules"),
|
||||
path.join(nodeModulesDirPath, "boxicons", "src"),
|
||||
path.join(nodeModulesDirPath, "boxicons", "iconjar"),
|
||||
path.join(nodeModulesDirPath, "@jimp", "plugin-print", "fonts"),
|
||||
path.join(nodeModulesDirPath, "jimp", "dist", "browser") // missing "@" in front of jimp is not a typo here
|
||||
]);
|
||||
|
||||
nodeModulesContent
|
||||
.filter(el => el.isDirectory() && extraFoldersDelete.has(path.join(el.parentPath, el.name)))
|
||||
.forEach(dir => removeDirent(dir))
|
||||
}
|
||||
|
||||
|
||||
function removeDirent(el: Dirent) {
|
||||
const elementToDelete = path.join(el.parentPath, el.name);
|
||||
fs.removeSync(elementToDelete);
|
||||
|
||||
if (process.env.VERBOSE) {
|
||||
console.log(`Deleted ${elementToDelete}`);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
main()
|
||||
@@ -11,16 +11,11 @@ function log(...args: any[]) {
|
||||
}
|
||||
}
|
||||
|
||||
function copyNodeModuleFileOrFolder(source: string) {
|
||||
const destination = path.join(DEST_DIR, source);
|
||||
log(`Copying ${source} to ${destination}`);
|
||||
fs.ensureDirSync(path.dirname(destination));
|
||||
fs.copySync(source, destination);
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const assetsToCopy = new Set([
|
||||
// copy node_module, to avoid downloading packages a 2nd time during pruning
|
||||
"./node_modules",
|
||||
"./images",
|
||||
"./libraries",
|
||||
"./translations",
|
||||
@@ -32,7 +27,9 @@ try {
|
||||
"./README.md",
|
||||
"./forge.config.cjs",
|
||||
"./bin/tpl/",
|
||||
"./bin/cleanupNodeModules.ts",
|
||||
"./bin/electron-forge/desktop.ejs",
|
||||
"./bin/electron-forge/sign-windows.cjs",
|
||||
"./src/views/",
|
||||
"./src/etapi/etapi.openapi.yaml",
|
||||
"./src/routes/api/openapi.json",
|
||||
@@ -41,7 +38,8 @@ try {
|
||||
"./src/public/robots.txt",
|
||||
"./src/public/fonts",
|
||||
"./src/public/stylesheets",
|
||||
"./src/public/translations"
|
||||
"./src/public/translations",
|
||||
"./packages/turndown-plugin-gfm/src"
|
||||
]);
|
||||
|
||||
for (const asset of assetsToCopy) {
|
||||
@@ -58,55 +56,10 @@ try {
|
||||
fs.copySync(dir, path.join(PUBLIC_DIR, path.basename(dir)));
|
||||
}
|
||||
|
||||
const nodeModulesFile = new Set([
|
||||
"node_modules/react/umd/react.production.min.js",
|
||||
"node_modules/react/umd/react.development.js",
|
||||
"node_modules/react-dom/umd/react-dom.production.min.js",
|
||||
"node_modules/react-dom/umd/react-dom.development.js",
|
||||
"node_modules/katex/dist/katex.min.js",
|
||||
"node_modules/katex/dist/contrib/mhchem.min.js",
|
||||
"node_modules/katex/dist/contrib/auto-render.min.js",
|
||||
"node_modules/@highlightjs/cdn-assets/highlight.min.js",
|
||||
"node_modules/@mind-elixir/node-menu/dist/node-menu.umd.cjs"
|
||||
]);
|
||||
|
||||
const nodeModulesFolder = new Set([
|
||||
"node_modules/@excalidraw/excalidraw/dist/prod/fonts/",
|
||||
"node_modules/katex/dist/",
|
||||
"node_modules/dayjs/",
|
||||
"node_modules/boxicons/css/",
|
||||
"node_modules/boxicons/fonts/",
|
||||
"node_modules/mermaid/dist/",
|
||||
"node_modules/jquery/dist/",
|
||||
"node_modules/jquery-hotkeys/",
|
||||
"node_modules/split.js/dist/",
|
||||
"node_modules/panzoom/dist/",
|
||||
"node_modules/i18next/",
|
||||
"node_modules/i18next-http-backend/",
|
||||
"node_modules/jsplumb/dist/",
|
||||
"node_modules/vanilla-js-wheel-zoom/dist/",
|
||||
"node_modules/mark.js/dist/",
|
||||
"node_modules/normalize.css/",
|
||||
"node_modules/jquery.fancytree/dist/",
|
||||
"node_modules/autocomplete.js/dist/",
|
||||
"node_modules/codemirror/lib/",
|
||||
"node_modules/codemirror/addon/",
|
||||
"node_modules/codemirror/mode/",
|
||||
"node_modules/codemirror/keymap/",
|
||||
"node_modules/mind-elixir/dist/",
|
||||
"node_modules/@highlightjs/cdn-assets/languages",
|
||||
"node_modules/@highlightjs/cdn-assets/styles",
|
||||
"node_modules/leaflet/dist"
|
||||
]);
|
||||
|
||||
|
||||
|
||||
for (const nodeModuleItem of [...nodeModulesFile, ...nodeModulesFolder]) {
|
||||
copyNodeModuleFileOrFolder(nodeModuleItem);
|
||||
}
|
||||
console.log("Copying complete!")
|
||||
|
||||
} catch(err) {
|
||||
console.error("Error during copy:", err)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e # Fail on any command error
|
||||
shopt -s globstar
|
||||
|
||||
BUILD_DIR="./build"
|
||||
|
||||
if ! [[ $(which npm) ]]; then
|
||||
echo "Missing npm"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Trigger the build
|
||||
echo Build start
|
||||
npm run build:prepare-dist
|
||||
echo Build finished
|
||||
|
||||
# Patch package.json main
|
||||
sed -i 's|./dist/electron-main.js|electron-main.js|g' "$BUILD_DIR/package.json"
|
||||
|
||||
# run in subshell (so we return to original dir)
|
||||
(cd $BUILD_DIR && npm ci --omit=dev)
|
||||
|
||||
if [[ -d "$BUILD_DIR"/node_modules ]]; then
|
||||
# cleanup of useless files in dependencies
|
||||
for d in 'image-q/demo' \
|
||||
'@excalidraw/excalidraw/dist/excalidraw-assets-dev' '@excalidraw/excalidraw/dist/excalidraw.development.js' '@excalidraw/excalidraw/dist/excalidraw-with-preact.development.js' \
|
||||
'mermaid/dist/mermaid.js' \
|
||||
'boxicons/svg' 'boxicons/node_modules/react'/* \
|
||||
'@jimp/plugin-print/fonts' 'jimp/browser' 'jimp/fonts'; do
|
||||
[[ -e "$BUILD_DIR"/node_modules/"$d" ]] && rm -r "$BUILD_DIR"/node_modules/"$d"
|
||||
done
|
||||
|
||||
# delete all tests (there are often large images as test file for jimp etc.)
|
||||
for d in 'test' 'docs' 'demo' 'example'; do
|
||||
find "$BUILD_DIR"/node_modules -name "$d" -exec rm -rf {} +
|
||||
done
|
||||
fi
|
||||
|
||||
find $BUILD_DIR/libraries -name "*.map" -type f -delete
|
||||
find $BUILD_DIR/node_modules -name "*.map" -type f -delete
|
||||
find $BUILD_DIR -name "*.ts" -type f -delete
|
||||
|
||||
unset f d BUILD_DIR
|
||||
14
bin/electron-forge/sign-windows.cjs
Normal file
@@ -0,0 +1,14 @@
|
||||
const child_process = require("child_process");
|
||||
|
||||
module.exports = function (filePath) {
|
||||
const { WINDOWS_SIGN_EXECUTABLE } = process.env;
|
||||
|
||||
if (!WINDOWS_SIGN_EXECUTABLE) {
|
||||
console.warn("[Sign] Skip signing due to missing environment variable.");
|
||||
return;
|
||||
}
|
||||
|
||||
const command = `${WINDOWS_SIGN_EXECUTABLE} --executable "${filePath}"`;
|
||||
console.log(`[Sign] ${command}`);
|
||||
child_process.execSync(command);
|
||||
}
|
||||
@@ -8,9 +8,6 @@ noAuthentication=false
|
||||
# set to true to disable backups (e.g. because of limited space on server)
|
||||
noBackup=false
|
||||
|
||||
# Disable automatically generating desktop icon
|
||||
# noDesktopIcon=true
|
||||
|
||||
[Network]
|
||||
# host setting is relevant only for web deployments - set the host on which the server will listen
|
||||
# host=0.0.0.0
|
||||
@@ -47,3 +44,16 @@ cookieMaxAge=1814400
|
||||
#syncServerHost=
|
||||
#syncServerTimeout=
|
||||
#syncServerProxy=
|
||||
|
||||
[MultiFactorAuthentication]
|
||||
# Set the base URL for OAuth/OpenID authentication
|
||||
# This is the URL of the service that will be used to verify the user's identity
|
||||
oauthBaseUrl=
|
||||
|
||||
# Set the client ID for OAuth/OpenID authentication
|
||||
# This is the ID of the client that will be used to verify the user's identity
|
||||
oauthClientId=
|
||||
|
||||
# Set the client secret for OAuth/OpenID authentication
|
||||
# This is the secret of the client that will be used to verify the user's identity
|
||||
oauthClientSecret=
|
||||
|
||||
14
db/migrations/0229__add_oauth_user_data_table.sql
Normal file
@@ -0,0 +1,14 @@
|
||||
-- Add the oauth user data table
|
||||
CREATE TABLE IF NOT EXISTS "user_data"
|
||||
(
|
||||
tmpID INT,
|
||||
username TEXT,
|
||||
email TEXT,
|
||||
userIDEncryptedDataKey TEXT,
|
||||
userIDVerificationHash TEXT,
|
||||
salt TEXT,
|
||||
derivedKey TEXT,
|
||||
isSetup TEXT DEFAULT "false",
|
||||
UNIQUE (tmpID),
|
||||
PRIMARY KEY (tmpID)
|
||||
);
|
||||
@@ -126,6 +126,19 @@ CREATE TABLE IF NOT EXISTS "attachments"
|
||||
utcDateScheduledForErasureSince TEXT DEFAULT NULL,
|
||||
isDeleted INT not null,
|
||||
deleteId TEXT DEFAULT NULL);
|
||||
CREATE TABLE IF NOT EXISTS "user_data"
|
||||
(
|
||||
tmpID INT,
|
||||
username TEXT,
|
||||
email TEXT,
|
||||
userIDEncryptedDataKey TEXT,
|
||||
userIDVerificationHash TEXT,
|
||||
salt TEXT,
|
||||
derivedKey TEXT,
|
||||
isSetup TEXT DEFAULT "false",
|
||||
UNIQUE (tmpID),
|
||||
PRIMARY KEY (tmpID)
|
||||
);
|
||||
CREATE INDEX IDX_attachments_ownerId_role
|
||||
on attachments (ownerId, role);
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB |
@@ -1,7 +1,7 @@
|
||||
# Advanced Showcases
|
||||
Trilium offers advanced functionality through [Scripts](../Note%20Types/Code/Scripts.md) and [Promoted Attributes](Attributes/Promoted%20Attributes.md). To illustrate these features, we've prepared several showcases available in the [demo notes](Database.md):
|
||||
|
||||
* [Relation Map](Relation%20Map.md)
|
||||
* [Relation Map](../Note%20Types/Relation%20Map.md)
|
||||
* [Day Notes](Advanced%20Showcases/Day%20Notes.md)
|
||||
* [Weight Tracker](Advanced%20Showcases/Weight%20Tracker.md)
|
||||
* [Task Manager](Advanced%20Showcases/Task%20Manager.md)
|
||||
|
||||
@@ -7,7 +7,7 @@ Select an existing day note, and the menubar contains a calendar widget. Select
|
||||
|
||||

|
||||
|
||||
This pattern works well also because of [Cloning Notes](../../Basic%20Concepts/Note/Cloning%20Notes.md) functionality - note can appear in multiple places in the note tree, so besides appearing under day note, it can also be categorized into other notes.
|
||||
This pattern works well also because of [Cloning Notes](../../Basic%20Concepts%20and%20Features/Notes/Cloning%20Notes.md) functionality - note can appear in multiple places in the note tree, so besides appearing under day note, it can also be categorized into other notes.
|
||||
|
||||
## Demo
|
||||
|
||||
@@ -43,6 +43,7 @@ It's possible to customize the title of generated date notes by defining a `#dat
|
||||
|
||||
It is also possible to customize the title of generated month notes through the `#monthPattern` attribute, much like `#datePattern`. The options are:
|
||||
|
||||
* `{isoMonth}` results in an ISO 8061 formatted month (e.g. "2025-03" for March 2025)
|
||||
* `{monthNumberPadded}` results in a number like `09` for September, and `11` for November
|
||||
* `{month}` results in the full month name (e.g. `September` or `October`)
|
||||
* `{shortMonth3}` is replaced with the first 3 letters of the month, e.g. Jan, Feb, etc.
|
||||
|
||||
@@ -7,7 +7,7 @@ Task Manager is a [promoted attributes](../Attributes/Promoted%20Attributes.md)
|
||||
|
||||
Task Manager manages outstanding (TODO) tasks and finished tasks (non-empty doneDate attribute). Outstanding tasks are further categorized by location and arbitrary tags - whenever you change tag attribute in the task note, this task is then automatically moved to appropriate location.
|
||||
|
||||
Task Manager also integrates with [day notes](Day%20Notes.md) - notes are [cloned](../../Basic%20Concepts/Note/Cloning%20Notes.md) into day note to both todoDate note and doneDate note (with [prefix](../../Basic%20Concepts/Navigation/Tree%20Concepts.md) of either "TODO" or "DONE").
|
||||
Task Manager also integrates with [day notes](Day%20Notes.md) - notes are [cloned](../../Basic%20Concepts%20and%20Features/Notes/Cloning%20Notes.md) into day note to both todoDate note and doneDate note (with [prefix](../../Basic%20Concepts%20and%20Features/Navigation/Tree%20Concepts.md) of either "TODO" or "DONE").
|
||||
|
||||
## Implementation
|
||||
|
||||
|
||||
@@ -36,15 +36,15 @@ Labels are also searchable, enhancing note retrieval.
|
||||
* `**appCss**`: Marks CSS notes used to modify Trilium’s appearance
|
||||
* `**appTheme**`: Marks full CSS themes available in Trilium's options
|
||||
* `**cssClass**`: Adds a CSS class to the note's representation in the tree
|
||||
* `**iconClass**`: Adds a CSS class to the note's icon, useful for distinguishing notes visually. See [note icons](../Basic%20Concepts/Note/Note%20Icons.md)
|
||||
* `**iconClass**`: Adds a CSS class to the note's icon, useful for distinguishing notes visually. See [note icons](../Basic%20Concepts%20and%20Features/Notes/Note%20Icons.md)
|
||||
* `**pageSize**`: Specifies the number of items per page in note listings
|
||||
* `**customRequestHandler**` **and** `**customResourceProvider**`: Refer to [Custom request handler](Custom%20Request%20Handler.md)
|
||||
* `**widget**`: Marks a note as a custom widget, added to Trilium's component tree
|
||||
* `**workspace**` **and related attributes**: See [Workspace](../Basic%20Concepts/Navigation/Workspace.md) for more details
|
||||
* `**workspace**` **and related attributes**: See [Workspace](../Basic%20Concepts%20and%20Features/Navigation/Workspace.md) for more details
|
||||
* `**searchHome**`: Specifies the parent for new search notes
|
||||
* `**inbox**`: Designates a default location for new notes created via the sidebar
|
||||
* `**sqlConsoleHome**`: Default location for SQL console notes
|
||||
* `**bookmarked**` **and** `**bookmarkFolder**`: See [Bookmarks](../Basic%20Concepts/Navigation/Bookmarks.md)
|
||||
* `**bookmarked**` **and** `**bookmarkFolder**`: See [Bookmarks](../Basic%20Concepts%20and%20Features/Navigation/Bookmarks.md)
|
||||
* `**shareXXX**`: See [Sharing](Sharing.md)
|
||||
* `**keyboardShortcut**`: Assigns a keyboard shortcut to open the note
|
||||
* `**displayRelations**` **and** `**hideRelations**`: Manages the display of note relations
|
||||
|
||||
@@ -23,7 +23,7 @@ To create an instance note through the UI:
|
||||
|
||||

|
||||
|
||||
For the template to appear in the menu, the template note must have the `#template` label. Do not confuse this with the `~template` relation, which links the instance note to the template note. If you use [workspaces](../../Basic%20Concepts/Navigation/Workspace.md), you can also mark templates with `#workspaceTemplate` to display them only in the workspace.
|
||||
For the template to appear in the menu, the template note must have the `#template` label. Do not confuse this with the `~template` relation, which links the instance note to the template note. If you use [workspaces](../../Basic%20Concepts%20and%20Features/Navigation/Workspace.md), you can also mark templates with `#workspaceTemplate` to display them only in the workspace.
|
||||
|
||||
Templates can also be added or changed after note creation by creating a `~template` relation pointing to the desired template note.
|
||||
|
||||
@@ -31,6 +31,6 @@ Templates can also be added or changed after note creation by creating a `~templ
|
||||
|
||||
From a visual perspective, templates can define `#iconClass` and `#cssClass` attributes, allowing all instance notes (e.g., books) to display a specific icon and CSS style.
|
||||
|
||||
Explore the concept further in the [demo notes](../Database.md), including examples like the [Relation Map](../Relation%20Map.md), [Task Manager](../Advanced%20Showcases/Task%20Manager.md), and [Day Notes](../Advanced%20Showcases/Day%20Notes.md).
|
||||
Explore the concept further in the [demo notes](../Database.md), including examples like the [Relation Map](../../Note%20Types/Relation%20Map.md), [Task Manager](../Advanced%20Showcases/Task%20Manager.md), and [Day Notes](../Advanced%20Showcases/Day%20Notes.md).
|
||||
|
||||
Additionally, see [default note title](../Default%20Note%20Title.md) for creating title templates. Note templates and title templates can be combined by creating a `#titleTemplate` for a template note.
|
||||
@@ -5,11 +5,11 @@ Your Trilium data is stored in a [SQLite](https://www.sqlite.org) database which
|
||||
|
||||
When you run Trilium for the first time, it will generate a new database containing demo notes. These notes showcase its many features, such as:
|
||||
|
||||
* [Relation Map](Relation%20Map.md)
|
||||
* [Relation Map](../Note%20Types/Relation%20Map.md)
|
||||
* [Day Notes](Advanced%20Showcases/Day%20Notes.md)
|
||||
* [Weight Tracker](Advanced%20Showcases/Weight%20Tracker.md)
|
||||
* [Task Manager](Advanced%20Showcases/Task%20Manager.md)
|
||||
* [Custom CSS Themes](../Basic%20Concepts/Themes.md)
|
||||
* [Custom CSS Themes](../Basic%20Concepts%20and%20Features/Themes.md)
|
||||
|
||||
### Restoring Demo Notes
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# SQL Console
|
||||
The SQL Console is Trilium's built-in database editor.
|
||||
|
||||
It can be accessed by going to the [global menu](../../../Basic%20Concepts/UI%20Elements) → Advanced → Open SQL Console.
|
||||
It can be accessed by going to the [global menu](../../../Basic%20Concepts%20and%20Features/UI%20Elements) → Advanced → Open SQL Console.
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -3,7 +3,11 @@ ETAPI is Trilium's public/external REST API. It is available since Trilium v0.50
|
||||
|
||||
The documentation is in OpenAPI format, available [here](https://github.com/TriliumNext/Notes/blob/master/src/etapi/etapi.openapi.yaml).
|
||||
|
||||
[trilium-py](https://github.com/Nriver/trilium-py) is a third-party Python implementation for ETAPI client, you can use Python to communicate with Trilium.
|
||||
## API clients
|
||||
|
||||
As an alternative to calling the API directly, there are client libraries to simplify this
|
||||
|
||||
* [trilium-py](https://github.com/Nriver/trilium-py), you can use Python to communicate with Trilium.
|
||||
|
||||
## Authentication
|
||||
|
||||
@@ -26,3 +30,25 @@ Authorization: Basic BATOKEN
|
||||
* And `password` is the generated ETAPI token described above.
|
||||
|
||||
Basic Auth is meant to be used with tools which support only basic auth.
|
||||
|
||||
## Interaction using Bash scripts
|
||||
|
||||
It is possible to write simple Bash scripts to interact with Trilium. As an example, here's how to obtain the HTML content of a note:
|
||||
|
||||
```sh
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Configuration
|
||||
TOKEN=z1vA4fkGxjOR_ZXLrZeqHEFOv65yV3882iFCRtNIK9k9iWrHliITNSLQ=
|
||||
SERVER=http://localhost:8080
|
||||
|
||||
# Download a note by ID
|
||||
NOTE_ID="i6ra4ZshJhgN"
|
||||
curl "$SERVER/etapi/notes/$NOTE_ID/content" -H "Authorization: $TOKEN"
|
||||
```
|
||||
|
||||
Make sure to replace the values of:
|
||||
|
||||
* `TOKEN` with your ETAPI token.
|
||||
* `SERVER` with the correct protocol, host name and port to your Trilium instance.
|
||||
* `NOTE_ID` with an existing note ID to download.
|
||||
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 77 KiB |
@@ -0,0 +1,32 @@
|
||||
# Note Map (Link map, Tree map)
|
||||
Note map is a visualisation of connections between notes.
|
||||
|
||||
This provides an insight into a structure ("web") of notes.
|
||||
|
||||
There are two types of note map:
|
||||
|
||||
* Link Map, which shows relations between notes.
|
||||
* Note Map, which shows the hierarchical tree structure.
|
||||
|
||||
## Link Map
|
||||
|
||||
Shows [relations](Attributes.md) between notes:
|
||||
|
||||

|
||||
|
||||
## Tree Map
|
||||
|
||||
Shows hierarchical map of notes:
|
||||
|
||||

|
||||
|
||||
## Dedicated note type
|
||||
|
||||
Apart from the note map feature which can be accessed from any note, it is also possible to create a dedicated note which will display the relations in full screen. See [Note Map](../Note%20Types/Note%20Map.md) for more information.
|
||||
|
||||
## See also
|
||||
|
||||
[Relation map](../Note%20Types/Relation%20Map.md) is a similar concept, with some differences:
|
||||
|
||||
* note map is automatically generated while relation map must be created manually
|
||||
* relation map is a type of note while a link map is just virtual visualization
|
||||
@@ -1,25 +0,0 @@
|
||||
# Note Map
|
||||
Note map is a visualisation of connections between notes.
|
||||
|
||||
This provides an insight into a structure ("web") of notes.
|
||||
|
||||
There are two types of note map:
|
||||
|
||||
## Link Map
|
||||
|
||||
Shows [relations](Attributes.md) between notes:
|
||||
|
||||

|
||||
|
||||
## Tree Map
|
||||
|
||||
Shows hierarchical map of notes:
|
||||
|
||||

|
||||
|
||||
## See also
|
||||
|
||||
[Relation map](Relation%20Map.md) is a similar concept, with some differences:
|
||||
|
||||
* note map is automatically generated while relation map must be created manually
|
||||
* relation map is a type of note while a link map is just virtual visualization
|
||||
55
docs/User Guide/User Guide/Advanced Usage/Note source.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# Note source
|
||||
## Understanding the source code of the different notes
|
||||
|
||||
Internally, the structure of the content of each note is different based on the [Note Types](../Note%20Types).
|
||||
|
||||
For example:
|
||||
|
||||
* [Text Notes](#root/_hidden/_options/_optionsTextNotes) are represented internally as HTML, using the [CKEditor](Technologies%20used/CKEditor.md) representation. Note that due to the custom plugins, some HTML elements are specific to Trilium only, for example the admonitions.
|
||||
* [Code Notes](#root/_hidden/_options/_optionsCodeNotes) are plain text and are represented internally as-is.
|
||||
* [Geo map](../Note%20Types/Geo%20map.md) notes contain only minimal information (viewport, zoom) as a JSON.
|
||||
* [Canvas](../Note%20Types/Canvas.md) notes are represented as JSON, with Trilium's own information alongside with [Excalidraw](Technologies%20used/Excalidraw.md)'s internal JSON representation format.
|
||||
* [Mind Map](../Note%20Types/Mind%20Map.md) notes are represented as JSON, with the internal format of [MindElixir](Technologies%20used/MindElixir.md).
|
||||
|
||||
Note that some information is also stored as [Attachments](../Attachments). For example [Canvas](../Note%20Types/Canvas.md) notes use the attachments feature to store the custom libraries, and alongside with [Mind Map](../Note%20Types/Mind%20Map.md) and other similar note types it stores an SVG representation of the content for use in other features such as including in other notes, shared notes, etc.
|
||||
|
||||
Here's part of the HTML representation of this note, as it's stored in the database (but prettified).
|
||||
|
||||
```html
|
||||
<h2>
|
||||
Understanding the source code of the different notes
|
||||
</h2>
|
||||
<p>
|
||||
Internally, the structure of the content of each note is different based on the
|
||||
<a class="reference-link" href="../Note%20Types">
|
||||
Note Types
|
||||
</a>
|
||||
.
|
||||
</p>
|
||||
```
|
||||
|
||||
## Viewing the source code
|
||||
|
||||
It is possible to view the source code of a note by pressing the contextual menu in [Note buttons](../Basic%20Concepts%20and%20Features/UI%20Elements/Note%20buttons.md) and selecting _Note source_.
|
||||
|
||||

|
||||
|
||||
The source code will be displayed in a new tab.
|
||||
|
||||
For some note types, such as text notes, the source code is also formatted in order to be more easily readable.
|
||||
|
||||
## Modifying the source code
|
||||
|
||||
It is possible to modify the source code of a note directly, however not via the _Note source_ functionality.
|
||||
|
||||
To do so:
|
||||
|
||||
1. Change the note type from the real note type (e.g. Canvas, Geo Type) to Code (plain text) or the corresponding format such as JSON or HTML.
|
||||
2. Confirm the warning about changing the note type.
|
||||
3. The source code will appear, make the necessary modifications.
|
||||
4. Change the note type back to the real note type.
|
||||
|
||||
> [!WARNING]
|
||||
> Depending on the changes made, there is a risk that the note will not render properly. It's best to save a revision before making any big changes.
|
||||
>
|
||||
> If the note does not render properly, modify the source code again or revert to a prior revision. Since the error handling for unexpected changes might not always be perfect, it be required to refresh the application.
|
||||
BIN
docs/User Guide/User Guide/Advanced Usage/Note source_image.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
@@ -1,49 +0,0 @@
|
||||
# Relation Map
|
||||
Relation map is a type of [note](../Basic%20Concepts/Navigation/Tree%20Concepts.md) which visualizes notes and their [relations](Attributes.md). See an example:
|
||||
|
||||
## Development process demo
|
||||
|
||||
This is a basic example how you can create simple diagram using relation maps:
|
||||
|
||||

|
||||
|
||||
And this is how you can create it:
|
||||
|
||||

|
||||
|
||||
We start completely from scratch by first creating new note called "Development process" and changing its type to "Relation map". After that we create new notes one by one and place them by clicking into the map. We also drag [relations](Attributes.md)between notes and name them. That's all!
|
||||
|
||||
Items on the map - "Specification", "Development", "Testing" and "Demo" are actually notes which have been created under "Development process" note - you can click on them and write some content. Connections between notes are called "[relations](Attributes.md)".
|
||||
|
||||
## Family demo
|
||||
|
||||
This is more complicated demo using some advanced concepts. Resulting diagram is here:
|
||||
|
||||

|
||||
|
||||
This is how you get to it:
|
||||
|
||||

|
||||
|
||||
There are several steps here:
|
||||
|
||||
* we start with empty relation map and two existing notes representing Prince Philip and Queen Elizabeth II. These two notes already have "isPartnerOf" [relations](Attributes.md)defined.
|
||||
* There are actually two "inverse" relations (one from Philip to Elizabeth and one from Elizabeth to Philip)
|
||||
* we drag both notes to relation map and place to suitable position. Notice how the existing "isPartnerOf" relations are displayed.
|
||||
* now we create new note - we name it "Prince Charles" and place it on the relation map by clicking on the desired position. The note is by default created under the relation map note (visible in the note tree on the left).
|
||||
* we create two new relations "isChildOf" targeting both Philip and Elizabeth
|
||||
* now there's something unexpected - we can also see the relation to display another "hasChild" relation. This is because there's a [relation definition](Attributes/Promoted%20Attributes.md) which puts "isChildOf" as an "[inverse](Attributes/Promoted%20Attributes.md)" relation of "hasChildOf" (and vice versa) and thus it is created automatically.
|
||||
* we create another note for Princess Diana and create "isPartnerOf" relation from Charles. Again notice how the relation has arrows both ways - this is because "isPartnerOf" definition specifies its inverse relation as again "isPartnerOf" so the opposite relation is created automatically.
|
||||
* as the last step we pan & zoom the map to fit better to window dimensions.
|
||||
|
||||
Relation definitions mentioned above come from "Person template" note which is assigned to any child of "My Family Tree" relation note. You can play with the whole thing in the [demo notes](Database.md).
|
||||
|
||||
## Details
|
||||
|
||||
You can specify which relations should be displayed with comma delimited names of relations in `displayRelations` label.
|
||||
|
||||
Alternatively, you can specify comma delimited list of relation names in `hideRelations` which will display all relations, except for the ones defined in the label.
|
||||
|
||||
## See also
|
||||
|
||||
* [Note map](Note%20Map.md) is a similar concept
|
||||
@@ -41,7 +41,7 @@ To protect shared notes with a username and password, you can use the `#shareCre
|
||||
The default shared page is basic in design, but you can customize it using your own CSS:
|
||||
|
||||
* **Custom CSS**: Link a CSS [code note](../Note%20Types/Code.md) to the shared page by adding a `~shareCss` relation to the note. If you want this style to apply to the entire subtree, make the label inheritable. You can hide the CSS code note from the tree navigation by adding the `#shareHiddenFromTree` label.
|
||||
* **Omitting Default CSS**: For extensive styling changes, use the `#shareOmitDefaultCss` label to avoid conflicts with Trilium's [default stylesheet](../Basic%20Concepts/Themes.md).
|
||||
* **Omitting Default CSS**: For extensive styling changes, use the `#shareOmitDefaultCss` label to avoid conflicts with Trilium's [default stylesheet](../Basic%20Concepts%20and%20Features/Themes.md).
|
||||
|
||||
### Adding JavaScript
|
||||
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
# Technologies used
|
||||
One core aspect of Trilium that allows it to have support for multiple [Note Types](../Note%20Types) is the fact that it makes use of various off-the-shelf or reusable libraries.
|
||||
|
||||
The sub-pages showcase some of the technologies used, for a better understanding of how Trilium works but also to credit the developers of that particular technology.
|
||||
@@ -0,0 +1,34 @@
|
||||
# CKEditor
|
||||
## Editor core
|
||||
|
||||
The CKEditor is the WYSIWYG (standing for What You See Is What You Get) editor behind [Text](../../Note%20Types/Text.md) notes.
|
||||
|
||||
Their website is [ckeditor.com](https://ckeditor.com/).
|
||||
|
||||
CKEditor by itself is a commercial product, but the core is open-source. As described in [its documentation](https://ckeditor.com/docs/ckeditor5/latest/features/index.html), the editor supports quite a large number of features. Do note that not all the features are enabled in Trilium.
|
||||
|
||||
## Premium features
|
||||
|
||||
Some features are marked as premium in the CKEditor feature set. This means that they cannot be used without a license.
|
||||
|
||||
Trilium cannot benefit from any of these premium features as they require a commercial license, however we are in discussions with the CKEditor team to allow us to use a subset of these premium features such as [Slash commands](https://ckeditor.com/docs/ckeditor5/latest/features/slash-commands.html).
|
||||
|
||||
## Plugins
|
||||
|
||||
The CKEditor ecosystem is quite extensible, in the sense that custom plugins can be written to extend the functionality of the editor beyond its original scope.
|
||||
|
||||
Trilium makes use of such features:
|
||||
|
||||
* The math feature is added by a version of [isaul32/ckeditor5-math: Math feature for CKEditor 5.](https://github.com/isaul32/ckeditor5-math) modified by us to fit our needs.
|
||||
* We also make use of modified upstream plugins such as [ckeditor/ckeditor5-mermaid](https://github.com/ckeditor/ckeditor5-mermaid) to allow inline Mermaid code.
|
||||
* [mlewand/ckeditor5-keyboard-marker: Plugin adds support for the keyboard input element (<kbd>) to CKEditor 5.](https://github.com/mlewand/ckeditor5-keyboard-marker)
|
||||
* A modified version of [ThomasAitken/ckeditor5-footnotes: Footnotes plugin for CKEditor5](https://github.com/ThomasAitken/ckeditor5-footnotes) to allow footnotes.
|
||||
|
||||
Apart from that, Trilium also has its own set of specific plugins such as:
|
||||
|
||||
* Cut to note
|
||||
* Include note
|
||||
* Mentions, for linking pages.
|
||||
* Markdown import.
|
||||
* Reference links.
|
||||
* etc.
|
||||
@@ -0,0 +1,4 @@
|
||||
# Excalidraw
|
||||
[Excalidraw](https://excalidraw.com/) is the technology behind the [Canvas](../../Note%20Types/Canvas.md) notes. The source code of the library is available on [GitHub](https://github.com/excalidraw/excalidraw).
|
||||
|
||||
We are using an unmodified version of it, so it shares the same [issues](https://github.com/excalidraw/excalidraw/issues) as the original.
|
||||
@@ -0,0 +1,10 @@
|
||||
# Leaflet
|
||||
Leaflet is the library behind [Geo map](../../Note%20Types/Geo%20map.md) notes.
|
||||
|
||||
## Plugins
|
||||
|
||||
Leaflet is also highly customizable via external plugins.
|
||||
|
||||
Currently we use:
|
||||
|
||||
* [mpetazzoni/leaflet-gpx: A GPX track plugin for Leaflet.js](https://github.com/mpetazzoni/leaflet-gpx)
|
||||
@@ -0,0 +1,12 @@
|
||||
# MindElixir
|
||||
MindElixir is the library we are using for the [Mind Map](../../Note%20Types/Mind%20Map.md) note types.
|
||||
|
||||
The main library is available on [GitHub as mind-elixir-core](https://github.com/SSShooter/mind-elixir-core/issues).
|
||||
|
||||
The library is embedded as-is without additional modifications.
|
||||
|
||||
Issues with its functionality should generally be reported [upstream](https://github.com/ssshooter/mind-elixir-core).
|
||||
|
||||
## Plugins
|
||||
|
||||
MindElixir supports plugins, and one such plugin we are making use of is [SSShooter/node-menu: A node menu plugin of mind-elixir](https://github.com/SSShooter/node-menu), which allows editing the fonts, colors, links of nodes.
|
||||
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 93 KiB |
@@ -42,7 +42,7 @@ Only in desktop (electron build):
|
||||
* <kbd>Shift</kbd>+<kbd><span>↑</span></kbd>, <kbd>Shift</kbd>`+`<kbd><span>↓</span></kbd> - multi-select note above/below
|
||||
* <kbd>Ctrl</kbd>+<kbd>A</kbd> - select all notes in the current level
|
||||
* <kbd>Shift</kbd>+<kbd>🖱 Left click</kbd> - multi select note which you clicked on
|
||||
* <kbd>Ctrl</kbd>+<kbd>C</kbd> - copies current note (or current selection) into clipboard (used for [cloning](Note/Cloning%20Notes.md)
|
||||
* <kbd>Ctrl</kbd>+<kbd>C</kbd> - copies current note (or current selection) into clipboard (used for [cloning](Notes/Cloning%20Notes.md)
|
||||
* <kbd>Ctrl</kbd>+<kbd>X</kbd> - cuts current (or current selection) note into clipboard (used for moving notes)
|
||||
* <kbd>Ctrl</kbd>+<kbd>V</kbd> - pastes note(s) as sub-note into current note (which is either move or clone depending on whether it was copied or cut into clipboard)
|
||||
* <kbd>Del</kbd> - delete note / sub-tree
|
||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
@@ -3,13 +3,13 @@ This page explains the basic concepts related to the tree structure of notes in
|
||||
|
||||
## Note
|
||||
|
||||
A note is the central entity in TriliumNext. For more details, see [Note](../Note.md).
|
||||
A note is the central entity in TriliumNext. For more details, see [Note](../Notes.md).
|
||||
|
||||
## Branch
|
||||
|
||||
A branch describes the placement of a note within the note tree. Essentially, it is a tuple of `parentNoteId` and `noteId`, indicating that the given note is placed as a child under the specified parent note.
|
||||
|
||||
Each note can have multiple branches, meaning any note can be placed in multiple locations within the tree. This concept is referred to as " [cloning](../Note/Cloning%20Notes.md)."
|
||||
Each note can have multiple branches, meaning any note can be placed in multiple locations within the tree. This concept is referred to as " [cloning](../Notes/Cloning%20Notes.md)."
|
||||
|
||||
## Prefix
|
||||
|
||||
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 9.0 KiB |
@@ -1,4 +1,4 @@
|
||||
# Note
|
||||
# Notes
|
||||
Note is a central entity in Trilium. Main attributes of note are title and content.
|
||||
|
||||
### Note types
|
||||
@@ -9,7 +9,7 @@ Note is a central entity in Trilium. Main attributes of note are title and conte
|
||||
* file note - represents uploaded file (e.g. docx MS Word document).
|
||||
* render HTML note - this works as an output screen of attached [scripts](../Note%20Types/Code/Scripts.md)
|
||||
* [saved search](../Note%20Types/Saved%20Search.md) note - contains saved search query and dynamically displays result of the search as its sub-notes
|
||||
* [relation map](../Advanced%20Usage/Relation%20Map.md) note - visualizes notes and their relations
|
||||
* [relation map](../Note%20Types/Relation%20Map.md) note - visualizes notes and their relations
|
||||
* [book note](../Note%20Types/Book.md) - displays its children notes, useful for reading many short notes
|
||||
* mermaid - create diagrams and flowcharts using [mermaid.js ↗](https://github.com/mermaid-js/mermaid)
|
||||
* [canvas note](#root/fKYGY3OOo5d1) - allows hand drawn notes and basic diagraming on an infinite canvas using [excalidraw ↗](https://github.com/excalidraw/excalidraw)
|
||||
@@ -22,7 +22,7 @@ There's one special note called "root note" which is root of the note tree. All
|
||||
|
||||
### Tree structure
|
||||
|
||||
Importantly, note itself doesn't carry information on its placement in note tree. See [cloning](Note/Cloning%20Notes.md) for details.
|
||||
Importantly, note itself doesn't carry information on its placement in note tree. See [cloning](Notes/Cloning%20Notes.md) for details.
|
||||
|
||||
Tree structure of notes can resemble file system - but compared to that notes in Trilium can act as both file and directory - meaning that note can both have its own content and have children. "Leaf note" is a note which doesn't have any children.
|
||||
|
||||
@@ -40,4 +40,4 @@ After the 7 days (configurable) the notes will be "erased" - their title, conten
|
||||
|
||||
## See also
|
||||
|
||||
* [Read-only note](Note/Read-Only%20Notes.md)
|
||||
* [Read-only note](Notes/Read-Only%20Notes.md)
|
||||
|
Before Width: | Height: | Size: 340 B After Width: | Height: | Size: 340 B |
@@ -1,5 +1,5 @@
|
||||
# Attachments
|
||||
A [note](../Note.md) in Trilium can _own_ one or more attachments, which can be either images or files. These attachments can be displayed or linked within the note that owns them.
|
||||
A [note](../Notes.md) in Trilium can _own_ one or more attachments, which can be either images or files. These attachments can be displayed or linked within the note that owns them.
|
||||
|
||||
This can be especially useful to include dependencies for your [scripts](../../Note%20Types/Code/Scripts.md). The [Weight Tracker](../../Advanced%20Usage/Advanced%20Showcases/Weight%20Tracker.md) shows how to use [chartjs](https://chartjs.org/) which is attached to the [script note](#root/HcUYTojFohtb).
|
||||
|
||||
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 95 KiB |
@@ -0,0 +1,6 @@
|
||||
# Note Icons
|
||||
Icons are useful for distinguishing notes. At the technical level, they are set by the `iconClass` attribute which adds a CSS class to the note. For example `#iconClass="bx bx-calendar"` will show a calendar instead of the default page or folder icon. Looking up and remembering the css class names is not necessary. While editing a note, click on the icon next to the title to bring up a chooser gallery:
|
||||
|
||||

|
||||
|
||||

|
||||
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 327 B After Width: | Height: | Size: 327 B |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 780 B After Width: | Height: | Size: 780 B |
|
Before Width: | Height: | Size: 367 B After Width: | Height: | Size: 367 B |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
@@ -32,7 +32,7 @@ Drag-and-drop the items in the tree in order to change their order. See [Note
|
||||
|
||||
## Customizing the launcher
|
||||
|
||||
* The icon of a launcher can be changed just like a normal note. See [Note Icons](../Note/Note%20Icons.md) for more information.
|
||||
* The icon of a launcher can be changed just like a normal note. See [Note Icons](../Notes/Note%20Icons.md) for more information.
|
||||
* The title of the launcher can also be changed.
|
||||
|
||||
### Resetting
|
||||
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
@@ -20,7 +20,7 @@ You can easily rearrange the note tree by dragging and dropping notes, as demons
|
||||
|
||||
## Context Menu
|
||||
|
||||
You can also move notes using the familiar cut and paste functions available in the context menu, or with the associated keyboard [shortcuts](../Keyboard%20Shortcuts.md): `CTRL-C` ( [copy](../Note/Cloning%20Notes.md)), <kbd>Ctrl</kbd> + <kbd>X</kbd> (cut) and <kbd>Ctrl</kbd> + <kbd>V</kbd> (paste).
|
||||
You can also move notes using the familiar cut and paste functions available in the context menu, or with the associated keyboard [shortcuts](../Keyboard%20Shortcuts.md): `CTRL-C` ( [copy](../Notes/Cloning%20Notes.md)), <kbd>Ctrl</kbd> + <kbd>X</kbd> (cut) and <kbd>Ctrl</kbd> + <kbd>V</kbd> (paste).
|
||||
|
||||
## Multiple selection
|
||||
|
||||
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
@@ -0,0 +1,5 @@
|
||||
# Note buttons
|
||||
To the right of the [Ribbon](Ribbon.md) there are a few more buttons: 
|
||||
|
||||
* The Note Revisions button displays the [Note Revisions](../Notes/Note%20Revisions.md) for that particular note.
|
||||
* The contextual menu offers commands for the note or its subtree, such as import, export, viewing the [Note source code](../../Advanced%20Usage/Note%20source.md) or [Attachments](../Notes/Attachments.md).
|
||||
|
After Width: | Height: | Size: 941 B |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 188 B After Width: | Height: | Size: 188 B |
@@ -13,9 +13,9 @@ Screenshot of the Zen Mode option in the global menu.
|
||||
|
||||
The Zen Mode can be activated by accessing the global menu and selecting the “Zen Mode” option:
|
||||
|
||||
Aside from the global menu, it's also possible to activate this mode by using a keyboard shortcut which is <kbd>Alt</kbd>+<kbd>Z</kbd> by default. Look for `toggleZenMode` in the shortcut configuration.
|
||||
Aside from the global menu, it's also possible to activate this mode by using a keyboard shortcut (which is <kbd>F9</kbd> since TriliumNext 0.92.5 and <kbd>Alt</kbd>+<kbd>Z</kbd> for older versions). Look for `toggleZenMode` in the shortcut configuration.
|
||||
|
||||
Once Zen Mode is activated, all the UI elements of the application will be hidden away, including the global menu. In that case, the Zen Mode can be deactivated either by pressing the icon in the top-right corner of the window or by pressing the keyboard combination again.
|
||||
Once Zen Mode is activated, all the UI elements of the application will be hidden away, including the global menu. In that case, the Zen Mode can be deactivated either by pressing the  icon in the top-right corner of the window or by pressing the keyboard combination again.
|
||||
|
||||
Do note that, by design, activating or deactivating the Zen Mode applies only to the current window. Restarting the application will also disable the Zen Mode.
|
||||
|
||||
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |