mirror of
https://github.com/zadam/trilium.git
synced 2025-10-26 15:56:29 +01:00
Compare commits
2035 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7fc1eb5262 | ||
|
|
531e9d4aff | ||
|
|
e0d4766c2d | ||
|
|
ab4e83771c | ||
|
|
803b6df40c | ||
|
|
1ebdb0f5e1 | ||
|
|
df5951ce46 | ||
|
|
d3a477b8f2 | ||
|
|
01093d05d7 | ||
|
|
a9b63111ae | ||
|
|
ed1a731950 | ||
|
|
ef974ab1f5 | ||
|
|
1cd391a132 | ||
|
|
1c15527d95 | ||
|
|
7af79ec33b | ||
|
|
4294c043d8 | ||
|
|
e5b925abf8 | ||
|
|
90c0a4a437 | ||
|
|
692f7868bc | ||
|
|
5282af55f6 | ||
|
|
aefc4c6bd2 | ||
|
|
b39ba76505 | ||
|
|
9d918e7a54 | ||
|
|
38db7f9db7 | ||
|
|
5163e50e7d | ||
|
|
5115b33446 | ||
|
|
b01fe5ead9 | ||
|
|
b1d4a258a1 | ||
|
|
ca041bb658 | ||
|
|
87a60e325f | ||
|
|
0a172d8bc1 | ||
|
|
67a12d3c4d | ||
|
|
5b2ba3646d | ||
|
|
148bff9f77 | ||
|
|
2132cf3bdc | ||
|
|
d5271c17e3 | ||
|
|
b764761e58 | ||
|
|
c666fc3b98 | ||
|
|
ba34df2e15 | ||
|
|
840ac2d63e | ||
|
|
5dd4586ebe | ||
|
|
d09d3f5a96 | ||
|
|
3d15aeae58 | ||
|
|
9765892d18 | ||
|
|
78f8a37587 | ||
|
|
86d62866f2 | ||
|
|
1dc3fafcbf | ||
|
|
7f06952d9e | ||
|
|
78b6614eea | ||
|
|
9665e872c2 | ||
|
|
9db0a062ed | ||
|
|
055bb39e4d | ||
|
|
1261a06a30 | ||
|
|
91eb3c45d5 | ||
|
|
3944235592 | ||
|
|
5be61e6142 | ||
|
|
62ccf798ee | ||
|
|
70d6bd0157 | ||
|
|
e5555beea9 | ||
|
|
9767b6269a | ||
|
|
7e486fda06 | ||
|
|
9f726304aa | ||
|
|
be918628c3 | ||
|
|
602b9ae64a | ||
|
|
602a166e36 | ||
|
|
aaad858395 | ||
|
|
48248224f8 | ||
|
|
79e5e3b65f | ||
|
|
d0383f3044 | ||
|
|
62ecd1ad76 | ||
|
|
75b7706c2c | ||
|
|
584b176643 | ||
|
|
a16555bbff | ||
|
|
a749e24147 | ||
|
|
bb81f110dd | ||
|
|
5dd6f49104 | ||
|
|
bc6be44b19 | ||
|
|
8075265753 | ||
|
|
4a67f63abd | ||
|
|
d9666210f1 | ||
|
|
5f6d562bf8 | ||
|
|
f37dc66074 | ||
|
|
0b84524807 | ||
|
|
8062bb7e2a | ||
|
|
806062c8d1 | ||
|
|
83f19c0537 | ||
|
|
3a83d58b25 | ||
|
|
6fa9d996e8 | ||
|
|
1ea3d238e0 | ||
|
|
eb273b7dbb | ||
|
|
d2263c68f8 | ||
|
|
97d8b19868 | ||
|
|
2bc7da91a6 | ||
|
|
2b4cbb5f6b | ||
|
|
7b662b04ff | ||
|
|
f8e4a665bd | ||
|
|
f9a27dd90c | ||
|
|
641985737f | ||
|
|
121e4ba2ea | ||
|
|
01474ecd2d | ||
|
|
82e4e28e7b | ||
|
|
886ee0dbcb | ||
|
|
6f7fbacca1 | ||
|
|
8da5b90aea | ||
|
|
e7d57bc08f | ||
|
|
041758766a | ||
|
|
f2a510e4c5 | ||
|
|
4717242dc7 | ||
|
|
c1865f8564 | ||
|
|
515c5411a6 | ||
|
|
3f7a5504c7 | ||
|
|
8c7c37cf98 | ||
|
|
c0f48c0e99 | ||
|
|
abedf2bba4 | ||
|
|
bb0137b2fd | ||
|
|
6c54c7d17d | ||
|
|
90255ac55b | ||
|
|
e741c2826c | ||
|
|
026992db78 | ||
|
|
33780c1e17 | ||
|
|
ede9c43f67 | ||
|
|
5c12ac4eee | ||
|
|
522518cf0d | ||
|
|
1d869d25c2 | ||
|
|
a9cdd93cb4 | ||
|
|
4240da349d | ||
|
|
c257bc07a8 | ||
|
|
00eaa16985 | ||
|
|
fefb059564 | ||
|
|
9166765ced | ||
|
|
6ae7661603 | ||
|
|
30e75056bd | ||
|
|
530e56dcb5 | ||
|
|
63675bfbae | ||
|
|
696ce38083 | ||
|
|
12014b9f4d | ||
|
|
e8b52f9e6c | ||
|
|
04b125afc0 | ||
|
|
2a7fe85020 | ||
|
|
119050e355 | ||
|
|
72122d0f95 | ||
|
|
bd22863bb7 | ||
|
|
ce3834eb9e | ||
|
|
8edb5428e5 | ||
|
|
527718eff7 | ||
|
|
5b0f487f3f | ||
|
|
a3fa8341ba | ||
|
|
04813743e2 | ||
|
|
ddf75cd5e5 | ||
|
|
d0e5ad5b7e | ||
|
|
b4631e927c | ||
|
|
b7bc843a37 | ||
|
|
98d65f8767 | ||
|
|
0599891ec0 | ||
|
|
cc06701565 | ||
|
|
40683985cd | ||
|
|
074e13a889 | ||
|
|
98b0baefe2 | ||
|
|
3aad0ebc95 | ||
|
|
479d720a6e | ||
|
|
e4892c9888 | ||
|
|
f8c9178c5d | ||
|
|
83049c95c3 | ||
|
|
bc8f531b33 | ||
|
|
23278f54cb | ||
|
|
18801fb3e1 | ||
|
|
dc0a0dcf09 | ||
|
|
04c306b360 | ||
|
|
d6a4f1db13 | ||
|
|
84c4b368c8 | ||
|
|
4307f25205 | ||
|
|
48f03f7a1b | ||
|
|
9d24499fef | ||
|
|
df97b269a7 | ||
|
|
ee6fb98a0d | ||
|
|
13e30e5855 | ||
|
|
5ab2ec0f13 | ||
|
|
8465d7fa68 | ||
|
|
d153fc7ba5 | ||
|
|
1a7c2d4c32 | ||
|
|
b3381a3b53 | ||
|
|
ac0d61e9b4 | ||
|
|
b13a6ced19 | ||
|
|
b61aab06b5 | ||
|
|
64b86b2666 | ||
|
|
27e6fa9526 | ||
|
|
3d31742285 | ||
|
|
2b2f4fbc07 | ||
|
|
513bf252cd | ||
|
|
f591e954f3 | ||
|
|
59de1925a9 | ||
|
|
6c1011341c | ||
|
|
906082a6b2 | ||
|
|
30bcd1764a | ||
|
|
cea54aecad | ||
|
|
ff6f2a4d44 | ||
|
|
5f6fded833 | ||
|
|
fed5f1a7d2 | ||
|
|
a06ee1ced1 | ||
|
|
332b92791e | ||
|
|
d4a9461460 | ||
|
|
2dac6ab281 | ||
|
|
4d00404f55 | ||
|
|
3adab07ddb | ||
|
|
3d0c3652ce | ||
|
|
c3f5bb5518 | ||
|
|
b2d460d5c1 | ||
|
|
d475346a09 | ||
|
|
ca41806bc2 | ||
|
|
a748710b01 | ||
|
|
ac9a4b3afc | ||
|
|
b7f0fd2db3 | ||
|
|
7d6c847d47 | ||
|
|
6ec6d66f17 | ||
|
|
977089cc28 | ||
|
|
c3f8975166 | ||
|
|
639f80b603 | ||
|
|
927da84d3b | ||
|
|
b8c9943deb | ||
|
|
bb6ab0fe45 | ||
|
|
0c86dece5f | ||
|
|
b7b0bd80ed | ||
|
|
f06207207b | ||
|
|
068684101f | ||
|
|
f78d96a3d4 | ||
|
|
a0d958bf12 | ||
|
|
0802b81807 | ||
|
|
192e399cb5 | ||
|
|
fc564f6aed | ||
|
|
eb34f9c64f | ||
|
|
48029cea7c | ||
|
|
f4ec4e58c7 | ||
|
|
faa402fcda | ||
|
|
788841d256 | ||
|
|
b7c37fdf58 | ||
|
|
a46c5a2243 | ||
|
|
430f2975f8 | ||
|
|
dd8226ff4c | ||
|
|
807b442c7a | ||
|
|
a452e4add5 | ||
|
|
48b30b985e | ||
|
|
05d2f4fe96 | ||
|
|
85a75fc186 | ||
|
|
ddda4d9867 | ||
|
|
42c8059ae1 | ||
|
|
0f4eb8ff4c | ||
|
|
8ee537e2eb | ||
|
|
8eb091445b | ||
|
|
1fc23c948e | ||
|
|
cb2b97635a | ||
|
|
8fb42e4517 | ||
|
|
edae1a5d1c | ||
|
|
08398a1417 | ||
|
|
712304bbc6 | ||
|
|
afb893c157 | ||
|
|
ebccd48013 | ||
|
|
54065672aa | ||
|
|
8394ce8002 | ||
|
|
176784834f | ||
|
|
a47004bb4e | ||
|
|
995f1c9fc4 | ||
|
|
1f3b6feaff | ||
|
|
8095c77b91 | ||
|
|
6cfd18b29b | ||
|
|
defd997424 | ||
|
|
5905950c17 | ||
|
|
691fccb769 | ||
|
|
bbe3f436d3 | ||
|
|
af053b61fc | ||
|
|
e22f77eae7 | ||
|
|
3223e76787 | ||
|
|
74400dad97 | ||
|
|
1b68adf3e4 | ||
|
|
a2cd6f92d7 | ||
|
|
3ff5fe61b2 | ||
|
|
75c6afd1c3 | ||
|
|
8d2958738f | ||
|
|
0496412f4a | ||
|
|
f80a20d18c | ||
|
|
34c642a49a | ||
|
|
2ebbc33081 | ||
|
|
ac56056f65 | ||
|
|
6f16b4caec | ||
|
|
bea39f37ee | ||
|
|
6548149107 | ||
|
|
fbc805a221 | ||
|
|
6015a067ec | ||
|
|
4a1ecd906b | ||
|
|
41844cf817 | ||
|
|
004cfe1965 | ||
|
|
b97ebe9f03 | ||
|
|
08ec866dd2 | ||
|
|
2bdd538d7d | ||
|
|
6e69cafe54 | ||
|
|
38839532d5 | ||
|
|
0234ff5fca | ||
|
|
44bcfd47c0 | ||
|
|
69c7eb14aa | ||
|
|
00453fc151 | ||
|
|
5c393f959d | ||
|
|
e6bf6424e8 | ||
|
|
57702a07a2 | ||
|
|
3b3f6082a7 | ||
|
|
49241ab318 | ||
|
|
93addac8bb | ||
|
|
fe908759d1 | ||
|
|
779751a234 | ||
|
|
cb9feab7b2 | ||
|
|
b79631a35d | ||
|
|
c177aaa901 | ||
|
|
eff3e1df85 | ||
|
|
b46d5f4a71 | ||
|
|
5b421d51b5 | ||
|
|
8852e8e531 | ||
|
|
8bc84cfaf6 | ||
|
|
cde13dc580 | ||
|
|
282d135f0f | ||
|
|
3e3d7aa4d7 | ||
|
|
446c41d020 | ||
|
|
33fdad5159 | ||
|
|
463d145cb7 | ||
|
|
1413756d00 | ||
|
|
d3bf325f19 | ||
|
|
c4f69fd9cb | ||
|
|
50ec17433d | ||
|
|
2c8eb82d42 | ||
|
|
af67cf64b1 | ||
|
|
095da691a4 | ||
|
|
7e71029d1c | ||
|
|
045ee18237 | ||
|
|
e47c3a27b0 | ||
|
|
ced99f8ac8 | ||
|
|
0c4492bcd0 | ||
|
|
d9359c7c55 | ||
|
|
86a080e7ec | ||
|
|
0a66809bf0 | ||
|
|
ecfdde2f2a | ||
|
|
758dba9ba5 | ||
|
|
ae42e0efc7 | ||
|
|
b5cfc28912 | ||
|
|
c802bf7d8b | ||
|
|
9e5a02094c | ||
|
|
58253567cd | ||
|
|
92d5aeae41 | ||
|
|
d2d286a4ff | ||
|
|
a6ade790c6 | ||
|
|
a9dae7823f | ||
|
|
86861f6ec3 | ||
|
|
d26a0fae17 | ||
|
|
375dba3264 | ||
|
|
74044754e2 | ||
|
|
64aed9b462 | ||
|
|
5428cafa50 | ||
|
|
735852b3c1 | ||
|
|
f4b5d43899 | ||
|
|
235b779dec | ||
|
|
2a39906993 | ||
|
|
e1b67e20ec | ||
|
|
df17840dbc | ||
|
|
9d52f80c2f | ||
|
|
0aa119af2c | ||
|
|
c2f70031d0 | ||
|
|
1a2beb941e | ||
|
|
01b2887b36 | ||
|
|
5286d4a97c | ||
|
|
bf6106f4dc | ||
|
|
82efc92413 | ||
|
|
34481df2e7 | ||
|
|
ad4631018a | ||
|
|
ef89eede17 | ||
|
|
6878877acd | ||
|
|
611a983461 | ||
|
|
8e913cb453 | ||
|
|
9d49264258 | ||
|
|
6098d62dcc | ||
|
|
580ceec6b3 | ||
|
|
79dca12274 | ||
|
|
66c25e7f29 | ||
|
|
dc4983a013 | ||
|
|
039959a48b | ||
|
|
63be25f5bb | ||
|
|
ce7489049f | ||
|
|
b3d5938665 | ||
|
|
579ed7e194 | ||
|
|
e20fac19ba | ||
|
|
9e9fb2979f | ||
|
|
7fc2824325 | ||
|
|
0728f540ab | ||
|
|
4913a5a5fa | ||
|
|
14dd2b8827 | ||
|
|
4e9e7eba48 | ||
|
|
f3bc604516 | ||
|
|
bd278e291a | ||
|
|
074820dae5 | ||
|
|
1089e84f56 | ||
|
|
ed3d81ce62 | ||
|
|
57aa0a0fe1 | ||
|
|
88a961180f | ||
|
|
1f8798d7ac | ||
|
|
bd8429a0ba | ||
|
|
af95d387b9 | ||
|
|
da348075e8 | ||
|
|
d24d3af87d | ||
|
|
085c0e76ca | ||
|
|
d7d98b29a7 | ||
|
|
cb3b03537c | ||
|
|
7c7bea5e3a | ||
|
|
9fc474504b | ||
|
|
412fd105c9 | ||
|
|
470a0c7b21 | ||
|
|
9968cba348 | ||
|
|
aee520a209 | ||
|
|
cf4201b084 | ||
|
|
76196ed42c | ||
|
|
6089a369e3 | ||
|
|
092db03729 | ||
|
|
239c14a5df | ||
|
|
8a6002c6be | ||
|
|
38781d33ac | ||
|
|
0518cdbe8e | ||
|
|
4849dacd52 | ||
|
|
7cf47520d4 | ||
|
|
8eb0a4e1cb | ||
|
|
ad2a7a2da3 | ||
|
|
6a9aa5eeda | ||
|
|
04524ae8e4 | ||
|
|
04caba9f5b | ||
|
|
cc1f831a6a | ||
|
|
331d280075 | ||
|
|
46ed61d38a | ||
|
|
ff5d3a5f0c | ||
|
|
626af84f42 | ||
|
|
b05ce12e7b | ||
|
|
274505188b | ||
|
|
f85209a72f | ||
|
|
291f0e79d9 | ||
|
|
64db5e2542 | ||
|
|
c4a2ff5fa1 | ||
|
|
9f5f0aeddd | ||
|
|
4d5612e845 | ||
|
|
371f174756 | ||
|
|
5676ff9b2e | ||
|
|
aa8c0fdad8 | ||
|
|
8284c673f9 | ||
|
|
cc02546ed3 | ||
|
|
d09132dd60 | ||
|
|
ec662d01d0 | ||
|
|
ad0b98e2a1 | ||
|
|
3cafad3bf4 | ||
|
|
fbea3ed94f | ||
|
|
0ab18e3069 | ||
|
|
2aa987c072 | ||
|
|
a06ddc439d | ||
|
|
f6944b8219 | ||
|
|
fa3cbb4645 | ||
|
|
6dfc72c065 | ||
|
|
0af6f91d21 | ||
|
|
4aeecfdfa9 | ||
|
|
79d4dcf5f1 | ||
|
|
26a6ef8c03 | ||
|
|
5e1f81e53e | ||
|
|
9cdcbb3125 | ||
|
|
35338e9ec6 | ||
|
|
78d83b8826 | ||
|
|
8edf06d28d | ||
|
|
ecd2a5cbac | ||
|
|
c0cf319521 | ||
|
|
bb9631476e | ||
|
|
386e8dd32e | ||
|
|
61616f708f | ||
|
|
8ce499e958 | ||
|
|
22587ee6b5 | ||
|
|
9b32d86f78 | ||
|
|
5ea8226996 | ||
|
|
fbffc6b2b5 | ||
|
|
cd01886eb2 | ||
|
|
bb8fd2b054 | ||
|
|
d8bc9c2982 | ||
|
|
d232694dec | ||
|
|
735ac55bb8 | ||
|
|
c9aab9b479 | ||
|
|
53c87f3d25 | ||
|
|
4f1fafdf75 | ||
|
|
330e7ac08e | ||
|
|
49fb913eab | ||
|
|
4b074365e7 | ||
|
|
0896000fcd | ||
|
|
e007aba067 | ||
|
|
a6eda2479f | ||
|
|
eff567ee48 | ||
|
|
d3c2c314ac | ||
|
|
89681977b5 | ||
|
|
e10a7ea9a6 | ||
|
|
c3c6d73bb2 | ||
|
|
5e2efca933 | ||
|
|
e71b0d82a1 | ||
|
|
c6c162cdda | ||
|
|
8b46d6c718 | ||
|
|
e24d5a6f83 | ||
|
|
e28fbf4617 | ||
|
|
0e4a040ed8 | ||
|
|
b84670d503 | ||
|
|
8725f7cfb2 | ||
|
|
83d8908ee8 | ||
|
|
af9ef83742 | ||
|
|
3eafdadd1f | ||
|
|
1d3272e9f8 | ||
|
|
447b8f0f0c | ||
|
|
aaf6e3bace | ||
|
|
44c61b8e7d | ||
|
|
8226f62ded | ||
|
|
d3b17f586d | ||
|
|
a556ba0959 | ||
|
|
ad40cd72ff | ||
|
|
9a22c3fce7 | ||
|
|
63e044ffdf | ||
|
|
2e794ee38f | ||
|
|
a1d4e062ed | ||
|
|
d2d2a28885 | ||
|
|
ead4242735 | ||
|
|
30a8c6b579 | ||
|
|
25df8f9c52 | ||
|
|
65d2389b2e | ||
|
|
7aa26580ba | ||
|
|
e4376bb9f2 | ||
|
|
f01657e1dd | ||
|
|
0c08126752 | ||
|
|
ea64adc2f9 | ||
|
|
ad8ec68443 | ||
|
|
5e5fe2ccf3 | ||
|
|
34ecd77bd4 | ||
|
|
6cf0fe0b73 | ||
|
|
3f8bf7cacc | ||
|
|
17128c5874 | ||
|
|
9e71c44c76 | ||
|
|
54c0268593 | ||
|
|
a5f0b2a81e | ||
|
|
a154bea016 | ||
|
|
2a34c8fa66 | ||
|
|
15a11daf38 | ||
|
|
5e88e24693 | ||
|
|
988c5c6a25 | ||
|
|
d98c46a275 | ||
|
|
185b206627 | ||
|
|
cfb04f7d8a | ||
|
|
dba0c9f373 | ||
|
|
ee60652746 | ||
|
|
fbc79eae62 | ||
|
|
b356a634d1 | ||
|
|
b2ed5a01b3 | ||
|
|
839b172b92 | ||
|
|
745e120a0b | ||
|
|
a0ac603260 | ||
|
|
181ddce887 | ||
|
|
50043f889b | ||
|
|
49d1c5140e | ||
|
|
ab7a07a318 | ||
|
|
306e7abb47 | ||
|
|
cec4dfa6c3 | ||
|
|
21813a7b83 | ||
|
|
293573a0cd | ||
|
|
8695228537 | ||
|
|
24866a3e25 | ||
|
|
e871edc8f3 | ||
|
|
517f1992a1 | ||
|
|
e6adf3a522 | ||
|
|
32e9fd291d | ||
|
|
8229a97ffb | ||
|
|
6612a3a550 | ||
|
|
c44be53673 | ||
|
|
5d6d9ab6d6 | ||
|
|
d100b0dc07 | ||
|
|
a0e9ac73c9 | ||
|
|
2bc78ccafb | ||
|
|
53aebf1448 | ||
|
|
2e9ce962df | ||
|
|
fa406d3ded | ||
|
|
93ad83d2ae | ||
|
|
72b1cc4d89 | ||
|
|
e70cca4736 | ||
|
|
d354c91d7c | ||
|
|
2d7b5e4aa2 | ||
|
|
b542a28673 | ||
|
|
ed52919f9e | ||
|
|
45a74a046c | ||
|
|
3192531d4c | ||
|
|
351bb760ae | ||
|
|
79a6baca6f | ||
|
|
f9645e8971 | ||
|
|
7611c83148 | ||
|
|
9881e6de3e | ||
|
|
53b4f0e0d5 | ||
|
|
9a645c24ca | ||
|
|
682d821b67 | ||
|
|
71afffaac1 | ||
|
|
a099876088 | ||
|
|
cf904a874e | ||
|
|
5a32a7ce18 | ||
|
|
6d6221636c | ||
|
|
8a4caaf6fb | ||
|
|
fa6d1879dd | ||
|
|
874b6c71a3 | ||
|
|
9be524ef89 | ||
|
|
fd8a2d4d92 | ||
|
|
0b270ee87a | ||
|
|
5cc5859211 | ||
|
|
bd489d5780 | ||
|
|
cd72ea524e | ||
|
|
56e8506cb9 | ||
|
|
c86be990d6 | ||
|
|
a24c56a9d5 | ||
|
|
95e38a037b | ||
|
|
256b800d0e | ||
|
|
b3c4c850db | ||
|
|
6b1f9d3243 | ||
|
|
117f1101e4 | ||
|
|
4284116280 | ||
|
|
d31b5ac99f | ||
|
|
b3f47bb2b6 | ||
|
|
64d8c7a657 | ||
|
|
4c3fcc3ea6 | ||
|
|
5ad47d3866 | ||
|
|
e698aa5822 | ||
|
|
1fdb23746a | ||
|
|
9cd5bdeb53 | ||
|
|
e6183b9a1d | ||
|
|
d83005fe4d | ||
|
|
2b84f1be00 | ||
|
|
bb45c67e60 | ||
|
|
147160ed45 | ||
|
|
515fb4e5db | ||
|
|
b6efc954bd | ||
|
|
eee05a4d01 | ||
|
|
dc97400dbf | ||
|
|
e16bedfab4 | ||
|
|
5a8e216dec | ||
|
|
1faf8225c7 | ||
|
|
bfbb531863 | ||
|
|
48ba73e06d | ||
|
|
c922322ed3 | ||
|
|
53aaffd0f5 | ||
|
|
63a70f2ffa | ||
|
|
d8e9086bde | ||
|
|
af4470ead1 | ||
|
|
7cda81ec68 | ||
|
|
b1153f8d01 | ||
|
|
54e21bf249 | ||
|
|
eebf329983 | ||
|
|
7b1d6c3937 | ||
|
|
e6803e9a9b | ||
|
|
0b24011468 | ||
|
|
2699c995ee | ||
|
|
697f6ee2a9 | ||
|
|
35429f6a93 | ||
|
|
29eae4eeb6 | ||
|
|
8de67b6945 | ||
|
|
4f63284d41 | ||
|
|
0c806024fb | ||
|
|
9a08aa2ab5 | ||
|
|
02f218389b | ||
|
|
d3ec9f022c | ||
|
|
4cd54e5a9a | ||
|
|
5225a99995 | ||
|
|
929f8ef720 | ||
|
|
6b4800d2d6 | ||
|
|
f60e4a1355 | ||
|
|
03897c5c9d | ||
|
|
ef90f1ff3f | ||
|
|
177a67f59b | ||
|
|
1e551581f8 | ||
|
|
62c2547557 | ||
|
|
2389ab30f8 | ||
|
|
fdffc27bb6 | ||
|
|
540d19c67c | ||
|
|
46eebdc7aa | ||
|
|
700c6ffc75 | ||
|
|
6b013c05cc | ||
|
|
f541bf186c | ||
|
|
9eb3075f65 | ||
|
|
e2b8dfe96a | ||
|
|
f883fde74a | ||
|
|
ae6f2624a0 | ||
|
|
ee2953a5e1 | ||
|
|
ec8ed65feb | ||
|
|
b70699ce1c | ||
|
|
5820f874fc | ||
|
|
44c0ecdbfa | ||
|
|
7be9db8b84 | ||
|
|
69d7684b0d | ||
|
|
a88582c610 | ||
|
|
3fd0c01c05 | ||
|
|
c16537aecf | ||
|
|
79f1eb6e5e | ||
|
|
fc67dd4d0a | ||
|
|
232dad66d1 | ||
|
|
ed30ec27e7 | ||
|
|
eaab82551f | ||
|
|
d343ff0d23 | ||
|
|
400b14e021 | ||
|
|
760c7b73ad | ||
|
|
97cadc3acf | ||
|
|
7d0117bd28 | ||
|
|
956682f2c7 | ||
|
|
4558e349b5 | ||
|
|
6f7b554cdc | ||
|
|
42e08284b0 | ||
|
|
127486fdf5 | ||
|
|
4ffe36e4d0 | ||
|
|
85403321cf | ||
|
|
22cea63863 | ||
|
|
c95c5bb471 | ||
|
|
cbabaa6b0c | ||
|
|
520ffecd36 | ||
|
|
b1e2b5ba8e | ||
|
|
896a4fe981 | ||
|
|
e9a2cacb5b | ||
|
|
c190296bf9 | ||
|
|
e411ad0eb1 | ||
|
|
17085e5578 | ||
|
|
33d6bb69c0 | ||
|
|
44629e6a0a | ||
|
|
78d61f157e | ||
|
|
3c0ba09a62 | ||
|
|
e57d325bd6 | ||
|
|
260bc93a66 | ||
|
|
a9296e2a39 | ||
|
|
8371703090 | ||
|
|
fc7da015fe | ||
|
|
adf222b5e8 | ||
|
|
ade22ea825 | ||
|
|
2c8fb90ecb | ||
|
|
c67644a2e3 | ||
|
|
346f6edd7e | ||
|
|
92f586486f | ||
|
|
15607becc6 | ||
|
|
e7c6d912a4 | ||
|
|
290f7e2101 | ||
|
|
460b5fb3a4 | ||
|
|
88e09eb279 | ||
|
|
5e0fbea3b3 | ||
|
|
7b2c3afe4c | ||
|
|
2e181d0fb1 | ||
|
|
68a03211ce | ||
|
|
37ba76fdd8 | ||
|
|
78954268ab | ||
|
|
b0528b62d8 | ||
|
|
2b4dfaef7f | ||
|
|
ad887c4b12 | ||
|
|
63c62df787 | ||
|
|
c68a67d148 | ||
|
|
bd8568809f | ||
|
|
0bfb2631df | ||
|
|
3c57f08ef7 | ||
|
|
a7b103e07a | ||
|
|
64e7150765 | ||
|
|
a888f9aa04 | ||
|
|
2e9dbda077 | ||
|
|
c474e65cae | ||
|
|
f59e19d93b | ||
|
|
8a33645360 | ||
|
|
339d8a7378 | ||
|
|
f2a19c56b1 | ||
|
|
a98fd509c6 | ||
|
|
a3149aecf4 | ||
|
|
6a6ae359b6 | ||
|
|
2fa1d812f6 | ||
|
|
ef825371cf | ||
|
|
b567775129 | ||
|
|
58d71bf8e3 | ||
|
|
9fd0b85ff2 | ||
|
|
a5e21ea5f3 | ||
|
|
98620887d4 | ||
|
|
9eff08144c | ||
|
|
4ba72bc8d3 | ||
|
|
f50a9c250a | ||
|
|
743979266a | ||
|
|
4f98c960ec | ||
|
|
424b624ea9 | ||
|
|
a004a8b092 | ||
|
|
df0f52aff9 | ||
|
|
f7bd72ba2f | ||
|
|
038c0e78a6 | ||
|
|
2a2cbcd68b | ||
|
|
be654e7a31 | ||
|
|
32bd74fe27 | ||
|
|
14da697a4e | ||
|
|
2525857c20 | ||
|
|
c97ada3434 | ||
|
|
c924790f3e | ||
|
|
a110f24b05 | ||
|
|
8eaef3e1d8 | ||
|
|
082caf98e8 | ||
|
|
60602a2264 | ||
|
|
9479f1c1a1 | ||
|
|
88bc7402a2 | ||
|
|
e7b3c3239b | ||
|
|
4f4c3ef3f3 | ||
|
|
d7b0719788 | ||
|
|
7a457e4509 | ||
|
|
decfeb366c | ||
|
|
420175f5ef | ||
|
|
bdfdc0402d | ||
|
|
bb8496cb3f | ||
|
|
4bdb94fbaa | ||
|
|
05c04a35a7 | ||
|
|
4385a02f6b | ||
|
|
397dd68666 | ||
|
|
edbb60f2b5 | ||
|
|
5bf9c253f2 | ||
|
|
b0cc177d84 | ||
|
|
c60f25fb7c | ||
|
|
4ab90b694f | ||
|
|
87636f27ba | ||
|
|
571cb6d0eb | ||
|
|
f738787202 | ||
|
|
4ae1b6e07b | ||
|
|
41b8f6882c | ||
|
|
43c5163f66 | ||
|
|
8a2a9b2ea6 | ||
|
|
c70272e756 | ||
|
|
843f5d0da1 | ||
|
|
2242397280 | ||
|
|
8a641e1b4f | ||
|
|
f86fb0d0a2 | ||
|
|
a863da1dce | ||
|
|
d7cae7d5bb | ||
|
|
19f4870280 | ||
|
|
ac51d0d569 | ||
|
|
218f526a92 | ||
|
|
161b45aa12 | ||
|
|
397629587c | ||
|
|
034098fd06 | ||
|
|
e03cc01e15 | ||
|
|
0995c56506 | ||
|
|
3a5fa2954d | ||
|
|
398480415e | ||
|
|
81013ed21a | ||
|
|
53360c147a | ||
|
|
9e47da3f03 | ||
|
|
faefe10c15 | ||
|
|
a4d3150a24 | ||
|
|
e1f0676891 | ||
|
|
792ac9b77d | ||
|
|
bbbd2f7e82 | ||
|
|
d910191e83 | ||
|
|
e8a9389e6d | ||
|
|
6dce13bc34 | ||
|
|
71cdea3902 | ||
|
|
85a6e8b47e | ||
|
|
f02ad63e97 | ||
|
|
977399a73e | ||
|
|
5d4a2f2064 | ||
|
|
c5ab6fa2fa | ||
|
|
b80bf0ffb6 | ||
|
|
bff7434921 | ||
|
|
da161c7ce0 | ||
|
|
977a47bc27 | ||
|
|
957640f163 | ||
|
|
291ef87c9b | ||
|
|
115bf0af4d | ||
|
|
e40f1fd11a | ||
|
|
797ddf6205 | ||
|
|
ca4e1c19a7 | ||
|
|
d2b906bc1b | ||
|
|
94dcaae12d | ||
|
|
df47679c7f | ||
|
|
d6f3b79f20 | ||
|
|
c7556d9163 | ||
|
|
16c3833a36 | ||
|
|
007e45ad8c | ||
|
|
b9b8b35342 | ||
|
|
dd82b0f958 | ||
|
|
f150c223bc | ||
|
|
e76290e598 | ||
|
|
4f771cfa7a | ||
|
|
aa3b26c965 | ||
|
|
f4cf04232f | ||
|
|
d36cf47974 | ||
|
|
f809da58ec | ||
|
|
ff1f01be8c | ||
|
|
0ddaa8f5c2 | ||
|
|
620bed73bb | ||
|
|
c177d2b97b | ||
|
|
0758c82983 | ||
|
|
ecc2ed7d73 | ||
|
|
4b779d7512 | ||
|
|
701911b766 | ||
|
|
5fea90491c | ||
|
|
d665b7e584 | ||
|
|
7a8bbdced8 | ||
|
|
affd8062e2 | ||
|
|
45b94ecaeb | ||
|
|
acda37e334 | ||
|
|
2cfc43a4fd | ||
|
|
fb789b7bd8 | ||
|
|
b906efb23b | ||
|
|
f249d6cb26 | ||
|
|
afb6e860ea | ||
|
|
435e042ae9 | ||
|
|
d64df5e3e7 | ||
|
|
bd59802ca4 | ||
|
|
7c98ade72b | ||
|
|
c6485f8e03 | ||
|
|
a083917db1 | ||
|
|
3b5f2b86d5 | ||
|
|
f08fbf7bca | ||
|
|
e2b227df34 | ||
|
|
4c51588270 | ||
|
|
b13ea72152 | ||
|
|
5a2907b670 | ||
|
|
b6f7c604c7 | ||
|
|
c5fb2cccd5 | ||
|
|
1d1e6ae782 | ||
|
|
bff33932d9 | ||
|
|
392b89e6dd | ||
|
|
5ae0a5cf1e | ||
|
|
1a1fb126c1 | ||
|
|
5c4db266a4 | ||
|
|
e5e0add1a2 | ||
|
|
e1d20b8ff8 | ||
|
|
c6a05d8853 | ||
|
|
c34bccf7e8 | ||
|
|
0441e7396a | ||
|
|
698eb53006 | ||
|
|
3804d2df8c | ||
|
|
7147cc267e | ||
|
|
29713de6cd | ||
|
|
46f40ee534 | ||
|
|
a882ad41c5 | ||
|
|
062e8c4b84 | ||
|
|
0f0ca51bd6 | ||
|
|
af654a171f | ||
|
|
186e06bc01 | ||
|
|
4cc9bdf5e4 | ||
|
|
e05e4bec32 | ||
|
|
5a3882f388 | ||
|
|
8ec2547b4a | ||
|
|
059c339c09 | ||
|
|
724f99f17c | ||
|
|
1b24276a4a | ||
|
|
ea006993f6 | ||
|
|
7a46159539 | ||
|
|
50faa40bad | ||
|
|
9d9305300c | ||
|
|
c89455f93f | ||
|
|
7c6d67f1ad | ||
|
|
8c4dda45ef | ||
|
|
db5e76fe8c | ||
|
|
5413a1aa79 | ||
|
|
e41104208a | ||
|
|
5fca606730 | ||
|
|
0de0b6fd06 | ||
|
|
db6dbc7821 | ||
|
|
e5171e434b | ||
|
|
2df7d99a91 | ||
|
|
6def541e78 | ||
|
|
5af506e268 | ||
|
|
967919b400 | ||
|
|
575f09d97f | ||
|
|
c28383de4f | ||
|
|
c496519095 | ||
|
|
ecaa9a1d56 | ||
|
|
d34a0a9fc0 | ||
|
|
b202b43bf5 | ||
|
|
648dd73fa1 | ||
|
|
1640a8aa7d | ||
|
|
698a6bf91c | ||
|
|
c409d7ff2a | ||
|
|
f8dd175837 | ||
|
|
195c6a4089 | ||
|
|
6c431ae5ed | ||
|
|
8c01a77a7a | ||
|
|
239c68a33c | ||
|
|
df3212c304 | ||
|
|
4026c2be4f | ||
|
|
c6614bc85b | ||
|
|
31b3af4129 | ||
|
|
c4b0c44919 | ||
|
|
223ca95829 | ||
|
|
b9ae68d559 | ||
|
|
e7470e31a0 | ||
|
|
1b6d0c9bbc | ||
|
|
75639c53f0 | ||
|
|
587387dd46 | ||
|
|
ffb3c044fa | ||
|
|
921f75beba | ||
|
|
f739259407 | ||
|
|
173b28062e | ||
|
|
4f51f73b89 | ||
|
|
ca968a9e31 | ||
|
|
2957e1d78a | ||
|
|
d1b989ac12 | ||
|
|
e3047ee450 | ||
|
|
f45478260e | ||
|
|
1bfd26ee8f | ||
|
|
bbdb7375ff | ||
|
|
23322455a3 | ||
|
|
c1d4d3fc8a | ||
|
|
fc40e54261 | ||
|
|
87e833d373 | ||
|
|
dcfa9c4c0b | ||
|
|
c231b3cb79 | ||
|
|
1f468f81cc | ||
|
|
494f8d2153 | ||
|
|
0f822b2761 | ||
|
|
5ac332960e | ||
|
|
dfb462cf35 | ||
|
|
342ae6e5e2 | ||
|
|
eaf195e0c8 | ||
|
|
9460cfdc55 | ||
|
|
c44bc60667 | ||
|
|
8d6801bb85 | ||
|
|
c22b6b29e0 | ||
|
|
44997f5cd1 | ||
|
|
95f4195ca7 | ||
|
|
73eb585398 | ||
|
|
57d381b990 | ||
|
|
e5ba6ff496 | ||
|
|
128023d34e | ||
|
|
653f80f7d8 | ||
|
|
d06d4ba437 | ||
|
|
2a68bdb690 | ||
|
|
5f6a10ef22 | ||
|
|
2ad19ddd36 | ||
|
|
5fc9f5f3f9 | ||
|
|
b9632a7814 | ||
|
|
f336435adb | ||
|
|
9e83368f87 | ||
|
|
d619a7a2d7 | ||
|
|
012fb1f50b | ||
|
|
d64b575e60 | ||
|
|
aec2c2d5cd | ||
|
|
0d06d5ccee | ||
|
|
74fdaad032 | ||
|
|
d3bf0c1d8e | ||
|
|
27ce273d29 | ||
|
|
cd60ad4267 | ||
|
|
56e01046c8 | ||
|
|
518a413de7 | ||
|
|
29923af17d | ||
|
|
99a5774148 | ||
|
|
46fdd15857 | ||
|
|
42cd333694 | ||
|
|
aaa69f696b | ||
|
|
8ce9dcf4aa | ||
|
|
130ded91ff | ||
|
|
851465da62 | ||
|
|
b85f335561 | ||
|
|
7b36709e18 | ||
|
|
0d50cdb0f5 | ||
|
|
eec2ff043e | ||
|
|
0480f391d3 | ||
|
|
36c98e919a | ||
|
|
0e68e8069b | ||
|
|
7aa801fc1f | ||
|
|
fc080f785b | ||
|
|
1a6c9be065 | ||
|
|
b55c2d3dbc | ||
|
|
720fb0f73e | ||
|
|
0985314fb7 | ||
|
|
e759b4846a | ||
|
|
dacc2444c4 | ||
|
|
8ea3608bf1 | ||
|
|
eecfce3cc9 | ||
|
|
a402c79287 | ||
|
|
a459230aa9 | ||
|
|
e4f57ab2fe | ||
|
|
6a9ac6f90a | ||
|
|
6883b71ce7 | ||
|
|
70552d58ac | ||
|
|
c7bda4d0be | ||
|
|
e4e20c8007 | ||
|
|
2fbcd9aaf7 | ||
|
|
ee667634ab | ||
|
|
7a8c69a6f9 | ||
|
|
723db97094 | ||
|
|
65be882b49 | ||
|
|
48765cc87d | ||
|
|
e2f6191229 | ||
|
|
19126b7c6d | ||
|
|
a76bef1a28 | ||
|
|
a259bd8c3a | ||
|
|
4001953fd7 | ||
|
|
9a6df54832 | ||
|
|
29327bbc5d | ||
|
|
bcb3a707f4 | ||
|
|
0a67af4f46 | ||
|
|
b3c0b36ba6 | ||
|
|
a3783b0113 | ||
|
|
059dca905c | ||
|
|
02d908df1e | ||
|
|
1a95e459eb | ||
|
|
ae0c5a0c09 | ||
|
|
6f238f5f1a | ||
|
|
6cec8bcda8 | ||
|
|
d388b4d814 | ||
|
|
d9dac00a01 | ||
|
|
4961d9bb89 | ||
|
|
89e319c7a2 | ||
|
|
f7e56cbffe | ||
|
|
3f115a7657 | ||
|
|
8fad8a1ce9 | ||
|
|
1b242a905b | ||
|
|
c6e766f5c6 | ||
|
|
055bd77bd6 | ||
|
|
76f34e3eaf | ||
|
|
acf3f5013c | ||
|
|
7f6edefad4 | ||
|
|
60fc621cd4 | ||
|
|
bf4776a33c | ||
|
|
81a59f48e6 | ||
|
|
68eb04741d | ||
|
|
1037d814ec | ||
|
|
e201f3536a | ||
|
|
3cb368c4de | ||
|
|
df9f6ce33a | ||
|
|
b3c87156c2 | ||
|
|
d29a633529 | ||
|
|
c92b451033 | ||
|
|
3122d0cc6b | ||
|
|
f1eaa20e47 | ||
|
|
1d8b02055e | ||
|
|
a7f4bf8289 | ||
|
|
8b0c60a046 | ||
|
|
3d4776f577 | ||
|
|
8a539dc514 | ||
|
|
a707e7abf4 | ||
|
|
0fc9b2f203 | ||
|
|
9a4b72606d | ||
|
|
0a02e5be83 | ||
|
|
2467464433 | ||
|
|
eb68ab6776 | ||
|
|
44b85d252d | ||
|
|
38d6fddc61 | ||
|
|
299007f66e | ||
|
|
47a92c8be8 | ||
|
|
9bc6cf7067 | ||
|
|
521d95021b | ||
|
|
5bc4d07aad | ||
|
|
51aa9a0d6e | ||
|
|
64d3ec940c | ||
|
|
6c37f2ce71 | ||
|
|
75bd38885b | ||
|
|
b499640db8 | ||
|
|
999a9da299 | ||
|
|
441a59305b | ||
|
|
b74f5a0a33 | ||
|
|
7d732eb73b | ||
|
|
44b68326a0 | ||
|
|
d5732d7731 | ||
|
|
4e3d48fe7d | ||
|
|
c7acfd4d4e | ||
|
|
af6d738d56 | ||
|
|
06e6fec4ca | ||
|
|
12943cc808 | ||
|
|
bbde7141b0 | ||
|
|
f6ad1c6aa7 | ||
|
|
c1127ec429 | ||
|
|
6ec734df13 | ||
|
|
867f7f3f59 | ||
|
|
1c52303bb3 | ||
|
|
876e6caa23 | ||
|
|
34f07b4376 | ||
|
|
ffc28c8485 | ||
|
|
913e9ef6e0 | ||
|
|
14fb9c76b0 | ||
|
|
c5435009d7 | ||
|
|
1d3132e447 | ||
|
|
63eb22c7ac | ||
|
|
657c54efd4 | ||
|
|
4f1f632a7d | ||
|
|
7e83d3a54d | ||
|
|
c11cf41f30 | ||
|
|
8d30d5d689 | ||
|
|
01910d3231 | ||
|
|
e22af42cd0 | ||
|
|
70c9292413 | ||
|
|
c16f7a5e02 | ||
|
|
b9c22fcbc8 | ||
|
|
4012ec7498 | ||
|
|
7d6d466284 | ||
|
|
36842f4a58 | ||
|
|
dc62cf4805 | ||
|
|
ed8acc7ee3 | ||
|
|
4116fe0a20 | ||
|
|
a4e99662cb | ||
|
|
c6d4eb486e | ||
|
|
c2308b7a5d | ||
|
|
3e07c08043 | ||
|
|
5a3c50d9fb | ||
|
|
3e4a9f63fa | ||
|
|
6d4ef4ee3d | ||
|
|
20ff5627d8 | ||
|
|
1d26fd6bf0 | ||
|
|
a9c0daa51a | ||
|
|
e3b2bbdca5 | ||
|
|
d905f7cc26 | ||
|
|
fe3f24cdb0 | ||
|
|
971c709e87 | ||
|
|
7f78937543 | ||
|
|
41dac2bd1b | ||
|
|
85bf2a5706 | ||
|
|
ce7937a3a3 | ||
|
|
7bb9d33245 | ||
|
|
1be89c094b | ||
|
|
73ad557784 | ||
|
|
9f744153e3 | ||
|
|
0c196ae3a5 | ||
|
|
a904e82d72 | ||
|
|
15ed381f85 | ||
|
|
180051d252 | ||
|
|
a19c58703f | ||
|
|
fc43d9222a | ||
|
|
af6bf08243 | ||
|
|
fb6a0bc2a6 | ||
|
|
1f61c1b3b6 | ||
|
|
fc69f3b8f3 | ||
|
|
d4658b9c2a | ||
|
|
84f72edf1d | ||
|
|
552d872047 | ||
|
|
47235965d5 | ||
|
|
24e4455e91 | ||
|
|
ea35b0c800 | ||
|
|
1a30087426 | ||
|
|
5e9d004ca2 | ||
|
|
513d1c020c | ||
|
|
05231bd1c2 | ||
|
|
b816773d02 | ||
|
|
3c49ea6cb1 | ||
|
|
539eac4be7 | ||
|
|
8a6ead6d86 | ||
|
|
01a7ed8311 | ||
|
|
cf6330dee6 | ||
|
|
6c39b6f548 | ||
|
|
e7ef1b86cc | ||
|
|
3663d56917 | ||
|
|
135064a18f | ||
|
|
7233f58767 | ||
|
|
78238381a7 | ||
|
|
ca03c41205 | ||
|
|
9b8474a728 | ||
|
|
ecfce409d8 | ||
|
|
b091e2222e | ||
|
|
e8b8198eb8 | ||
|
|
261f1f0bf2 | ||
|
|
8588ed5eec | ||
|
|
f161488c13 | ||
|
|
563808144e | ||
|
|
3c1f826ead | ||
|
|
b2a63afc28 | ||
|
|
86d3a695ac | ||
|
|
7f566178d3 | ||
|
|
4af55d055e | ||
|
|
be000be960 | ||
|
|
afb6180cce | ||
|
|
d63156a0d6 | ||
|
|
2556cd5aaa | ||
|
|
7109a12afd | ||
|
|
700e9fd912 | ||
|
|
6547b66228 | ||
|
|
e9090b9154 | ||
|
|
5b73fe949e | ||
|
|
35fab7a23c | ||
|
|
bf6d79f4ad | ||
|
|
24286c2a6c | ||
|
|
09641d9465 | ||
|
|
e70a7bad1a | ||
|
|
d386966342 | ||
|
|
09cfaeb9c4 | ||
|
|
934b1ad8c6 | ||
|
|
80dcb45415 | ||
|
|
ad8b7f67b1 | ||
|
|
67b8f3206c | ||
|
|
b965f77f4a | ||
|
|
84fc00465e | ||
|
|
9b0c8a19f9 | ||
|
|
8e7d26bf4f | ||
|
|
df351a8d09 | ||
|
|
9ce0421ae7 | ||
|
|
c85ec957ec | ||
|
|
e93dd176c0 | ||
|
|
10676a8d0c | ||
|
|
8abcf571e8 | ||
|
|
78bca2477d | ||
|
|
f241bc564c | ||
|
|
65942213de | ||
|
|
28f620d51d | ||
|
|
aebdbdf8be | ||
|
|
bb3734052a | ||
|
|
9a691c8227 | ||
|
|
3bd2732cee | ||
|
|
ddb57e35f3 | ||
|
|
d1f3ce0957 | ||
|
|
d73da33b08 | ||
|
|
201ef7fcd5 | ||
|
|
5705efc998 | ||
|
|
2694bcff67 | ||
|
|
df7c089344 | ||
|
|
6dee1f38f7 | ||
|
|
87e2f50c6d | ||
|
|
616e2c1c29 | ||
|
|
2335e40262 | ||
|
|
3a07c5fcc0 | ||
|
|
3c26e00fe1 | ||
|
|
fc920becac | ||
|
|
8d608c3c1c | ||
|
|
08aa65bddb | ||
|
|
54900b35dc | ||
|
|
7696702a2a | ||
|
|
42cade17cb | ||
|
|
7565458332 | ||
|
|
b86dbc088d | ||
|
|
0681ec9057 | ||
|
|
912f79f1af | ||
|
|
82c596d1e3 | ||
|
|
b6f1611218 | ||
|
|
869c910801 | ||
|
|
b3097b59c7 | ||
|
|
5ec359e929 | ||
|
|
ffd73c0e57 | ||
|
|
12af3d05f0 | ||
|
|
30b2d15f3d | ||
|
|
23c06ebed8 | ||
|
|
8acd3851b0 | ||
|
|
1f6222a653 | ||
|
|
8a39699acd | ||
|
|
dff2d3e989 | ||
|
|
53affed8d3 | ||
|
|
a316ac5b35 | ||
|
|
aed0a8126c | ||
|
|
edff1be16d | ||
|
|
0beee408cf | ||
|
|
e5fdd5128a | ||
|
|
46deceedc9 | ||
|
|
3ebfaec1bc | ||
|
|
4c93334d90 | ||
|
|
7c90f1a56d | ||
|
|
c727a2bc1b | ||
|
|
6c43b92bf1 | ||
|
|
ef6b7a85d5 | ||
|
|
6d990de450 | ||
|
|
91bc9eec93 | ||
|
|
698ffd886d | ||
|
|
5a37547b37 | ||
|
|
80887fd3c1 | ||
|
|
5444cc2009 | ||
|
|
b8a89ee52a | ||
|
|
bed0db9fa0 | ||
|
|
1afa32502f | ||
|
|
d825a1a45a | ||
|
|
0e41f9d1bc | ||
|
|
0f92468ab2 | ||
|
|
f890e9917f | ||
|
|
8902cb3117 | ||
|
|
61a0397963 | ||
|
|
8f5983fa01 | ||
|
|
fb1b6ea34a | ||
|
|
cce55eee63 | ||
|
|
20975fc635 | ||
|
|
e42c527a19 | ||
|
|
500946c10b | ||
|
|
f3662d1048 | ||
|
|
82d71797a7 | ||
|
|
e82fa5ee82 | ||
|
|
3e7aa3d762 | ||
|
|
57c5b6d61f | ||
|
|
e6358afb62 | ||
|
|
4ca59dcc5c | ||
|
|
9114b1befb | ||
|
|
52812c27a1 | ||
|
|
377922eccf | ||
|
|
0d2a112839 | ||
|
|
ea20d23d11 | ||
|
|
1dfc37704f | ||
|
|
27261683bb | ||
|
|
1e5c18f6ff | ||
|
|
5cbcf6e6be | ||
|
|
0c4e5d2a19 | ||
|
|
570fabdc4a | ||
|
|
89a4165c77 | ||
|
|
1ad406ced5 | ||
|
|
7cdc181b47 | ||
|
|
af16a5856a | ||
|
|
ea3bce25d9 | ||
|
|
9b4ef6ea5e | ||
|
|
c2c724aa00 | ||
|
|
95bbf5f405 | ||
|
|
12b3302687 | ||
|
|
c575d47f0e | ||
|
|
02affece91 | ||
|
|
2f1a7e2093 | ||
|
|
4fc686bbbc | ||
|
|
d1a763feef | ||
|
|
6972ae889a | ||
|
|
19c65e240e | ||
|
|
ef49d20470 | ||
|
|
0d4275a260 | ||
|
|
dbf1ac1e9d | ||
|
|
e7db262559 | ||
|
|
3faae63b84 | ||
|
|
94867e07df | ||
|
|
33c272e86a | ||
|
|
aa4dade1e5 | ||
|
|
7435cd4dc6 | ||
|
|
194ae41d19 | ||
|
|
42e262a1c2 | ||
|
|
ae46b3df58 | ||
|
|
e51276f532 | ||
|
|
2e1bef2df7 | ||
|
|
6b3077df0e | ||
|
|
1434effa22 | ||
|
|
67e69f1940 | ||
|
|
046db503d3 | ||
|
|
9827e30a61 | ||
|
|
e21a1b56fa | ||
|
|
08e12e7349 | ||
|
|
5ed1631a35 | ||
|
|
8ac776f305 | ||
|
|
981fac8e50 | ||
|
|
8bb8ab96f1 | ||
|
|
0b0d1b59b9 | ||
|
|
57609a5952 | ||
|
|
4f86d769be | ||
|
|
6cb5144c09 | ||
|
|
aee350b07b | ||
|
|
5ca7e39852 | ||
|
|
540aba39db | ||
|
|
9a8e677baf | ||
|
|
c5bc23d511 | ||
|
|
7ac8dc6785 | ||
|
|
049261a8ee | ||
|
|
1d037d3f0f | ||
|
|
b45df29937 | ||
|
|
ec087ed328 | ||
|
|
9707094686 | ||
|
|
eb8e5eafb6 | ||
|
|
e140daa952 | ||
|
|
3255607b09 | ||
|
|
36c210d0dd | ||
|
|
595e16cc6f | ||
|
|
40bbe380d3 | ||
|
|
683b4ac73a | ||
|
|
e0ad256194 | ||
|
|
0468ca6814 | ||
|
|
6ebf7ae94e | ||
|
|
5ccaf8b3b9 | ||
|
|
0e01c19414 | ||
|
|
1347d3fcc2 | ||
|
|
ebd715ca1b | ||
|
|
73574ac890 | ||
|
|
ca44edd48c | ||
|
|
312ffc110a | ||
|
|
bc87bf12cf | ||
|
|
11412a258b | ||
|
|
bc35efd565 | ||
|
|
416a723160 | ||
|
|
10322c5d0f | ||
|
|
7775d90b9a | ||
|
|
fac9fef652 | ||
|
|
f0ab1fb5a1 | ||
|
|
f86fb129b6 | ||
|
|
63cabb13b6 | ||
|
|
d3ee0aa8a8 | ||
|
|
6256bcde2d | ||
|
|
df3fdb59c5 | ||
|
|
4cec856e21 | ||
|
|
8a43688a65 | ||
|
|
7edcd5d746 | ||
|
|
ec6d93b34f | ||
|
|
0c6efb0cb7 | ||
|
|
f8fd8e47a9 | ||
|
|
566111ce82 | ||
|
|
7ba619c71d | ||
|
|
b678d87c80 | ||
|
|
4aaa0f8d8c | ||
|
|
1bfc5fb77f | ||
|
|
63f0e441b9 | ||
|
|
041b4ea442 | ||
|
|
2115b76047 | ||
|
|
117db9f1cc | ||
|
|
b530bc548f | ||
|
|
8e23c15763 | ||
|
|
23e9bcfdc5 | ||
|
|
96c4934c00 | ||
|
|
31fb02f810 | ||
|
|
5fdb462ed5 | ||
|
|
7d76fb8bf5 | ||
|
|
0f7fa7a7b7 | ||
|
|
e206d9cc68 | ||
|
|
2d33f570f4 | ||
|
|
15f8173add | ||
|
|
51bbc23270 | ||
|
|
7609bc78ec | ||
|
|
b4ac41eff8 | ||
|
|
f9bee7cd4e | ||
|
|
f272238dde | ||
|
|
433003cf38 | ||
|
|
773cefe21d | ||
|
|
88fa51a34e | ||
|
|
4211d0feda | ||
|
|
de1c76ee3c | ||
|
|
ec4fac421b | ||
|
|
f587e0dfd9 | ||
|
|
b5214e6cea | ||
|
|
5fbaed61c1 | ||
|
|
9ce3e7e7d2 | ||
|
|
e1cd09df36 | ||
|
|
27b55eb3ee | ||
|
|
8fcc76ad6d | ||
|
|
ab0f0c5ced | ||
|
|
4837dd050b | ||
|
|
c0c38a4b49 | ||
|
|
15a9ff4450 | ||
|
|
0a4f419e5e | ||
|
|
7fa531b3d6 | ||
|
|
3cfca27b54 | ||
|
|
93f0596b16 | ||
|
|
b204014a11 | ||
|
|
98b579524c | ||
|
|
88586b0f25 | ||
|
|
103aa95ccf | ||
|
|
339a6d7817 | ||
|
|
f252badba6 | ||
|
|
fe27c80078 | ||
|
|
8052574950 | ||
|
|
f19adf3ee0 | ||
|
|
dcf31f8f95 | ||
|
|
93dd9274e7 | ||
|
|
cce3f9a700 | ||
|
|
01155ad535 | ||
|
|
ee217d6306 | ||
|
|
ca35527aeb | ||
|
|
388dcadef3 | ||
|
|
8905148dbc | ||
|
|
daa36192cc | ||
|
|
ade77e5fb8 | ||
|
|
f250b72563 | ||
|
|
37cb5f5e9a | ||
|
|
82fcc97ed2 | ||
|
|
53e9c8cdac | ||
|
|
541d451168 | ||
|
|
7c64dc9440 | ||
|
|
27570a7756 | ||
|
|
d6931f7441 | ||
|
|
7d39d080f5 | ||
|
|
13ccd2ba67 | ||
|
|
81fd7397e4 | ||
|
|
6f75f944a3 | ||
|
|
308b0f7464 | ||
|
|
678e883044 | ||
|
|
819cf0907d | ||
|
|
942f17b2f4 | ||
|
|
2085dc5ed4 | ||
|
|
a1d1b4580a | ||
|
|
9e089cc7cd | ||
|
|
cd622cbdd7 | ||
|
|
4978a3ff1a | ||
|
|
fca0b82610 | ||
|
|
6cef1082b2 | ||
|
|
37eb16b2f3 | ||
|
|
c24c807921 | ||
|
|
5bc629d1c7 | ||
|
|
04379b4e1f | ||
|
|
c51e6107a1 | ||
|
|
bb7ad496bf | ||
|
|
c50d8e85dc | ||
|
|
1d8664927d | ||
|
|
dbb5d02ecf | ||
|
|
593a275795 | ||
|
|
6778e1e60e | ||
|
|
36308c307b | ||
|
|
078fc420b0 | ||
|
|
8ec814c29f | ||
|
|
e87e065100 | ||
|
|
8318ab7ac0 | ||
|
|
87b75a9a22 | ||
|
|
8df3b0a5bd | ||
|
|
6906c82408 | ||
|
|
45edef2d71 | ||
|
|
bf49648896 | ||
|
|
91d23c540a | ||
|
|
1cbf918024 | ||
|
|
26f3c1d453 | ||
|
|
c421ee79b0 | ||
|
|
77f8474d83 | ||
|
|
9a04a76672 | ||
|
|
963c18b8e4 | ||
|
|
bbbad67764 | ||
|
|
3491e71084 | ||
|
|
c85f70e197 | ||
|
|
3df712b64f | ||
|
|
160bd0a790 | ||
|
|
81e0c6dcc2 | ||
|
|
11bd48a1b5 | ||
|
|
61657087f5 | ||
|
|
87f436c6ea | ||
|
|
065e4f55c3 | ||
|
|
92adcf82e4 | ||
|
|
06e0f2418c | ||
|
|
35c4c61d15 | ||
|
|
a168edb168 | ||
|
|
d2975bbd21 | ||
|
|
358e8c548c | ||
|
|
f85ed672cc | ||
|
|
83f1a68bfd | ||
|
|
552e5d7d06 | ||
|
|
9c7f8cf5d8 | ||
|
|
f0f9274a3c | ||
|
|
65c725c21e | ||
|
|
dfa30358c5 | ||
|
|
2394fe6ed9 | ||
|
|
6cae68288d | ||
|
|
83afb89a16 | ||
|
|
93cc6b12ec | ||
|
|
dc35df9f63 | ||
|
|
1a4bc0b989 | ||
|
|
a37d75a08f | ||
|
|
8d510a3fdd | ||
|
|
7bcd1c3009 | ||
|
|
5dab189815 | ||
|
|
a9dc62505d | ||
|
|
26e1ff4e16 | ||
|
|
b3763eed61 | ||
|
|
f9c01851ef | ||
|
|
6b61b0604a | ||
|
|
f705c432fd | ||
|
|
70edd9a210 | ||
|
|
0a45b58784 | ||
|
|
dbd312c88d | ||
|
|
11578b1bc3 | ||
|
|
569c80f551 | ||
|
|
3b58b83f8b | ||
|
|
643a5e5b16 | ||
|
|
4e4010e15e | ||
|
|
6bdaf050c5 | ||
|
|
05c8c6cfaa | ||
|
|
2441515666 | ||
|
|
c42bcd6c59 | ||
|
|
fc95bb8f18 | ||
|
|
cb88f316db | ||
|
|
e19ddc10d3 | ||
|
|
d3e86acfaa | ||
|
|
536643ed3b | ||
|
|
9771b441ad | ||
|
|
c295fdb142 | ||
|
|
ee7aa3d3da | ||
|
|
e437a9d70f | ||
|
|
a8655fcd27 | ||
|
|
aefc9f1593 | ||
|
|
73671671d7 | ||
|
|
f53a93e828 | ||
|
|
e156c6292b | ||
|
|
e365521d5e | ||
|
|
f354821f25 | ||
|
|
82e278a2a2 | ||
|
|
b4d4606c73 | ||
|
|
b14b7b6ad1 | ||
|
|
32aa7bb540 | ||
|
|
300f4ad357 | ||
|
|
cf6b5c3b6e | ||
|
|
f1c9dda366 | ||
|
|
7f01032b6d | ||
|
|
f08afd4723 | ||
|
|
afe2a03aef | ||
|
|
272bb136d8 | ||
|
|
27d0388d79 | ||
|
|
025032de42 | ||
|
|
15a3b42124 | ||
|
|
4266156cee | ||
|
|
45a66ab694 | ||
|
|
49f4ce7149 | ||
|
|
220df662ad | ||
|
|
6e535bac05 | ||
|
|
3b1dcc7199 | ||
|
|
ae75ac424f | ||
|
|
5c46fe792d | ||
|
|
a33b0f1e1c | ||
|
|
bd28ed07d7 | ||
|
|
12185fbd32 | ||
|
|
24911da8db | ||
|
|
da84d16421 | ||
|
|
53666cbfe8 | ||
|
|
8897d98bd9 | ||
|
|
93e485cea9 | ||
|
|
22363f5b74 | ||
|
|
2a2c82cd29 | ||
|
|
5ebe717da8 | ||
|
|
2f2d8327e4 | ||
|
|
a894c19c2b | ||
|
|
0469962c5e | ||
|
|
f6ebc76917 | ||
|
|
73425ec29d | ||
|
|
51e5f591b2 | ||
|
|
d1b3d8a58a | ||
|
|
534c71491b | ||
|
|
987f8e9961 | ||
|
|
a45cf033aa | ||
|
|
06b6097f29 | ||
|
|
75c8e700d4 | ||
|
|
c1092c97b5 | ||
|
|
a04becc4ec | ||
|
|
f7d6bda49d | ||
|
|
b250f0a3bf | ||
|
|
df1d94ec61 | ||
|
|
e00fcd93a1 | ||
|
|
0a95d0f6f5 | ||
|
|
569b8898ef | ||
|
|
102bfcebd0 | ||
|
|
091d6a1cf1 | ||
|
|
228564f843 | ||
|
|
17dd6141fb | ||
|
|
2f57d55bea | ||
|
|
0cd690d980 | ||
|
|
316a2aee1a | ||
|
|
77ce56ba84 | ||
|
|
eba824a5b1 | ||
|
|
c9e72f8fb9 | ||
|
|
4dd3fd9674 | ||
|
|
1690a55f7d | ||
|
|
dd29fc26e3 | ||
|
|
67b5921d6c | ||
|
|
1b7bcc5cc1 | ||
|
|
ea56bb772a | ||
|
|
9f33791922 | ||
|
|
d940590add | ||
|
|
a009b4cb6d | ||
|
|
781be527ce | ||
|
|
f7e5d8f62d | ||
|
|
d6c0fc734f | ||
|
|
db79b5ff53 | ||
|
|
18d439dd44 | ||
|
|
d2d2a6c086 | ||
|
|
5260689b8e | ||
|
|
78a2863b78 | ||
|
|
5481375347 | ||
|
|
4da2d2f516 | ||
|
|
23de8e881d | ||
|
|
59e8720866 | ||
|
|
67cce5f817 | ||
|
|
9924727729 | ||
|
|
6c9fc364a3 | ||
|
|
40598d2663 | ||
|
|
1aeb674733 | ||
|
|
832cac106e | ||
|
|
23daaa2387 | ||
|
|
d6016f9b81 | ||
|
|
1dfde76b95 | ||
|
|
83f8fac088 | ||
|
|
0ca9bff61b | ||
|
|
df91192b97 | ||
|
|
97fd550402 | ||
|
|
eb579de199 | ||
|
|
5f2984aa57 | ||
|
|
98a79f6475 | ||
|
|
c09da2b7eb | ||
|
|
600f74576d | ||
|
|
a21c49cba7 | ||
|
|
91e3dd022a | ||
|
|
478eca47f4 | ||
|
|
1c4358086d | ||
|
|
0917fc8be1 | ||
|
|
6833959f3b | ||
|
|
398376108d | ||
|
|
61aa029582 | ||
|
|
46eaa63625 | ||
|
|
1b54596c5e | ||
|
|
2feb778d8d | ||
|
|
2075e89239 | ||
|
|
be44431fde | ||
|
|
99cc4078c6 | ||
|
|
b8b6b38a20 | ||
|
|
efd8556129 | ||
|
|
b10a76f150 | ||
|
|
780b520506 | ||
|
|
3055ed86ec | ||
|
|
4fc3305080 | ||
|
|
d1b39ee8fa | ||
|
|
52b118df7f | ||
|
|
a97a7cdcdd | ||
|
|
1aff3db81f | ||
|
|
fc89e098b1 | ||
|
|
64172a7f6b | ||
|
|
66a6c76552 | ||
|
|
c8884f1917 | ||
|
|
4933b901f6 | ||
|
|
b679f4218d | ||
|
|
77c6c4617b | ||
|
|
8240a208dd | ||
|
|
1c34f73f61 | ||
|
|
a5444fd6ad | ||
|
|
6fbd5a77e4 | ||
|
|
c102089731 | ||
|
|
742ec44f55 | ||
|
|
7495777d97 | ||
|
|
da4f26d7ce | ||
|
|
fa2ffd7574 | ||
|
|
d4325db207 | ||
|
|
48d93cb3da | ||
|
|
2248d98cc7 | ||
|
|
ce046b2e20 | ||
|
|
4f4cbccf08 | ||
|
|
412c745e53 | ||
|
|
28df5d4aa2 | ||
|
|
42e85aefdc | ||
|
|
91e78998d1 | ||
|
|
6f406f9aa2 | ||
|
|
86fa80f3eb | ||
|
|
7119d08022 | ||
|
|
916ff5f2ee | ||
|
|
913d2c06f3 | ||
|
|
cbb5b31f72 | ||
|
|
91dec23d5e | ||
|
|
d04d356429 | ||
|
|
be59f248e8 | ||
|
|
2d2641dbd7 | ||
|
|
96f4230bc1 | ||
|
|
1995b54770 | ||
|
|
7159b13c9d | ||
|
|
f2732bcab7 | ||
|
|
0e9d76890b | ||
|
|
9df521109b | ||
|
|
75b65c396e | ||
|
|
d4d48f3834 | ||
|
|
b90ba3d1a9 | ||
|
|
c448d34a38 | ||
|
|
c33bc7e12c | ||
|
|
c5366abf75 | ||
|
|
2532ea525d | ||
|
|
d74371c9f5 | ||
|
|
9ee1c9f3da | ||
|
|
82ba0d5b1d | ||
|
|
590eea1183 | ||
|
|
e6f3cc7988 | ||
|
|
7a650c605c | ||
|
|
dfa7c64b1f | ||
|
|
82b2871a08 | ||
|
|
e3114e0602 | ||
|
|
e8acf3f9f3 | ||
|
|
2b10023055 | ||
|
|
e25a904a84 | ||
|
|
dcba6ad70d | ||
|
|
ffdd917717 | ||
|
|
168645cce9 | ||
|
|
f4c81ecefb | ||
|
|
5a85fe92aa | ||
|
|
feffd57f24 | ||
|
|
faf81ae056 | ||
|
|
003fec4b11 | ||
|
|
5ecb603e86 | ||
|
|
1fed71a92e | ||
|
|
dad82ea4e8 | ||
|
|
a38ccde8bc | ||
|
|
8120f1bf25 | ||
|
|
067251861d | ||
|
|
6bc8773d5f | ||
|
|
f92016f9ec | ||
|
|
4e31af8c84 | ||
|
|
7e48d214ca | ||
|
|
a910034c96 | ||
|
|
257cc66f62 | ||
|
|
00f24bdb63 | ||
|
|
fada3fe623 | ||
|
|
d97e454463 | ||
|
|
3128a7d62f | ||
|
|
b8fe9a41db | ||
|
|
8366a94bde | ||
|
|
f56123b864 | ||
|
|
ae951bfe23 | ||
|
|
ad8d35efe9 | ||
|
|
0217b1c85d | ||
|
|
c0aa14f586 | ||
|
|
b54cfab4ff | ||
|
|
a08985e7a6 | ||
|
|
a789025025 | ||
|
|
3f307b117e | ||
|
|
a232035d47 | ||
|
|
9d38e9342d | ||
|
|
4bc4b9ade7 | ||
|
|
f0217cae5e | ||
|
|
da050c6369 | ||
|
|
842c317568 | ||
|
|
47845930f4 | ||
|
|
972f2f40bf | ||
|
|
265401775b | ||
|
|
94111c464b | ||
|
|
94e18dfb7c | ||
|
|
bc9903191e | ||
|
|
cd8c24ceae | ||
|
|
f9709c9c39 | ||
|
|
c0964a4f12 | ||
|
|
bcef8579ce | ||
|
|
1180be75d1 | ||
|
|
cfa49c7b1b | ||
|
|
8e4926ed7f | ||
|
|
2430dcba65 | ||
|
|
7c885a8b76 | ||
|
|
402e29d6dc | ||
|
|
e7faebfac3 | ||
|
|
10a5773c66 | ||
|
|
1e8472266f | ||
|
|
b30792a3da | ||
|
|
8b56fb10fd | ||
|
|
26602e8226 | ||
|
|
b8eeb0371c | ||
|
|
b1c4737e78 | ||
|
|
3860028a9e | ||
|
|
16d97b95af | ||
|
|
20465a4f71 | ||
|
|
2ff6e50af4 | ||
|
|
e0378c5064 | ||
|
|
e29aee1aae | ||
|
|
1aff42f453 | ||
|
|
a098630e09 | ||
|
|
074eb1c02f | ||
|
|
657496ea37 | ||
|
|
034aaa7209 | ||
|
|
a81ea3771f | ||
|
|
4ceba8cc6e | ||
|
|
d9550dd59b | ||
|
|
97f7fe7b18 | ||
|
|
a810c08c02 | ||
|
|
ab550a1e8d | ||
|
|
08e8047d8a | ||
|
|
67da877135 | ||
|
|
263b7a84bb | ||
|
|
9d18bebb13 | ||
|
|
2d339dec6b | ||
|
|
b78ab1ee02 | ||
|
|
2f5f116345 | ||
|
|
64f1671566 | ||
|
|
26bcfe5160 | ||
|
|
89c04e6b6b | ||
|
|
e079359c15 | ||
|
|
c4ab6b4866 | ||
|
|
630d9f2e45 | ||
|
|
bbceb6251a | ||
|
|
89f117da5b | ||
|
|
40fb4ff56b | ||
|
|
d64c14482b | ||
|
|
61f197dd81 | ||
|
|
564366861e | ||
|
|
1ee2abcc42 | ||
|
|
f4242b4096 | ||
|
|
d59542dd6f | ||
|
|
211ff90ee8 | ||
|
|
8c11d022fb | ||
|
|
24210ef80c | ||
|
|
3f40a52f65 | ||
|
|
df4cf80be4 | ||
|
|
bc854ee149 | ||
|
|
b23ead8097 | ||
|
|
886fdf7cd6 | ||
|
|
2135aa058e | ||
|
|
de20183a22 | ||
|
|
42b5437c87 | ||
|
|
67542f448d | ||
|
|
ae29c6bac4 | ||
|
|
1dce96b4c1 | ||
|
|
08e9b59696 | ||
|
|
db9e35a7e1 | ||
|
|
fe605c012a | ||
|
|
7a383a1314 | ||
|
|
5290aab781 | ||
|
|
86c3bbe5a2 | ||
|
|
4c7c53d8c8 | ||
|
|
21854b4a04 | ||
|
|
83f125a79f | ||
|
|
e36bc42519 | ||
|
|
15ac81627c | ||
|
|
57fae2c8c6 | ||
|
|
87b76abef9 | ||
|
|
d345b7ed56 | ||
|
|
298af217e9 | ||
|
|
89322c4b03 | ||
|
|
7d64f6a7dd | ||
|
|
b7efc92099 | ||
|
|
bc8b6284a6 | ||
|
|
20a187fab9 | ||
|
|
0b001f41c0 | ||
|
|
242977c7a5 | ||
|
|
364ac331da | ||
|
|
fcc0a80f4e | ||
|
|
8996f35cc0 | ||
|
|
ed5eb5c6db | ||
|
|
acb50f44a1 | ||
|
|
c946030106 | ||
|
|
df0411197b | ||
|
|
600c16551a | ||
|
|
5710c9e997 | ||
|
|
550a9fa711 | ||
|
|
51348cfbad | ||
|
|
7400a6723e | ||
|
|
e57dee2f14 | ||
|
|
b02a5b872a | ||
|
|
4733de23ba | ||
|
|
57b7f6199e | ||
|
|
a9df0c485f | ||
|
|
21dedff9bf | ||
|
|
6f60cf1a86 | ||
|
|
930d29d64a | ||
|
|
c345e7031b | ||
|
|
fc46398a3c | ||
|
|
7e41226549 | ||
|
|
b0c0ed8512 | ||
|
|
5978447185 | ||
|
|
ec4d445f97 | ||
|
|
e378435fbe | ||
|
|
e4dca4750f | ||
|
|
311b98ffcb | ||
|
|
126f41ae5e | ||
|
|
4b1678c416 | ||
|
|
da74272f13 | ||
|
|
9ce224d4c5 | ||
|
|
ce57a13002 | ||
|
|
e42357f1f8 | ||
|
|
ab7d121290 | ||
|
|
5209583a73 | ||
|
|
35fc4ba9a4 | ||
|
|
7f9019322b | ||
|
|
8a455e83f0 | ||
|
|
79b8d91025 | ||
|
|
bcabe5786f | ||
|
|
a7d3dafcf1 | ||
|
|
e6af84df39 | ||
|
|
674172f0b8 | ||
|
|
7ec20f9384 | ||
|
|
6135de8507 | ||
|
|
63b0d30e74 | ||
|
|
9e29fba8da | ||
|
|
8910ae92c7 | ||
|
|
3413074235 | ||
|
|
33aa72eb97 | ||
|
|
980309ae2a | ||
|
|
6a6bd4541a | ||
|
|
a14aa461ca |
7
.eslintignore
Normal file
7
.eslintignore
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
node_modules
|
||||||
|
dist
|
||||||
|
bin
|
||||||
|
docs
|
||||||
|
libraries
|
||||||
|
coverage
|
||||||
|
play
|
||||||
210
.eslintrc.js
Normal file
210
.eslintrc.js
Normal file
@@ -0,0 +1,210 @@
|
|||||||
|
module.exports = {
|
||||||
|
env: {
|
||||||
|
browser: true,
|
||||||
|
commonjs: true,
|
||||||
|
es2021: true,
|
||||||
|
node: true,
|
||||||
|
},
|
||||||
|
// plugins: ['prettier'], // to be activated
|
||||||
|
extends: ['eslint:recommended', 'airbnb-base', 'plugin:jsonc/recommended-with-jsonc', 'prettier'],
|
||||||
|
overrides: [
|
||||||
|
{
|
||||||
|
files: ['*.json', '*.json5', '*.jsonc'],
|
||||||
|
parser: 'jsonc-eslint-parser',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
files: ['package.json'],
|
||||||
|
parser: 'jsonc-eslint-parser',
|
||||||
|
rules: {
|
||||||
|
'jsonc/sort-keys': [
|
||||||
|
'off',
|
||||||
|
{
|
||||||
|
pathPattern: '^$',
|
||||||
|
order: [
|
||||||
|
'name',
|
||||||
|
'version',
|
||||||
|
'private',
|
||||||
|
'packageManager',
|
||||||
|
'description',
|
||||||
|
'type',
|
||||||
|
'keywords',
|
||||||
|
'homepage',
|
||||||
|
'bugs',
|
||||||
|
'license',
|
||||||
|
'author',
|
||||||
|
'contributors',
|
||||||
|
'funding',
|
||||||
|
'files',
|
||||||
|
'main',
|
||||||
|
'module',
|
||||||
|
'exports',
|
||||||
|
'unpkg',
|
||||||
|
'jsdelivr',
|
||||||
|
'browser',
|
||||||
|
'bin',
|
||||||
|
'man',
|
||||||
|
'directories',
|
||||||
|
'repository',
|
||||||
|
'publishConfig',
|
||||||
|
'scripts',
|
||||||
|
'peerDependencies',
|
||||||
|
'peerDependenciesMeta',
|
||||||
|
'optionalDependencies',
|
||||||
|
'dependencies',
|
||||||
|
'devDependencies',
|
||||||
|
'engines',
|
||||||
|
'config',
|
||||||
|
'overrides',
|
||||||
|
'pnpm',
|
||||||
|
'husky',
|
||||||
|
'lint-staged',
|
||||||
|
'eslintConfig',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
pathPattern: '^(?:dev|peer|optional|bundled)?[Dd]ependencies$',
|
||||||
|
order: { type: 'asc' },
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
globals: {
|
||||||
|
$: true,
|
||||||
|
jQuery: true,
|
||||||
|
glob: true,
|
||||||
|
log: true,
|
||||||
|
EditorWatchdog: true,
|
||||||
|
React: true,
|
||||||
|
appState: true,
|
||||||
|
ExcalidrawLib: true,
|
||||||
|
elements: true,
|
||||||
|
files: true,
|
||||||
|
ReactDOM: true,
|
||||||
|
// src\public\app\widgets\type_widgets\relation_map.js
|
||||||
|
jsPlumb: true,
|
||||||
|
panzoom: true,
|
||||||
|
logError: true,
|
||||||
|
// src\public\app\widgets\type_widgets\image.js
|
||||||
|
WZoom: true,
|
||||||
|
// \src\public\app\widgets\type_widgets\read_only_text.js
|
||||||
|
renderMathInElement: true,
|
||||||
|
// \src\public\app\widgets\type_widgets\editable_text.js
|
||||||
|
BalloonEditor: true,
|
||||||
|
FancytreeNode: true,
|
||||||
|
CKEditorInspector: true,
|
||||||
|
// \src\public\app\widgets\type_widgets\editable_code.js
|
||||||
|
CodeMirror: true,
|
||||||
|
// \src\public\app\services\resizer.js
|
||||||
|
Split: true,
|
||||||
|
// \src\public\app\services\content_renderer.js
|
||||||
|
mermaid: true,
|
||||||
|
// src\public\app\services\frontend_script_api.js
|
||||||
|
dayjs: true,
|
||||||
|
// \src\public\app\widgets\note_map.js
|
||||||
|
ForceGraph: true,
|
||||||
|
// \src\public\app\setup.js
|
||||||
|
ko: true,
|
||||||
|
syncInProgress: true,
|
||||||
|
// src\public\app\services\utils.js
|
||||||
|
logInfo: true,
|
||||||
|
__non_webpack_require__: true,
|
||||||
|
//
|
||||||
|
},
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 'latest',
|
||||||
|
sourceType: 'module',
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
// eslint:recommended
|
||||||
|
'no-unused-vars': 'off',
|
||||||
|
'linebreak-style': 'off',
|
||||||
|
'no-useless-escape': 'off',
|
||||||
|
'no-empty': 'off',
|
||||||
|
'no-constant-condition': 'off',
|
||||||
|
'getter-return': 'off',
|
||||||
|
'no-cond-assign': 'off',
|
||||||
|
'no-async-promise-executor': 'off',
|
||||||
|
'no-extra-semi': 'off',
|
||||||
|
'no-inner-declarations': 'off',
|
||||||
|
|
||||||
|
// prettier
|
||||||
|
'prettier/prettier': ['off', { endOfLine: 'auto' }],
|
||||||
|
|
||||||
|
// airbnb-base
|
||||||
|
'no-console': 'off',
|
||||||
|
'no-plusplus': 'off',
|
||||||
|
'no-param-reassign': 'off',
|
||||||
|
'global-require': 'off',
|
||||||
|
'no-use-before-define': 'off',
|
||||||
|
'no-await-in-loop': 'off',
|
||||||
|
radix: 'off',
|
||||||
|
'import/order': 'off',
|
||||||
|
'import/no-extraneous-dependencies': 'off',
|
||||||
|
'prefer-destructuring': 'off',
|
||||||
|
'no-shadow': 'off',
|
||||||
|
'no-new': 'off',
|
||||||
|
'no-restricted-syntax': 'off',
|
||||||
|
strict: 'off',
|
||||||
|
'class-methods-use-this': 'off',
|
||||||
|
'no-else-return': 'off',
|
||||||
|
'import/no-dynamic-require': 'off',
|
||||||
|
'no-underscore-dangle': 'off',
|
||||||
|
'prefer-template': 'off',
|
||||||
|
'consistent-return': 'off',
|
||||||
|
'no-continue': 'off',
|
||||||
|
'object-shorthand': 'off',
|
||||||
|
'one-var': 'off',
|
||||||
|
'prefer-const': 'off',
|
||||||
|
'spaced-comment': 'off',
|
||||||
|
'no-loop-func': 'off',
|
||||||
|
'arrow-body-style': 'off',
|
||||||
|
|
||||||
|
'guard-for-in': 'off',
|
||||||
|
'no-return-assign': 'off',
|
||||||
|
'dot-notation': 'off',
|
||||||
|
|
||||||
|
'func-names': 'off',
|
||||||
|
'import/no-useless-path-segments': 'off',
|
||||||
|
'default-param-last': 'off',
|
||||||
|
'prefer-arrow-callback': 'off',
|
||||||
|
'no-unneeded-ternary': 'off',
|
||||||
|
'no-return-await': 'off',
|
||||||
|
'import/extensions': 'off',
|
||||||
|
|
||||||
|
'no-var': 'off',
|
||||||
|
'import/newline-after-import': 'off',
|
||||||
|
'no-restricted-globals': 'off',
|
||||||
|
'operator-assignment': 'off',
|
||||||
|
'no-eval': 'off',
|
||||||
|
'max-classes-per-file': 'off',
|
||||||
|
'vars-on-top': 'off',
|
||||||
|
'no-bitwise': 'off',
|
||||||
|
'no-lonely-if': 'off',
|
||||||
|
'no-multi-assign': 'off',
|
||||||
|
'no-promise-executor-return': 'off',
|
||||||
|
'no-empty-function': 'off',
|
||||||
|
'import/no-unresolved': 'off',
|
||||||
|
camelcase: 'off',
|
||||||
|
eqeqeq: 'off',
|
||||||
|
'lines-between-class-members': 'off',
|
||||||
|
'import/no-cycle': 'off',
|
||||||
|
'new-cap': 'off',
|
||||||
|
'prefer-object-spread': 'off',
|
||||||
|
'no-new-func': 'off',
|
||||||
|
'no-unused-expressions': 'off',
|
||||||
|
'lines-around-directive': 'off',
|
||||||
|
'prefer-exponentiation-operator': 'off',
|
||||||
|
'no-restricted-properties': 'off',
|
||||||
|
'prefer-rest-params': 'off',
|
||||||
|
'no-unreachable-loop': 'off',
|
||||||
|
'no-alert': 'off',
|
||||||
|
'no-useless-return': 'off',
|
||||||
|
'no-nested-ternary': 'off',
|
||||||
|
'prefer-regex-literals': 'off',
|
||||||
|
'import/no-named-as-default-member': 'off',
|
||||||
|
yoda: 'off',
|
||||||
|
'no-script-url': 'off',
|
||||||
|
'no-prototype-builtins':'off'
|
||||||
|
},
|
||||||
|
};
|
||||||
25
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
25
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -3,18 +3,11 @@ description: Report a bug
|
|||||||
title: "(Bug report) "
|
title: "(Bug report) "
|
||||||
labels: "Type: Bug"
|
labels: "Type: Bug"
|
||||||
body:
|
body:
|
||||||
- type: checkboxes
|
|
||||||
attributes:
|
|
||||||
label: Preflight Checklist
|
|
||||||
description: Please ensure you've completed all of the following.
|
|
||||||
options:
|
|
||||||
- label: I have searched the [issue tracker](https://www.github.com/zadam/trilium/issues) for a bug report that matches the one I want to file, without success.
|
|
||||||
required: true
|
|
||||||
- type: input
|
- type: input
|
||||||
attributes:
|
attributes:
|
||||||
label: Trilium Version
|
label: Trilium Version
|
||||||
description: What version of Trilium are you using?
|
description: What version of Trilium are you using?
|
||||||
placeholder: 0.48.0-beta
|
placeholder: 0.57.0-beta
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
@@ -30,7 +23,7 @@ body:
|
|||||||
required: true
|
required: true
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
attributes:
|
attributes:
|
||||||
label: What is your setup?
|
label: What is your setup?
|
||||||
description: https://github.com/zadam/trilium/wiki#choose-the-setup
|
description: https://github.com/zadam/trilium/wiki#choose-the-setup
|
||||||
options:
|
options:
|
||||||
- Local (no sync)
|
- Local (no sync)
|
||||||
@@ -47,17 +40,13 @@ body:
|
|||||||
required: true
|
required: true
|
||||||
- type: textarea
|
- type: textarea
|
||||||
attributes:
|
attributes:
|
||||||
label: Expected Behavior
|
label: Description
|
||||||
description: A clear and concise description of what you expected to happen.
|
description: A clear and concise description of the bug and any additional information.
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: textarea
|
- type: textarea
|
||||||
attributes:
|
attributes:
|
||||||
label: Actual Behavior
|
label: Error logs
|
||||||
description: A clear description of what actually happens.
|
description: Please provide error logs, see [wiki page](https://github.com/zadam/trilium/wiki/Error-logs) for instructions on how to submit them.
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: false
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Additional Information
|
|
||||||
description: If your problem needs further explanation, or if the issue you're seeing cannot be reproduced in a gist, please add more information here.
|
|
||||||
|
|||||||
9
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
9
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
@@ -1,15 +1,8 @@
|
|||||||
name: Feature Request
|
name: Feature Request
|
||||||
description: Report a bug
|
description: Ask for a new feature to be added
|
||||||
title: "(Feature request) "
|
title: "(Feature request) "
|
||||||
labels: "Type: Enhancement"
|
labels: "Type: Enhancement"
|
||||||
body:
|
body:
|
||||||
- type: checkboxes
|
|
||||||
attributes:
|
|
||||||
label: Preflight Checklist
|
|
||||||
description: Please ensure you've completed all of the following.
|
|
||||||
options:
|
|
||||||
- label: I have searched the [issue tracker](https://www.github.com/zadam/trilium/issues) for a feature request that matches the one I want to file, without success.
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
attributes:
|
attributes:
|
||||||
label: Describe feature
|
label: Describe feature
|
||||||
|
|||||||
6
.gitignore
vendored
6
.gitignore
vendored
@@ -8,4 +8,8 @@ yarn-error.log
|
|||||||
config.ini
|
config.ini
|
||||||
cert.key
|
cert.key
|
||||||
cert.crt
|
cert.crt
|
||||||
server-package.json
|
server-package.json
|
||||||
|
.idea/httpRequests/
|
||||||
|
data/
|
||||||
|
tmp/
|
||||||
|
.eslintcache
|
||||||
@@ -2,7 +2,7 @@ image:
|
|||||||
file: .gitpod.dockerfile
|
file: .gitpod.dockerfile
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
- before: nvm install 14.18.1 && nvm use 14.18.1
|
- before: nvm install 18.18.2 && nvm use 18.18.2
|
||||||
init: npm install
|
init: npm install
|
||||||
command: npm run start-server
|
command: npm run start-server
|
||||||
|
|
||||||
|
|||||||
1
.husky/.gitignore
vendored
Normal file
1
.husky/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
_
|
||||||
4
.husky/pre-commit
Normal file
4
.husky/pre-commit
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
. "$(dirname "$0")/_/husky.sh"
|
||||||
|
|
||||||
|
#npx lint-staged
|
||||||
4
.idea/dataSources.xml
generated
4
.idea/dataSources.xml
generated
@@ -1,11 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
||||||
<data-source source="LOCAL" name="SQLite - document.db" uuid="30cef30d-e704-484d-a4ca-5d3bfc2ece63">
|
<data-source source="LOCAL" name="document.db" uuid="2a4ac1e6-b828-4a2a-8e4a-3f59f10aff26">
|
||||||
<driver-ref>sqlite.xerial</driver-ref>
|
<driver-ref>sqlite.xerial</driver-ref>
|
||||||
<synchronize>true</synchronize>
|
<synchronize>true</synchronize>
|
||||||
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
|
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
|
||||||
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/../trilium-data/document.db</jdbc-url>
|
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/data/document.db</jdbc-url>
|
||||||
<working-dir>$ProjectFileDir$</working-dir>
|
<working-dir>$ProjectFileDir$</working-dir>
|
||||||
</data-source>
|
</data-source>
|
||||||
</component>
|
</component>
|
||||||
|
|||||||
15
.idea/git_toolbox_prj.xml
generated
Normal file
15
.idea/git_toolbox_prj.xml
generated
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="GitToolBoxProjectSettings">
|
||||||
|
<option name="commitMessageIssueKeyValidationOverride">
|
||||||
|
<BoolValueOverride>
|
||||||
|
<option name="enabled" value="true" />
|
||||||
|
</BoolValueOverride>
|
||||||
|
</option>
|
||||||
|
<option name="commitMessageValidationEnabledOverride">
|
||||||
|
<BoolValueOverride>
|
||||||
|
<option name="enabled" value="true" />
|
||||||
|
</BoolValueOverride>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
2
.idea/inspectionProfiles/Project_Default.xml
generated
2
.idea/inspectionProfiles/Project_Default.xml
generated
@@ -1,7 +1,7 @@
|
|||||||
<component name="InspectionProjectProfileManager">
|
<component name="InspectionProjectProfileManager">
|
||||||
<profile version="1.0">
|
<profile version="1.0">
|
||||||
<option name="myName" value="Project Default" />
|
<option name="myName" value="Project Default" />
|
||||||
<inspection_tool class="JSUnfilteredForInLoop" enabled="false" level="WARNING" enabled_by_default="false" />
|
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
|
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
|
||||||
<option name="processCode" value="true" />
|
<option name="processCode" value="true" />
|
||||||
<option name="processLiterals" value="true" />
|
<option name="processLiterals" value="true" />
|
||||||
|
|||||||
6
.idea/jsLinters/eslint.xml
generated
Normal file
6
.idea/jsLinters/eslint.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="EslintConfiguration">
|
||||||
|
<option name="fix-on-save" value="true" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
3
.idea/misc.xml
generated
3
.idea/misc.xml
generated
@@ -1,9 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="JavaScriptSettings">
|
<component name="JavaScriptSettings">
|
||||||
<option name="languageLevel" value="ES6" />
|
<option name="languageLevel" value="ES6" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_16" project-jdk-name="openjdk-16" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_16" default="true" project-jdk-name="openjdk-16" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/out" />
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
10
.idea/runConfigurations.xml
generated
10
.idea/runConfigurations.xml
generated
@@ -1,10 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="RunConfigurationProducerService">
|
|
||||||
<option name="ignoredProducers">
|
|
||||||
<set>
|
|
||||||
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
|
|
||||||
</set>
|
|
||||||
</option>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
13
.prettierrc.js
Normal file
13
.prettierrc.js
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
//https://prettier.io/docs/en/options.html
|
||||||
|
module.exports = {
|
||||||
|
semi: true,
|
||||||
|
trailingComma: 'none',
|
||||||
|
singleQuote: true,
|
||||||
|
printWidth: 100,
|
||||||
|
tabWidth: 4,
|
||||||
|
useTabs: false,
|
||||||
|
quoteProps: "as-needed",
|
||||||
|
bracketSpacing: true,
|
||||||
|
arrowParens: "avoid"
|
||||||
|
// htmlWhitespaceSensitivity: 'ignore',
|
||||||
|
};
|
||||||
6
.vscode/extensions.json
vendored
Normal file
6
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"recommendations": [
|
||||||
|
"dbaeumer.vscode-eslint",
|
||||||
|
"esbenp.prettier-vscode",
|
||||||
|
]
|
||||||
|
}
|
||||||
20
.vscode/launch.json
vendored
20
.vscode/launch.json
vendored
@@ -1,18 +1,24 @@
|
|||||||
{
|
{
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"configurations": [
|
"configurations": [
|
||||||
|
// nodemon should be installed globally, use npm i -g nodemon
|
||||||
{
|
{
|
||||||
"type": "node",
|
"console": "integratedTerminal",
|
||||||
|
"internalConsoleOptions": "neverOpen",
|
||||||
|
"name": "nodemon start-server",
|
||||||
|
"program": "${workspaceFolder}/src/www",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"name": "start-server",
|
"restart": true,
|
||||||
|
"runtimeExecutable": "nodemon",
|
||||||
|
"env": {
|
||||||
|
"TRILIUM_ENV": "dev",
|
||||||
|
"TRILIUM_DATA_DIR": "./data"
|
||||||
|
},
|
||||||
"skipFiles": [
|
"skipFiles": [
|
||||||
"<node_internals>/**"
|
"<node_internals>/**"
|
||||||
],
|
],
|
||||||
"env": {
|
"type": "node",
|
||||||
"TRILIUM_ENV": "dev"
|
|
||||||
},
|
|
||||||
"outputCapture": "std",
|
"outputCapture": "std",
|
||||||
"program": "${workspaceFolder}/src/www"
|
},
|
||||||
}
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
33
.vscode/settings.json
vendored
Normal file
33
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"[javascript]": {
|
||||||
|
"editor.defaultFormatter": "dbaeumer.vscode-eslint"
|
||||||
|
},
|
||||||
|
"[json]": {
|
||||||
|
"editor.defaultFormatter": "dbaeumer.vscode-eslint"
|
||||||
|
},
|
||||||
|
"editor.formatOnSave": true,
|
||||||
|
"eslint.format.enable": true,
|
||||||
|
"eslint.probe": [
|
||||||
|
"javascript",
|
||||||
|
"javascriptreact",
|
||||||
|
"typescript",
|
||||||
|
"typescriptreact",
|
||||||
|
"html",
|
||||||
|
"vue",
|
||||||
|
"markdown",
|
||||||
|
"json",
|
||||||
|
"jsonc"
|
||||||
|
],
|
||||||
|
"eslint.validate": [
|
||||||
|
"javascript",
|
||||||
|
"javascriptreact",
|
||||||
|
"typescript",
|
||||||
|
"typescriptreact",
|
||||||
|
"html",
|
||||||
|
"vue",
|
||||||
|
"markdown",
|
||||||
|
"json",
|
||||||
|
"jsonc"
|
||||||
|
],
|
||||||
|
"files.eol": "\n",
|
||||||
|
}
|
||||||
1
CODE_OF_CONDUCT
Normal file
1
CODE_OF_CONDUCT
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Please treat each other with respect and understanding.
|
||||||
29
Dockerfile
29
Dockerfile
@@ -1,8 +1,12 @@
|
|||||||
FROM node:14.18.1-alpine
|
# !!! Don't try to build this Dockerfile directly, run it through bin/build-docker.sh script !!!
|
||||||
|
FROM node:18.18.2-alpine
|
||||||
|
|
||||||
# Create app directory
|
# Create app directory
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
|
|
||||||
|
# Bundle app source
|
||||||
|
COPY . .
|
||||||
|
|
||||||
COPY server-package.json package.json
|
COPY server-package.json package.json
|
||||||
|
|
||||||
# Install app dependencies
|
# Install app dependencies
|
||||||
@@ -16,14 +20,23 @@ RUN set -x \
|
|||||||
make \
|
make \
|
||||||
nasm \
|
nasm \
|
||||||
libpng-dev \
|
libpng-dev \
|
||||||
python \
|
python3 \
|
||||||
&& npm install --production \
|
&& npm install \
|
||||||
&& apk del .build-dependencies
|
&& apk del .build-dependencies \
|
||||||
|
&& npm run webpack \
|
||||||
|
&& npm prune --omit=dev \
|
||||||
|
&& cp src/public/app/share.js src/public/app-dist/. \
|
||||||
|
&& cp -r src/public/app/doc_notes src/public/app-dist/. \
|
||||||
|
&& rm -rf src/public/app
|
||||||
|
|
||||||
# Bundle app source
|
# Some setup tools need to be kept
|
||||||
COPY . .
|
RUN apk add --no-cache su-exec shadow
|
||||||
|
|
||||||
USER node
|
# Add application user and setup proper volume permissions
|
||||||
|
RUN adduser -s /bin/false node; exit 0
|
||||||
|
|
||||||
|
# Start the application
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
CMD [ "node", "./src/www" ]
|
CMD [ "./start-docker.sh" ]
|
||||||
|
|
||||||
|
HEALTHCHECK --start-period=10s CMD exec su-exec node node docker_healthcheck.js
|
||||||
|
|||||||
@@ -1,45 +1,57 @@
|
|||||||
# Trilium笔记
|
# Trilium Notes
|
||||||
|
|
||||||
[English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md)
|
[English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md)
|
||||||
|
|
||||||
[](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
[](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||||
Trilium Notes是一个分层的笔记应用程序,专注于建立大型个人知识库。请参阅[屏幕截图](https://github.com/zadam/trilium/wiki/Screenshot-tour)以快速了解:
|
Trilium Notes 是一个层次化的笔记应用程序,专注于建立大型个人知识库。请参阅[屏幕截图](https://github.com/zadam/trilium/wiki/Screenshot-tour)以快速了解:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
Ukraine is currently suffering from Russian aggression, please consider donating to [one of these charities](https://old.reddit.com/r/ukraine/comments/s6g5un/want_to_support_ukraine_heres_a_list_of_charities/).
|
||||||
|
|
||||||
|
<img src="https://upload.wikimedia.org/wikipedia/commons/4/49/Flag_of_Ukraine.svg" alt="drawing" width="600"/>
|
||||||
|
<img src="https://signmyrocket.com//uploads/2b2a523cd0c0e76cdbba95a89a9636b2_1676971281.jpg" alt="Trilium Notes supports Ukraine!" width="600"/>
|
||||||
|
|
||||||
## 特性
|
## 特性
|
||||||
|
|
||||||
* 笔记可以排列成任意深的树。单个笔记可以放在树中的多个位置(请参阅[克隆](https://github.com/zadam/trilium/wiki/Cloning-notes))
|
* 笔记可以排列成任意深的树。单个笔记可以放在树中的多个位置(请参阅[克隆](https://github.com/zadam/trilium/wiki/Cloning-notes))
|
||||||
* 丰富的所见即所得笔记编辑功能,包括带有markdown[自动格式化功能的](https://github.com/zadam/trilium/wiki/Text-notes#autoformat)表格,图像和[数学](https://github.com/zadam/trilium/wiki/Text-notes#math-support)
|
* 丰富的所见即所得笔记编辑功能,包括带有 Markdown [自动格式化功能的](https://github.com/zadam/trilium/wiki/Text-notes#autoformat)表格,图像和[数学](https://github.com/zadam/trilium/wiki/Text-notes#math-support)
|
||||||
* 支持编辑[使用源代码的笔记](https://github.com/zadam/trilium/wiki/Code-notes),包括语法高亮显示
|
* 支持编辑[使用源代码的笔记](https://github.com/zadam/trilium/wiki/Code-notes),包括语法高亮显示
|
||||||
* 笔记之间快速[导航](https://github.com/zadam/trilium/wiki/Note-navigation),全文搜索和[笔记挂起](https://github.com/zadam/trilium/wiki/Note-hoisting)
|
* 笔记之间快速[导航](https://github.com/zadam/trilium/wiki/Note-navigation),全文搜索和[笔记聚焦](https://github.com/zadam/trilium/wiki/Note-hoisting)
|
||||||
* 无缝[笔记版本控制](https://github.com/zadam/trilium/wiki/Note-revisions)
|
* 无缝[笔记版本控制](https://github.com/zadam/trilium/wiki/Note-revisions)
|
||||||
* 笔记[属性](https://github.com/zadam/trilium/wiki/Attributes)可用于笔记组织,查询和高级[脚本编写](https://github.com/zadam/trilium/wiki/Scripts)
|
* 笔记[属性](https://github.com/zadam/trilium/wiki/Attributes)可用于笔记组织,查询和高级[脚本编写](https://github.com/zadam/trilium/wiki/Scripts)
|
||||||
* [同步](https://github.com/zadam/trilium/wiki/Synchronization)与自托管同步服务器
|
* [同步](https://github.com/zadam/trilium/wiki/Synchronization)与自托管同步服务器
|
||||||
|
* 有一个[第三方提供的同步服务器托管服务](https://trilium.cc/paid-hosting)
|
||||||
|
* 公开地[分享](https://github.com/zadam/trilium/wiki/Sharing)(发布)笔记到互联网
|
||||||
* 具有按笔记粒度的强大的[笔记加密](https://github.com/zadam/trilium/wiki/Protected-notes)
|
* 具有按笔记粒度的强大的[笔记加密](https://github.com/zadam/trilium/wiki/Protected-notes)
|
||||||
|
* 使用自带的 Excalidraw 来绘制图表(笔记类型“画布”)
|
||||||
* [关系图](https://github.com/zadam/trilium/wiki/Relation-map)和[链接图](https://github.com/zadam/trilium/wiki/Link-map),用于可视化笔记及其关系
|
* [关系图](https://github.com/zadam/trilium/wiki/Relation-map)和[链接图](https://github.com/zadam/trilium/wiki/Link-map),用于可视化笔记及其关系
|
||||||
* [脚本](https://github.com/zadam/trilium/wiki/Scripts)-请参阅[高级展示](https://github.com/zadam/trilium/wiki/Advanced-showcases)
|
* [脚本](https://github.com/zadam/trilium/wiki/Scripts) - 请参阅[高级功能展示](https://github.com/zadam/trilium/wiki/Advanced-showcases)
|
||||||
* 可用性和性能均能很好地扩展至超过10万个笔记
|
* 在拥有超过 10 万条笔记时仍能保持良好的可用性和性能
|
||||||
* 针对智能手机和平板电脑进行触摸优化的[移动前端](https://github.com/zadam/trilium/wiki/Mobile-frontend)
|
* 针对智能手机和平板电脑进行优化的[用于移动设备的前端](https://github.com/zadam/trilium/wiki/Mobile-frontend)
|
||||||
* [夜间主题](https://github.com/zadam/trilium/wiki/Themes)
|
* [夜间主题](https://github.com/zadam/trilium/wiki/Themes)
|
||||||
* [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import)和[Markdown导入导出](https://github.com/zadam/trilium/wiki/Markdown)
|
* [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import) 和 [Markdown 导入导出](https://github.com/zadam/trilium/wiki/Markdown)功能
|
||||||
* [Web Clipper](https://github.com/zadam/trilium/wiki/Web-clipper)可轻松保存Web内容
|
* 使用[网页剪藏](https://github.com/zadam/trilium/wiki/Web-clipper)轻松保存互联网上的内容
|
||||||
|
|
||||||
## 构建
|
## 构建
|
||||||
|
|
||||||
Trilium是作为桌面应用程序(Linux和Windows)或服务器上托管的Web应用程序(Linux)提供的。Mac OS桌面版本可用,但[不受支持](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support)。
|
Trilium 可以用作桌面应用程序(Linux 和 Windows)或服务器(Linux)上托管的 Web 应用程序。虽然有 macOS 版本的桌面应用程序,但它[不受支持](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support)。
|
||||||
|
|
||||||
* 如果要在桌面上使用Trilium,请从[最新版本](https://github.com/zadam/trilium/releases/latest)下载适用于您平台的二进制[版本](https://github.com/zadam/trilium/releases/latest),解压缩该软件包并运行`trilium`可执行文件。
|
* 如果要在桌面上使用 Trilium,请从[最新版本](https://github.com/zadam/trilium/releases/latest)下载适用于您平台的二进制版本,解压缩该软件包并运行`trilium`可执行文件。
|
||||||
* 如果要在服务器上安装Trilium,请遵循[此页面](https://github.com/zadam/trilium/wiki/Server-installation)。
|
* 如果要在服务器上安装 Trilium,请参考[此页面](https://github.com/zadam/trilium/wiki/Server-installation)。
|
||||||
* 当前仅支持(经过测试)最新的Chrome和Firefox浏览器。
|
* 当前仅支持(测试过)最近发布的 Chrome 和 Firefox 浏览器。
|
||||||
|
|
||||||
|
Trilium 也提供 Flatpak:
|
||||||
|
|
||||||
|
[<img width="240" src="https://flathub.org/assets/badges/flathub-badge-en.png">](https://flathub.org/apps/details/com.github.zadam.trilium)
|
||||||
|
|
||||||
## 文档
|
## 文档
|
||||||
|
|
||||||
[有关文档页面的完整列表,请参见Wiki。](https://github.com/zadam/trilium/wiki/)
|
[有关文档页面的完整列表,请参见 Wiki。](https://github.com/zadam/trilium/wiki/)
|
||||||
|
|
||||||
[中文Wiki在这里](https://github.com/baddate/trilium/wiki/)
|
* [Wiki 的中文翻译版本](https://github.com/baddate/trilium/wiki/)
|
||||||
|
|
||||||
您还可以阅读[个人知识库模式](https://github.com/zadam/trilium/wiki/Patterns-of-personal-knowledge-base),以获取有关如何使用Trilium的灵感。
|
您还可以阅读[个人知识库模式](https://github.com/zadam/trilium/wiki/Patterns-of-personal-knowledge-base),以获取有关如何使用 Trilium 的灵感。
|
||||||
|
|
||||||
## 贡献
|
## 贡献
|
||||||
|
|
||||||
@@ -47,7 +59,7 @@ Trilium是作为桌面应用程序(Linux和Windows)或服务器上托管的W
|
|||||||
|
|
||||||
[](https://gitpod.io/#https://github.com/zadam/trilium)
|
[](https://gitpod.io/#https://github.com/zadam/trilium)
|
||||||
|
|
||||||
或在本地克隆并运行
|
或者克隆本仓库到本地,并运行
|
||||||
|
|
||||||
```
|
```
|
||||||
npm install
|
npm install
|
||||||
@@ -56,7 +68,15 @@ npm run start-server
|
|||||||
|
|
||||||
## 致谢
|
## 致谢
|
||||||
|
|
||||||
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - 市场上最好的所见即所得编辑器,互动性强且聆听能力强的团队
|
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - 市面上最好的所见即所得编辑器,拥有互动性强且聆听能力强的团队
|
||||||
* [FancyTree](https://github.com/mar10/fancytree) - 一个非常丰富的关于树的库,强大的没有对手。没有它,Trilium Notes将不会如此。
|
* [FancyTree](https://github.com/mar10/fancytree) - 一个非常丰富的关于树的库,强大到没有对手。没有它,Trilium Notes 将不会如此。
|
||||||
* [CodeMirror](https://github.com/codemirror/CodeMirror) - 支持大量语言的代码编辑器
|
* [CodeMirror](https://github.com/codemirror/CodeMirror) - 支持大量语言的代码编辑器
|
||||||
* [jsPlumb](https://github.com/jsplumb/jsplumb)强大的可视化连接库。- 用于[关系图](https://github.com/zadam/trilium/wiki/Relation-map)和[链接图](https://github.com/zadam/trilium/wiki/Link-map)
|
* [jsPlumb](https://github.com/jsplumb/jsplumb) - 强大的可视化连接库。用于[关系图](https://github.com/zadam/trilium/wiki/Relation-map)和[链接图](https://github.com/zadam/trilium/wiki/Link-map)
|
||||||
|
|
||||||
|
## 捐赠
|
||||||
|
|
||||||
|
你可以通过 GitHub Sponsors,[PayPal](https://paypal.me/za4am) 或者比特币 (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2) 来捐赠。
|
||||||
|
|
||||||
|
## 许可证
|
||||||
|
|
||||||
|
本程序是自由软件:你可以再发布本软件和/或修改本软件,只要你遵循 Free Software Foundation 发布的 GNU Affero General Public License 的第三版或者任何(由你选择)更晚的版本。
|
||||||
|
|||||||
83
README.ja.md
Normal file
83
README.ja.md
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
# Trilium Notes
|
||||||
|
|
||||||
|
[English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md)
|
||||||
|
|
||||||
|
Trilium Notes は、大規模な個人知識ベースの構築に焦点を当てた、階層型ノートアプリケーションです。概要は[スクリーンショット](https://github.com/zadam/trilium/wiki/Screenshot-tour)をご覧ください:
|
||||||
|
|
||||||
|
<a href="https://github.com/zadam/trilium/wiki/Screenshot-tour"><img src="https://raw.githubusercontent.com/wiki/zadam/trilium/images/screenshot.png" alt="Trilium Screenshot" width="1000"></a>
|
||||||
|
|
||||||
|
ウクライナは現在、ロシアの侵略から自国を守っています。[ウクライナ軍や人道的な慈善団体への寄付](https://standforukraine.com/)をご検討ください。
|
||||||
|
|
||||||
|
<p float="left">
|
||||||
|
<img src="https://upload.wikimedia.org/wikipedia/commons/4/49/Flag_of_Ukraine.svg" alt="drawing" width="400"/>
|
||||||
|
<img src="https://signmyrocket.com//uploads/2b2a523cd0c0e76cdbba95a89a9636b2_1676971281.jpg" alt="Trilium Notes supports Ukraine!" width="570"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
## 🎁 特徴
|
||||||
|
|
||||||
|
* ノートは、任意の深さのツリーに配置できます。単一のノートをツリー内の複数の場所に配置できます ([cloning](https://github.com/zadam/trilium/wiki/Cloning-notes) を参照)
|
||||||
|
* マークダウン[オートフォーマット](https://github.com/zadam/trilium/wiki/Text-notes#autoformat)による、表、画像、[数学](https://github.com/zadam/trilium/wiki/Text-notes#math-support)などの豊富な WYSIWYG ノート編集機能
|
||||||
|
* シンタックスハイライトを含む[ソースコード付きノート](https://github.com/zadam/trilium/wiki/Code-notes)の編集をサポート
|
||||||
|
* [ノート間のナビゲーション](https://github.com/zadam/trilium/wiki/Note-navigation)、全文検索、[ノートホイスト](https://github.com/zadam/trilium/wiki/Note-hoisting)が高速かつ簡単に行えます
|
||||||
|
* シームレスな[ノートのバージョン管理](https://github.com/zadam/trilium/wiki/Note-revisions)
|
||||||
|
* ノート[属性](https://github.com/zadam/trilium/wiki/Attributes)は、ノート整理、クエリ、高度な[スクリプト](https://github.com/zadam/trilium/wiki/Scripts)に使用できます
|
||||||
|
* 自己ホスト型同期サーバーとの[同期](https://github.com/zadam/trilium/wiki/Synchronization)
|
||||||
|
* [同期サーバーをホストするサードパーティ・サービス](https://trilium.cc/paid-hosting)があります
|
||||||
|
* 公開インターネットへのノートの[共有](https://github.com/zadam/trilium/wiki/Sharing)(公開)
|
||||||
|
* ノートごとの粒度を持つ強力な[ノート暗号化](https://github.com/zadam/trilium/wiki/Protected-notes)
|
||||||
|
* 組み込みの Excalidraw を使用した図のスケッチ (ノート タイプ"キャンバス")
|
||||||
|
* ノートとその関係を可視化するための[関係図](https://github.com/zadam/trilium/wiki/Relation-map)と[リンクマップ](https://github.com/zadam/trilium/wiki/Link-map)
|
||||||
|
* [スクリプティング](https://github.com/zadam/trilium/wiki/Scripts) - [高度なショーケース](https://github.com/zadam/trilium/wiki/Advanced-showcases)を参照
|
||||||
|
* 自動化のための [REST API](https://github.com/zadam/trilium/wiki/ETAPI)
|
||||||
|
* ユーザビリティとパフォーマンスの両方で 100 000 ノート以上に拡張可能
|
||||||
|
* スマートフォンとタブレット向けのタッチ最適化[モバイルフロントエンド](https://github.com/zadam/trilium/wiki/Mobile-frontend)
|
||||||
|
* [ナイトテーマ](https://github.com/zadam/trilium/wiki/Themes)
|
||||||
|
* [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import) と [Markdown のインポートとエクスポート](https://github.com/zadam/trilium/wiki/Markdown)
|
||||||
|
* Web コンテンツを簡単に保存するための [Web クリッパー](https://github.com/zadam/trilium/wiki/Web-clipper)
|
||||||
|
|
||||||
|
サードパーティのテーマ、スクリプト、プラグインなどは、 [awesome-trilium](https://github.com/Nriver/awesome-trilium) をチェックしてください。
|
||||||
|
|
||||||
|
## 🏗 ビルド
|
||||||
|
|
||||||
|
Trilium は、デスクトップアプリケーション(Linux、Windows)またはサーバー上でホストされるウェブアプリケーション(Linux)として提供されます。 Mac OS のデスクトップビルドも利用可能ですが、 [unsupported](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support) となっています。
|
||||||
|
|
||||||
|
* デスクトップで Trilium を使用したい場合は、 [latest release](https://github.com/zadam/trilium/releases/latest) からお使いのプラットフォームのバイナリリリースをダウンロードし、パッケージを解凍して ``trilium`` の実行ファイルを実行してください。
|
||||||
|
* サーバーに Trilium をインストールする場合は、[このページ](https://github.com/zadam/trilium/wiki/Server-installation)に従ってください。
|
||||||
|
* 現在、対応(動作確認)しているブラウザは、最近の Chrome と Firefox のみです。
|
||||||
|
|
||||||
|
Trilium は Flatpak としても提供されます:
|
||||||
|
|
||||||
|
[<img width="240" src="https://flathub.org/assets/badges/flathub-badge-en.png">](https://flathub.org/apps/details/com.github.zadam.trilium)
|
||||||
|
|
||||||
|
## 📝 ドキュメント
|
||||||
|
|
||||||
|
[ドキュメントページの全リストはwikiをご覧ください。](https://github.com/zadam/trilium/wiki/)
|
||||||
|
|
||||||
|
また、[個人的な知識基盤のパターン](https://github.com/zadam/trilium/wiki/Patterns-of-personal-knowledge-base)を読むと、 Trilium の使い方のヒントを得ることができます。
|
||||||
|
|
||||||
|
## 💻 コントリビュート
|
||||||
|
|
||||||
|
ブラウザベースの開発環境を使用
|
||||||
|
|
||||||
|
[](https://gitpod.io/#https://github.com/zadam/trilium)
|
||||||
|
|
||||||
|
または、ローカルにクローンして実行
|
||||||
|
```
|
||||||
|
npm install
|
||||||
|
npm run start-server
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📢 シャウトアウト
|
||||||
|
|
||||||
|
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - 市場で最高の WYSIWYG エディター、非常にインタラクティブで聞き上手なチーム
|
||||||
|
* [FancyTree](https://github.com/mar10/fancytree) - 真の競争相手がいない、非常に機能豊富なツリーライブラリです。 Trilium Notes は、これなしでは成り立たないでしょう。
|
||||||
|
* [CodeMirror](https://github.com/codemirror/CodeMirror) - 膨大な数の言語をサポートするコードエディタ
|
||||||
|
* [jsPlumb](https://github.com/jsplumb/jsplumb) - 競合のないビジュアルコネクティビティライブラリです。[関係図](https://github.com/zadam/trilium/wiki/Relation-map)、[リンク図](https://github.com/zadam/trilium/wiki/Link-map)で使用。
|
||||||
|
|
||||||
|
## 🤝 サポート
|
||||||
|
|
||||||
|
GitHub スポンサー、[PayPal](https://paypal.me/za4am)もしくは Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2) にて Trilium をサポートすることができます。
|
||||||
|
|
||||||
|
## 🔑 ライセンス
|
||||||
|
|
||||||
|
このプログラムはフリーソフトウェアです:フリーソフトウェア財団が発行した GNU Affero General Public License のバージョン3、またはそれ以降のバージョンのいずれかに従って、再配布および/または改変することができます。
|
||||||
38
README.md
38
README.md
@@ -1,13 +1,19 @@
|
|||||||
# Trilium Notes
|
# Trilium Notes
|
||||||
|
|
||||||
[English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md)
|
[](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md)
|
||||||
|
|
||||||
[](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
|
||||||
Trilium Notes is a hierarchical note taking application with focus on building large personal knowledge bases. See [screenshots](https://github.com/zadam/trilium/wiki/Screenshot-tour) for quick overview:
|
Trilium Notes is a hierarchical note taking application with focus on building large personal knowledge bases. See [screenshots](https://github.com/zadam/trilium/wiki/Screenshot-tour) for quick overview:
|
||||||
|
|
||||||

|
<a href="https://github.com/zadam/trilium/wiki/Screenshot-tour"><img src="https://raw.githubusercontent.com/wiki/zadam/trilium/images/screenshot.png" alt="Trilium Screenshot" width="1000"></a>
|
||||||
|
|
||||||
## Features
|
Ukraine is currently defending itself from Russian aggression, please consider [donating to Ukrainian Army or humanitarian charities](https://standforukraine.com/).
|
||||||
|
|
||||||
|
<p float="left">
|
||||||
|
<img src="https://upload.wikimedia.org/wikipedia/commons/4/49/Flag_of_Ukraine.svg" alt="drawing" width="400"/>
|
||||||
|
<img src="https://signmyrocket.com//uploads/2b2a523cd0c0e76cdbba95a89a9636b2_1676971281.jpg" alt="Trilium Notes supports Ukraine!" width="570"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
## 🎁 Features
|
||||||
|
|
||||||
* Notes can be arranged into arbitrarily deep tree. Single note can be placed into multiple places in the tree (see [cloning](https://github.com/zadam/trilium/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://github.com/zadam/trilium/wiki/Cloning-notes))
|
||||||
* Rich WYSIWYG note editing including e.g. tables, images and [math](https://github.com/zadam/trilium/wiki/Text-notes#math-support) with markdown [autoformat](https://github.com/zadam/trilium/wiki/Text-notes#autoformat)
|
* Rich WYSIWYG note editing including e.g. tables, images and [math](https://github.com/zadam/trilium/wiki/Text-notes#math-support) with markdown [autoformat](https://github.com/zadam/trilium/wiki/Text-notes#autoformat)
|
||||||
@@ -16,16 +22,22 @@ Trilium Notes is a hierarchical note taking application with focus on building l
|
|||||||
* Seamless [note versioning](https://github.com/zadam/trilium/wiki/Note-revisions)
|
* Seamless [note versioning](https://github.com/zadam/trilium/wiki/Note-revisions)
|
||||||
* Note [attributes](https://github.com/zadam/trilium/wiki/Attributes) can be used for note organization, querying and advanced [scripting](https://github.com/zadam/trilium/wiki/Scripts)
|
* Note [attributes](https://github.com/zadam/trilium/wiki/Attributes) can be used for note organization, querying and advanced [scripting](https://github.com/zadam/trilium/wiki/Scripts)
|
||||||
* [Synchronization](https://github.com/zadam/trilium/wiki/Synchronization) with self-hosted sync server
|
* [Synchronization](https://github.com/zadam/trilium/wiki/Synchronization) with self-hosted sync server
|
||||||
|
* there's a [3rd party service for hosting synchronisation server](https://trilium.cc/paid-hosting)
|
||||||
|
* [Sharing](https://github.com/zadam/trilium/wiki/Sharing) (publishing) notes to public internet
|
||||||
* Strong [note encryption](https://github.com/zadam/trilium/wiki/Protected-notes) with per-note granularity
|
* Strong [note encryption](https://github.com/zadam/trilium/wiki/Protected-notes) with per-note granularity
|
||||||
|
* Sketching diagrams with built-in Excalidraw (note type "canvas")
|
||||||
* [Relation maps](https://github.com/zadam/trilium/wiki/Relation-map) and [link maps](https://github.com/zadam/trilium/wiki/Link-map) for visualizing notes and their relations
|
* [Relation maps](https://github.com/zadam/trilium/wiki/Relation-map) and [link maps](https://github.com/zadam/trilium/wiki/Link-map) for visualizing notes and their relations
|
||||||
* [Scripting](https://github.com/zadam/trilium/wiki/Scripts) - see [Advanced showcases](https://github.com/zadam/trilium/wiki/Advanced-showcases)
|
* [Scripting](https://github.com/zadam/trilium/wiki/Scripts) - see [Advanced showcases](https://github.com/zadam/trilium/wiki/Advanced-showcases)
|
||||||
|
* [REST API](https://github.com/zadam/trilium/wiki/ETAPI) for automation
|
||||||
* Scales well in both usability and performance upwards of 100 000 notes
|
* Scales well in both usability and performance upwards of 100 000 notes
|
||||||
* Touch optimized [mobile frontend](https://github.com/zadam/trilium/wiki/Mobile-frontend) for smartphones and tablets
|
* Touch optimized [mobile frontend](https://github.com/zadam/trilium/wiki/Mobile-frontend) for smartphones and tablets
|
||||||
* [Night theme](https://github.com/zadam/trilium/wiki/Themes)
|
* [Night theme](https://github.com/zadam/trilium/wiki/Themes)
|
||||||
* [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import) and [Markdown import & export](https://github.com/zadam/trilium/wiki/Markdown)
|
* [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import) and [Markdown import & export](https://github.com/zadam/trilium/wiki/Markdown)
|
||||||
* [Web Clipper](https://github.com/zadam/trilium/wiki/Web-clipper) for easy saving of web content
|
* [Web Clipper](https://github.com/zadam/trilium/wiki/Web-clipper) for easy saving of web content
|
||||||
|
|
||||||
## Builds
|
Check out [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party themes, scripts, plugins and more.
|
||||||
|
|
||||||
|
## 🏗 Builds
|
||||||
|
|
||||||
Trilium is provided as either desktop application (Linux and Windows) or web application hosted on your server (Linux). Mac OS desktop build is available, but it is [unsupported](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support).
|
Trilium is provided as either desktop application (Linux and Windows) or web application hosted on your server (Linux). Mac OS desktop build is available, but it is [unsupported](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support).
|
||||||
|
|
||||||
@@ -33,13 +45,17 @@ Trilium is provided as either desktop application (Linux and Windows) or web app
|
|||||||
* If you want to install Trilium on server, follow [this page](https://github.com/zadam/trilium/wiki/Server-installation).
|
* If you want to install Trilium on server, follow [this page](https://github.com/zadam/trilium/wiki/Server-installation).
|
||||||
* Currently only recent Chrome and Firefox are supported (tested) browsers.
|
* Currently only recent Chrome and Firefox are supported (tested) browsers.
|
||||||
|
|
||||||
## Documentation
|
Trilium is also provided as a Flatpak:
|
||||||
|
|
||||||
|
[<img width="240" src="https://flathub.org/assets/badges/flathub-badge-en.png">](https://flathub.org/apps/details/com.github.zadam.trilium)
|
||||||
|
|
||||||
|
## 📝 Documentation
|
||||||
|
|
||||||
[See wiki for complete list of documentation pages.](https://github.com/zadam/trilium/wiki/)
|
[See wiki for complete list of documentation pages.](https://github.com/zadam/trilium/wiki/)
|
||||||
|
|
||||||
You can also read [Patterns of personal knowledge base](https://github.com/zadam/trilium/wiki/Patterns-of-personal-knowledge-base) to get some inspiration on how you might use Trilium.
|
You can also read [Patterns of personal knowledge base](https://github.com/zadam/trilium/wiki/Patterns-of-personal-knowledge-base) to get some inspiration on how you might use Trilium.
|
||||||
|
|
||||||
## Contribute
|
## 💻 Contribute
|
||||||
|
|
||||||
Use a browser based dev environment
|
Use a browser based dev environment
|
||||||
|
|
||||||
@@ -51,13 +67,17 @@ npm install
|
|||||||
npm run start-server
|
npm run start-server
|
||||||
```
|
```
|
||||||
|
|
||||||
## Shoutouts
|
## 📢 Shoutouts
|
||||||
|
|
||||||
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - best WYSIWYG editor on the market, very interactive and listening team
|
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - best WYSIWYG editor on the market, very interactive and listening team
|
||||||
* [FancyTree](https://github.com/mar10/fancytree) - very feature rich tree library without real competition. Trilium Notes would not be the same without it.
|
* [FancyTree](https://github.com/mar10/fancytree) - very feature rich tree library without real competition. Trilium Notes would not be the same without it.
|
||||||
* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with support for huge amount of languages
|
* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with support for huge amount of languages
|
||||||
* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library without competition. Used in [relation maps](https://github.com/zadam/trilium/wiki/Relation-map) and [link maps](https://github.com/zadam/trilium/wiki/Link-map)
|
* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library without competition. Used in [relation maps](https://github.com/zadam/trilium/wiki/Relation-map) and [link maps](https://github.com/zadam/trilium/wiki/Link-map)
|
||||||
|
|
||||||
## License
|
## 🤝 Support
|
||||||
|
|
||||||
|
You can support Trilium using GitHub Sponsors, [PayPal](https://paypal.me/za4am) or Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2).
|
||||||
|
|
||||||
|
## 🔑 License
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||||
|
|||||||
@@ -1,12 +1,17 @@
|
|||||||
# Trilium Notes
|
# Trilium Notes
|
||||||
|
|
||||||
[English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md)
|
[English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md)
|
||||||
|
|
||||||
[](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
[](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||||
Trilium Notes – это приложение для заметок с иерархической структурой, ориентированное на создание больших персональных баз знаний. Для быстрого ознакомления посмотрите [скриншот-тур](https://github.com/zadam/trilium/wiki/Screenshot-tour):
|
Trilium Notes – это приложение для заметок с иерархической структурой, ориентированное на создание больших персональных баз знаний. Для быстрого ознакомления посмотрите [скриншот-тур](https://github.com/zadam/trilium/wiki/Screenshot-tour):
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
Ukraine is currently suffering from Russian aggression, please consider donating to [one of these charities](https://old.reddit.com/r/ukraine/comments/s6g5un/want_to_support_ukraine_heres_a_list_of_charities/).
|
||||||
|
|
||||||
|
<img src="https://upload.wikimedia.org/wikipedia/commons/4/49/Flag_of_Ukraine.svg" alt="drawing" width="600"/>
|
||||||
|
<img src="https://signmyrocket.com//uploads/2b2a523cd0c0e76cdbba95a89a9636b2_1676971281.jpg" alt="Trilium Notes supports Ukraine!" width="600"/>
|
||||||
|
|
||||||
## Возможности
|
## Возможности
|
||||||
|
|
||||||
* Заметки можно расположить в виде дерева произвольной глубины. Отдельную заметку можно разместить в нескольких местах дерева (см. [клонирование](https://github.com/zadam/trilium/wiki/Cloning-notes))
|
* Заметки можно расположить в виде дерева произвольной глубины. Отдельную заметку можно разместить в нескольких местах дерева (см. [клонирование](https://github.com/zadam/trilium/wiki/Cloning-notes))
|
||||||
|
|||||||
3
TODO
3
TODO
@@ -1,3 +0,0 @@
|
|||||||
- new icon
|
|
||||||
- polish becca entities API
|
|
||||||
- separate private and public APIs in becca entities
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -4,4 +4,4 @@ echo "Packaging debian x64 distribution..."
|
|||||||
|
|
||||||
VERSION=`jq -r ".version" package.json`
|
VERSION=`jq -r ".version" package.json`
|
||||||
|
|
||||||
./node_modules/.bin/electron-installer-debian --config bin/deb-options.json --options.version=${VERSION} --arch amd64
|
./node_modules/.bin/electron-installer-debian --config bin/deb-options.json --options.version=${VERSION} --arch amd64
|
||||||
|
|||||||
@@ -24,8 +24,10 @@ mv "./dist/Trilium Notes-linux-x64" $BUILD_DIR
|
|||||||
|
|
||||||
cp images/app-icons/png/128x128.png $BUILD_DIR/icon.png
|
cp images/app-icons/png/128x128.png $BUILD_DIR/icon.png
|
||||||
|
|
||||||
# removing software WebGL binaries because they are pretty huge and not necessary
|
cp bin/tpl/anonymize-database.sql $BUILD_DIR/
|
||||||
rm -r $BUILD_DIR/swiftshader
|
|
||||||
|
cp -r dump-db $BUILD_DIR/
|
||||||
|
rm -rf $BUILD_DIR/dump-db/node_modules
|
||||||
|
|
||||||
cp bin/tpl/trilium-portable.sh $BUILD_DIR/
|
cp bin/tpl/trilium-portable.sh $BUILD_DIR/
|
||||||
chmod 755 $BUILD_DIR/trilium-portable.sh
|
chmod 755 $BUILD_DIR/trilium-portable.sh
|
||||||
|
|||||||
@@ -23,6 +23,11 @@ rm -rf $BUILD_DIR
|
|||||||
# Mac build has by default useless directory level
|
# Mac build has by default useless directory level
|
||||||
mv "./dist/Trilium Notes-darwin-x64" $BUILD_DIR
|
mv "./dist/Trilium Notes-darwin-x64" $BUILD_DIR
|
||||||
|
|
||||||
|
cp bin/tpl/anonymize-database.sql $BUILD_DIR/
|
||||||
|
|
||||||
|
cp -r dump-db $BUILD_DIR/
|
||||||
|
rm -rf $BUILD_DIR/dump-db/node_modules
|
||||||
|
|
||||||
echo "Zipping mac x64 electron distribution..."
|
echo "Zipping mac x64 electron distribution..."
|
||||||
|
|
||||||
VERSION=`jq -r ".version" package.json`
|
VERSION=`jq -r ".version" package.json`
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
PKG_DIR=dist/trilium-linux-x64-server
|
PKG_DIR=dist/trilium-linux-x64-server
|
||||||
NODE_VERSION=14.18.1
|
NODE_VERSION=18.18.2
|
||||||
|
|
||||||
if [ "$1" != "DONTCOPY" ]
|
if [ "$1" != "DONTCOPY" ]
|
||||||
then
|
then
|
||||||
@@ -20,12 +20,19 @@ rm -r $PKG_DIR/node/lib/node_modules/npm
|
|||||||
rm -r $PKG_DIR/node/include/node
|
rm -r $PKG_DIR/node/include/node
|
||||||
|
|
||||||
rm -r $PKG_DIR/node_modules/electron*
|
rm -r $PKG_DIR/node_modules/electron*
|
||||||
|
rm -r $PKG_DIR/webpack*
|
||||||
|
rm -r $PKG_DIR/electron.js
|
||||||
|
|
||||||
cp -r bin/better-sqlite3/linux-server-better_sqlite3.node $PKG_DIR/node_modules/better-sqlite3/build/Release/better_sqlite3.node
|
cp -r bin/better-sqlite3/linux-server-better_sqlite3.node $PKG_DIR/node_modules/better-sqlite3/build/Release/better_sqlite3.node
|
||||||
|
|
||||||
printf "#!/bin/sh\n./node/bin/node src/www" > $PKG_DIR/trilium.sh
|
printf "#!/bin/sh\n./node/bin/node src/www" > $PKG_DIR/trilium.sh
|
||||||
chmod 755 $PKG_DIR/trilium.sh
|
chmod 755 $PKG_DIR/trilium.sh
|
||||||
|
|
||||||
|
cp bin/tpl/anonymize-database.sql $PKG_DIR/
|
||||||
|
|
||||||
|
cp -r dump-db $PKG_DIR/
|
||||||
|
rm -rf $PKG_DIR/dump-db/node_modules
|
||||||
|
|
||||||
VERSION=`jq -r ".version" package.json`
|
VERSION=`jq -r ".version" package.json`
|
||||||
|
|
||||||
cd dist
|
cd dist
|
||||||
|
|||||||
@@ -22,12 +22,12 @@ rm -rf $BUILD_DIR
|
|||||||
|
|
||||||
mv "./dist/Trilium Notes-win32-x64" $BUILD_DIR
|
mv "./dist/Trilium Notes-win32-x64" $BUILD_DIR
|
||||||
|
|
||||||
# removing software WebGL binaries because they are pretty huge and not necessary
|
cp bin/tpl/anonymize-database.sql $BUILD_DIR/
|
||||||
rm -r $BUILD_DIR/swiftshader
|
|
||||||
|
|
||||||
cp bin/tpl/trilium-portable.bat $BUILD_DIR/
|
cp -r dump-db $BUILD_DIR/
|
||||||
cp bin/tpl/trilium-no-cert-check.bat $BUILD_DIR/
|
rm -rf $BUILD_DIR/dump-db/node_modules
|
||||||
cp bin/tpl/trilium-safe-mode.bat $BUILD_DIR/
|
|
||||||
|
cp bin/tpl/trilium-{portable,no-cert-check,safe-mode}.bat $BUILD_DIR/
|
||||||
|
|
||||||
echo "Zipping windows x64 electron distribution..."
|
echo "Zipping windows x64 electron distribution..."
|
||||||
VERSION=`jq -r ".version" package.json`
|
VERSION=`jq -r ".version" package.json`
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ if [[ $# -eq 0 ]] ; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
n exec 14.18.1 npm run webpack
|
n exec 18.18.2 npm run webpack
|
||||||
|
|
||||||
DIR=$1
|
DIR=$1
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ cp -r electron.js $DIR/
|
|||||||
cp webpack-* $DIR/
|
cp webpack-* $DIR/
|
||||||
|
|
||||||
# run in subshell (so we return to original dir)
|
# run in subshell (so we return to original dir)
|
||||||
(cd $DIR && n exec 14.18.1 npm install --only=prod)
|
(cd $DIR && n exec 18.18.2 npm install --only=prod)
|
||||||
|
|
||||||
# cleanup of useless files in dependencies
|
# cleanup of useless files in dependencies
|
||||||
rm -r $DIR/node_modules/image-q/demo
|
rm -r $DIR/node_modules/image-q/demo
|
||||||
@@ -44,8 +44,7 @@ find $DIR/node_modules -name demo -exec rm -rf {} \;
|
|||||||
|
|
||||||
find $DIR/libraries -name "*.map" -type f -delete
|
find $DIR/libraries -name "*.map" -type f -delete
|
||||||
|
|
||||||
rm -r $DIR/src/public/app
|
cp $DIR/src/public/app/share.js $DIR/src/public/app-dist/
|
||||||
|
cp -r $DIR/src/public/app/doc_notes $DIR/src/public/app-dist/
|
||||||
|
|
||||||
sed -i -e 's/app\/desktop.js/app-dist\/desktop.js/g' $DIR/src/views/desktop.ejs
|
rm -rf $DIR/src/public/app
|
||||||
sed -i -e 's/app\/mobile.js/app-dist\/mobile.js/g' $DIR/src/views/mobile.ejs
|
|
||||||
sed -i -e 's/app\/setup.js/app-dist\/setup.js/g' $DIR/src/views/setup.ejs
|
|
||||||
|
|||||||
7
bin/create-anonymization-script.js
Executable file
7
bin/create-anonymization-script.js
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
const anonymizationService = require('../src/services/anonymization');
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
fs.writeFileSync(path.resolve(__dirname, 'tpl', 'anonymize-database.sql'), anonymizationService.getFullAnonymizationScript());
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"src": "dist/trilium-linux-x64",
|
"src": "dist/trilium-linux-x64",
|
||||||
"dest": "dist/",
|
"dest": "dist/",
|
||||||
|
"compression": "xz",
|
||||||
"name": "trilium",
|
"name": "trilium",
|
||||||
"productName": "Trilium Notes",
|
"productName": "Trilium Notes",
|
||||||
"genericName": "Note taker",
|
"genericName": "Note taker",
|
||||||
@@ -11,4 +12,4 @@
|
|||||||
"bin": "trilium",
|
"bin": "trilium",
|
||||||
"icon": "dist/trilium-linux-x64/icon.png",
|
"icon": "dist/trilium-linux-x64/icon.png",
|
||||||
"categories": [ "Office" ]
|
"categories": [ "Office" ]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,6 @@
|
|||||||
|
|
||||||
SCHEMA_FILE_PATH=db/schema.sql
|
SCHEMA_FILE_PATH=db/schema.sql
|
||||||
|
|
||||||
sqlite3 ~/trilium-data/document.db .schema | grep -v "sqlite_sequence" > "$SCHEMA_FILE_PATH"
|
sqlite3 ./data/document.db .schema | grep -v "sqlite_sequence" > "$SCHEMA_FILE_PATH"
|
||||||
|
|
||||||
echo "DB schema exported to $SCHEMA_FILE_PATH"
|
echo "DB schema exported to $SCHEMA_FILE_PATH"
|
||||||
57
bin/release-flatpack.sh
Executable file
57
bin/release-flatpack.sh
Executable file
@@ -0,0 +1,57 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
if [[ $# -eq 0 ]] ; then
|
||||||
|
echo "Missing argument of new version"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
VERSION=$1
|
||||||
|
|
||||||
|
if ! [[ ${VERSION} =~ ^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}(-.+)?$ ]] ;
|
||||||
|
then
|
||||||
|
echo "Version ${VERSION} isn't in format X.Y.Z"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
VERSION_DATE=$(git log -1 --format=%aI "v${VERSION}" | cut -c -10)
|
||||||
|
VERSION_COMMIT=$(git rev-list -n 1 "v${VERSION}")
|
||||||
|
|
||||||
|
# expecting the directory at a specific path
|
||||||
|
cd ~/trilium-flathub || exit
|
||||||
|
|
||||||
|
if ! git diff-index --quiet HEAD --; then
|
||||||
|
echo "There are uncommitted changes"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
BASE_BRANCH=master
|
||||||
|
|
||||||
|
if [[ "$VERSION" == *"beta"* ]]; then
|
||||||
|
BASE_BRANCH=beta
|
||||||
|
fi
|
||||||
|
|
||||||
|
git switch "${BASE_BRANCH}"
|
||||||
|
git pull
|
||||||
|
|
||||||
|
BRANCH=b${VERSION}
|
||||||
|
|
||||||
|
git branch "${BRANCH}"
|
||||||
|
git switch "${BRANCH}"
|
||||||
|
|
||||||
|
echo "Updating files with version ${VERSION}, date ${VERSION_DATE} and commit ${VERSION_COMMIT}"
|
||||||
|
|
||||||
|
flatpak-node-generator npm ../trilium/package-lock.json
|
||||||
|
|
||||||
|
xmlstarlet ed --inplace --update "/component/releases/release/@version" --value "${VERSION}" --update "/component/releases/release/@date" --value "${VERSION_DATE}" ./com.github.zadam.trilium.metainfo.xml
|
||||||
|
|
||||||
|
yq --inplace "(.modules[0].sources[0].tag = \"v${VERSION}\") | (.modules[0].sources[0].commit = \"${VERSION_COMMIT}\")" ./com.github.zadam.trilium.yml
|
||||||
|
|
||||||
|
git add ./generated-sources.json
|
||||||
|
git add ./com.github.zadam.trilium.metainfo.xml
|
||||||
|
git add ./com.github.zadam.trilium.yml
|
||||||
|
|
||||||
|
git commit -m "release $VERSION"
|
||||||
|
git push --set-upstream origin "${BRANCH}"
|
||||||
|
|
||||||
|
gh pr create --fill -B "${BASE_BRANCH}"
|
||||||
|
gh pr merge --auto --merge --delete-branch
|
||||||
47
bin/tpl/anonymize-database.sql
Normal file
47
bin/tpl/anonymize-database.sql
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
UPDATE etapi_tokens SET tokenHash = 'API token hash value';
|
||||||
|
UPDATE notes SET title = 'title' WHERE title NOT IN ('root', '_hidden', '_share');
|
||||||
|
UPDATE blobs SET content = 'text' WHERE content IS NOT NULL;
|
||||||
|
UPDATE revisions SET title = 'title';
|
||||||
|
|
||||||
|
UPDATE attributes SET name = 'name', value = 'value' WHERE type = 'label'
|
||||||
|
AND name NOT IN
|
||||||
|
('inbox', 'disableVersioning', 'calendarRoot', 'archived', 'excludeFromExport', 'disableInclusion', 'appCss',
|
||||||
|
'appTheme', 'hidePromotedAttributes', 'readOnly', 'autoReadOnlyDisabled', 'cssClass', 'iconClass',
|
||||||
|
'keyboardShortcut', 'run', 'runOnInstance', 'runAtHour', 'customRequestHandler', 'customResourceProvider',
|
||||||
|
'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'revisionsWidgetDisabled',
|
||||||
|
'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass',
|
||||||
|
'workspaceTabBackgroundColor', 'workspaceCalendarRoot', 'workspaceTemplate', 'searchHome', 'workspaceInbox',
|
||||||
|
'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'pageSize', 'viewType', 'mapRootNoteId',
|
||||||
|
'bookmarkFolder', 'sorted', 'sortDirection', 'sortFoldersFirst', 'sortNatural', 'sortLocale', 'top',
|
||||||
|
'fullContentWidth', 'shareHiddenFromTree', 'shareOmitDefaultCss', 'shareRoot', 'shareDescription',
|
||||||
|
'shareRaw', 'shareDisallowRobotIndexing', 'shareIndex', 'displayRelations', 'hideRelations', 'titleTemplate',
|
||||||
|
'template', 'toc', 'color', 'keepCurrentHoisting', 'executeButton', 'executeDescription', 'newNotesOnTop',
|
||||||
|
'clipperInbox', 'internalLink', 'imageLink', 'relationMapLink', 'includeMapLink', 'runOnNoteCreation',
|
||||||
|
'runOnNoteTitleChange', 'runOnNoteChange', 'runOnNoteContentChange', 'runOnNoteDeletion', 'runOnBranchCreation',
|
||||||
|
'runOnBranchDeletion', 'runOnChildNoteCreation', 'runOnAttributeCreation', 'runOnAttributeChange', 'template',
|
||||||
|
'inherit', 'widget', 'renderNote', 'shareCss', 'shareJs', 'shareFavicon');
|
||||||
|
UPDATE attributes SET name = 'name' WHERE type = 'relation'
|
||||||
|
AND name NOT IN
|
||||||
|
('inbox', 'disableVersioning', 'calendarRoot', 'archived', 'excludeFromExport', 'disableInclusion', 'appCss',
|
||||||
|
'appTheme', 'hidePromotedAttributes', 'readOnly', 'autoReadOnlyDisabled', 'cssClass', 'iconClass',
|
||||||
|
'keyboardShortcut', 'run', 'runOnInstance', 'runAtHour', 'customRequestHandler', 'customResourceProvider',
|
||||||
|
'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'revisionsWidgetDisabled',
|
||||||
|
'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass',
|
||||||
|
'workspaceTabBackgroundColor', 'workspaceCalendarRoot', 'workspaceTemplate', 'searchHome', 'workspaceInbox',
|
||||||
|
'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'pageSize', 'viewType', 'mapRootNoteId',
|
||||||
|
'bookmarkFolder', 'sorted', 'sortDirection', 'sortFoldersFirst', 'sortNatural', 'sortLocale', 'top',
|
||||||
|
'fullContentWidth', 'shareHiddenFromTree', 'shareOmitDefaultCss', 'shareRoot', 'shareDescription',
|
||||||
|
'shareRaw', 'shareDisallowRobotIndexing', 'shareIndex', 'displayRelations', 'hideRelations', 'titleTemplate',
|
||||||
|
'template', 'toc', 'color', 'keepCurrentHoisting', 'executeButton', 'executeDescription', 'newNotesOnTop',
|
||||||
|
'clipperInbox', 'internalLink', 'imageLink', 'relationMapLink', 'includeMapLink', 'runOnNoteCreation',
|
||||||
|
'runOnNoteTitleChange', 'runOnNoteChange', 'runOnNoteContentChange', 'runOnNoteDeletion', 'runOnBranchCreation',
|
||||||
|
'runOnBranchDeletion', 'runOnChildNoteCreation', 'runOnAttributeCreation', 'runOnAttributeChange', 'template',
|
||||||
|
'inherit', 'widget', 'renderNote', 'shareCss', 'shareJs', 'shareFavicon');
|
||||||
|
UPDATE branches SET prefix = 'prefix' WHERE prefix IS NOT NULL AND prefix != 'recovered';
|
||||||
|
UPDATE options SET value = 'anonymized' WHERE name IN
|
||||||
|
('documentId', 'documentSecret', 'encryptedDataKey',
|
||||||
|
'passwordVerificationHash', 'passwordVerificationSalt',
|
||||||
|
'passwordDerivedKeySalt', 'username', 'syncServerHost', 'syncProxy')
|
||||||
|
AND value != '';
|
||||||
|
|
||||||
|
VACUUM;
|
||||||
@@ -1,4 +1,23 @@
|
|||||||
|
@echo off
|
||||||
|
:: Try to get powershell to launch Trilium since it deals with UTF-8 characters in current path
|
||||||
|
:: If there's no powershell available, fallback to unicode enabled command interpreter
|
||||||
|
|
||||||
|
WHERE powershell.exe > NUL 2>&1
|
||||||
|
IF %ERRORLEVEL% NEQ 0 GOTO BATCH ELSE GOTO POWERSHELL
|
||||||
|
|
||||||
|
:POWERSHELL
|
||||||
|
powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo "Set-Item -Path Env:NODE_TLS_REJECT_UNAUTHORIZED -Value 0; ./trilium.exe"
|
||||||
|
GOTO END
|
||||||
|
|
||||||
|
:BATCH
|
||||||
|
:: Make sure we support UTF-8 characters
|
||||||
|
chcp 65001
|
||||||
|
|
||||||
|
:: Get Current Trilium executable directory and compute data directory
|
||||||
SET DIR=%~dp0
|
SET DIR=%~dp0
|
||||||
set NODE_TLS_REJECT_UNAUTHORIZED=0
|
set NODE_TLS_REJECT_UNAUTHORIZED=0
|
||||||
cd %DIR%
|
cd %DIR%
|
||||||
start trilium.exe
|
start trilium.exe
|
||||||
|
GOTO END
|
||||||
|
|
||||||
|
:END
|
||||||
|
|||||||
@@ -1,4 +1,23 @@
|
|||||||
|
@echo off
|
||||||
|
:: Try to get powershell to launch Trilium since it deals with UTF-8 characters in current path
|
||||||
|
:: If there's no powershell available, fallback to unicode enabled command interpreter
|
||||||
|
|
||||||
|
WHERE powershell.exe > NUL 2>&1
|
||||||
|
IF %ERRORLEVEL% NEQ 0 GOTO BATCH ELSE GOTO POWERSHELL
|
||||||
|
|
||||||
|
:POWERSHELL
|
||||||
|
powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo "Set-Item -Path Env:TRILIUM_DATA_DIR -Value './trilium-data'; ./trilium.exe"
|
||||||
|
GOTO END
|
||||||
|
|
||||||
|
:BATCH
|
||||||
|
:: Make sure we support UTF-8 characters
|
||||||
|
chcp 65001
|
||||||
|
|
||||||
|
:: Get Current Trilium executable directory and compute data directory
|
||||||
SET DIR=%~dp0
|
SET DIR=%~dp0
|
||||||
SET TRILIUM_DATA_DIR=%DIR%\trilium-data
|
SET TRILIUM_DATA_DIR=%DIR%\trilium-data
|
||||||
cd %DIR%
|
cd %DIR%
|
||||||
start trilium.exe
|
start trilium.exe
|
||||||
|
GOTO END
|
||||||
|
|
||||||
|
:END
|
||||||
|
|||||||
@@ -1,4 +1,23 @@
|
|||||||
|
@echo off
|
||||||
|
:: Try to get powershell to launch Trilium since it deals with UTF-8 characters in current path
|
||||||
|
:: If there's no powershell available, fallback to unicode enabled command interpreter
|
||||||
|
|
||||||
|
WHERE powershell.exe > NUL 2>&1
|
||||||
|
IF %ERRORLEVEL% NEQ 0 GOTO BATCH ELSE GOTO POWERSHELL
|
||||||
|
|
||||||
|
:POWERSHELL
|
||||||
|
powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo "Set-Item -Path Env:TRILIUM_SAFE_MODE -Value 1; ./trilium.exe --disable-gpu"
|
||||||
|
GOTO END
|
||||||
|
|
||||||
|
:BATCH
|
||||||
|
:: Make sure we support UTF-8 characters
|
||||||
|
chcp 65001
|
||||||
|
|
||||||
|
:: Get Current Trilium executable directory and compute data directory
|
||||||
SET DIR=%~dp0
|
SET DIR=%~dp0
|
||||||
SET TRILIUM_SAFE_MODE=1
|
SET TRILIUM_SAFE_MODE=1
|
||||||
cd %DIR%
|
cd %DIR%
|
||||||
start trilium.exe
|
start trilium.exe --disable-gpu
|
||||||
|
GOTO END
|
||||||
|
|
||||||
|
:END
|
||||||
|
|||||||
@@ -3,5 +3,5 @@
|
|||||||
DIR=`dirname "$0"`
|
DIR=`dirname "$0"`
|
||||||
export TRILIUM_SAFE_MODE=1
|
export TRILIUM_SAFE_MODE=1
|
||||||
|
|
||||||
"$DIR/trilium"
|
"$DIR/trilium" --disable-gpu
|
||||||
|
|
||||||
|
|||||||
@@ -16,8 +16,14 @@ noBackup=false
|
|||||||
# host=0.0.0.0
|
# host=0.0.0.0
|
||||||
# port setting is relevant only for web deployments, desktop builds run on a fixed port (changeable with TRILIUM_PORT environment variable)
|
# port setting is relevant only for web deployments, desktop builds run on a fixed port (changeable with TRILIUM_PORT environment variable)
|
||||||
port=8080
|
port=8080
|
||||||
# true for TLS/SSL/HTTPS (secure), false for HTTP (unsecure).
|
# true for TLS/SSL/HTTPS (secure), false for HTTP (insecure).
|
||||||
https=false
|
https=false
|
||||||
# path to certificate (run "bash bin/generate-cert.sh" to generate self-signed certificate). Relevant only if https=true
|
# path to certificate (run "bash bin/generate-cert.sh" to generate self-signed certificate). Relevant only if https=true
|
||||||
certPath=
|
certPath=
|
||||||
keyPath=
|
keyPath=
|
||||||
|
# setting to give trust to reverse proxies, a comma-separated list of trusted rev. proxy IPs can be specified (CIDR notation is permitted),
|
||||||
|
# alternatively 'true' will make use of the leftmost IP in X-Forwarded-For, ultimately an integer can be used to tell about the number of hops between
|
||||||
|
# Trilium (which is hop 0) and the first trusted rev. proxy.
|
||||||
|
# once set, expressjs will use the X-Forwarded-For header set by the rev. proxy to determinate the real IPs of clients.
|
||||||
|
# expressjs shortcuts are supported: loopback(127.0.0.1/8, ::1/128), linklocal(169.254.0.0/16, fe80::/10), uniquelocal(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7)
|
||||||
|
trustedReverseProxy=false
|
||||||
|
|||||||
@@ -1,11 +1,5 @@
|
|||||||
- drop branches.utcDateCreated - not used for anything
|
|
||||||
- drop options.utcDateCreated - not used for anything
|
|
||||||
- isDeleted = 0 by default
|
- isDeleted = 0 by default
|
||||||
- rename openTabs to openNoteContexts
|
|
||||||
- migrate black theme to dark theme
|
|
||||||
- unify readOnly handling to a single attribute:
|
- unify readOnly handling to a single attribute:
|
||||||
* readOnly - like now
|
* readOnly - like now
|
||||||
* readOnly=auto - like without readOnly (used to override inherited readOnly)
|
* readOnly=auto - like without readOnly (used to override inherited readOnly)
|
||||||
* readOnly=never - like autoReadOnlyDisabled
|
* readOnly=never - like autoReadOnlyDisabled
|
||||||
- remove focusOnAttributesKeyboardShortcut
|
|
||||||
- rename white theme to "light" theme (it's not completely white and matches well to dark theme)
|
|
||||||
|
|||||||
BIN
db/demo.zip
BIN
db/demo.zip
Binary file not shown.
@@ -1,15 +0,0 @@
|
|||||||
const becca = require('../../src/becca/becca');
|
|
||||||
const beccaLoader = require('../../src/becca/becca_loader');
|
|
||||||
const cls = require('../../src/services/cls');
|
|
||||||
|
|
||||||
module.exports = () => {
|
|
||||||
cls.init(() => {
|
|
||||||
beccaLoader.load();
|
|
||||||
|
|
||||||
for (const note of Object.values(becca.notes)) {
|
|
||||||
if (note.hasLabel('calendarRoot')) {
|
|
||||||
note.addLabel('excludeFromNoteMap', "", true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
-- black theme has been removed, dark is closest replacement
|
|
||||||
UPDATE options SET value = 'dark' WHERE name = 'theme' AND value = 'black';
|
|
||||||
|
|
||||||
UPDATE options SET value = 'light' WHERE name = 'theme' AND value = 'white';
|
|
||||||
10
db/migrations/0215__content_structure.sql
Normal file
10
db/migrations/0215__content_structure.sql
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
CREATE TABLE IF NOT EXISTS "blobs" (
|
||||||
|
`blobId` TEXT NOT NULL,
|
||||||
|
`content` TEXT NULL DEFAULT NULL,
|
||||||
|
`dateModified` TEXT NOT NULL,
|
||||||
|
`utcDateModified` TEXT NOT NULL,
|
||||||
|
PRIMARY KEY(`blobId`)
|
||||||
|
);
|
||||||
|
|
||||||
|
ALTER TABLE notes ADD blobId TEXT DEFAULT NULL;
|
||||||
|
ALTER TABLE note_revisions ADD blobId TEXT DEFAULT NULL;
|
||||||
62
db/migrations/0216__move_content_into_blobs.js
Normal file
62
db/migrations/0216__move_content_into_blobs.js
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
module.exports = () => {
|
||||||
|
const sql = require("../../src/services/sql");
|
||||||
|
const utils = require("../../src/services/utils");
|
||||||
|
|
||||||
|
const existingBlobIds = new Set();
|
||||||
|
|
||||||
|
for (const noteId of sql.getColumn(`SELECT noteId FROM note_contents`)) {
|
||||||
|
const row = sql.getRow(`SELECT noteId, content, dateModified, utcDateModified FROM note_contents WHERE noteId = ?`, [noteId]);
|
||||||
|
const blobId = utils.hashedBlobId(row.content);
|
||||||
|
|
||||||
|
if (!existingBlobIds.has(blobId)) {
|
||||||
|
existingBlobIds.add(blobId);
|
||||||
|
|
||||||
|
sql.insert('blobs', {
|
||||||
|
blobId,
|
||||||
|
content: row.content,
|
||||||
|
dateModified: row.dateModified,
|
||||||
|
utcDateModified: row.utcDateModified
|
||||||
|
});
|
||||||
|
|
||||||
|
sql.execute("UPDATE entity_changes SET entityName = 'blobs', entityId = ? WHERE entityName = 'note_contents' AND entityId = ?", [blobId, row.noteId]);
|
||||||
|
} else {
|
||||||
|
// duplicates
|
||||||
|
sql.execute("DELETE FROM entity_changes WHERE entityName = 'note_contents' AND entityId = ?", [row.noteId]);
|
||||||
|
}
|
||||||
|
|
||||||
|
sql.execute('UPDATE notes SET blobId = ? WHERE noteId = ?', [blobId, row.noteId]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const noteRevisionId of sql.getColumn(`SELECT noteRevisionId FROM note_revision_contents`)) {
|
||||||
|
const row = sql.getRow(`SELECT noteRevisionId, content, utcDateModified FROM note_revision_contents WHERE noteRevisionId = ?`, [noteRevisionId]);
|
||||||
|
const blobId = utils.hashedBlobId(row.content);
|
||||||
|
|
||||||
|
if (!existingBlobIds.has(blobId)) {
|
||||||
|
existingBlobIds.add(blobId);
|
||||||
|
|
||||||
|
sql.insert('blobs', {
|
||||||
|
blobId,
|
||||||
|
content: row.content,
|
||||||
|
dateModified: row.utcDateModified,
|
||||||
|
utcDateModified: row.utcDateModified
|
||||||
|
});
|
||||||
|
|
||||||
|
sql.execute("UPDATE entity_changes SET entityName = 'blobs', entityId = ? WHERE entityName = 'note_revision_contents' AND entityId = ?", [blobId, row.noteRevisionId]);
|
||||||
|
} else {
|
||||||
|
// duplicates
|
||||||
|
sql.execute("DELETE FROM entity_changes WHERE entityName = 'note_revision_contents' AND entityId = ?", [row.noteId]);
|
||||||
|
}
|
||||||
|
|
||||||
|
sql.execute('UPDATE note_revisions SET blobId = ? WHERE noteRevisionId = ?', [blobId, row.noteRevisionId]);
|
||||||
|
}
|
||||||
|
|
||||||
|
const notesWithoutBlobIds = sql.getColumn("SELECT noteId FROM notes WHERE blobId IS NULL");
|
||||||
|
if (notesWithoutBlobIds.length > 0) {
|
||||||
|
throw new Error("BlobIds were not filled correctly in notes: " + JSON.stringify(notesWithoutBlobIds));
|
||||||
|
}
|
||||||
|
|
||||||
|
const noteRevisionsWithoutBlobIds = sql.getColumn("SELECT noteRevisionId FROM note_revisions WHERE blobId IS NULL");
|
||||||
|
if (noteRevisionsWithoutBlobIds.length > 0) {
|
||||||
|
throw new Error("BlobIds were not filled correctly in note revisions: " + JSON.stringify(noteRevisionsWithoutBlobIds));
|
||||||
|
}
|
||||||
|
};
|
||||||
4
db/migrations/0217__drop_content_tables.sql
Normal file
4
db/migrations/0217__drop_content_tables.sql
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
DROP TABLE note_contents;
|
||||||
|
DROP TABLE note_revision_contents;
|
||||||
|
|
||||||
|
DELETE FROM entity_changes WHERE entityName IN ('note_contents', 'note_revision_contents');
|
||||||
25
db/migrations/0218__rename_note_revision_to_revision.sql
Normal file
25
db/migrations/0218__rename_note_revision_to_revision.sql
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
CREATE TABLE IF NOT EXISTS "revisions" (`revisionId` TEXT NOT NULL PRIMARY KEY,
|
||||||
|
`noteId` TEXT NOT NULL,
|
||||||
|
type TEXT DEFAULT '' NOT NULL,
|
||||||
|
mime TEXT DEFAULT '' NOT NULL,
|
||||||
|
`title` TEXT NOT NULL,
|
||||||
|
`isProtected` INT NOT NULL DEFAULT 0,
|
||||||
|
blobId TEXT DEFAULT NULL,
|
||||||
|
`utcDateLastEdited` TEXT NOT NULL,
|
||||||
|
`utcDateCreated` TEXT NOT NULL,
|
||||||
|
`utcDateModified` TEXT NOT NULL,
|
||||||
|
`dateLastEdited` TEXT NOT NULL,
|
||||||
|
`dateCreated` TEXT NOT NULL);
|
||||||
|
|
||||||
|
INSERT INTO revisions (revisionId, noteId, type, mime, title, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, blobId)
|
||||||
|
SELECT noteRevisionId, noteId, type, mime, title, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, blobId FROM note_revisions;
|
||||||
|
|
||||||
|
DROP TABLE note_revisions;
|
||||||
|
|
||||||
|
CREATE INDEX `IDX_revisions_noteId` ON `revisions` (`noteId`);
|
||||||
|
CREATE INDEX `IDX_revisions_utcDateCreated` ON `revisions` (`utcDateCreated`);
|
||||||
|
CREATE INDEX `IDX_revisions_utcDateLastEdited` ON `revisions` (`utcDateLastEdited`);
|
||||||
|
CREATE INDEX `IDX_revisions_dateCreated` ON `revisions` (`dateCreated`);
|
||||||
|
CREATE INDEX `IDX_revisions_dateLastEdited` ON `revisions` (`dateLastEdited`);
|
||||||
|
|
||||||
|
UPDATE entity_changes SET entityName = 'revisions' WHERE entityName = 'note_revisions';
|
||||||
21
db/migrations/0219__attachments.sql
Normal file
21
db/migrations/0219__attachments.sql
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
CREATE TABLE IF NOT EXISTS "attachments"
|
||||||
|
(
|
||||||
|
attachmentId TEXT not null primary key,
|
||||||
|
ownerId TEXT not null,
|
||||||
|
role TEXT not null,
|
||||||
|
mime TEXT not null,
|
||||||
|
title TEXT not null,
|
||||||
|
isProtected INT not null DEFAULT 0,
|
||||||
|
position INT default 0 not null,
|
||||||
|
blobId TEXT DEFAULT null,
|
||||||
|
dateModified TEXT NOT NULL,
|
||||||
|
utcDateModified TEXT not null,
|
||||||
|
utcDateScheduledForErasureSince TEXT DEFAULT NULL,
|
||||||
|
isDeleted INT not null,
|
||||||
|
deleteId TEXT DEFAULT NULL);
|
||||||
|
|
||||||
|
CREATE INDEX IDX_attachments_ownerId_role
|
||||||
|
on attachments (ownerId, role);
|
||||||
|
|
||||||
|
CREATE INDEX IDX_attachments_utcDateScheduledForErasureSince
|
||||||
|
on attachments (utcDateScheduledForErasureSince);
|
||||||
27
db/migrations/0220__migrate_images_to_attachments.js
Normal file
27
db/migrations/0220__migrate_images_to_attachments.js
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
module.exports = () => {
|
||||||
|
const beccaLoader = require("../../src/becca/becca_loader");
|
||||||
|
const becca = require("../../src/becca/becca");
|
||||||
|
const cls = require("../../src/services/cls");
|
||||||
|
const log = require("../../src/services/log");
|
||||||
|
const sql = require("../../src/services/sql");
|
||||||
|
|
||||||
|
cls.init(() => {
|
||||||
|
// emergency disabling of image compression since it appears to make problems in migration to 0.61
|
||||||
|
sql.execute(`UPDATE options SET value = 'false' WHERE name = 'compressImages'`);
|
||||||
|
|
||||||
|
beccaLoader.load();
|
||||||
|
|
||||||
|
for (const note of Object.values(becca.notes)) {
|
||||||
|
try {
|
||||||
|
const attachment = note.convertToParentAttachment({autoConversion: true});
|
||||||
|
|
||||||
|
if (attachment) {
|
||||||
|
log.info(`Auto-converted note '${note.noteId}' into attachment '${attachment.attachmentId}'.`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
log.error(`Cannot convert note '${note.noteId}' to attachment: ${e.message} ${e.stack}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
DELETE FROM options WHERE name = 'hideIncludedImages_main';
|
||||||
|
DELETE FROM entity_changes WHERE entityName = 'options' AND entityId = 'hideIncludedImages_main';
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
UPDATE options SET name = 'openNoteContexts' WHERE name = 'openTabs';
|
||||||
|
UPDATE entity_changes SET entityId = 'openNoteContexts' WHERE entityName = 'options' AND entityId = 'openTabs';
|
||||||
1
db/migrations/0223__NOOP.sql
Normal file
1
db/migrations/0223__NOOP.sql
Normal file
@@ -0,0 +1 @@
|
|||||||
|
SELECT 1;
|
||||||
14
db/migrations/0224__fix_blobIds.sql
Normal file
14
db/migrations/0224__fix_blobIds.sql
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
UPDATE blobs SET blobId = REPLACE(blobId, '+', 'X');
|
||||||
|
UPDATE blobs SET blobId = REPLACE(blobId, '/', 'Y');
|
||||||
|
|
||||||
|
UPDATE notes SET blobId = REPLACE(blobId, '+', 'X');
|
||||||
|
UPDATE notes SET blobId = REPLACE(blobId, '/', 'Y');
|
||||||
|
|
||||||
|
UPDATE attachments SET blobId = REPLACE(blobId, '+', 'X');
|
||||||
|
UPDATE attachments SET blobId = REPLACE(blobId, '/', 'Y');
|
||||||
|
|
||||||
|
UPDATE revisions SET blobId = REPLACE(blobId, '+', 'X');
|
||||||
|
UPDATE revisions SET blobId = REPLACE(blobId, '/', 'Y');
|
||||||
|
|
||||||
|
UPDATE entity_changes SET entityId = REPLACE(entityId, '+', 'X') WHERE entityName = 'blobs';
|
||||||
|
UPDATE entity_changes SET entityId = REPLACE(entityId, '/', 'Y') WHERE entityName = 'blobs';
|
||||||
3
db/migrations/0225__create_blobId_indices.sql
Normal file
3
db/migrations/0225__create_blobId_indices.sql
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
CREATE INDEX IF NOT EXISTS IDX_notes_blobId on notes (blobId);
|
||||||
|
CREATE INDEX IF NOT EXISTS IDX_revisions_blobId on revisions (blobId);
|
||||||
|
CREATE INDEX IF NOT EXISTS IDX_attachments_blobId on attachments (blobId);
|
||||||
1
db/migrations/0226__rename_noteSize_label.sql
Normal file
1
db/migrations/0226__rename_noteSize_label.sql
Normal file
@@ -0,0 +1 @@
|
|||||||
|
UPDATE attributes SET value = 'contentAndAttachmentsAndRevisionsSize' WHERE name = 'orderBy' AND value = 'noteSize';
|
||||||
2
db/migrations/0227__disable_image_compression.sql
Normal file
2
db/migrations/0227__disable_image_compression.sql
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
-- emergency disabling of image compression since it appears to make problems in migration to 0.61
|
||||||
|
UPDATE options SET value = 'false' WHERE name = 'compressImages';
|
||||||
@@ -4,15 +4,19 @@ CREATE TABLE IF NOT EXISTS "entity_changes" (
|
|||||||
`entityId` TEXT NOT NULL,
|
`entityId` TEXT NOT NULL,
|
||||||
`hash` TEXT NOT NULL,
|
`hash` TEXT NOT NULL,
|
||||||
`isErased` INT NOT NULL,
|
`isErased` INT NOT NULL,
|
||||||
`sourceId` TEXT NOT NULL,
|
`changeId` TEXT NOT NULL,
|
||||||
|
`componentId` TEXT NOT NULL,
|
||||||
|
`instanceId` TEXT NOT NULL,
|
||||||
`isSynced` INTEGER NOT NULL,
|
`isSynced` INTEGER NOT NULL,
|
||||||
`utcDateChanged` TEXT NOT NULL
|
`utcDateChanged` TEXT NOT NULL
|
||||||
);
|
);
|
||||||
CREATE TABLE IF NOT EXISTS "api_tokens"
|
CREATE TABLE IF NOT EXISTS "etapi_tokens"
|
||||||
(
|
(
|
||||||
apiTokenId TEXT PRIMARY KEY NOT NULL,
|
etapiTokenId TEXT PRIMARY KEY NOT NULL,
|
||||||
token TEXT NOT NULL,
|
name TEXT NOT NULL,
|
||||||
|
tokenHash TEXT NOT NULL,
|
||||||
utcDateCreated TEXT NOT NULL,
|
utcDateCreated TEXT NOT NULL,
|
||||||
|
utcDateModified TEXT NOT NULL,
|
||||||
isDeleted INT NOT NULL DEFAULT 0);
|
isDeleted INT NOT NULL DEFAULT 0);
|
||||||
CREATE TABLE IF NOT EXISTS "branches" (
|
CREATE TABLE IF NOT EXISTS "branches" (
|
||||||
`branchId` TEXT NOT NULL,
|
`branchId` TEXT NOT NULL,
|
||||||
@@ -24,7 +28,6 @@ CREATE TABLE IF NOT EXISTS "branches" (
|
|||||||
`isDeleted` INTEGER NOT NULL DEFAULT 0,
|
`isDeleted` INTEGER NOT NULL DEFAULT 0,
|
||||||
`deleteId` TEXT DEFAULT NULL,
|
`deleteId` TEXT DEFAULT NULL,
|
||||||
`utcDateModified` TEXT NOT NULL,
|
`utcDateModified` TEXT NOT NULL,
|
||||||
utcDateCreated TEXT NOT NULL,
|
|
||||||
PRIMARY KEY(`branchId`));
|
PRIMARY KEY(`branchId`));
|
||||||
CREATE TABLE IF NOT EXISTS "notes" (
|
CREATE TABLE IF NOT EXISTS "notes" (
|
||||||
`noteId` TEXT NOT NULL,
|
`noteId` TEXT NOT NULL,
|
||||||
@@ -32,6 +35,7 @@ CREATE TABLE IF NOT EXISTS "notes" (
|
|||||||
`isProtected` INT NOT NULL DEFAULT 0,
|
`isProtected` INT NOT NULL DEFAULT 0,
|
||||||
`type` TEXT NOT NULL DEFAULT 'text',
|
`type` TEXT NOT NULL DEFAULT 'text',
|
||||||
`mime` TEXT NOT NULL DEFAULT 'text/html',
|
`mime` TEXT NOT NULL DEFAULT 'text/html',
|
||||||
|
blobId TEXT DEFAULT NULL,
|
||||||
`isDeleted` INT NOT NULL DEFAULT 0,
|
`isDeleted` INT NOT NULL DEFAULT 0,
|
||||||
`deleteId` TEXT DEFAULT NULL,
|
`deleteId` TEXT DEFAULT NULL,
|
||||||
`dateCreated` TEXT NOT NULL,
|
`dateCreated` TEXT NOT NULL,
|
||||||
@@ -39,33 +43,23 @@ CREATE TABLE IF NOT EXISTS "notes" (
|
|||||||
`utcDateCreated` TEXT NOT NULL,
|
`utcDateCreated` TEXT NOT NULL,
|
||||||
`utcDateModified` TEXT NOT NULL,
|
`utcDateModified` TEXT NOT NULL,
|
||||||
PRIMARY KEY(`noteId`));
|
PRIMARY KEY(`noteId`));
|
||||||
CREATE TABLE IF NOT EXISTS "note_contents" (
|
CREATE TABLE IF NOT EXISTS "revisions" (`revisionId` TEXT NOT NULL PRIMARY KEY,
|
||||||
`noteId` TEXT NOT NULL,
|
|
||||||
`content` TEXT NULL DEFAULT NULL,
|
|
||||||
`dateModified` TEXT NOT NULL,
|
|
||||||
`utcDateModified` TEXT NOT NULL,
|
|
||||||
PRIMARY KEY(`noteId`)
|
|
||||||
);
|
|
||||||
CREATE TABLE IF NOT EXISTS "note_revisions" (`noteRevisionId` TEXT NOT NULL PRIMARY KEY,
|
|
||||||
`noteId` TEXT NOT NULL,
|
`noteId` TEXT NOT NULL,
|
||||||
type TEXT DEFAULT '' NOT NULL,
|
type TEXT DEFAULT '' NOT NULL,
|
||||||
mime TEXT DEFAULT '' NOT NULL,
|
mime TEXT DEFAULT '' NOT NULL,
|
||||||
`title` TEXT,
|
`title` TEXT NOT NULL,
|
||||||
`isProtected` INT NOT NULL DEFAULT 0,
|
`isProtected` INT NOT NULL DEFAULT 0,
|
||||||
|
blobId TEXT DEFAULT NULL,
|
||||||
`utcDateLastEdited` TEXT NOT NULL,
|
`utcDateLastEdited` TEXT NOT NULL,
|
||||||
`utcDateCreated` TEXT NOT NULL,
|
`utcDateCreated` TEXT NOT NULL,
|
||||||
`utcDateModified` TEXT NOT NULL,
|
`utcDateModified` TEXT NOT NULL,
|
||||||
`dateLastEdited` TEXT NOT NULL,
|
`dateLastEdited` TEXT NOT NULL,
|
||||||
`dateCreated` TEXT NOT NULL);
|
`dateCreated` TEXT NOT NULL);
|
||||||
CREATE TABLE IF NOT EXISTS "note_revision_contents" (`noteRevisionId` TEXT NOT NULL PRIMARY KEY,
|
|
||||||
`content` TEXT,
|
|
||||||
`utcDateModified` TEXT NOT NULL);
|
|
||||||
CREATE TABLE IF NOT EXISTS "options"
|
CREATE TABLE IF NOT EXISTS "options"
|
||||||
(
|
(
|
||||||
name TEXT not null PRIMARY KEY,
|
name TEXT not null PRIMARY KEY,
|
||||||
value TEXT,
|
value TEXT not null,
|
||||||
isSynced INTEGER default 0 not null,
|
isSynced INTEGER default 0 not null,
|
||||||
utcDateCreated TEXT not null,
|
|
||||||
utcDateModified TEXT NOT NULL
|
utcDateModified TEXT NOT NULL
|
||||||
);
|
);
|
||||||
CREATE TABLE IF NOT EXISTS "attributes"
|
CREATE TABLE IF NOT EXISTS "attributes"
|
||||||
@@ -92,11 +86,12 @@ CREATE INDEX `IDX_notes_dateCreated` ON `notes` (`dateCreated`);
|
|||||||
CREATE INDEX `IDX_notes_dateModified` ON `notes` (`dateModified`);
|
CREATE INDEX `IDX_notes_dateModified` ON `notes` (`dateModified`);
|
||||||
CREATE INDEX `IDX_notes_utcDateModified` ON `notes` (`utcDateModified`);
|
CREATE INDEX `IDX_notes_utcDateModified` ON `notes` (`utcDateModified`);
|
||||||
CREATE INDEX `IDX_notes_utcDateCreated` ON `notes` (`utcDateCreated`);
|
CREATE INDEX `IDX_notes_utcDateCreated` ON `notes` (`utcDateCreated`);
|
||||||
CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (`noteId`);
|
CREATE INDEX `IDX_revisions_noteId` ON `revisions` (`noteId`);
|
||||||
CREATE INDEX `IDX_note_revisions_utcDateCreated` ON `note_revisions` (`utcDateCreated`);
|
CREATE INDEX `IDX_revisions_utcDateCreated` ON `revisions` (`utcDateCreated`);
|
||||||
CREATE INDEX `IDX_note_revisions_utcDateLastEdited` ON `note_revisions` (`utcDateLastEdited`);
|
CREATE INDEX `IDX_revisions_utcDateLastEdited` ON `revisions` (`utcDateLastEdited`);
|
||||||
CREATE INDEX `IDX_note_revisions_dateCreated` ON `note_revisions` (`dateCreated`);
|
CREATE INDEX `IDX_revisions_dateCreated` ON `revisions` (`dateCreated`);
|
||||||
CREATE INDEX `IDX_note_revisions_dateLastEdited` ON `note_revisions` (`dateLastEdited`);
|
CREATE INDEX `IDX_revisions_dateLastEdited` ON `revisions` (`dateLastEdited`);
|
||||||
|
CREATE INDEX `IDX_entity_changes_changeId` ON `entity_changes` (`changeId`);
|
||||||
CREATE INDEX IDX_attributes_name_value
|
CREATE INDEX IDX_attributes_name_value
|
||||||
on attributes (name, value);
|
on attributes (name, value);
|
||||||
CREATE INDEX IDX_attributes_noteId_index
|
CREATE INDEX IDX_attributes_noteId_index
|
||||||
@@ -109,3 +104,31 @@ CREATE TABLE IF NOT EXISTS "recent_notes"
|
|||||||
notePath TEXT not null,
|
notePath TEXT not null,
|
||||||
utcDateCreated TEXT not null
|
utcDateCreated TEXT not null
|
||||||
);
|
);
|
||||||
|
CREATE TABLE IF NOT EXISTS "blobs" (
|
||||||
|
`blobId` TEXT NOT NULL,
|
||||||
|
`content` TEXT NULL DEFAULT NULL,
|
||||||
|
`dateModified` TEXT NOT NULL,
|
||||||
|
`utcDateModified` TEXT NOT NULL,
|
||||||
|
PRIMARY KEY(`blobId`)
|
||||||
|
);
|
||||||
|
CREATE TABLE IF NOT EXISTS "attachments"
|
||||||
|
(
|
||||||
|
attachmentId TEXT not null primary key,
|
||||||
|
ownerId TEXT not null,
|
||||||
|
role TEXT not null,
|
||||||
|
mime TEXT not null,
|
||||||
|
title TEXT not null,
|
||||||
|
isProtected INT not null DEFAULT 0,
|
||||||
|
position INT default 0 not null,
|
||||||
|
blobId TEXT DEFAULT null,
|
||||||
|
dateModified TEXT NOT NULL,
|
||||||
|
utcDateModified TEXT not null,
|
||||||
|
utcDateScheduledForErasureSince TEXT DEFAULT NULL,
|
||||||
|
isDeleted INT not null,
|
||||||
|
deleteId TEXT DEFAULT NULL);
|
||||||
|
CREATE INDEX IDX_attachments_ownerId_role
|
||||||
|
on attachments (ownerId, role);
|
||||||
|
|
||||||
|
CREATE INDEX IDX_notes_blobId on notes (blobId);
|
||||||
|
CREATE INDEX IDX_revisions_blobId on revisions (blobId);
|
||||||
|
CREATE INDEX IDX_attachments_blobId on attachments (blobId);
|
||||||
|
|||||||
@@ -1,17 +1,16 @@
|
|||||||
|
# Running `docker-compose up` will create/use the "trilium-data" directory in the user home
|
||||||
|
# Run `TRILIUM_DATA_DIR=/path/of/your/choice docker-compose up` to set a different directory
|
||||||
version: '2.1'
|
version: '2.1'
|
||||||
services:
|
services:
|
||||||
trilium:
|
trilium:
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
image: zadam/trilium
|
image: zadam/trilium
|
||||||
restart: always
|
restart: always
|
||||||
environment:
|
environment:
|
||||||
- TRILIUM_DATA_DIR=/data
|
- TRILIUM_DATA_DIR=/home/node/trilium-data
|
||||||
ports:
|
ports:
|
||||||
- "8080:8080"
|
- "8080:8080"
|
||||||
volumes:
|
volumes:
|
||||||
- trilium:/data
|
- ${TRILIUM_DATA_DIR:-~/trilium-data}:/home/node/trilium-data
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
trilium:
|
trilium:
|
||||||
|
|
||||||
|
|||||||
42
docker_healthcheck.js
Executable file
42
docker_healthcheck.js
Executable file
@@ -0,0 +1,42 @@
|
|||||||
|
const http = require("http");
|
||||||
|
const ini = require("ini");
|
||||||
|
const fs = require("fs");
|
||||||
|
const dataDir = require("./src/services/data_dir");
|
||||||
|
const config = ini.parse(fs.readFileSync(dataDir.CONFIG_INI_PATH, 'utf-8'));
|
||||||
|
|
||||||
|
if (config.Network.https) {
|
||||||
|
// built-in TLS (terminated by trilium) is not supported yet, PRs are welcome
|
||||||
|
// for reverse proxy terminated TLS this will works since config.https will be false
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
const port = require('./src/services/port');
|
||||||
|
const host = require('./src/services/host');
|
||||||
|
|
||||||
|
const options = { timeout: 2000 };
|
||||||
|
|
||||||
|
const callback = res => {
|
||||||
|
console.log(`STATUS: ${res.statusCode}`);
|
||||||
|
if (res.statusCode === 200) {
|
||||||
|
process.exit(0);
|
||||||
|
} else {
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let request;
|
||||||
|
|
||||||
|
if (port !== 0) { // TCP socket.
|
||||||
|
const url = `http://${host}:${port}/api/health-check`;
|
||||||
|
request = http.request(url, options, callback);
|
||||||
|
} else { // Unix socket.
|
||||||
|
options.socketPath = host;
|
||||||
|
options.path = '/api/health-check';
|
||||||
|
request = http.request(options, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
request.on("error", err => {
|
||||||
|
console.log("ERROR");
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
|
request.end();
|
||||||
1207
docs/backend_api/AbstractBeccaEntity.html
Normal file
1207
docs/backend_api/AbstractBeccaEntity.html
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,170 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>JSDoc: Class: ApiToken</title>
|
|
||||||
|
|
||||||
<script src="scripts/prettify/prettify.js"> </script>
|
|
||||||
<script src="scripts/prettify/lang-css.js"> </script>
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div id="main">
|
|
||||||
|
|
||||||
<h1 class="page-title">Class: ApiToken</h1>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section>
|
|
||||||
|
|
||||||
<header>
|
|
||||||
|
|
||||||
<h2><span class="attribs"><span class="type-signature"></span></span>ApiToken<span class="signature">()</span><span class="type-signature"></span></h2>
|
|
||||||
|
|
||||||
<div class="class-description">ApiToken is an entity representing token used to authenticate against Trilium API from client applications. Currently used only by Trilium Sender.</div>
|
|
||||||
|
|
||||||
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<article>
|
|
||||||
<div class="container-overview">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h2>Constructor</h2>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h4 class="name" id="ApiToken"><span class="type-signature"></span>new ApiToken<span class="signature">()</span><span class="type-signature"></span></h4>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dl class="details">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dt class="tag-source">Source:</dt>
|
|
||||||
<dd class="tag-source"><ul class="dummy"><li>
|
|
||||||
<a href="becca_entities_api_token.js.html">becca/entities/api_token.js</a>, <a href="becca_entities_api_token.js.html#line9">line 9</a>
|
|
||||||
</li></ul></dd>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</article>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<nav>
|
|
||||||
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<br class="clear">
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script> prettyPrint(); </script>
|
|
||||||
<script src="scripts/linenumber.js"> </script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,759 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>JSDoc: Class: Attribute</title>
|
|
||||||
|
|
||||||
<script src="scripts/prettify/prettify.js"> </script>
|
|
||||||
<script src="scripts/prettify/lang-css.js"> </script>
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div id="main">
|
|
||||||
|
|
||||||
<h1 class="page-title">Class: Attribute</h1>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section>
|
|
||||||
|
|
||||||
<header>
|
|
||||||
|
|
||||||
<h2><span class="attribs"><span class="type-signature"></span></span>Attribute<span class="signature">()</span><span class="type-signature"></span></h2>
|
|
||||||
|
|
||||||
<div class="class-description">Attribute is key value pair owned by a note.</div>
|
|
||||||
|
|
||||||
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<article>
|
|
||||||
<div class="container-overview">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h2>Constructor</h2>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h4 class="name" id="Attribute"><span class="type-signature"></span>new Attribute<span class="signature">()</span><span class="type-signature"></span></h4>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h5 class="subsection-title">Properties:</h5>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<table class="props">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<th>Name</th>
|
|
||||||
|
|
||||||
|
|
||||||
<th>Type</th>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<th class="last">Description</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
|
|
||||||
<tbody>
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>attributeId</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last">immutable</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>noteId</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last">immutable</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>type</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last">immutable</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>name</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last">immutable</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>value</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>position</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">int</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>isInheritable</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">boolean</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last">immutable</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>isDeleted</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">boolean</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>deleteId</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
|
||||||
|
|
||||||
<span class="param-type">null</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last">ID identifying delete transaction</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>utcDateModified</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dl class="details">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dt class="tag-source">Source:</dt>
|
|
||||||
<dd class="tag-source"><ul class="dummy"><li>
|
|
||||||
<a href="entities_attribute.js.html">entities/attribute.js</a>, <a href="entities_attribute.js.html#line25">line 25</a>
|
|
||||||
</li></ul></dd>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<h3 class="subsection-title">Extends</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li><a href="Entity.html">Entity</a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3 class="subsection-title">Methods</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h4 class="name" id="getNote"><span class="type-signature"></span>getNote<span class="signature">()</span><span class="type-signature"> → {<a href="Note.html">Note</a>|null}</span></h4>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dl class="details">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dt class="tag-source">Source:</dt>
|
|
||||||
<dd class="tag-source"><ul class="dummy"><li>
|
|
||||||
<a href="entities_attribute.js.html">entities/attribute.js</a>, <a href="entities_attribute.js.html#line43">line 43</a>
|
|
||||||
</li></ul></dd>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h5>Returns:</h5>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dl>
|
|
||||||
<dt>
|
|
||||||
Type
|
|
||||||
</dt>
|
|
||||||
<dd>
|
|
||||||
|
|
||||||
<span class="param-type"><a href="Note.html">Note</a></span>
|
|
||||||
|
|
|
||||||
|
|
||||||
<span class="param-type">null</span>
|
|
||||||
|
|
||||||
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h4 class="name" id="getTargetNote"><span class="type-signature"></span>getTargetNote<span class="signature">()</span><span class="type-signature"> → {<a href="Note.html">Note</a>|null}</span></h4>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dl class="details">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dt class="tag-source">Source:</dt>
|
|
||||||
<dd class="tag-source"><ul class="dummy"><li>
|
|
||||||
<a href="entities_attribute.js.html">entities/attribute.js</a>, <a href="entities_attribute.js.html#line50">line 50</a>
|
|
||||||
</li></ul></dd>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h5>Returns:</h5>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dl>
|
|
||||||
<dt>
|
|
||||||
Type
|
|
||||||
</dt>
|
|
||||||
<dd>
|
|
||||||
|
|
||||||
<span class="param-type"><a href="Note.html">Note</a></span>
|
|
||||||
|
|
|
||||||
|
|
||||||
<span class="param-type">null</span>
|
|
||||||
|
|
||||||
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h4 class="name" id="isDefinition"><span class="type-signature"></span>isDefinition<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dl class="details">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dt class="tag-source">Source:</dt>
|
|
||||||
<dd class="tag-source"><ul class="dummy"><li>
|
|
||||||
<a href="entities_attribute.js.html">entities/attribute.js</a>, <a href="entities_attribute.js.html#line65">line 65</a>
|
|
||||||
</li></ul></dd>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h5>Returns:</h5>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dl>
|
|
||||||
<dt>
|
|
||||||
Type
|
|
||||||
</dt>
|
|
||||||
<dd>
|
|
||||||
|
|
||||||
<span class="param-type">boolean</span>
|
|
||||||
|
|
||||||
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</article>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<nav>
|
|
||||||
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<br class="clear">
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.6</a>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script> prettyPrint(); </script>
|
|
||||||
<script src="scripts/linenumber.js"> </script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
2894
docs/backend_api/BAttachment.html
Normal file
2894
docs/backend_api/BAttachment.html
Normal file
File diff suppressed because it is too large
Load Diff
2130
docs/backend_api/BAttribute.html
Normal file
2130
docs/backend_api/BAttribute.html
Normal file
File diff suppressed because it is too large
Load Diff
2244
docs/backend_api/BBranch.html
Normal file
2244
docs/backend_api/BBranch.html
Normal file
File diff suppressed because it is too large
Load Diff
1687
docs/backend_api/BEtapiToken.html
Normal file
1687
docs/backend_api/BEtapiToken.html
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1545
docs/backend_api/BOption.html
Normal file
1545
docs/backend_api/BOption.html
Normal file
File diff suppressed because it is too large
Load Diff
1477
docs/backend_api/BRecentNote.html
Normal file
1477
docs/backend_api/BRecentNote.html
Normal file
File diff suppressed because it is too large
Load Diff
3243
docs/backend_api/BRevision.html
Normal file
3243
docs/backend_api/BRevision.html
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,658 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>JSDoc: Class: Branch</title>
|
|
||||||
|
|
||||||
<script src="scripts/prettify/prettify.js"> </script>
|
|
||||||
<script src="scripts/prettify/lang-css.js"> </script>
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div id="main">
|
|
||||||
|
|
||||||
<h1 class="page-title">Class: Branch</h1>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section>
|
|
||||||
|
|
||||||
<header>
|
|
||||||
|
|
||||||
<h2><span class="attribs"><span class="type-signature"></span></span>Branch<span class="signature">()</span><span class="type-signature"></span></h2>
|
|
||||||
|
|
||||||
<div class="class-description">Branch represents note's placement in the tree - it's essentially pair of noteId and parentNoteId.
|
|
||||||
Each note can have multiple (at least one) branches, meaning it can be placed into multiple places in the tree.</div>
|
|
||||||
|
|
||||||
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<article>
|
|
||||||
<div class="container-overview">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h2>Constructor</h2>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h4 class="name" id="Branch"><span class="type-signature"></span>new Branch<span class="signature">()</span><span class="type-signature"></span></h4>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h5 class="subsection-title">Properties:</h5>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<table class="props">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<th>Name</th>
|
|
||||||
|
|
||||||
|
|
||||||
<th>Type</th>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<th class="last">Description</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
|
|
||||||
<tbody>
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>branchId</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last">primary key, immutable</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>noteId</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last">immutable</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>parentNoteId</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last">immutable</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>notePosition</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">int</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>prefix</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>isExpanded</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">boolean</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>isDeleted</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">boolean</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>deleteId</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
|
||||||
|
|
||||||
<span class="param-type">null</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last">ID identifying delete transaction</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>utcDateModified</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>utcDateCreated</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dl class="details">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dt class="tag-source">Source:</dt>
|
|
||||||
<dd class="tag-source"><ul class="dummy"><li>
|
|
||||||
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line24">line 24</a>
|
|
||||||
</li></ul></dd>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<h3 class="subsection-title">Extends</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li><a href="Entity.html">Entity</a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3 class="subsection-title">Methods</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h4 class="name" id="getNote"><span class="type-signature"></span>getNote<span class="signature">()</span><span class="type-signature"> → {<a href="Note.html">Note</a>|null}</span></h4>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dl class="details">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dt class="tag-source">Source:</dt>
|
|
||||||
<dd class="tag-source"><ul class="dummy"><li>
|
|
||||||
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line31">line 31</a>
|
|
||||||
</li></ul></dd>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h5>Returns:</h5>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dl>
|
|
||||||
<dt>
|
|
||||||
Type
|
|
||||||
</dt>
|
|
||||||
<dd>
|
|
||||||
|
|
||||||
<span class="param-type"><a href="Note.html">Note</a></span>
|
|
||||||
|
|
|
||||||
|
|
||||||
<span class="param-type">null</span>
|
|
||||||
|
|
||||||
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h4 class="name" id="getParentNote"><span class="type-signature"></span>getParentNote<span class="signature">()</span><span class="type-signature"> → {<a href="Note.html">Note</a>|null}</span></h4>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dl class="details">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dt class="tag-source">Source:</dt>
|
|
||||||
<dd class="tag-source"><ul class="dummy"><li>
|
|
||||||
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line36">line 36</a>
|
|
||||||
</li></ul></dd>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h5>Returns:</h5>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dl>
|
|
||||||
<dt>
|
|
||||||
Type
|
|
||||||
</dt>
|
|
||||||
<dd>
|
|
||||||
|
|
||||||
<span class="param-type"><a href="Note.html">Note</a></span>
|
|
||||||
|
|
|
||||||
|
|
||||||
<span class="param-type">null</span>
|
|
||||||
|
|
||||||
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</article>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<nav>
|
|
||||||
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<br class="clear">
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.6</a>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script> prettyPrint(); </script>
|
|
||||||
<script src="scripts/linenumber.js"> </script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,227 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>JSDoc: Class: Entity</title>
|
|
||||||
|
|
||||||
<script src="scripts/prettify/prettify.js"> </script>
|
|
||||||
<script src="scripts/prettify/lang-css.js"> </script>
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div id="main">
|
|
||||||
|
|
||||||
<h1 class="page-title">Class: Entity</h1>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section>
|
|
||||||
|
|
||||||
<header>
|
|
||||||
|
|
||||||
<h2><span class="attribs"><span class="type-signature"></span></span>Entity<span class="signature">(row<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h2>
|
|
||||||
|
|
||||||
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<article>
|
|
||||||
<div class="container-overview">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h4 class="name" id="Entity"><span class="type-signature"></span>new Entity<span class="signature">(row<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h5>Parameters:</h5>
|
|
||||||
|
|
||||||
|
|
||||||
<table class="params">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<th>Name</th>
|
|
||||||
|
|
||||||
|
|
||||||
<th>Type</th>
|
|
||||||
|
|
||||||
|
|
||||||
<th>Attributes</th>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<th class="last">Description</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
|
|
||||||
<tbody>
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>row</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">object</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="attributes">
|
|
||||||
|
|
||||||
<optional><br>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last">database row representing given entity</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dl class="details">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dt class="tag-source">Source:</dt>
|
|
||||||
<dd class="tag-source"><ul class="dummy"><li>
|
|
||||||
<a href="entities_entity.js.html">entities/entity.js</a>, <a href="entities_entity.js.html#line10">line 10</a>
|
|
||||||
</li></ul></dd>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</article>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<nav>
|
|
||||||
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<br class="clear">
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.6</a>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script> prettyPrint(); </script>
|
|
||||||
<script src="scripts/linenumber.js"> </script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,389 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>JSDoc: Class: Image</title>
|
|
||||||
|
|
||||||
<script src="scripts/prettify/prettify.js"> </script>
|
|
||||||
<script src="scripts/prettify/lang-css.js"> </script>
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div id="main">
|
|
||||||
|
|
||||||
<h1 class="page-title">Class: Image</h1>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section>
|
|
||||||
|
|
||||||
<header>
|
|
||||||
|
|
||||||
<h2><span class="attribs"><span class="type-signature"></span></span>Image<span class="signature">(imageId, format, checksum, name, data, isDeleted, dateModified, dateCreated)</span><span class="type-signature"></span></h2>
|
|
||||||
|
|
||||||
<div class="class-description">This class represents image data.</div>
|
|
||||||
|
|
||||||
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<article>
|
|
||||||
<div class="container-overview">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h2>Constructor</h2>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h4 class="name" id="Image"><span class="type-signature"></span>new Image<span class="signature">(imageId, format, checksum, name, data, isDeleted, dateModified, dateCreated)</span><span class="type-signature"></span></h4>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h5>Parameters:</h5>
|
|
||||||
|
|
||||||
|
|
||||||
<table class="params">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<th>Name</th>
|
|
||||||
|
|
||||||
|
|
||||||
<th>Type</th>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<th class="last">Description</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
|
|
||||||
<tbody>
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>imageId</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>format</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>checksum</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>name</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>data</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">blob</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>isDeleted</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">boolean</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>dateModified</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>dateCreated</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dl class="details">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dt class="tag-source">Source:</dt>
|
|
||||||
<dd class="tag-source"><ul class="dummy"><li>
|
|
||||||
<a href="entities_image.js.html">entities/image.js</a>, <a href="entities_image.js.html#line20">line 20</a>
|
|
||||||
</li></ul></dd>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<h3 class="subsection-title">Extends</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li><a href="Entity.html">Entity</a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</article>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<nav>
|
|
||||||
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Image.html">Image</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteImage.html">NoteImage</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<br class="clear">
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Sun Oct 07 2018 16:26:59 GMT+0200 (CEST)
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script> prettyPrint(); </script>
|
|
||||||
<script src="scripts/linenumber.js"> </script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,367 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>JSDoc: Class: Link</title>
|
|
||||||
|
|
||||||
<script src="scripts/prettify/prettify.js"> </script>
|
|
||||||
<script src="scripts/prettify/lang-css.js"> </script>
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div id="main">
|
|
||||||
|
|
||||||
<h1 class="page-title">Class: Link</h1>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section>
|
|
||||||
|
|
||||||
<header>
|
|
||||||
|
|
||||||
<h2><span class="attribs"><span class="type-signature"></span></span>Link<span class="signature">(linkId, noteId, targetNoteId, type, isDeleted, utcDateModified, utcDateCreated)</span><span class="type-signature"></span></h2>
|
|
||||||
|
|
||||||
<div class="class-description">This class represents link from one note to another in the form of hyperlink or image reference. Note that
|
|
||||||
this is different concept than attribute/relation.</div>
|
|
||||||
|
|
||||||
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<article>
|
|
||||||
<div class="container-overview">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h2>Constructor</h2>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h4 class="name" id="Link"><span class="type-signature"></span>new Link<span class="signature">(linkId, noteId, targetNoteId, type, isDeleted, utcDateModified, utcDateCreated)</span><span class="type-signature"></span></h4>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h5>Parameters:</h5>
|
|
||||||
|
|
||||||
|
|
||||||
<table class="params">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<th>Name</th>
|
|
||||||
|
|
||||||
|
|
||||||
<th>Type</th>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<th class="last">Description</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
|
|
||||||
<tbody>
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>linkId</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>noteId</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>targetNoteId</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>type</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>isDeleted</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">boolean</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>utcDateModified</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>utcDateCreated</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dl class="details">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dt class="tag-source">Source:</dt>
|
|
||||||
<dd class="tag-source"><ul class="dummy"><li>
|
|
||||||
<a href="entities_link.js.html">entities/link.js</a>, <a href="entities_link.js.html#line21">line 21</a>
|
|
||||||
</li></ul></dd>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<h3 class="subsection-title">Extends</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li><a href="Entity.html">Entity</a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</article>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<nav>
|
|
||||||
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<br class="clear">
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script> prettyPrint(); </script>
|
|
||||||
<script src="scripts/linenumber.js"> </script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,343 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>JSDoc: Class: NoteImage</title>
|
|
||||||
|
|
||||||
<script src="scripts/prettify/prettify.js"> </script>
|
|
||||||
<script src="scripts/prettify/lang-css.js"> </script>
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div id="main">
|
|
||||||
|
|
||||||
<h1 class="page-title">Class: NoteImage</h1>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section>
|
|
||||||
|
|
||||||
<header>
|
|
||||||
|
|
||||||
<h2><span class="attribs"><span class="type-signature"></span></span>NoteImage<span class="signature">(noteImageId, noteId, imageId, isDeleted, dateModified, dateCreated)</span><span class="type-signature"></span></h2>
|
|
||||||
|
|
||||||
<div class="class-description">This class represents image's placement in the note(s). One image may be placed into several notes.</div>
|
|
||||||
|
|
||||||
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<article>
|
|
||||||
<div class="container-overview">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h2>Constructor</h2>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h4 class="name" id="NoteImage"><span class="type-signature"></span>new NoteImage<span class="signature">(noteImageId, noteId, imageId, isDeleted, dateModified, dateCreated)</span><span class="type-signature"></span></h4>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h5>Parameters:</h5>
|
|
||||||
|
|
||||||
|
|
||||||
<table class="params">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<th>Name</th>
|
|
||||||
|
|
||||||
|
|
||||||
<th>Type</th>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<th class="last">Description</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
|
|
||||||
<tbody>
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>noteImageId</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>noteId</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>imageId</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>isDeleted</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">boolean</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>dateModified</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
<td class="name"><code>dateCreated</code></td>
|
|
||||||
|
|
||||||
|
|
||||||
<td class="type">
|
|
||||||
|
|
||||||
|
|
||||||
<span class="param-type">string</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td class="description last"></td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dl class="details">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dt class="tag-source">Source:</dt>
|
|
||||||
<dd class="tag-source"><ul class="dummy"><li>
|
|
||||||
<a href="entities_note_image.js.html">entities/note_image.js</a>, <a href="entities_note_image.js.html#line19">line 19</a>
|
|
||||||
</li></ul></dd>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<h3 class="subsection-title">Extends</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li><a href="Entity.html">Entity</a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</article>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<nav>
|
|
||||||
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Image.html">Image</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteImage.html">NoteImage</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<br class="clear">
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Sun Oct 07 2018 16:26:59 GMT+0200 (CEST)
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script> prettyPrint(); </script>
|
|
||||||
<script src="scripts/linenumber.js"> </script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,170 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>JSDoc: Class: Option</title>
|
|
||||||
|
|
||||||
<script src="scripts/prettify/prettify.js"> </script>
|
|
||||||
<script src="scripts/prettify/lang-css.js"> </script>
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div id="main">
|
|
||||||
|
|
||||||
<h1 class="page-title">Class: Option</h1>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section>
|
|
||||||
|
|
||||||
<header>
|
|
||||||
|
|
||||||
<h2><span class="attribs"><span class="type-signature"></span></span>Option<span class="signature">()</span><span class="type-signature"></span></h2>
|
|
||||||
|
|
||||||
<div class="class-description">Option represents name-value pair, either directly configurable by the user or some system property.</div>
|
|
||||||
|
|
||||||
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<article>
|
|
||||||
<div class="container-overview">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h2>Constructor</h2>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h4 class="name" id="Option"><span class="type-signature"></span>new Option<span class="signature">()</span><span class="type-signature"></span></h4>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dl class="details">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dt class="tag-source">Source:</dt>
|
|
||||||
<dd class="tag-source"><ul class="dummy"><li>
|
|
||||||
<a href="becca_entities_option.js.html">becca/entities/option.js</a>, <a href="becca_entities_option.js.html#line9">line 9</a>
|
|
||||||
</li></ul></dd>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</article>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<nav>
|
|
||||||
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<br class="clear">
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script> prettyPrint(); </script>
|
|
||||||
<script src="scripts/linenumber.js"> </script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,170 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>JSDoc: Class: RecentNote</title>
|
|
||||||
|
|
||||||
<script src="scripts/prettify/prettify.js"> </script>
|
|
||||||
<script src="scripts/prettify/lang-css.js"> </script>
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div id="main">
|
|
||||||
|
|
||||||
<h1 class="page-title">Class: RecentNote</h1>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section>
|
|
||||||
|
|
||||||
<header>
|
|
||||||
|
|
||||||
<h2><span class="attribs"><span class="type-signature"></span></span>RecentNote<span class="signature">()</span><span class="type-signature"></span></h2>
|
|
||||||
|
|
||||||
<div class="class-description">RecentNote represents recently visited note.</div>
|
|
||||||
|
|
||||||
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<article>
|
|
||||||
<div class="container-overview">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h2>Constructor</h2>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h4 class="name" id="RecentNote"><span class="type-signature"></span>new RecentNote<span class="signature">()</span><span class="type-signature"></span></h4>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dl class="details">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dt class="tag-source">Source:</dt>
|
|
||||||
<dd class="tag-source"><ul class="dummy"><li>
|
|
||||||
<a href="becca_entities_recent_note.js.html">becca/entities/recent_note.js</a>, <a href="becca_entities_recent_note.js.html#line9">line 9</a>
|
|
||||||
</li></ul></dd>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</article>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<nav>
|
|
||||||
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<br class="clear">
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script> prettyPrint(); </script>
|
|
||||||
<script src="scripts/linenumber.js"> </script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,472 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>JSDoc: Source: backend_script_api.js</title>
|
|
||||||
|
|
||||||
<script src="scripts/prettify/prettify.js"> </script>
|
|
||||||
<script src="scripts/prettify/lang-css.js"> </script>
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div id="main">
|
|
||||||
|
|
||||||
<h1 class="page-title">Source: backend_script_api.js</h1>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<article>
|
|
||||||
<pre class="prettyprint source linenums"><code>const log = require('./log');
|
|
||||||
const noteService = require('./notes');
|
|
||||||
const sql = require('./sql');
|
|
||||||
const utils = require('./utils');
|
|
||||||
const attributeService = require('./attributes');
|
|
||||||
const dateNoteService = require('./date_notes');
|
|
||||||
const treeService = require('./tree');
|
|
||||||
const config = require('./config');
|
|
||||||
const axios = require('axios');
|
|
||||||
const dayjs = require('dayjs');
|
|
||||||
const xml2js = require('xml2js');
|
|
||||||
const cloningService = require('./cloning');
|
|
||||||
const appInfo = require('./app_info');
|
|
||||||
const searchService = require('./search/services/search');
|
|
||||||
const SearchContext = require("./search/search_context");
|
|
||||||
const becca = require("../becca/becca");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is the main backend API interface for scripts. It's published in the local "api" object.
|
|
||||||
*
|
|
||||||
* @constructor
|
|
||||||
* @hideconstructor
|
|
||||||
*/
|
|
||||||
function BackendScriptApi(currentNote, apiParams) {
|
|
||||||
/** @property {Note} note where script started executing */
|
|
||||||
this.startNote = apiParams.startNote;
|
|
||||||
/** @property {Note} note where script is currently executing. Don't mix this up with concept of active note */
|
|
||||||
this.currentNote = currentNote;
|
|
||||||
/** @property {Entity} entity whose event triggered this executions */
|
|
||||||
this.originEntity = apiParams.originEntity;
|
|
||||||
|
|
||||||
for (const key in apiParams) {
|
|
||||||
this[key] = apiParams[key];
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @property {axios} Axios library for HTTP requests. See https://axios-http.com/ for documentation */
|
|
||||||
this.axios = axios;
|
|
||||||
/** @property {dayjs} day.js library for date manipulation. See https://day.js.org/ for documentation */
|
|
||||||
this.dayjs = dayjs;
|
|
||||||
/** @property {axios} xml2js library for XML parsing. See https://github.com/Leonidas-from-XIV/node-xml2js for documentation */
|
|
||||||
this.xml2js = xml2js;
|
|
||||||
|
|
||||||
// DEPRECATED - use direct api.unescapeHtml
|
|
||||||
this.utils = {
|
|
||||||
unescapeHtml: utils.unescapeHtml
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instance name identifies particular Trilium instance. It can be useful for scripts
|
|
||||||
* if some action needs to happen on only one specific instance.
|
|
||||||
*
|
|
||||||
* @returns {string|null}
|
|
||||||
*/
|
|
||||||
this.getInstanceName = () => config.General ? config.General.instanceName : null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @method
|
|
||||||
* @param {string} noteId
|
|
||||||
* @returns {Note|null}
|
|
||||||
*/
|
|
||||||
this.getNote = becca.getNote;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @method
|
|
||||||
* @param {string} branchId
|
|
||||||
* @returns {Branch|null}
|
|
||||||
*/
|
|
||||||
this.getBranch = becca.getBranch;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @method
|
|
||||||
* @param {string} attributeId
|
|
||||||
* @returns {Attribute|null}
|
|
||||||
*/
|
|
||||||
this.getAttribute = becca.getAttribute;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is a powerful search method - you can search by attributes and their values, e.g.:
|
|
||||||
* "#dateModified =* MONTH AND #log". See full documentation for all options at: https://github.com/zadam/trilium/wiki/Search
|
|
||||||
*
|
|
||||||
* @method
|
|
||||||
* @param {string} query
|
|
||||||
* @param {Object} [searchParams]
|
|
||||||
* @returns {Note[]}
|
|
||||||
*/
|
|
||||||
this.searchForNotes = (query, searchParams = {}) => {
|
|
||||||
if (searchParams.includeArchivedNotes === undefined) {
|
|
||||||
searchParams.includeArchivedNotes = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (searchParams.ignoreHoistedNote === undefined) {
|
|
||||||
searchParams.ignoreHoistedNote = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
const noteIds = searchService.findResultsWithQuery(query, new SearchContext(searchParams))
|
|
||||||
.map(sr => sr.noteId);
|
|
||||||
|
|
||||||
return becca.getNotes(noteIds);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is a powerful search method - you can search by attributes and their values, e.g.:
|
|
||||||
* "#dateModified =* MONTH AND #log". See full documentation for all options at: https://github.com/zadam/trilium/wiki/Search
|
|
||||||
*
|
|
||||||
* @method
|
|
||||||
* @param {string} query
|
|
||||||
* @param {Object} [searchParams]
|
|
||||||
* @returns {Note|null}
|
|
||||||
*/
|
|
||||||
this.searchForNote = (query, searchParams = {}) => {
|
|
||||||
const notes = this.searchForNotes(query, searchParams);
|
|
||||||
|
|
||||||
return notes.length > 0 ? notes[0] : null;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves notes with given label name & value
|
|
||||||
*
|
|
||||||
* @method
|
|
||||||
* @param {string} name - attribute name
|
|
||||||
* @param {string} [value] - attribute value
|
|
||||||
* @returns {Note[]}
|
|
||||||
*/
|
|
||||||
this.getNotesWithLabel = attributeService.getNotesWithLabel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves first note with given label name & value
|
|
||||||
*
|
|
||||||
* @method
|
|
||||||
* @param {string} name - attribute name
|
|
||||||
* @param {string} [value] - attribute value
|
|
||||||
* @returns {Note|null}
|
|
||||||
*/
|
|
||||||
this.getNoteWithLabel = attributeService.getNoteWithLabel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If there's no branch between note and parent note, create one. Otherwise do nothing.
|
|
||||||
*
|
|
||||||
* @method
|
|
||||||
* @param {string} noteId
|
|
||||||
* @param {string} parentNoteId
|
|
||||||
* @param {string} prefix - if branch will be create between note and parent note, set this prefix
|
|
||||||
* @returns {void}
|
|
||||||
*/
|
|
||||||
this.ensureNoteIsPresentInParent = cloningService.ensureNoteIsPresentInParent;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If there's a branch between note and parent note, remove it. Otherwise do nothing.
|
|
||||||
*
|
|
||||||
* @method
|
|
||||||
* @param {string} noteId
|
|
||||||
* @param {string} parentNoteId
|
|
||||||
* @returns {void}
|
|
||||||
*/
|
|
||||||
this.ensureNoteIsAbsentFromParent = cloningService.ensureNoteIsAbsentFromParent;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Based on the value, either create or remove branch between note and parent note.
|
|
||||||
*
|
|
||||||
* @method
|
|
||||||
* @param {boolean} present - true if we want the branch to exist, false if we want it gone
|
|
||||||
* @param {string} noteId
|
|
||||||
* @param {string} parentNoteId
|
|
||||||
* @param {string} prefix - if branch will be create between note and parent note, set this prefix
|
|
||||||
* @returns {void}
|
|
||||||
*/
|
|
||||||
this.toggleNoteInParent = cloningService.toggleNoteInParent;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @typedef {object} CreateNoteAttribute
|
|
||||||
* @property {string} type - attribute type - label, relation etc.
|
|
||||||
* @property {string} name - attribute name
|
|
||||||
* @property {string} [value] - attribute value
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create text note. See also createNewNote() for more options.
|
|
||||||
*
|
|
||||||
* @param {string} parentNoteId
|
|
||||||
* @param {string} title
|
|
||||||
* @param {string} content
|
|
||||||
* @return {{note: Note, branch: Branch}} - object having "note" and "branch" keys representing respective objects
|
|
||||||
*/
|
|
||||||
this.createTextNote = (parentNoteId, title, content = '') => noteService.createNewNote({
|
|
||||||
parentNoteId,
|
|
||||||
title,
|
|
||||||
content,
|
|
||||||
type: 'text'
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create data note - data in this context means object serializable to JSON. Created note will be of type 'code' and
|
|
||||||
* JSON MIME type. See also createNewNote() for more options.
|
|
||||||
*
|
|
||||||
* @param {string} parentNoteId
|
|
||||||
* @param {string} title
|
|
||||||
* @param {object} content
|
|
||||||
* @return {{note: Note, branch: Branch}} object having "note" and "branch" keys representing respective objects
|
|
||||||
*/
|
|
||||||
this.createDataNote = (parentNoteId, title, content = {}) => noteService.createNewNote({
|
|
||||||
parentNoteId,
|
|
||||||
title,
|
|
||||||
content: JSON.stringify(content, null, '\t'),
|
|
||||||
type: 'code',
|
|
||||||
mime: 'application/json'
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @typedef {object} CreateNewNoteParams
|
|
||||||
* @property {string} parentNoteId - MANDATORY
|
|
||||||
* @property {string} title - MANDATORY
|
|
||||||
* @property {string|buffer} content - MANDATORY
|
|
||||||
* @property {string} type - text, code, file, image, search, book, relation-map - MANDATORY
|
|
||||||
* @property {string} mime - value is derived from default mimes for type
|
|
||||||
* @property {boolean} isProtected - default is false
|
|
||||||
* @property {boolean} isExpanded - default is false
|
|
||||||
* @property {string} prefix - default is empty string
|
|
||||||
* @property {int} notePosition - default is last existing notePosition in a parent + 10
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @method
|
|
||||||
*
|
|
||||||
* @param {CreateNewNoteParams} [params]
|
|
||||||
* @returns {{note: Note, branch: Branch}} object contains newly created entities note and branch
|
|
||||||
*/
|
|
||||||
this.createNewNote = noteService.createNewNote;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @typedef {object} CreateNoteAttribute
|
|
||||||
* @property {string} type - attribute type - label, relation etc.
|
|
||||||
* @property {string} name - attribute name
|
|
||||||
* @property {string} [value] - attribute value
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @typedef {object} CreateNoteExtraOptions
|
|
||||||
* @property {boolean} [json=false] - should the note be JSON
|
|
||||||
* @property {boolean} [isProtected=false] - should the note be protected
|
|
||||||
* @property {string} [type='text'] - note type
|
|
||||||
* @property {string} [mime='text/html'] - MIME type of the note
|
|
||||||
* @property {CreateNoteAttribute[]} [attributes=[]] - attributes to be created for this note
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @method
|
|
||||||
* @deprecated please use createTextNote() with similar API for simpler use cases or createNewNote() for more complex needs
|
|
||||||
*
|
|
||||||
* @param {string} parentNoteId - create new note under this parent
|
|
||||||
* @param {string} title
|
|
||||||
* @param {string} [content=""]
|
|
||||||
* @param {CreateNoteExtraOptions} [extraOptions={}]
|
|
||||||
* @returns {{note: Note, branch: Branch}} object contains newly created entities note and branch
|
|
||||||
*/
|
|
||||||
this.createNote = (parentNoteId, title, content = "", extraOptions= {}) => {
|
|
||||||
extraOptions.parentNoteId = parentNoteId;
|
|
||||||
extraOptions.title = title;
|
|
||||||
|
|
||||||
const parentNote = becca.getNote(parentNoteId);
|
|
||||||
|
|
||||||
// code note type can be inherited, otherwise text is default
|
|
||||||
extraOptions.type = parentNote.type === 'code' ? 'code' : 'text';
|
|
||||||
extraOptions.mime = parentNote.type === 'code' ? parentNote.mime : 'text/html';
|
|
||||||
|
|
||||||
if (extraOptions.json) {
|
|
||||||
extraOptions.content = JSON.stringify(content || {}, null, '\t');
|
|
||||||
extraOptions.type = 'code';
|
|
||||||
extraOptions.mime = 'application/json';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
extraOptions.content = content;
|
|
||||||
}
|
|
||||||
|
|
||||||
return sql.transactional(() => {
|
|
||||||
const {note, branch} = noteService.createNewNote(extraOptions);
|
|
||||||
|
|
||||||
for (const attr of extraOptions.attributes || []) {
|
|
||||||
attributeService.createAttribute({
|
|
||||||
noteId: note.noteId,
|
|
||||||
type: attr.type,
|
|
||||||
name: attr.name,
|
|
||||||
value: attr.value,
|
|
||||||
isInheritable: !!attr.isInheritable
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return {note, branch};
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Log given message to trilium logs.
|
|
||||||
*
|
|
||||||
* @param message
|
|
||||||
*/
|
|
||||||
this.log = message => log.info(`Script "${currentNote.title}" (${currentNote.noteId}): ${message}`);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns root note of the calendar.
|
|
||||||
*
|
|
||||||
* @method
|
|
||||||
* @returns {Note|null}
|
|
||||||
*/
|
|
||||||
this.getRootCalendarNote = dateNoteService.getRootCalendarNote;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns day note for given date. If such note doesn't exist, it is created.
|
|
||||||
*
|
|
||||||
* @method
|
|
||||||
* @param {string} date in YYYY-MM-DD format
|
|
||||||
* @returns {Note|null}
|
|
||||||
*/
|
|
||||||
this.getDateNote = dateNoteService.getDateNote;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns today's day note. If such note doesn't exist, it is created.
|
|
||||||
*
|
|
||||||
* @method
|
|
||||||
* @returns {Note|null}
|
|
||||||
*/
|
|
||||||
this.getTodayNote = dateNoteService.getTodayNote;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns note for the first date of the week of the given date.
|
|
||||||
*
|
|
||||||
* @method
|
|
||||||
* @param {string} date in YYYY-MM-DD format
|
|
||||||
* @param {object} options - "startOfTheWeek" - either "monday" (default) or "sunday"
|
|
||||||
* @returns {Note|null}
|
|
||||||
*/
|
|
||||||
this.getWeekNote = dateNoteService.getWeekNote;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns month note for given date. If such note doesn't exist, it is created.
|
|
||||||
*
|
|
||||||
* @method
|
|
||||||
* @param {string} date in YYYY-MM format
|
|
||||||
* @returns {Note|null}
|
|
||||||
*/
|
|
||||||
this.getMonthNote = dateNoteService.getMonthNote;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns year note for given year. If such note doesn't exist, it is created.
|
|
||||||
*
|
|
||||||
* @method
|
|
||||||
* @param {string} year in YYYY format
|
|
||||||
* @returns {Note|null}
|
|
||||||
*/
|
|
||||||
this.getYearNote = dateNoteService.getYearNote;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @method
|
|
||||||
* @param {string} parentNoteId - this note's child notes will be sorted
|
|
||||||
*/
|
|
||||||
this.sortNotesByTitle = parentNoteId => treeService.sortNotes(parentNoteId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method finds note by its noteId and prefix and either sets it to the given parentNoteId
|
|
||||||
* or removes the branch (if parentNoteId is not given).
|
|
||||||
*
|
|
||||||
* This method looks similar to toggleNoteInParent() but differs because we're looking up branch by prefix.
|
|
||||||
*
|
|
||||||
* @method
|
|
||||||
* @deprecated - this method is pretty confusing and serves specialized purpose only
|
|
||||||
* @param {string} noteId
|
|
||||||
* @param {string} prefix
|
|
||||||
* @param {string|null} parentNoteId
|
|
||||||
*/
|
|
||||||
this.setNoteToParent = treeService.setNoteToParent;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This functions wraps code which is supposed to be running in transaction. If transaction already
|
|
||||||
* exists, then we'll use that transaction.
|
|
||||||
*
|
|
||||||
* @method
|
|
||||||
* @param {function} func
|
|
||||||
* @returns {?} result of func callback
|
|
||||||
*/
|
|
||||||
this.transactional = sql.transactional;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return randomly generated string of given length. This random string generation is NOT cryptographically secure.
|
|
||||||
*
|
|
||||||
* @method
|
|
||||||
* @param {number} length of the string
|
|
||||||
* @returns {string} random string
|
|
||||||
*/
|
|
||||||
this.randomString = utils.randomString;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @method
|
|
||||||
* @param {string} string to escape
|
|
||||||
* @returns {string} escaped string
|
|
||||||
*/
|
|
||||||
this.escapeHtml = utils.escapeHtml;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @method
|
|
||||||
* @param {string} string to unescape
|
|
||||||
* @returns {string} unescaped string
|
|
||||||
*/
|
|
||||||
this.unescapeHtml = utils.unescapeHtml;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @property {module:sql} sql
|
|
||||||
*/
|
|
||||||
this.sql = sql;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @method
|
|
||||||
* @deprecated - this is now no-op since all the changes should be gracefully handled per widget
|
|
||||||
*/
|
|
||||||
this.refreshTree = () => {};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return {{syncVersion, appVersion, buildRevision, dbVersion, dataDirectory, buildDate}|*} - object representing basic info about running Trilium version
|
|
||||||
*/
|
|
||||||
this.getAppInfo = () => appInfo
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = BackendScriptApi;
|
|
||||||
</code></pre>
|
|
||||||
</article>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<nav>
|
|
||||||
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul><h3><a href="global.html">Global</a></h3>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<br class="clear">
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script> prettyPrint(); </script>
|
|
||||||
<script src="scripts/linenumber.js"> </script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
360
docs/backend_api/becca_entities_abstract_becca_entity.js.html
Normal file
360
docs/backend_api/becca_entities_abstract_becca_entity.js.html
Normal file
@@ -0,0 +1,360 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>JSDoc: Source: becca/entities/abstract_becca_entity.js</title>
|
||||||
|
|
||||||
|
<script src="scripts/prettify/prettify.js"> </script>
|
||||||
|
<script src="scripts/prettify/lang-css.js"> </script>
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
||||||
|
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div id="main">
|
||||||
|
|
||||||
|
<h1 class="page-title">Source: becca/entities/abstract_becca_entity.js</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint source linenums"><code>"use strict";
|
||||||
|
|
||||||
|
const utils = require('../../services/utils');
|
||||||
|
const sql = require('../../services/sql');
|
||||||
|
const entityChangesService = require('../../services/entity_changes');
|
||||||
|
const eventService = require("../../services/events");
|
||||||
|
const dateUtils = require("../../services/date_utils");
|
||||||
|
const cls = require("../../services/cls");
|
||||||
|
const log = require("../../services/log");
|
||||||
|
const protectedSessionService = require("../../services/protected_session");
|
||||||
|
const blobService = require("../../services/blob");
|
||||||
|
|
||||||
|
let becca = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base class for all backend entities.
|
||||||
|
*/
|
||||||
|
class AbstractBeccaEntity {
|
||||||
|
/** @protected */
|
||||||
|
beforeSaving() {
|
||||||
|
if (!this[this.constructor.primaryKeyName]) {
|
||||||
|
this[this.constructor.primaryKeyName] = utils.newEntityId();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @protected */
|
||||||
|
getUtcDateChanged() {
|
||||||
|
return this.utcDateModified || this.utcDateCreated;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @protected
|
||||||
|
* @returns {Becca}
|
||||||
|
*/
|
||||||
|
get becca() {
|
||||||
|
if (!becca) {
|
||||||
|
becca = require('../becca');
|
||||||
|
}
|
||||||
|
|
||||||
|
return becca;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @protected */
|
||||||
|
putEntityChange(isDeleted) {
|
||||||
|
entityChangesService.putEntityChange({
|
||||||
|
entityName: this.constructor.entityName,
|
||||||
|
entityId: this[this.constructor.primaryKeyName],
|
||||||
|
hash: this.generateHash(isDeleted),
|
||||||
|
isErased: false,
|
||||||
|
utcDateChanged: this.getUtcDateChanged(),
|
||||||
|
isSynced: this.constructor.entityName !== 'options' || !!this.isSynced
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @protected
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
generateHash(isDeleted) {
|
||||||
|
let contentToHash = "";
|
||||||
|
|
||||||
|
for (const propertyName of this.constructor.hashedProperties) {
|
||||||
|
contentToHash += `|${this[propertyName]}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isDeleted) {
|
||||||
|
contentToHash += "|deleted";
|
||||||
|
}
|
||||||
|
|
||||||
|
return utils.hash(contentToHash).substr(0, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @protected */
|
||||||
|
getPojoToSave() {
|
||||||
|
return this.getPojo();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @protected
|
||||||
|
* @abstract
|
||||||
|
*/
|
||||||
|
getPojo() {
|
||||||
|
throw new Error(`Unimplemented getPojo() for entity '${this.constructor.name}'`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves entity - executes SQL, but doesn't commit the transaction on its own
|
||||||
|
*
|
||||||
|
* @returns {this}
|
||||||
|
*/
|
||||||
|
save(opts = {}) {
|
||||||
|
const entityName = this.constructor.entityName;
|
||||||
|
const primaryKeyName = this.constructor.primaryKeyName;
|
||||||
|
|
||||||
|
const isNewEntity = !this[primaryKeyName];
|
||||||
|
|
||||||
|
this.beforeSaving(opts);
|
||||||
|
|
||||||
|
const pojo = this.getPojoToSave();
|
||||||
|
|
||||||
|
sql.transactional(() => {
|
||||||
|
sql.upsert(entityName, primaryKeyName, pojo);
|
||||||
|
|
||||||
|
if (entityName === 'recent_notes') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.putEntityChange(!!this.isDeleted);
|
||||||
|
|
||||||
|
if (!cls.isEntityEventsDisabled()) {
|
||||||
|
const eventPayload = {
|
||||||
|
entityName,
|
||||||
|
entity: this
|
||||||
|
};
|
||||||
|
|
||||||
|
if (isNewEntity) {
|
||||||
|
eventService.emit(eventService.ENTITY_CREATED, eventPayload);
|
||||||
|
}
|
||||||
|
|
||||||
|
eventService.emit(eventService.ENTITY_CHANGED, eventPayload);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @protected */
|
||||||
|
_setContent(content, opts = {}) {
|
||||||
|
// client code asks to save entity even if blobId didn't change (something else was changed)
|
||||||
|
opts.forceSave = !!opts.forceSave;
|
||||||
|
opts.forceFrontendReload = !!opts.forceFrontendReload;
|
||||||
|
|
||||||
|
if (content === null || content === undefined) {
|
||||||
|
throw new Error(`Cannot set null content to ${this.constructor.primaryKeyName} '${this[this.constructor.primaryKeyName]}'`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.hasStringContent()) {
|
||||||
|
content = content.toString();
|
||||||
|
} else {
|
||||||
|
content = Buffer.isBuffer(content) ? content : Buffer.from(content);
|
||||||
|
}
|
||||||
|
|
||||||
|
const unencryptedContentForHashCalculation = this.#getUnencryptedContentForHashCalculation(content);
|
||||||
|
|
||||||
|
if (this.isProtected) {
|
||||||
|
if (protectedSessionService.isProtectedSessionAvailable()) {
|
||||||
|
content = protectedSessionService.encrypt(content);
|
||||||
|
} else {
|
||||||
|
throw new Error(`Cannot update content of blob since protected session is not available.`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sql.transactional(() => {
|
||||||
|
const newBlobId = this.#saveBlob(content, unencryptedContentForHashCalculation, opts);
|
||||||
|
const oldBlobId = this.blobId;
|
||||||
|
|
||||||
|
if (newBlobId !== oldBlobId || opts.forceSave) {
|
||||||
|
this.blobId = newBlobId;
|
||||||
|
this.save();
|
||||||
|
|
||||||
|
if (newBlobId !== oldBlobId) {
|
||||||
|
this.#deleteBlobIfNotUsed(oldBlobId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#deleteBlobIfNotUsed(oldBlobId) {
|
||||||
|
if (sql.getValue("SELECT 1 FROM notes WHERE blobId = ? LIMIT 1", [oldBlobId])) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sql.getValue("SELECT 1 FROM attachments WHERE blobId = ? LIMIT 1", [oldBlobId])) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sql.getValue("SELECT 1 FROM revisions WHERE blobId = ? LIMIT 1", [oldBlobId])) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sql.execute("DELETE FROM blobs WHERE blobId = ?", [oldBlobId]);
|
||||||
|
// blobs are not marked as erased in entity_changes, they are just purged completely
|
||||||
|
// this is because technically every keystroke can create a new blob and there would be just too many
|
||||||
|
sql.execute("DELETE FROM entity_changes WHERE entityName = 'blobs' AND entityId = ?", [oldBlobId]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#getUnencryptedContentForHashCalculation(unencryptedContent) {
|
||||||
|
if (this.isProtected) {
|
||||||
|
// a "random" prefix makes sure that the calculated hash/blobId is different for a decrypted/encrypted content
|
||||||
|
const encryptedPrefixSuffix = "t$[nvQg7q)&_ENCRYPTED_?M:Bf&j3jr_";
|
||||||
|
return Buffer.isBuffer(unencryptedContent)
|
||||||
|
? Buffer.concat([Buffer.from(encryptedPrefixSuffix), unencryptedContent])
|
||||||
|
: `${encryptedPrefixSuffix}${unencryptedContent}`;
|
||||||
|
} else {
|
||||||
|
return unencryptedContent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#saveBlob(content, unencryptedContentForHashCalculation, opts = {}) {
|
||||||
|
/*
|
||||||
|
* We're using the unencrypted blob for the hash calculation, because otherwise the random IV would
|
||||||
|
* cause every content blob to be unique which would balloon the database size (esp. with revisioning).
|
||||||
|
* This has minor security implications (it's easy to infer that given content is shared between different
|
||||||
|
* notes/attachments), but the trade-off comes out clearly positive.
|
||||||
|
*/
|
||||||
|
const newBlobId = utils.hashedBlobId(unencryptedContentForHashCalculation);
|
||||||
|
const blobNeedsInsert = !sql.getValue('SELECT 1 FROM blobs WHERE blobId = ?', [newBlobId]);
|
||||||
|
|
||||||
|
if (!blobNeedsInsert) {
|
||||||
|
return newBlobId;
|
||||||
|
}
|
||||||
|
|
||||||
|
const pojo = {
|
||||||
|
blobId: newBlobId,
|
||||||
|
content: content,
|
||||||
|
dateModified: dateUtils.localNowDateTime(),
|
||||||
|
utcDateModified: dateUtils.utcNowDateTime()
|
||||||
|
};
|
||||||
|
|
||||||
|
sql.upsert("blobs", "blobId", pojo);
|
||||||
|
|
||||||
|
// we can't reuse blobId as an entity_changes hash, because this one has to be calculatable without having
|
||||||
|
// access to the decrypted content
|
||||||
|
const hash = blobService.calculateContentHash(pojo);
|
||||||
|
|
||||||
|
entityChangesService.putEntityChange({
|
||||||
|
entityName: 'blobs',
|
||||||
|
entityId: newBlobId,
|
||||||
|
hash: hash,
|
||||||
|
isErased: false,
|
||||||
|
utcDateChanged: pojo.utcDateModified,
|
||||||
|
isSynced: true,
|
||||||
|
// overriding componentId will cause frontend to think the change is coming from a different component
|
||||||
|
// and thus reload
|
||||||
|
componentId: opts.forceFrontendReload ? utils.randomString(10) : null
|
||||||
|
});
|
||||||
|
|
||||||
|
eventService.emit(eventService.ENTITY_CHANGED, {
|
||||||
|
entityName: 'blobs',
|
||||||
|
entity: this
|
||||||
|
});
|
||||||
|
|
||||||
|
return newBlobId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @protected
|
||||||
|
* @returns {string|Buffer}
|
||||||
|
*/
|
||||||
|
_getContent() {
|
||||||
|
const row = sql.getRow(`SELECT content FROM blobs WHERE blobId = ?`, [this.blobId]);
|
||||||
|
|
||||||
|
if (!row) {
|
||||||
|
throw new Error(`Cannot find content for ${this.constructor.primaryKeyName} '${this[this.constructor.primaryKeyName]}', blobId '${this.blobId}'`);
|
||||||
|
}
|
||||||
|
|
||||||
|
return blobService.processContent(row.content, this.isProtected, this.hasStringContent());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mark the entity as (soft) deleted. It will be completely erased later.
|
||||||
|
*
|
||||||
|
* This is a low-level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead.
|
||||||
|
*
|
||||||
|
* @param [deleteId=null]
|
||||||
|
*/
|
||||||
|
markAsDeleted(deleteId = null) {
|
||||||
|
const entityId = this[this.constructor.primaryKeyName];
|
||||||
|
const entityName = this.constructor.entityName;
|
||||||
|
|
||||||
|
this.utcDateModified = dateUtils.utcNowDateTime();
|
||||||
|
|
||||||
|
sql.execute(`UPDATE ${entityName} SET isDeleted = 1, deleteId = ?, utcDateModified = ?
|
||||||
|
WHERE ${this.constructor.primaryKeyName} = ?`,
|
||||||
|
[deleteId, this.utcDateModified, entityId]);
|
||||||
|
|
||||||
|
if (this.dateModified) {
|
||||||
|
this.dateModified = dateUtils.localNowDateTime();
|
||||||
|
|
||||||
|
sql.execute(`UPDATE ${entityName} SET dateModified = ? WHERE ${this.constructor.primaryKeyName} = ?`,
|
||||||
|
[this.dateModified, entityId]);
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info(`Marking ${entityName} ${entityId} as deleted`);
|
||||||
|
|
||||||
|
this.putEntityChange(true);
|
||||||
|
|
||||||
|
eventService.emit(eventService.ENTITY_DELETED, { entityName, entityId, entity: this });
|
||||||
|
}
|
||||||
|
|
||||||
|
markAsDeletedSimple() {
|
||||||
|
const entityId = this[this.constructor.primaryKeyName];
|
||||||
|
const entityName = this.constructor.entityName;
|
||||||
|
|
||||||
|
this.utcDateModified = dateUtils.utcNowDateTime();
|
||||||
|
|
||||||
|
sql.execute(`UPDATE ${entityName} SET isDeleted = 1, utcDateModified = ?
|
||||||
|
WHERE ${this.constructor.primaryKeyName} = ?`,
|
||||||
|
[this.utcDateModified, entityId]);
|
||||||
|
|
||||||
|
log.info(`Marking ${entityName} ${entityId} as deleted`);
|
||||||
|
|
||||||
|
this.putEntityChange(true);
|
||||||
|
|
||||||
|
eventService.emit(eventService.ENTITY_DELETED, { entityName, entityId, entity: this });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = AbstractBeccaEntity;
|
||||||
|
</code></pre>
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<br class="clear">
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script> prettyPrint(); </script>
|
||||||
|
<script src="scripts/linenumber.js"> </script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>JSDoc: Source: becca/entities/api_token.js</title>
|
|
||||||
|
|
||||||
<script src="scripts/prettify/prettify.js"> </script>
|
|
||||||
<script src="scripts/prettify/lang-css.js"> </script>
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div id="main">
|
|
||||||
|
|
||||||
<h1 class="page-title">Source: becca/entities/api_token.js</h1>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<article>
|
|
||||||
<pre class="prettyprint source linenums"><code>"use strict";
|
|
||||||
|
|
||||||
const dateUtils = require('../../services/date_utils.js');
|
|
||||||
const AbstractEntity = require("./abstract_entity.js");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ApiToken is an entity representing token used to authenticate against Trilium API from client applications. Currently used only by Trilium Sender.
|
|
||||||
*/
|
|
||||||
class ApiToken extends AbstractEntity {
|
|
||||||
static get entityName() { return "api_tokens"; }
|
|
||||||
static get primaryKeyName() { return "apiTokenId"; }
|
|
||||||
static get hashedProperties() { return ["apiTokenId", "token", "utcDateCreated"]; }
|
|
||||||
|
|
||||||
constructor(row) {
|
|
||||||
super();
|
|
||||||
|
|
||||||
this.apiTokenId = row.apiTokenId;
|
|
||||||
this.token = row.token;
|
|
||||||
this.utcDateCreated = row.utcDateCreated || dateUtils.utcNowDateTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
getPojo() {
|
|
||||||
return {
|
|
||||||
apiTokenId: this.apiTokenId,
|
|
||||||
token: this.token,
|
|
||||||
utcDateCreated: this.utcDateCreated
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = ApiToken;
|
|
||||||
</code></pre>
|
|
||||||
</article>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<nav>
|
|
||||||
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<br class="clear">
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script> prettyPrint(); </script>
|
|
||||||
<script src="scripts/linenumber.js"> </script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
288
docs/backend_api/becca_entities_battachment.js.html
Normal file
288
docs/backend_api/becca_entities_battachment.js.html
Normal file
@@ -0,0 +1,288 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>JSDoc: Source: becca/entities/battachment.js</title>
|
||||||
|
|
||||||
|
<script src="scripts/prettify/prettify.js"> </script>
|
||||||
|
<script src="scripts/prettify/lang-css.js"> </script>
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
||||||
|
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div id="main">
|
||||||
|
|
||||||
|
<h1 class="page-title">Source: becca/entities/battachment.js</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint source linenums"><code>"use strict";
|
||||||
|
|
||||||
|
const utils = require('../../services/utils');
|
||||||
|
const dateUtils = require('../../services/date_utils');
|
||||||
|
const AbstractBeccaEntity = require("./abstract_becca_entity");
|
||||||
|
const sql = require("../../services/sql");
|
||||||
|
const protectedSessionService = require("../../services/protected_session");
|
||||||
|
const log = require("../../services/log");
|
||||||
|
|
||||||
|
const attachmentRoleToNoteTypeMapping = {
|
||||||
|
'image': 'image'
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attachment represent data related/attached to the note. Conceptually similar to attributes, but intended for
|
||||||
|
* larger amounts of data and generally not accessible to the user.
|
||||||
|
*
|
||||||
|
* @extends AbstractBeccaEntity
|
||||||
|
*/
|
||||||
|
class BAttachment extends AbstractBeccaEntity {
|
||||||
|
static get entityName() { return "attachments"; }
|
||||||
|
static get primaryKeyName() { return "attachmentId"; }
|
||||||
|
static get hashedProperties() { return ["attachmentId", "ownerId", "role", "mime", "title", "blobId", "utcDateScheduledForErasureSince"]; }
|
||||||
|
|
||||||
|
constructor(row) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
if (!row.ownerId?.trim()) {
|
||||||
|
throw new Error("'ownerId' must be given to initialize a Attachment entity");
|
||||||
|
} else if (!row.role?.trim()) {
|
||||||
|
throw new Error("'role' must be given to initialize a Attachment entity");
|
||||||
|
} else if (!row.mime?.trim()) {
|
||||||
|
throw new Error("'mime' must be given to initialize a Attachment entity");
|
||||||
|
} else if (!row.title?.trim()) {
|
||||||
|
throw new Error("'title' must be given to initialize a Attachment entity");
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @type {string} */
|
||||||
|
this.attachmentId = row.attachmentId;
|
||||||
|
/** @type {string} either noteId or revisionId to which this attachment belongs */
|
||||||
|
this.ownerId = row.ownerId;
|
||||||
|
/** @type {string} */
|
||||||
|
this.role = row.role;
|
||||||
|
/** @type {string} */
|
||||||
|
this.mime = row.mime;
|
||||||
|
/** @type {string} */
|
||||||
|
this.title = row.title;
|
||||||
|
/** @type {int} */
|
||||||
|
this.position = row.position;
|
||||||
|
/** @type {string} */
|
||||||
|
this.blobId = row.blobId;
|
||||||
|
/** @type {boolean} */
|
||||||
|
this.isProtected = !!row.isProtected;
|
||||||
|
/** @type {string} */
|
||||||
|
this.dateModified = row.dateModified;
|
||||||
|
/** @type {string} */
|
||||||
|
this.utcDateModified = row.utcDateModified;
|
||||||
|
/** @type {string} */
|
||||||
|
this.utcDateScheduledForErasureSince = row.utcDateScheduledForErasureSince;
|
||||||
|
|
||||||
|
/** @type {int} optionally added to the entity */
|
||||||
|
this.contentLength = row.contentLength;
|
||||||
|
|
||||||
|
this.decrypt();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @returns {BAttachment} */
|
||||||
|
copy() {
|
||||||
|
return new BAttachment({
|
||||||
|
ownerId: this.ownerId,
|
||||||
|
role: this.role,
|
||||||
|
mime: this.mime,
|
||||||
|
title: this.title,
|
||||||
|
blobId: this.blobId,
|
||||||
|
isProtected: this.isProtected
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @returns {BNote} */
|
||||||
|
getNote() {
|
||||||
|
return this.becca.notes[this.ownerId];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @returns {boolean} true if the note has string content (not binary) */
|
||||||
|
hasStringContent() {
|
||||||
|
return utils.isStringNote(this.type, this.mime);
|
||||||
|
}
|
||||||
|
|
||||||
|
isContentAvailable() {
|
||||||
|
return !this.attachmentId // new attachment which was not encrypted yet
|
||||||
|
|| !this.isProtected
|
||||||
|
|| protectedSessionService.isProtectedSessionAvailable()
|
||||||
|
}
|
||||||
|
|
||||||
|
getTitleOrProtected() {
|
||||||
|
return this.isContentAvailable() ? this.title : '[protected]';
|
||||||
|
}
|
||||||
|
|
||||||
|
decrypt() {
|
||||||
|
if (!this.isProtected || !this.attachmentId) {
|
||||||
|
this.isDecrypted = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.isDecrypted && protectedSessionService.isProtectedSessionAvailable()) {
|
||||||
|
try {
|
||||||
|
this.title = protectedSessionService.decryptString(this.title);
|
||||||
|
this.isDecrypted = true;
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
log.error(`Could not decrypt attachment ${this.attachmentId}: ${e.message} ${e.stack}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @returns {string|Buffer} */
|
||||||
|
getContent() {
|
||||||
|
return this._getContent();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param content
|
||||||
|
* @param {object} [opts]
|
||||||
|
* @param {object} [opts.forceSave=false] - will also save this BAttachment entity
|
||||||
|
* @param {object} [opts.forceFrontendReload=false] - override frontend heuristics on when to reload, instruct to reload
|
||||||
|
*/
|
||||||
|
setContent(content, opts) {
|
||||||
|
this._setContent(content, opts);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @returns {{note: BNote, branch: BBranch}} */
|
||||||
|
convertToNote() {
|
||||||
|
if (this.type === 'search') {
|
||||||
|
throw new Error(`Note of type search cannot have child notes`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.getNote()) {
|
||||||
|
throw new Error("Cannot find note of this attachment. It is possible that this is note revision's attachment. " +
|
||||||
|
"Converting note revision's attachments to note is not (yet) supported.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(this.role in attachmentRoleToNoteTypeMapping)) {
|
||||||
|
throw new Error(`Mapping from attachment role '${this.role}' to note's type is not defined`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.isContentAvailable()) { // isProtected is the same for attachment
|
||||||
|
throw new Error(`Cannot convert protected attachment outside of protected session`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const noteService = require('../../services/notes');
|
||||||
|
|
||||||
|
const { note, branch } = noteService.createNewNote({
|
||||||
|
parentNoteId: this.ownerId,
|
||||||
|
title: this.title,
|
||||||
|
type: attachmentRoleToNoteTypeMapping[this.role],
|
||||||
|
mime: this.mime,
|
||||||
|
content: this.getContent(),
|
||||||
|
isProtected: this.isProtected
|
||||||
|
});
|
||||||
|
|
||||||
|
this.markAsDeleted();
|
||||||
|
|
||||||
|
const parentNote = this.getNote();
|
||||||
|
|
||||||
|
if (this.role === 'image' && parentNote.type === 'text') {
|
||||||
|
const origContent = parentNote.getContent();
|
||||||
|
const oldAttachmentUrl = `api/attachments/${this.attachmentId}/image/`;
|
||||||
|
const newNoteUrl = `api/images/${note.noteId}/`;
|
||||||
|
|
||||||
|
const fixedContent = utils.replaceAll(origContent, oldAttachmentUrl, newNoteUrl);
|
||||||
|
|
||||||
|
if (fixedContent !== origContent) {
|
||||||
|
parentNote.setContent(fixedContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
noteService.asyncPostProcessContent(note, fixedContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
return { note, branch };
|
||||||
|
}
|
||||||
|
|
||||||
|
getFileName() {
|
||||||
|
const type = this.role === 'image' ? 'image' : 'file';
|
||||||
|
|
||||||
|
return utils.formatDownloadTitle(this.title, type, this.mime);
|
||||||
|
}
|
||||||
|
|
||||||
|
beforeSaving() {
|
||||||
|
super.beforeSaving();
|
||||||
|
|
||||||
|
if (this.position === undefined || this.position === null) {
|
||||||
|
this.position = 10 + sql.getValue(`SELECT COALESCE(MAX(position), 0)
|
||||||
|
FROM attachments
|
||||||
|
WHERE ownerId = ?`, [this.noteId]);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.dateModified = dateUtils.localNowDateTime();
|
||||||
|
this.utcDateModified = dateUtils.utcNowDateTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
getPojo() {
|
||||||
|
return {
|
||||||
|
attachmentId: this.attachmentId,
|
||||||
|
ownerId: this.ownerId,
|
||||||
|
role: this.role,
|
||||||
|
mime: this.mime,
|
||||||
|
title: this.title,
|
||||||
|
position: this.position,
|
||||||
|
blobId: this.blobId,
|
||||||
|
isProtected: !!this.isProtected,
|
||||||
|
isDeleted: false,
|
||||||
|
dateModified: this.dateModified,
|
||||||
|
utcDateModified: this.utcDateModified,
|
||||||
|
utcDateScheduledForErasureSince: this.utcDateScheduledForErasureSince,
|
||||||
|
contentLength: this.contentLength
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
getPojoToSave() {
|
||||||
|
const pojo = this.getPojo();
|
||||||
|
delete pojo.contentLength;
|
||||||
|
|
||||||
|
if (pojo.isProtected) {
|
||||||
|
if (this.isDecrypted) {
|
||||||
|
pojo.title = protectedSessionService.encrypt(pojo.title);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// updating protected note outside of protected session means we will keep original ciphertexts
|
||||||
|
delete pojo.title;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return pojo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = BAttachment;
|
||||||
|
</code></pre>
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<br class="clear">
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script> prettyPrint(); </script>
|
||||||
|
<script src="scripts/linenumber.js"> </script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>JSDoc: Source: becca/entities/attribute.js</title>
|
<title>JSDoc: Source: becca/entities/battribute.js</title>
|
||||||
|
|
||||||
<script src="scripts/prettify/prettify.js"> </script>
|
<script src="scripts/prettify/prettify.js"> </script>
|
||||||
<script src="scripts/prettify/lang-css.js"> </script>
|
<script src="scripts/prettify/lang-css.js"> </script>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
<div id="main">
|
<div id="main">
|
||||||
|
|
||||||
<h1 class="page-title">Source: becca/entities/attribute.js</h1>
|
<h1 class="page-title">Source: becca/entities/battribute.js</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -28,13 +28,20 @@
|
|||||||
<article>
|
<article>
|
||||||
<pre class="prettyprint source linenums"><code>"use strict";
|
<pre class="prettyprint source linenums"><code>"use strict";
|
||||||
|
|
||||||
const Note = require('./note.js');
|
const BNote = require('./bnote');
|
||||||
const AbstractEntity = require("./abstract_entity.js");
|
const AbstractBeccaEntity = require("./abstract_becca_entity");
|
||||||
const sql = require("../../services/sql.js");
|
const sql = require("../../services/sql");
|
||||||
const dateUtils = require("../../services/date_utils.js");
|
const dateUtils = require("../../services/date_utils");
|
||||||
const promotedAttributeDefinitionParser = require("../../services/promoted_attribute_definition_parser");
|
const promotedAttributeDefinitionParser = require("../../services/promoted_attribute_definition_parser");
|
||||||
|
const {sanitizeAttributeName} = require("../../services/sanitize_attribute_name");
|
||||||
|
|
||||||
class Attribute extends AbstractEntity {
|
/**
|
||||||
|
* Attribute is an abstract concept which has two real uses - label (key - value pair)
|
||||||
|
* and relation (representing named relationship between source and target note)
|
||||||
|
*
|
||||||
|
* @extends AbstractBeccaEntity
|
||||||
|
*/
|
||||||
|
class BAttribute extends AbstractBeccaEntity {
|
||||||
static get entityName() { return "attributes"; }
|
static get entityName() { return "attributes"; }
|
||||||
static get primaryKeyName() { return "attributeId"; }
|
static get primaryKeyName() { return "attributeId"; }
|
||||||
static get hashedProperties() { return ["attributeId", "noteId", "type", "name", "value", "isInheritable"]; }
|
static get hashedProperties() { return ["attributeId", "noteId", "type", "name", "value", "isInheritable"]; }
|
||||||
@@ -64,21 +71,21 @@ class Attribute extends AbstractEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
update([attributeId, noteId, type, name, value, isInheritable, position, utcDateModified]) {
|
update([attributeId, noteId, type, name, value, isInheritable, position, utcDateModified]) {
|
||||||
/** @param {string} */
|
/** @type {string} */
|
||||||
this.attributeId = attributeId;
|
this.attributeId = attributeId;
|
||||||
/** @param {string} */
|
/** @type {string} */
|
||||||
this.noteId = noteId;
|
this.noteId = noteId;
|
||||||
/** @param {string} */
|
/** @type {string} */
|
||||||
this.type = type;
|
this.type = type;
|
||||||
/** @param {string} */
|
/** @type {string} */
|
||||||
this.name = name;
|
this.name = name;
|
||||||
/** @param {int} */
|
/** @type {int} */
|
||||||
this.position = position;
|
this.position = position;
|
||||||
/** @param {string} */
|
/** @type {string} */
|
||||||
this.value = value;
|
this.value = value || "";
|
||||||
/** @param {boolean} */
|
/** @type {boolean} */
|
||||||
this.isInheritable = !!isInheritable;
|
this.isInheritable = !!isInheritable;
|
||||||
/** @param {string} */
|
/** @type {string} */
|
||||||
this.utcDateModified = utcDateModified;
|
this.utcDateModified = utcDateModified;
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
@@ -91,7 +98,7 @@ class Attribute extends AbstractEntity {
|
|||||||
|
|
||||||
if (!(this.noteId in this.becca.notes)) {
|
if (!(this.noteId in this.becca.notes)) {
|
||||||
// entities can come out of order in sync, create skeleton which will be filled later
|
// entities can come out of order in sync, create skeleton which will be filled later
|
||||||
this.becca.notes[this.noteId] = new Note({noteId: this.noteId});
|
this.becca.addNote(this.noteId, new BNote({noteId: this.noteId}));
|
||||||
}
|
}
|
||||||
|
|
||||||
this.becca.notes[this.noteId].ownedAttributes.push(this);
|
this.becca.notes[this.noteId].ownedAttributes.push(this);
|
||||||
@@ -107,9 +114,23 @@ class Attribute extends AbstractEntity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
validate() {
|
||||||
|
if (!["label", "relation"].includes(this.type)) {
|
||||||
|
throw new Error(`Invalid attribute type '${this.type}' in attribute '${this.attributeId}' of note '${this.noteId}'`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.name?.trim()) {
|
||||||
|
throw new Error(`Invalid empty name in attribute '${this.attributeId}' of note '${this.noteId}'`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.type === 'relation' && !(this.value in this.becca.notes)) {
|
||||||
|
throw new Error(`Cannot save relation '${this.name}' of note '${this.noteId}' since it targets not existing note '${this.value}'.`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
get isAffectingSubtree() {
|
get isAffectingSubtree() {
|
||||||
return this.isInheritable
|
return this.isInheritable
|
||||||
|| (this.type === 'relation' && this.name === 'template');
|
|| (this.type === 'relation' && ['template', 'inherit'].includes(this.name));
|
||||||
}
|
}
|
||||||
|
|
||||||
get targetNoteId() { // alias
|
get targetNoteId() { // alias
|
||||||
@@ -131,18 +152,24 @@ class Attribute extends AbstractEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @returns {Note|null}
|
* @returns {BNote|null}
|
||||||
*/
|
*/
|
||||||
getNote() {
|
getNote() {
|
||||||
return this.becca.getNote(this.noteId);
|
const note = this.becca.getNote(this.noteId);
|
||||||
|
|
||||||
|
if (!note) {
|
||||||
|
throw new Error(`Note '${this.noteId}' of attribute '${this.attributeId}', type '${this.type}', name '${this.name}' does not exist.`);
|
||||||
|
}
|
||||||
|
|
||||||
|
return note;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @returns {Note|null}
|
* @returns {BNote|null}
|
||||||
*/
|
*/
|
||||||
getTargetNote() {
|
getTargetNote() {
|
||||||
if (this.type !== 'relation') {
|
if (this.type !== 'relation') {
|
||||||
throw new Error(`Attribute ${this.attributeId} is not relation`);
|
throw new Error(`Attribute '${this.attributeId}' is not a relation.`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.value) {
|
if (!this.value) {
|
||||||
@@ -153,7 +180,7 @@ class Attribute extends AbstractEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return {boolean}
|
* @returns {boolean}
|
||||||
*/
|
*/
|
||||||
isDefinition() {
|
isDefinition() {
|
||||||
return this.type === 'label' && (this.name.startsWith('label:') || this.name.startsWith('relation:'));
|
return this.type === 'label' && (this.name.startsWith('label:') || this.name.startsWith('relation:'));
|
||||||
@@ -173,19 +200,27 @@ class Attribute extends AbstractEntity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
beforeSaving() {
|
get isDeleted() {
|
||||||
if (!this.value) {
|
return !(this.attributeId in this.becca.attributes);
|
||||||
if (this.type === 'relation') {
|
}
|
||||||
throw new Error(`Cannot save relation ${this.name} since it does not target any note.`);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
beforeSaving(opts = {}) {
|
||||||
|
if (!opts.skipValidation) {
|
||||||
|
this.validate();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.name = sanitizeAttributeName(this.name);
|
||||||
|
|
||||||
|
if (!this.value) {
|
||||||
// null value isn't allowed
|
// null value isn't allowed
|
||||||
this.value = "";
|
this.value = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.position === undefined) {
|
if (this.position === undefined || this.position === null) {
|
||||||
// TODO: can be calculated from becca
|
const maxExistingPosition = this.getNote().getAttributes()
|
||||||
this.position = 1 + sql.getValue(`SELECT COALESCE(MAX(position), 0) FROM attributes WHERE noteId = ?`, [this.noteId]);
|
.reduce((maxPosition, attr) => Math.max(maxPosition, attr.position || 0), 0);
|
||||||
|
|
||||||
|
this.position = maxExistingPosition + 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.isInheritable) {
|
if (!this.isInheritable) {
|
||||||
@@ -214,7 +249,7 @@ class Attribute extends AbstractEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
createClone(type, name, value, isInheritable) {
|
createClone(type, name, value, isInheritable) {
|
||||||
return new Attribute({
|
return new BAttribute({
|
||||||
noteId: this.noteId,
|
noteId: this.noteId,
|
||||||
type: type,
|
type: type,
|
||||||
name: name,
|
name: name,
|
||||||
@@ -226,7 +261,7 @@ class Attribute extends AbstractEntity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Attribute;
|
module.exports = BAttribute;
|
||||||
</code></pre>
|
</code></pre>
|
||||||
</article>
|
</article>
|
||||||
</section>
|
</section>
|
||||||
@@ -237,13 +272,13 @@ module.exports = Attribute;
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<nav>
|
<nav>
|
||||||
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
|
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<br class="clear">
|
<br class="clear">
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
|
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<script> prettyPrint(); </script>
|
<script> prettyPrint(); </script>
|
||||||
81
docs/backend_api/becca_entities_bblob.js.html
Normal file
81
docs/backend_api/becca_entities_bblob.js.html
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>JSDoc: Source: becca/entities/bblob.js</title>
|
||||||
|
|
||||||
|
<script src="scripts/prettify/prettify.js"> </script>
|
||||||
|
<script src="scripts/prettify/lang-css.js"> </script>
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
||||||
|
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div id="main">
|
||||||
|
|
||||||
|
<h1 class="page-title">Source: becca/entities/bblob.js</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint source linenums"><code>class BBlob {
|
||||||
|
static get entityName() { return "blobs"; }
|
||||||
|
static get primaryKeyName() { return "blobId"; }
|
||||||
|
static get hashedProperties() { return ["blobId", "content"]; }
|
||||||
|
|
||||||
|
constructor(row) {
|
||||||
|
/** @type {string} */
|
||||||
|
this.blobId = row.blobId;
|
||||||
|
/** @type {string|Buffer} */
|
||||||
|
this.content = row.content;
|
||||||
|
/** @type {int} */
|
||||||
|
this.contentLength = row.contentLength;
|
||||||
|
/** @type {string} */
|
||||||
|
this.dateModified = row.dateModified;
|
||||||
|
/** @type {string} */
|
||||||
|
this.utcDateModified = row.utcDateModified;
|
||||||
|
}
|
||||||
|
|
||||||
|
getPojo() {
|
||||||
|
return {
|
||||||
|
blobId: this.blobId,
|
||||||
|
content: this.content,
|
||||||
|
contentLength: this.contentLength,
|
||||||
|
dateModified: this.dateModified,
|
||||||
|
utcDateModified: this.utcDateModified
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = BBlob;
|
||||||
|
</code></pre>
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<br class="clear">
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script> prettyPrint(); </script>
|
||||||
|
<script src="scripts/linenumber.js"> </script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
333
docs/backend_api/becca_entities_bbranch.js.html
Normal file
333
docs/backend_api/becca_entities_bbranch.js.html
Normal file
@@ -0,0 +1,333 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>JSDoc: Source: becca/entities/bbranch.js</title>
|
||||||
|
|
||||||
|
<script src="scripts/prettify/prettify.js"> </script>
|
||||||
|
<script src="scripts/prettify/lang-css.js"> </script>
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
||||||
|
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div id="main">
|
||||||
|
|
||||||
|
<h1 class="page-title">Source: becca/entities/bbranch.js</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint source linenums"><code>"use strict";
|
||||||
|
|
||||||
|
const BNote = require('./bnote');
|
||||||
|
const AbstractBeccaEntity = require("./abstract_becca_entity");
|
||||||
|
const dateUtils = require("../../services/date_utils");
|
||||||
|
const utils = require("../../services/utils");
|
||||||
|
const TaskContext = require("../../services/task_context");
|
||||||
|
const cls = require("../../services/cls");
|
||||||
|
const log = require("../../services/log");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Branch represents a relationship between a child note and its parent note. Trilium allows a note to have multiple
|
||||||
|
* parents.
|
||||||
|
*
|
||||||
|
* Note that you should not rely on the branch's identity, since it can change easily with a note's move.
|
||||||
|
* Always check noteId instead.
|
||||||
|
*
|
||||||
|
* @extends AbstractBeccaEntity
|
||||||
|
*/
|
||||||
|
class BBranch extends AbstractBeccaEntity {
|
||||||
|
static get entityName() { return "branches"; }
|
||||||
|
static get primaryKeyName() { return "branchId"; }
|
||||||
|
// notePosition is not part of hash because it would produce a lot of updates in case of reordering
|
||||||
|
static get hashedProperties() { return ["branchId", "noteId", "parentNoteId", "prefix"]; }
|
||||||
|
|
||||||
|
constructor(row) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
if (!row) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.updateFromRow(row);
|
||||||
|
this.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
updateFromRow(row) {
|
||||||
|
this.update([
|
||||||
|
row.branchId,
|
||||||
|
row.noteId,
|
||||||
|
row.parentNoteId,
|
||||||
|
row.prefix,
|
||||||
|
row.notePosition,
|
||||||
|
row.isExpanded,
|
||||||
|
row.utcDateModified
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
update([branchId, noteId, parentNoteId, prefix, notePosition, isExpanded, utcDateModified]) {
|
||||||
|
/** @type {string} */
|
||||||
|
this.branchId = branchId;
|
||||||
|
/** @type {string} */
|
||||||
|
this.noteId = noteId;
|
||||||
|
/** @type {string} */
|
||||||
|
this.parentNoteId = parentNoteId;
|
||||||
|
/** @type {string|null} */
|
||||||
|
this.prefix = prefix;
|
||||||
|
/** @type {int} */
|
||||||
|
this.notePosition = notePosition;
|
||||||
|
/** @type {boolean} */
|
||||||
|
this.isExpanded = !!isExpanded;
|
||||||
|
/** @type {string} */
|
||||||
|
this.utcDateModified = utcDateModified;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
init() {
|
||||||
|
if (this.branchId) {
|
||||||
|
this.becca.branches[this.branchId] = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.becca.childParentToBranch[`${this.noteId}-${this.parentNoteId}`] = this;
|
||||||
|
|
||||||
|
const childNote = this.childNote;
|
||||||
|
|
||||||
|
if (!childNote.parentBranches.includes(this)) {
|
||||||
|
childNote.parentBranches.push(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.noteId === 'root') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const parentNote = this.parentNote;
|
||||||
|
|
||||||
|
if (!childNote.parents.includes(parentNote)) {
|
||||||
|
childNote.parents.push(parentNote);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!parentNote.children.includes(childNote)) {
|
||||||
|
parentNote.children.push(childNote);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @returns {BNote} */
|
||||||
|
get childNote() {
|
||||||
|
if (!(this.noteId in this.becca.notes)) {
|
||||||
|
// entities can come out of order in sync/import, create skeleton which will be filled later
|
||||||
|
this.becca.addNote(this.noteId, new BNote({noteId: this.noteId}));
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.becca.notes[this.noteId];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @returns {BNote} */
|
||||||
|
getNote() {
|
||||||
|
return this.childNote;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @returns {BNote|undefined} - root branch will have undefined parent, all other branches have to have a parent note */
|
||||||
|
get parentNote() {
|
||||||
|
if (!(this.parentNoteId in this.becca.notes) && this.parentNoteId !== 'none') {
|
||||||
|
// entities can come out of order in sync/import, create skeleton which will be filled later
|
||||||
|
this.becca.addNote(this.parentNoteId, new BNote({noteId: this.parentNoteId}));
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.becca.notes[this.parentNoteId];
|
||||||
|
}
|
||||||
|
|
||||||
|
get isDeleted() {
|
||||||
|
return !(this.branchId in this.becca.branches);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Branch is weak when its existence should not hinder deletion of its note.
|
||||||
|
* As a result, note with only weak branches should be immediately deleted.
|
||||||
|
* An example is shared or bookmarked clones - they are created automatically and exist for technical reasons,
|
||||||
|
* not as user-intended actions. From user perspective, they don't count as real clones and for the purpose
|
||||||
|
* of deletion should not act as a clone.
|
||||||
|
*
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
get isWeak() {
|
||||||
|
return ['_share', '_lbBookmarks'].includes(this.parentNoteId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a branch. If this is a last note's branch, delete the note as well.
|
||||||
|
*
|
||||||
|
* @param {string} [deleteId] - optional delete identified
|
||||||
|
* @param {TaskContext} [taskContext]
|
||||||
|
*
|
||||||
|
* @returns {boolean} - true if note has been deleted, false otherwise
|
||||||
|
*/
|
||||||
|
deleteBranch(deleteId, taskContext) {
|
||||||
|
if (!deleteId) {
|
||||||
|
deleteId = utils.randomString(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!taskContext) {
|
||||||
|
taskContext = new TaskContext('no-progress-reporting');
|
||||||
|
}
|
||||||
|
|
||||||
|
taskContext.increaseProgressCount();
|
||||||
|
|
||||||
|
const note = this.getNote();
|
||||||
|
|
||||||
|
if (!taskContext.noteDeletionHandlerTriggered) {
|
||||||
|
const parentBranches = note.getParentBranches();
|
||||||
|
|
||||||
|
if (parentBranches.length === 1 && parentBranches[0] === this) {
|
||||||
|
// needs to be run before branches and attributes are deleted and thus attached relations disappear
|
||||||
|
const handlers = require("../../services/handlers");
|
||||||
|
handlers.runAttachedRelations(note, 'runOnNoteDeletion', note);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.noteId === 'root'
|
||||||
|
|| this.noteId === cls.getHoistedNoteId()) {
|
||||||
|
|
||||||
|
throw new Error("Can't delete root or hoisted branch/note");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.markAsDeleted(deleteId);
|
||||||
|
|
||||||
|
const notDeletedBranches = note.getStrongParentBranches();
|
||||||
|
|
||||||
|
if (notDeletedBranches.length === 0) {
|
||||||
|
for (const weakBranch of note.getParentBranches()) {
|
||||||
|
weakBranch.markAsDeleted(deleteId);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const childBranch of note.getChildBranches()) {
|
||||||
|
childBranch.deleteBranch(deleteId, taskContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
// first delete children and then parent - this will show up better in recent changes
|
||||||
|
|
||||||
|
log.info(`Deleting note '${note.noteId}'`);
|
||||||
|
|
||||||
|
this.becca.notes[note.noteId].isBeingDeleted = true;
|
||||||
|
|
||||||
|
for (const attribute of note.getOwnedAttributes().slice()) {
|
||||||
|
attribute.markAsDeleted(deleteId);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const relation of note.getTargetRelations()) {
|
||||||
|
relation.markAsDeleted(deleteId);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const attachment of note.getAttachments()) {
|
||||||
|
attachment.markAsDeleted(deleteId);
|
||||||
|
}
|
||||||
|
|
||||||
|
note.markAsDeleted(deleteId);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
beforeSaving() {
|
||||||
|
if (!this.noteId || !this.parentNoteId) {
|
||||||
|
throw new Error(`noteId and parentNoteId are mandatory properties for Branch`);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.branchId = `${this.parentNoteId}_${this.noteId}`;
|
||||||
|
|
||||||
|
if (this.notePosition === undefined || this.notePosition === null) {
|
||||||
|
let maxNotePos = 0;
|
||||||
|
|
||||||
|
for (const childBranch of this.parentNote.getChildBranches()) {
|
||||||
|
if (maxNotePos < childBranch.notePosition
|
||||||
|
&& childBranch.noteId !== '_hidden' // hidden has a very large notePosition to always stay last
|
||||||
|
) {
|
||||||
|
maxNotePos = childBranch.notePosition;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.notePosition = maxNotePos + 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.isExpanded) {
|
||||||
|
this.isExpanded = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.prefix?.trim()) {
|
||||||
|
this.prefix = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.utcDateModified = dateUtils.utcNowDateTime();
|
||||||
|
|
||||||
|
super.beforeSaving();
|
||||||
|
|
||||||
|
this.becca.branches[this.branchId] = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
getPojo() {
|
||||||
|
return {
|
||||||
|
branchId: this.branchId,
|
||||||
|
noteId: this.noteId,
|
||||||
|
parentNoteId: this.parentNoteId,
|
||||||
|
prefix: this.prefix,
|
||||||
|
notePosition: this.notePosition,
|
||||||
|
isExpanded: this.isExpanded,
|
||||||
|
isDeleted: false,
|
||||||
|
utcDateModified: this.utcDateModified
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
createClone(parentNoteId, notePosition) {
|
||||||
|
const existingBranch = this.becca.getBranchFromChildAndParent(this.noteId, parentNoteId);
|
||||||
|
|
||||||
|
if (existingBranch) {
|
||||||
|
existingBranch.notePosition = notePosition;
|
||||||
|
return existingBranch;
|
||||||
|
} else {
|
||||||
|
return new BBranch({
|
||||||
|
noteId: this.noteId,
|
||||||
|
parentNoteId: parentNoteId,
|
||||||
|
notePosition: notePosition,
|
||||||
|
prefix: this.prefix,
|
||||||
|
isExpanded: this.isExpanded
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = BBranch;
|
||||||
|
</code></pre>
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<br class="clear">
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script> prettyPrint(); </script>
|
||||||
|
<script src="scripts/linenumber.js"> </script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
129
docs/backend_api/becca_entities_betapi_token.js.html
Normal file
129
docs/backend_api/becca_entities_betapi_token.js.html
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>JSDoc: Source: becca/entities/betapi_token.js</title>
|
||||||
|
|
||||||
|
<script src="scripts/prettify/prettify.js"> </script>
|
||||||
|
<script src="scripts/prettify/lang-css.js"> </script>
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
||||||
|
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div id="main">
|
||||||
|
|
||||||
|
<h1 class="page-title">Source: becca/entities/betapi_token.js</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint source linenums"><code>"use strict";
|
||||||
|
|
||||||
|
const dateUtils = require('../../services/date_utils');
|
||||||
|
const AbstractBeccaEntity = require("./abstract_becca_entity");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EtapiToken is an entity representing token used to authenticate against Trilium REST API from client applications.
|
||||||
|
* Used by:
|
||||||
|
* - Trilium Sender
|
||||||
|
* - ETAPI clients
|
||||||
|
*
|
||||||
|
* The format user is presented with is "<etapiTokenId>_<tokenHash>". This is also called "authToken" to distinguish it
|
||||||
|
* from tokenHash and token.
|
||||||
|
*
|
||||||
|
* @extends AbstractBeccaEntity
|
||||||
|
*/
|
||||||
|
class BEtapiToken extends AbstractBeccaEntity {
|
||||||
|
static get entityName() { return "etapi_tokens"; }
|
||||||
|
static get primaryKeyName() { return "etapiTokenId"; }
|
||||||
|
static get hashedProperties() { return ["etapiTokenId", "name", "tokenHash", "utcDateCreated", "utcDateModified", "isDeleted"]; }
|
||||||
|
|
||||||
|
constructor(row) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
if (!row) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.updateFromRow(row);
|
||||||
|
this.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
updateFromRow(row) {
|
||||||
|
/** @type {string} */
|
||||||
|
this.etapiTokenId = row.etapiTokenId;
|
||||||
|
/** @type {string} */
|
||||||
|
this.name = row.name;
|
||||||
|
/** @type {string} */
|
||||||
|
this.tokenHash = row.tokenHash;
|
||||||
|
/** @type {string} */
|
||||||
|
this.utcDateCreated = row.utcDateCreated || dateUtils.utcNowDateTime();
|
||||||
|
/** @type {string} */
|
||||||
|
this.utcDateModified = row.utcDateModified || this.utcDateCreated;
|
||||||
|
/** @type {boolean} */
|
||||||
|
this.isDeleted = !!row.isDeleted;
|
||||||
|
|
||||||
|
if (this.etapiTokenId) {
|
||||||
|
this.becca.etapiTokens[this.etapiTokenId] = this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
init() {
|
||||||
|
if (this.etapiTokenId) {
|
||||||
|
this.becca.etapiTokens[this.etapiTokenId] = this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getPojo() {
|
||||||
|
return {
|
||||||
|
etapiTokenId: this.etapiTokenId,
|
||||||
|
name: this.name,
|
||||||
|
tokenHash: this.tokenHash,
|
||||||
|
utcDateCreated: this.utcDateCreated,
|
||||||
|
utcDateModified: this.utcDateModified,
|
||||||
|
isDeleted: this.isDeleted
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
beforeSaving() {
|
||||||
|
this.utcDateModified = dateUtils.utcNowDateTime();
|
||||||
|
|
||||||
|
super.beforeSaving();
|
||||||
|
|
||||||
|
this.becca.etapiTokens[this.etapiTokenId] = this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = BEtapiToken;
|
||||||
|
</code></pre>
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<br class="clear">
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script> prettyPrint(); </script>
|
||||||
|
<script src="scripts/linenumber.js"> </script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
1759
docs/backend_api/becca_entities_bnote.js.html
Normal file
1759
docs/backend_api/becca_entities_bnote.js.html
Normal file
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>JSDoc: Source: becca/entities/option.js</title>
|
<title>JSDoc: Source: becca/entities/boption.js</title>
|
||||||
|
|
||||||
<script src="scripts/prettify/prettify.js"> </script>
|
<script src="scripts/prettify/prettify.js"> </script>
|
||||||
<script src="scripts/prettify/lang-css.js"> </script>
|
<script src="scripts/prettify/lang-css.js"> </script>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
<div id="main">
|
<div id="main">
|
||||||
|
|
||||||
<h1 class="page-title">Source: becca/entities/option.js</h1>
|
<h1 class="page-title">Source: becca/entities/boption.js</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -28,13 +28,15 @@
|
|||||||
<article>
|
<article>
|
||||||
<pre class="prettyprint source linenums"><code>"use strict";
|
<pre class="prettyprint source linenums"><code>"use strict";
|
||||||
|
|
||||||
const dateUtils = require('../../services/date_utils.js');
|
const dateUtils = require('../../services/date_utils');
|
||||||
const AbstractEntity = require("./abstract_entity.js");
|
const AbstractBeccaEntity = require("./abstract_becca_entity");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Option represents name-value pair, either directly configurable by the user or some system property.
|
* Option represents a name-value pair, either directly configurable by the user or some system property.
|
||||||
|
*
|
||||||
|
* @extends AbstractBeccaEntity
|
||||||
*/
|
*/
|
||||||
class Option extends AbstractEntity {
|
class BOption extends AbstractBeccaEntity {
|
||||||
static get entityName() { return "options"; }
|
static get entityName() { return "options"; }
|
||||||
static get primaryKeyName() { return "name"; }
|
static get primaryKeyName() { return "name"; }
|
||||||
static get hashedProperties() { return ["name", "value"]; }
|
static get hashedProperties() { return ["name", "value"]; }
|
||||||
@@ -42,14 +44,21 @@ class Option extends AbstractEntity {
|
|||||||
constructor(row) {
|
constructor(row) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
this.name = row.name;
|
this.updateFromRow(row);
|
||||||
this.value = row.value;
|
|
||||||
this.isSynced = !!row.isSynced;
|
|
||||||
this.utcDateModified = row.utcDateModified;
|
|
||||||
|
|
||||||
this.becca.options[this.name] = this;
|
this.becca.options[this.name] = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateFromRow(row) {
|
||||||
|
/** @type {string} */
|
||||||
|
this.name = row.name;
|
||||||
|
/** @type {string} */
|
||||||
|
this.value = row.value;
|
||||||
|
/** @type {boolean} */
|
||||||
|
this.isSynced = !!row.isSynced;
|
||||||
|
/** @type {string} */
|
||||||
|
this.utcDateModified = row.utcDateModified;
|
||||||
|
}
|
||||||
|
|
||||||
beforeSaving() {
|
beforeSaving() {
|
||||||
super.beforeSaving();
|
super.beforeSaving();
|
||||||
|
|
||||||
@@ -61,14 +70,12 @@ class Option extends AbstractEntity {
|
|||||||
name: this.name,
|
name: this.name,
|
||||||
value: this.value,
|
value: this.value,
|
||||||
isSynced: this.isSynced,
|
isSynced: this.isSynced,
|
||||||
utcDateModified: this.utcDateModified,
|
utcDateModified: this.utcDateModified
|
||||||
// utcDateCreated is scheduled for removal so the value does not matter
|
|
||||||
utcDateCreated: dateUtils.utcNowDateTime()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Option;
|
module.exports = BOption;
|
||||||
</code></pre>
|
</code></pre>
|
||||||
</article>
|
</article>
|
||||||
</section>
|
</section>
|
||||||
@@ -79,13 +86,13 @@ module.exports = Option;
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<nav>
|
<nav>
|
||||||
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
|
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<br class="clear">
|
<br class="clear">
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
|
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<script> prettyPrint(); </script>
|
<script> prettyPrint(); </script>
|
||||||
@@ -1,192 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>JSDoc: Source: becca/entities/branch.js</title>
|
|
||||||
|
|
||||||
<script src="scripts/prettify/prettify.js"> </script>
|
|
||||||
<script src="scripts/prettify/lang-css.js"> </script>
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div id="main">
|
|
||||||
|
|
||||||
<h1 class="page-title">Source: becca/entities/branch.js</h1>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<article>
|
|
||||||
<pre class="prettyprint source linenums"><code>"use strict";
|
|
||||||
|
|
||||||
const Note = require('./note.js');
|
|
||||||
const AbstractEntity = require("./abstract_entity.js");
|
|
||||||
const sql = require("../../services/sql.js");
|
|
||||||
const dateUtils = require("../../services/date_utils.js");
|
|
||||||
|
|
||||||
class Branch extends AbstractEntity {
|
|
||||||
static get entityName() { return "branches"; }
|
|
||||||
static get primaryKeyName() { return "branchId"; }
|
|
||||||
// notePosition is not part of hash because it would produce a lot of updates in case of reordering
|
|
||||||
static get hashedProperties() { return ["branchId", "noteId", "parentNoteId", "prefix"]; }
|
|
||||||
|
|
||||||
constructor(row) {
|
|
||||||
super();
|
|
||||||
|
|
||||||
if (!row) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.updateFromRow(row);
|
|
||||||
this.init();
|
|
||||||
}
|
|
||||||
|
|
||||||
updateFromRow(row) {
|
|
||||||
this.update([
|
|
||||||
row.branchId,
|
|
||||||
row.noteId,
|
|
||||||
row.parentNoteId,
|
|
||||||
row.prefix,
|
|
||||||
row.notePosition,
|
|
||||||
row.isExpanded,
|
|
||||||
row.utcDateModified
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
update([branchId, noteId, parentNoteId, prefix, notePosition, isExpanded, utcDateModified]) {
|
|
||||||
/** @param {string} */
|
|
||||||
this.branchId = branchId;
|
|
||||||
/** @param {string} */
|
|
||||||
this.noteId = noteId;
|
|
||||||
/** @param {string} */
|
|
||||||
this.parentNoteId = parentNoteId;
|
|
||||||
/** @param {string} */
|
|
||||||
this.prefix = prefix;
|
|
||||||
/** @param {int} */
|
|
||||||
this.notePosition = notePosition;
|
|
||||||
/** @param {boolean} */
|
|
||||||
this.isExpanded = !!isExpanded;
|
|
||||||
/** @param {string} */
|
|
||||||
this.utcDateModified = utcDateModified;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
init() {
|
|
||||||
if (this.branchId === 'root') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const childNote = this.childNote;
|
|
||||||
const parentNote = this.parentNote;
|
|
||||||
|
|
||||||
childNote.parents.push(parentNote);
|
|
||||||
childNote.parentBranches.push(this);
|
|
||||||
|
|
||||||
parentNote.children.push(childNote);
|
|
||||||
|
|
||||||
this.becca.branches[this.branchId] = this;
|
|
||||||
this.becca.childParentToBranch[`${this.noteId}-${this.parentNoteId}`] = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {Note} */
|
|
||||||
get childNote() {
|
|
||||||
if (!(this.noteId in this.becca.notes)) {
|
|
||||||
// entities can come out of order in sync, create skeleton which will be filled later
|
|
||||||
this.becca.notes[this.noteId] = new Note({noteId: this.noteId});
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.becca.notes[this.noteId];
|
|
||||||
}
|
|
||||||
|
|
||||||
getNote() {
|
|
||||||
return this.childNote;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {Note} */
|
|
||||||
get parentNote() {
|
|
||||||
if (!(this.parentNoteId in this.becca.notes)) {
|
|
||||||
// entities can come out of order in sync, create skeleton which will be filled later
|
|
||||||
this.becca.notes[this.parentNoteId] = new Note({noteId: this.parentNoteId});
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.becca.notes[this.parentNoteId];
|
|
||||||
}
|
|
||||||
|
|
||||||
beforeSaving() {
|
|
||||||
if (this.notePosition === undefined || this.notePosition === null) {
|
|
||||||
// TODO finding new position can be refactored into becca
|
|
||||||
const maxNotePos = sql.getValue('SELECT MAX(notePosition) FROM branches WHERE parentNoteId = ? AND isDeleted = 0', [this.parentNoteId]);
|
|
||||||
this.notePosition = maxNotePos === null ? 0 : maxNotePos + 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!this.isExpanded) {
|
|
||||||
this.isExpanded = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.utcDateModified = dateUtils.utcNowDateTime();
|
|
||||||
|
|
||||||
super.beforeSaving();
|
|
||||||
|
|
||||||
this.becca.branches[this.branchId] = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
getPojo() {
|
|
||||||
return {
|
|
||||||
branchId: this.branchId,
|
|
||||||
noteId: this.noteId,
|
|
||||||
parentNoteId: this.parentNoteId,
|
|
||||||
prefix: this.prefix,
|
|
||||||
notePosition: this.notePosition,
|
|
||||||
isExpanded: this.isExpanded,
|
|
||||||
isDeleted: false,
|
|
||||||
utcDateModified: this.utcDateModified,
|
|
||||||
// not used for anything, will be later dropped
|
|
||||||
utcDateCreated: dateUtils.utcNowDateTime()
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
createClone(parentNoteId, notePosition) {
|
|
||||||
return new Branch({
|
|
||||||
noteId: this.noteId,
|
|
||||||
parentNoteId: parentNoteId,
|
|
||||||
notePosition: notePosition,
|
|
||||||
prefix: this.prefix,
|
|
||||||
isExpanded: this.isExpanded
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = Branch;
|
|
||||||
</code></pre>
|
|
||||||
</article>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<nav>
|
|
||||||
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<br class="clear">
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script> prettyPrint(); </script>
|
|
||||||
<script src="scripts/linenumber.js"> </script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>JSDoc: Source: becca/entities/recent_note.js</title>
|
<title>JSDoc: Source: becca/entities/brecent_note.js</title>
|
||||||
|
|
||||||
<script src="scripts/prettify/prettify.js"> </script>
|
<script src="scripts/prettify/prettify.js"> </script>
|
||||||
<script src="scripts/prettify/lang-css.js"> </script>
|
<script src="scripts/prettify/lang-css.js"> </script>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
<div id="main">
|
<div id="main">
|
||||||
|
|
||||||
<h1 class="page-title">Source: becca/entities/recent_note.js</h1>
|
<h1 class="page-title">Source: becca/entities/brecent_note.js</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -28,21 +28,26 @@
|
|||||||
<article>
|
<article>
|
||||||
<pre class="prettyprint source linenums"><code>"use strict";
|
<pre class="prettyprint source linenums"><code>"use strict";
|
||||||
|
|
||||||
const dateUtils = require('../../services/date_utils.js');
|
const dateUtils = require('../../services/date_utils');
|
||||||
const AbstractEntity = require("./abstract_entity.js");
|
const AbstractBeccaEntity = require("./abstract_becca_entity");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* RecentNote represents recently visited note.
|
* RecentNote represents recently visited note.
|
||||||
|
*
|
||||||
|
* @extends AbstractBeccaEntity
|
||||||
*/
|
*/
|
||||||
class RecentNote extends AbstractEntity {
|
class BRecentNote extends AbstractBeccaEntity {
|
||||||
static get entityName() { return "recent_notes"; }
|
static get entityName() { return "recent_notes"; }
|
||||||
static get primaryKeyName() { return "noteId"; }
|
static get primaryKeyName() { return "noteId"; }
|
||||||
|
|
||||||
constructor(row) {
|
constructor(row) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
|
/** @type {string} */
|
||||||
this.noteId = row.noteId;
|
this.noteId = row.noteId;
|
||||||
|
/** @type {string} */
|
||||||
this.notePath = row.notePath;
|
this.notePath = row.notePath;
|
||||||
|
/** @type {string} */
|
||||||
this.utcDateCreated = row.utcDateCreated || dateUtils.utcNowDateTime();
|
this.utcDateCreated = row.utcDateCreated || dateUtils.utcNowDateTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,7 +60,7 @@ class RecentNote extends AbstractEntity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = RecentNote;
|
module.exports = BRecentNote;
|
||||||
</code></pre>
|
</code></pre>
|
||||||
</article>
|
</article>
|
||||||
</section>
|
</section>
|
||||||
@@ -66,13 +71,13 @@ module.exports = RecentNote;
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<nav>
|
<nav>
|
||||||
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
|
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<br class="clear">
|
<br class="clear">
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
|
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<script> prettyPrint(); </script>
|
<script> prettyPrint(); </script>
|
||||||
265
docs/backend_api/becca_entities_brevision.js.html
Normal file
265
docs/backend_api/becca_entities_brevision.js.html
Normal file
@@ -0,0 +1,265 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>JSDoc: Source: becca/entities/brevision.js</title>
|
||||||
|
|
||||||
|
<script src="scripts/prettify/prettify.js"> </script>
|
||||||
|
<script src="scripts/prettify/lang-css.js"> </script>
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
||||||
|
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div id="main">
|
||||||
|
|
||||||
|
<h1 class="page-title">Source: becca/entities/brevision.js</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint source linenums"><code>"use strict";
|
||||||
|
|
||||||
|
const protectedSessionService = require('../../services/protected_session');
|
||||||
|
const utils = require('../../services/utils');
|
||||||
|
const dateUtils = require('../../services/date_utils');
|
||||||
|
const becca = require('../becca');
|
||||||
|
const AbstractBeccaEntity = require("./abstract_becca_entity");
|
||||||
|
const sql = require("../../services/sql");
|
||||||
|
const BAttachment = require("./battachment");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Revision represents a snapshot of note's title and content at some point in the past.
|
||||||
|
* It's used for seamless note versioning.
|
||||||
|
*
|
||||||
|
* @extends AbstractBeccaEntity
|
||||||
|
*/
|
||||||
|
class BRevision extends AbstractBeccaEntity {
|
||||||
|
static get entityName() { return "revisions"; }
|
||||||
|
static get primaryKeyName() { return "revisionId"; }
|
||||||
|
static get hashedProperties() { return ["revisionId", "noteId", "title", "isProtected", "dateLastEdited", "dateCreated",
|
||||||
|
"utcDateLastEdited", "utcDateCreated", "utcDateModified", "blobId"]; }
|
||||||
|
|
||||||
|
constructor(row, titleDecrypted = false) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
/** @type {string} */
|
||||||
|
this.revisionId = row.revisionId;
|
||||||
|
/** @type {string} */
|
||||||
|
this.noteId = row.noteId;
|
||||||
|
/** @type {string} */
|
||||||
|
this.type = row.type;
|
||||||
|
/** @type {string} */
|
||||||
|
this.mime = row.mime;
|
||||||
|
/** @type {boolean} */
|
||||||
|
this.isProtected = !!row.isProtected;
|
||||||
|
/** @type {string} */
|
||||||
|
this.title = row.title;
|
||||||
|
/** @type {string} */
|
||||||
|
this.blobId = row.blobId;
|
||||||
|
/** @type {string} */
|
||||||
|
this.dateLastEdited = row.dateLastEdited;
|
||||||
|
/** @type {string} */
|
||||||
|
this.dateCreated = row.dateCreated;
|
||||||
|
/** @type {string} */
|
||||||
|
this.utcDateLastEdited = row.utcDateLastEdited;
|
||||||
|
/** @type {string} */
|
||||||
|
this.utcDateCreated = row.utcDateCreated;
|
||||||
|
/** @type {string} */
|
||||||
|
this.utcDateModified = row.utcDateModified;
|
||||||
|
/** @type {int} */
|
||||||
|
this.contentLength = row.contentLength;
|
||||||
|
|
||||||
|
if (this.isProtected && !titleDecrypted) {
|
||||||
|
this.title = protectedSessionService.isProtectedSessionAvailable()
|
||||||
|
? protectedSessionService.decryptString(this.title)
|
||||||
|
: "[protected]";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getNote() {
|
||||||
|
return becca.notes[this.noteId];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @returns {boolean} true if the note has string content (not binary) */
|
||||||
|
hasStringContent() {
|
||||||
|
return utils.isStringNote(this.type, this.mime);
|
||||||
|
}
|
||||||
|
|
||||||
|
isContentAvailable() {
|
||||||
|
return !this.revisionId // new note which was not encrypted yet
|
||||||
|
|| !this.isProtected
|
||||||
|
|| protectedSessionService.isProtectedSessionAvailable()
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Note revision content has quite special handling - it's not a separate entity, but a lazily loaded
|
||||||
|
* part of Revision entity with its own sync. The reason behind this hybrid design is that
|
||||||
|
* content can be quite large, and it's not necessary to load it / fill memory for any note access even
|
||||||
|
* if we don't need a content, especially for bulk operations like search.
|
||||||
|
*
|
||||||
|
* This is the same approach as is used for Note's content.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @returns {string|Buffer} */
|
||||||
|
getContent() {
|
||||||
|
return this._getContent();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns {*}
|
||||||
|
* @throws Error in case of invalid JSON */
|
||||||
|
getJsonContent() {
|
||||||
|
const content = this.getContent();
|
||||||
|
|
||||||
|
if (!content || !content.trim()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return JSON.parse(content);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @returns {*|null} valid object or null if the content cannot be parsed as JSON */
|
||||||
|
getJsonContentSafely() {
|
||||||
|
try {
|
||||||
|
return this.getJsonContent();
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param content
|
||||||
|
* @param {object} [opts]
|
||||||
|
* @param {object} [opts.forceSave=false] - will also save this BRevision entity
|
||||||
|
*/
|
||||||
|
setContent(content, opts) {
|
||||||
|
this._setContent(content, opts);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @returns {BAttachment[]} */
|
||||||
|
getAttachments() {
|
||||||
|
return sql.getRows(`
|
||||||
|
SELECT attachments.*
|
||||||
|
FROM attachments
|
||||||
|
WHERE ownerId = ?
|
||||||
|
AND isDeleted = 0`, [this.revisionId])
|
||||||
|
.map(row => new BAttachment(row));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @returns {BAttachment|null} */
|
||||||
|
getAttachmentById(attachmentId, opts = {}) {
|
||||||
|
opts.includeContentLength = !!opts.includeContentLength;
|
||||||
|
|
||||||
|
const query = opts.includeContentLength
|
||||||
|
? `SELECT attachments.*, LENGTH(blobs.content) AS contentLength
|
||||||
|
FROM attachments
|
||||||
|
JOIN blobs USING (blobId)
|
||||||
|
WHERE ownerId = ? AND attachmentId = ? AND isDeleted = 0`
|
||||||
|
: `SELECT * FROM attachments WHERE ownerId = ? AND attachmentId = ? AND isDeleted = 0`;
|
||||||
|
|
||||||
|
return sql.getRows(query, [this.revisionId, attachmentId])
|
||||||
|
.map(row => new BAttachment(row))[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @returns {BAttachment[]} */
|
||||||
|
getAttachmentsByRole(role) {
|
||||||
|
return sql.getRows(`
|
||||||
|
SELECT attachments.*
|
||||||
|
FROM attachments
|
||||||
|
WHERE ownerId = ?
|
||||||
|
AND role = ?
|
||||||
|
AND isDeleted = 0
|
||||||
|
ORDER BY position`, [this.revisionId, role])
|
||||||
|
.map(row => new BAttachment(row));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @returns {BAttachment} */
|
||||||
|
getAttachmentByTitle(title) {
|
||||||
|
return sql.getRows(`
|
||||||
|
SELECT attachments.*
|
||||||
|
FROM attachments
|
||||||
|
WHERE ownerId = ?
|
||||||
|
AND title = ?
|
||||||
|
AND isDeleted = 0
|
||||||
|
ORDER BY position`, [this.revisionId, title])
|
||||||
|
.map(row => new BAttachment(row))[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
beforeSaving() {
|
||||||
|
super.beforeSaving();
|
||||||
|
|
||||||
|
this.utcDateModified = dateUtils.utcNowDateTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
getPojo() {
|
||||||
|
return {
|
||||||
|
revisionId: this.revisionId,
|
||||||
|
noteId: this.noteId,
|
||||||
|
type: this.type,
|
||||||
|
mime: this.mime,
|
||||||
|
isProtected: this.isProtected,
|
||||||
|
title: this.title,
|
||||||
|
blobId: this.blobId,
|
||||||
|
dateLastEdited: this.dateLastEdited,
|
||||||
|
dateCreated: this.dateCreated,
|
||||||
|
utcDateLastEdited: this.utcDateLastEdited,
|
||||||
|
utcDateCreated: this.utcDateCreated,
|
||||||
|
utcDateModified: this.utcDateModified,
|
||||||
|
content: this.content, // used when retrieving full note revision to frontend
|
||||||
|
contentLength: this.contentLength
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
getPojoToSave() {
|
||||||
|
const pojo = this.getPojo();
|
||||||
|
delete pojo.content; // not getting persisted
|
||||||
|
delete pojo.contentLength; // not getting persisted
|
||||||
|
|
||||||
|
if (pojo.isProtected) {
|
||||||
|
if (protectedSessionService.isProtectedSessionAvailable()) {
|
||||||
|
pojo.title = protectedSessionService.encrypt(this.title);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// updating protected note outside of protected session means we will keep original ciphertexts
|
||||||
|
delete pojo.title;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return pojo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = BRevision;
|
||||||
|
</code></pre>
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<br class="clear">
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script> prettyPrint(); </script>
|
||||||
|
<script src="scripts/linenumber.js"> </script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,242 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>JSDoc: Source: becca/entities/note_revision.js</title>
|
|
||||||
|
|
||||||
<script src="scripts/prettify/prettify.js"> </script>
|
|
||||||
<script src="scripts/prettify/lang-css.js"> </script>
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
|
||||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div id="main">
|
|
||||||
|
|
||||||
<h1 class="page-title">Source: becca/entities/note_revision.js</h1>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<article>
|
|
||||||
<pre class="prettyprint source linenums"><code>"use strict";
|
|
||||||
|
|
||||||
const protectedSessionService = require('../../services/protected_session');
|
|
||||||
const utils = require('../../services/utils');
|
|
||||||
const sql = require('../../services/sql');
|
|
||||||
const dateUtils = require('../../services/date_utils');
|
|
||||||
const becca = require('../becca.js');
|
|
||||||
const entityChangesService = require('../../services/entity_changes');
|
|
||||||
const AbstractEntity = require("./abstract_entity.js");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* NoteRevision represents snapshot of note's title and content at some point in the past. It's used for seamless note versioning.
|
|
||||||
*/
|
|
||||||
class NoteRevision extends AbstractEntity {
|
|
||||||
static get entityName() { return "note_revisions"; }
|
|
||||||
static get primaryKeyName() { return "noteRevisionId"; }
|
|
||||||
static get hashedProperties() { return ["noteRevisionId", "noteId", "title", "isProtected", "dateLastEdited", "dateCreated", "utcDateLastEdited", "utcDateCreated", "utcDateModified"]; }
|
|
||||||
|
|
||||||
constructor(row) {
|
|
||||||
super();
|
|
||||||
|
|
||||||
/** @param {string} */
|
|
||||||
this.noteRevisionId = row.noteRevisionId;
|
|
||||||
/** @param {string} */
|
|
||||||
this.noteId = row.noteId;
|
|
||||||
/** @param {string} */
|
|
||||||
this.type = row.type;
|
|
||||||
/** @param {string} */
|
|
||||||
this.mime = row.mime;
|
|
||||||
/** @param {boolean} */
|
|
||||||
this.isProtected = !!row.isProtected;
|
|
||||||
/** @param {string} */
|
|
||||||
this.title = row.title;
|
|
||||||
/** @param {string} */
|
|
||||||
this.dateLastEdited = row.dateLastEdited;
|
|
||||||
/** @param {string} */
|
|
||||||
this.dateCreated = row.dateCreated;
|
|
||||||
/** @param {string} */
|
|
||||||
this.utcDateLastEdited = row.utcDateLastEdited;
|
|
||||||
/** @param {string} */
|
|
||||||
this.utcDateCreated = row.utcDateCreated;
|
|
||||||
/** @param {string} */
|
|
||||||
this.utcDateModified = row.utcDateModified;
|
|
||||||
/** @param {number} */
|
|
||||||
this.contentLength = row.contentLength;
|
|
||||||
|
|
||||||
if (this.isProtected) {
|
|
||||||
if (protectedSessionService.isProtectedSessionAvailable()) {
|
|
||||||
this.title = protectedSessionService.decryptString(this.title);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
this.title = "[Protected]";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getNote() {
|
|
||||||
return becca.notes[this.noteId];
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @returns {boolean} true if the note has string content (not binary) */
|
|
||||||
isStringNote() {
|
|
||||||
return utils.isStringNote(this.type, this.mime);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Note revision content has quite special handling - it's not a separate entity, but a lazily loaded
|
|
||||||
* part of NoteRevision entity with it's own sync. Reason behind this hybrid design is that
|
|
||||||
* content can be quite large and it's not necessary to load it / fill memory for any note access even
|
|
||||||
* if we don't need a content, especially for bulk operations like search.
|
|
||||||
*
|
|
||||||
* This is the same approach as is used for Note's content.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @returns {*} */
|
|
||||||
getContent(silentNotFoundError = false) {
|
|
||||||
const res = sql.getRow(`SELECT content FROM note_revision_contents WHERE noteRevisionId = ?`, [this.noteRevisionId]);
|
|
||||||
|
|
||||||
if (!res) {
|
|
||||||
if (silentNotFoundError) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw new Error("Cannot find note revision content for noteRevisionId=" + this.noteRevisionId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let content = res.content;
|
|
||||||
|
|
||||||
if (this.isProtected) {
|
|
||||||
if (protectedSessionService.isProtectedSessionAvailable()) {
|
|
||||||
content = protectedSessionService.decrypt(content);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
content = "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.isStringNote()) {
|
|
||||||
return content === null
|
|
||||||
? ""
|
|
||||||
: content.toString("UTF-8");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return content;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setContent(content, ignoreMissingProtectedSession = false) {
|
|
||||||
const pojo = {
|
|
||||||
noteRevisionId: this.noteRevisionId,
|
|
||||||
content: content,
|
|
||||||
utcDateModified: dateUtils.utcNowDateTime()
|
|
||||||
};
|
|
||||||
|
|
||||||
if (this.isProtected) {
|
|
||||||
if (protectedSessionService.isProtectedSessionAvailable()) {
|
|
||||||
pojo.content = protectedSessionService.encrypt(pojo.content);
|
|
||||||
}
|
|
||||||
else if (!ignoreMissingProtectedSession) {
|
|
||||||
throw new Error(`Cannot update content of noteRevisionId=${this.noteRevisionId} since we're out of protected session.`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sql.upsert("note_revision_contents", "noteRevisionId", pojo);
|
|
||||||
|
|
||||||
const hash = utils.hash(this.noteRevisionId + "|" + pojo.content.toString());
|
|
||||||
|
|
||||||
entityChangesService.addEntityChange({
|
|
||||||
entityName: 'note_revision_contents',
|
|
||||||
entityId: this.noteRevisionId,
|
|
||||||
hash: hash,
|
|
||||||
isErased: false,
|
|
||||||
utcDateChanged: this.getUtcDateChanged(),
|
|
||||||
isSynced: true
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @returns {{contentLength, dateModified, utcDateModified}} */
|
|
||||||
getContentMetadata() {
|
|
||||||
return sql.getRow(`
|
|
||||||
SELECT
|
|
||||||
LENGTH(content) AS contentLength,
|
|
||||||
dateModified,
|
|
||||||
utcDateModified
|
|
||||||
FROM note_revision_contents
|
|
||||||
WHERE noteRevisionId = ?`, [this.noteRevisionId]);
|
|
||||||
}
|
|
||||||
|
|
||||||
beforeSaving() {
|
|
||||||
super.beforeSaving();
|
|
||||||
|
|
||||||
this.utcDateModified = dateUtils.utcNowDateTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
getPojo() {
|
|
||||||
return {
|
|
||||||
noteRevisionId: this.noteRevisionId,
|
|
||||||
noteId: this.noteId,
|
|
||||||
type: this.type,
|
|
||||||
mime: this.mime,
|
|
||||||
isProtected: this.isProtected,
|
|
||||||
title: this.title,
|
|
||||||
dateLastEdited: this.dateLastEdited,
|
|
||||||
dateCreated: this.dateCreated,
|
|
||||||
utcDateLastEdited: this.utcDateLastEdited,
|
|
||||||
utcDateCreated: this.utcDateCreated,
|
|
||||||
utcDateModified: this.utcDateModified,
|
|
||||||
contentLength: this.contentLength
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
getPojoToSave() {
|
|
||||||
const pojo = this.getPojo();
|
|
||||||
delete pojo.contentLength; // not getting persisted
|
|
||||||
|
|
||||||
if (pojo.isProtected) {
|
|
||||||
if (protectedSessionService.isProtectedSessionAvailable()) {
|
|
||||||
pojo.title = protectedSessionService.encrypt(this.title);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// updating protected note outside of protected session means we will keep original ciphertexts
|
|
||||||
delete pojo.title;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return pojo;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = NoteRevision;
|
|
||||||
</code></pre>
|
|
||||||
</article>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<nav>
|
|
||||||
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<br class="clear">
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script> prettyPrint(); </script>
|
|
||||||
<script src="scripts/linenumber.js"> </script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user