mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 02:16:05 +01:00 
			
		
		
		
	Compare commits
	
		
			2146 Commits
		
	
	
		
			v0.49.1-be
			...
			v0.63.6
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 25b49e1ca2 | ||
|  | c7f19e04fa | ||
|  | a2711cfb7b | ||
|  | f984b361ee | ||
|  | ac1e1ebe43 | ||
|  | 499bfaea9b | ||
|  | fa4772b91e | ||
|  | fa7b190c6b | ||
|  | 84feec2e7e | ||
|  | 3035473751 | ||
|  | 399458b52f | ||
|  | becac5fbad | ||
|  | 1e26b31090 | ||
|  | 0ebd03869d | ||
|  | a4a713f102 | ||
|  | 83d5d6bbd8 | ||
|  | 90f4c6b0d1 | ||
|  | bfb8aa6481 | ||
|  | 2bb4cccd82 | ||
|  | 6fad5f2b51 | ||
|  | 36357bdf86 | ||
|  | 80eaf10656 | ||
|  | f46ce0417d | ||
|  | 6f1e6402f0 | ||
|  | bdfa13a8a0 | ||
|  | d5622dfbf7 | ||
|  | 0948853539 | ||
|  | 0ad337c8e8 | ||
|  | 9565b0b43d | ||
|  | a115b14136 | ||
|  | bb8bfc61ed | ||
|  | 2d19f073d9 | ||
|  | ff5d5d20d9 | ||
|  | 1f95e88cfd | ||
|  | 15677f7178 | ||
|  | 3a0bb91b77 | ||
|  | 157f894c9b | ||
|  | e6dec701c0 | ||
|  | 450b52f6da | ||
|  | 4ef31eaf3d | ||
|  | 2d865576cf | ||
|  | 41e623b009 | ||
|  | 239786e7d1 | ||
|  | 89e1e47900 | ||
|  | 67cb926233 | ||
|  | 2f813dfc5d | ||
|  | a939599223 | ||
|  | fb10e0ad33 | ||
|  | 46bd5bc1ef | ||
|  | 5abfb5c08a | ||
|  | 9357caeb5a | ||
|  | 6b58e59819 | ||
|  | c6df25ece8 | ||
|  | ebd6276b5e | ||
|  | 92e8b155e4 | ||
|  | e76093e75c | ||
|  | 4f8073daa7 | ||
|  | 47fb96faa8 | ||
|  | 6e33553146 | ||
|  | 807941e6a5 | ||
|  | 1e30c0702e | ||
|  | 69b686ba3b | ||
|  | ace5660809 | ||
|  | 8bc99fd799 | ||
|  | f0c3a090a2 | ||
|  | 17e063f01d | ||
|  | 76c9873705 | ||
|  | 2c7b774356 | ||
|  | 390ad6d813 | ||
|  | 77800d073f | ||
|  | 1953c7896f | ||
|  | dff4f73366 | ||
|  | cd43752f61 | ||
|  | 23a5cea338 | ||
|  | e2cb3c0d14 | ||
|  | d6046efa1b | ||
|  | ee608fcf46 | ||
|  | 894b08a1b8 | ||
|  | 4e549baedc | ||
|  | 6b6e42e9ba | ||
|  | 0404b78fb8 | ||
|  | d63d42d87c | ||
|  | 37baa4cd74 | ||
|  | 68e03c434e | ||
|  | 394530921e | ||
|  | 57ccd5a954 | ||
|  | a28d8843ac | ||
|  | cb523faaad | ||
|  | f704cacdee | ||
|  | 8dbc592563 | ||
|  | 439743d2b0 | ||
|  | a3783131a2 | ||
|  | 8199073342 | ||
|  | 33af9a3595 | ||
|  | 30c3c10524 | ||
|  | df85a5eee4 | ||
|  | 0ac397e7ff | ||
|  | d243880099 | ||
|  | 2e23c521c3 | ||
|  | eb761b286f | ||
|  | d0f6ff5f98 | ||
|  | c35167f2f5 | ||
|  | 84feaabc52 | ||
|  | a6036859b8 | ||
|  | 929f7f3114 | ||
|  | 9e914b9016 | ||
|  | 947627d8a0 | ||
|  | ed00797179 | ||
|  | 93dcce2217 | ||
|  | 686af0c6a1 | ||
|  | d07f02b95f | ||
|  | ad74952194 | ||
|  | 10f3df3ed4 | ||
|  | 18e2e6779b | ||
|  | ed129c307b | ||
|  | 8742e4bfe9 | ||
|  | 3b10bb742b | ||
|  | 1f206a9c24 | ||
|  | f026646bb5 | ||
|  | f9bfc8ad86 | ||
|  | e70539ff48 | ||
|  | a439be79b3 | ||
|  | edf2dfe8f9 | ||
|  | 0e4c49ea5b | ||
|  | 52cfd138d1 | ||
|  | 258b97f833 | ||
|  | 837b17d62a | ||
|  | d82720f62f | ||
|  | cf99345962 | ||
|  | 9e54496d00 | ||
|  | 8ae6598b8a | ||
|  | 722299dd26 | ||
|  | e2b1421bf3 | ||
|  | 1f41d39bc7 | ||
|  | ce39d3b4ce | ||
|  | ef2ade849b | ||
|  | 88067c071c | ||
|  | f5018e9820 | ||
|  | 1561f402f0 | ||
|  | 0d7889d212 | ||
|  | 19a10e59e9 | ||
|  | 746abb02d3 | ||
|  | 23351298c8 | ||
|  | 426a8f75aa | ||
|  | 999cf0d9e3 | ||
|  | 0afc41060a | ||
|  | 6e2d76c2b4 | ||
|  | 3abf74a9f3 | ||
|  | 5d52498da1 | ||
|  | cf068211ff | ||
|  | 0507c46ae9 | ||
|  | 69ed3644f9 | ||
|  | b0c5894691 | ||
|  | f10fc7bd7f | ||
|  | bdbaacaac9 | ||
|  | 2790f52e36 | ||
|  | 6515dd7b23 | ||
|  | 5a38bf78e1 | ||
|  | 4bdb40904f | ||
|  | e7d98206f9 | ||
|  | 1939375161 | ||
|  | ec737d02b2 | ||
|  | 927e5ede0c | ||
|  | 3470347523 | ||
|  | e25c86e947 | ||
|  | fb1478f2dd | ||
|  | c8d6f20c3b | ||
|  | 5af1c7756c | ||
|  | 38e6008aa2 | ||
|  | 9a587e8c8c | ||
|  | 30bd216500 | ||
|  | a3ce5b5d28 | ||
|  | b17848609b | ||
|  | e9ece21d20 | ||
|  | b700f069fe | ||
|  | 40fb6aa168 | ||
|  | 341480e7cf | ||
|  | bde311fd76 | ||
|  | f8bc03feaf | ||
|  | 7fc1eb5262 | ||
|  | 531e9d4aff | ||
|  | e0d4766c2d | ||
|  | ab4e83771c | ||
|  | 803b6df40c | ||
|  | 1ebdb0f5e1 | ||
|  | df5951ce46 | ||
|  | 809ffa0c6e | ||
|  | 6dd466ddaf | ||
|  | a45b801a84 | ||
|  | f8ade4d0c5 | ||
|  | 889cb1d7b1 | ||
|  | d3a477b8f2 | ||
|  | 4db042736c | ||
|  | 612e4406b5 | ||
|  | 76f874ef6d | ||
|  | f37f47ce5b | ||
|  | 45ed436426 | ||
|  | 9314cf87c5 | ||
|  | 0efc42081d | ||
|  | 7d80fe19e0 | ||
|  | de8c351e25 | ||
|  | 695c9d5cf3 | ||
|  | 8690228d98 | ||
|  | 01093d05d7 | ||
|  | 690caf7da1 | ||
|  | a9b63111ae | ||
|  | eb0a68d0ab | ||
|  | 48e98b2ac3 | ||
|  | ed1a731950 | ||
|  | 4660c154e9 | ||
|  | ef974ab1f5 | ||
|  | bacae67374 | ||
|  | cc20d17bd2 | ||
|  | 494b240015 | ||
|  | 1cd391a132 | ||
|  | 1c15527d95 | ||
|  | 7af79ec33b | ||
|  | 4294c043d8 | ||
|  | e5b925abf8 | ||
|  | 90c0a4a437 | ||
|  | 692f7868bc | ||
|  | 5282af55f6 | ||
|  | aefc4c6bd2 | ||
|  | b39ba76505 | ||
|  | 9d918e7a54 | ||
|  | 4773f9392b | ||
|  | 5c10fc26be | ||
|  | 38db7f9db7 | ||
|  | 5163e50e7d | ||
|  | 5115b33446 | ||
|  | b01fe5ead9 | ||
|  | b1d4a258a1 | ||
|  | ca041bb658 | ||
|  | 52244ddc99 | ||
|  | 87a60e325f | ||
|  | 0a172d8bc1 | ||
|  | 67a12d3c4d | ||
|  | 5b2ba3646d | ||
|  | 148bff9f77 | ||
|  | 2132cf3bdc | ||
|  | d5271c17e3 | ||
|  | b764761e58 | ||
|  | c666fc3b98 | ||
|  | ba34df2e15 | ||
|  | 840ac2d63e | ||
|  | 5dd4586ebe | ||
|  | bd7fa16e96 | ||
|  | 846ac9305e | ||
|  | db8014c0ef | ||
|  | a3540772dd | ||
|  | 137703ada4 | ||
|  | ec6b8476f9 | ||
|  | d09d3f5a96 | ||
|  | 3d15aeae58 | ||
|  | 9765892d18 | ||
|  | 00f5924251 | ||
|  | 99d0f22403 | ||
|  | 78f8a37587 | ||
|  | 86d62866f2 | ||
|  | 1dc3fafcbf | ||
|  | 7f06952d9e | ||
|  | 78b6614eea | ||
|  | 9665e872c2 | ||
|  | 9db0a062ed | ||
|  | 055bb39e4d | ||
|  | 1261a06a30 | ||
|  | 91eb3c45d5 | ||
|  | 3944235592 | ||
|  | 5be61e6142 | ||
|  | 62ccf798ee | ||
|  | d259931bd2 | ||
|  | 7729aad1e9 | ||
|  | 70d6bd0157 | ||
|  | e5555beea9 | ||
|  | 9767b6269a | ||
|  | 7e486fda06 | ||
|  | 9f726304aa | ||
|  | 614cc4dd82 | ||
|  | 3e8f09d306 | ||
|  | 613b83e638 | ||
|  | 4ac609ff57 | ||
|  | c14ce2c428 | ||
|  | 984bd726e9 | ||
|  | 964abf390b | ||
|  | af24758ad4 | ||
|  | 528d94a8fb | ||
|  | be918628c3 | ||
|  | 602b9ae64a | ||
|  | 602a166e36 | ||
|  | 2e69cc8331 | ||
|  | aaad858395 | ||
|  | b266c327e4 | ||
|  | 149462e3ab | ||
|  | 237d309406 | ||
|  | 48248224f8 | ||
|  | 79e5e3b65f | ||
|  | d0383f3044 | ||
|  | 62ecd1ad76 | ||
|  | 75b7706c2c | ||
|  | 584b176643 | ||
|  | a16555bbff | ||
|  | a749e24147 | ||
|  | bb81f110dd | ||
|  | 5dd6f49104 | ||
|  | bc6be44b19 | ||
|  | 8075265753 | ||
|  | 9d69024758 | ||
|  | 40ca949890 | ||
|  | 035113db4d | ||
|  | 4a67f63abd | ||
|  | d9666210f1 | ||
|  | 925bba134e | ||
|  | d46801ff1f | ||
|  | 7848c7e319 | ||
|  | 65e53741e7 | ||
|  | a83e8ff91a | ||
|  | 542e2579df | ||
|  | 81d64e020e | ||
|  | 9413cd2296 | ||
|  | 5b85713bf3 | ||
|  | 15254e2dfc | ||
|  | 5f6d562bf8 | ||
|  | f37dc66074 | ||
|  | c881b39860 | ||
|  | 0b84524807 | ||
|  | 5218f7b7a6 | ||
|  | 8062bb7e2a | ||
|  | 806062c8d1 | ||
|  | 83f19c0537 | ||
|  | 0424728012 | ||
|  | 3a83d58b25 | ||
|  | 6fa9d996e8 | ||
|  | 1ea3d238e0 | ||
|  | eb273b7dbb | ||
|  | 55374ac4d9 | ||
|  | 8070c00b5f | ||
|  | da8025f1e4 | ||
|  | d2263c68f8 | ||
|  | 92e43bc051 | ||
|  | 40971afe4f | ||
|  | 90fc4b8293 | ||
|  | 97d8b19868 | ||
|  | 2bc7da91a6 | ||
|  | 2b4cbb5f6b | ||
|  | 72b2a6ecb6 | ||
|  | 7b662b04ff | ||
|  | f8e4a665bd | ||
|  | f9a27dd90c | ||
|  | 641985737f | ||
|  | 121e4ba2ea | ||
|  | 01474ecd2d | ||
|  | 82e4e28e7b | ||
|  | 06eb522a8c | ||
|  | 21098be307 | ||
|  | 886ee0dbcb | ||
|  | 6f7fbacca1 | ||
|  | f5ddabc042 | ||
|  | 8da5b90aea | ||
|  | 23848526c0 | ||
|  | e7d57bc08f | ||
|  | 041758766a | ||
|  | 69980c798b | ||
|  | 4de6a803e9 | ||
|  | 748c5064b5 | ||
|  | c6e8966ecd | ||
|  | 8c247ba7c6 | ||
|  | 52b5711ecd | ||
|  | 58fe3a62af | ||
|  | af4d0c3ba6 | ||
|  | 4bba0aa842 | ||
|  | ae9af8ea23 | ||
|  | eea29aba0e | ||
|  | abbd0b50eb | ||
|  | 739ab28763 | ||
|  | c551eae651 | ||
|  | d5aea26960 | ||
|  | d3730ac1a9 | ||
|  | f2a510e4c5 | ||
|  | 4717242dc7 | ||
|  | b5ef09e779 | ||
|  | d706b3a447 | ||
|  | 6c96cca3a5 | ||
|  | c1865f8564 | ||
|  | 515c5411a6 | ||
|  | 3f7a5504c7 | ||
|  | 8c7c37cf98 | ||
|  | d93e00adce | ||
|  | 0e16e48db6 | ||
|  | c0f48c0e99 | ||
|  | abedf2bba4 | ||
|  | bb0137b2fd | ||
|  | 6c54c7d17d | ||
|  | cd95adcecb | ||
|  | 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 | ||
|  | 265401775b | 
							
								
								
									
										8
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							| @@ -7,7 +7,7 @@ body: | ||||
|   attributes: | ||||
|     label: Trilium Version | ||||
|     description: What version of Trilium are you using? | ||||
|     placeholder: 0.48.0-beta | ||||
|     placeholder: 0.57.0-beta | ||||
|   validations: | ||||
|     required: true | ||||
| - type: dropdown | ||||
| @@ -44,3 +44,9 @@ body: | ||||
|     description: A clear and concise description of the bug and any additional information. | ||||
|   validations: | ||||
|     required: true | ||||
| - type: textarea | ||||
|   attributes: | ||||
|     label: Error logs | ||||
|     description: Please provide error logs, see [wiki page](https://github.com/zadam/trilium/wiki/Error-logs) for instructions on how to submit them. | ||||
|   validations: | ||||
|     required: false | ||||
|   | ||||
							
								
								
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -8,4 +8,9 @@ yarn-error.log | ||||
| config.ini | ||||
| cert.key | ||||
| cert.crt | ||||
| server-package.json | ||||
| server-package.json | ||||
| .idea/httpRequests/ | ||||
| data/ | ||||
| data-test/ | ||||
| tmp/ | ||||
| .eslintcache | ||||
|   | ||||
| @@ -2,7 +2,7 @@ image: | ||||
|   file: .gitpod.dockerfile | ||||
|  | ||||
| tasks: | ||||
|     - before: nvm install 16.13.1 && nvm use 16.13.1 | ||||
|     - before: nvm install 18.18.2 && nvm use 18.18.2 | ||||
|       init: npm install | ||||
|       command: npm run start-server | ||||
|  | ||||
|   | ||||
							
								
								
									
										4
									
								
								.idea/dataSources.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								.idea/dataSources.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,11 +1,11 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <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> | ||||
|       <synchronize>true</synchronize> | ||||
|       <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> | ||||
|     </data-source> | ||||
|   </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"> | ||||
|   <profile version="1.0"> | ||||
|     <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"> | ||||
|       <option name="processCode" value="true" /> | ||||
|       <option name="processLiterals" value="true" /> | ||||
|   | ||||
							
								
								
									
										3
									
								
								.idea/misc.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										3
									
								
								.idea/misc.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,9 +1,8 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="JavaScriptSettings"> | ||||
|     <option name="languageLevel" value="ES6" /> | ||||
|   </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" /> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										20
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							| @@ -1,18 +1,24 @@ | ||||
| { | ||||
|     "version": "0.2.0", | ||||
|     "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", | ||||
|             "name": "start-server", | ||||
|             "restart": true, | ||||
|             "runtimeExecutable": "nodemon", | ||||
|             "env": { | ||||
|                 "TRILIUM_ENV": "dev", | ||||
|                 "TRILIUM_DATA_DIR": "./data" | ||||
|             }, | ||||
|             "skipFiles": [ | ||||
|                 "<node_internals>/**" | ||||
|             ], | ||||
|             "env": { | ||||
|                 "TRILIUM_ENV": "dev" | ||||
|             }, | ||||
|             "type": "node", | ||||
|             "outputCapture": "std", | ||||
|             "program": "${workspaceFolder}/src/www" | ||||
|         } | ||||
|         }, | ||||
|     ] | ||||
| } | ||||
							
								
								
									
										4
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| { | ||||
|   "editor.formatOnSave": true, | ||||
|   "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. | ||||
							
								
								
									
										27
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								Dockerfile
									
									
									
									
									
								
							| @@ -1,8 +1,12 @@ | ||||
| FROM node:16.13.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 | ||||
| WORKDIR /usr/src/app | ||||
|  | ||||
| # Bundle app source | ||||
| COPY . . | ||||
|  | ||||
| COPY server-package.json package.json | ||||
|  | ||||
| # Install app dependencies | ||||
| @@ -17,13 +21,22 @@ RUN set -x \ | ||||
|         nasm \ | ||||
|         libpng-dev \ | ||||
|         python3 \ | ||||
|     && npm install --production \ | ||||
|     && apk del .build-dependencies | ||||
|     && npm install \ | ||||
|     && 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 | ||||
| COPY . . | ||||
| # Some setup tools need to be kept | ||||
| 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 | ||||
| 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) | [Italian](https://github.com/zadam/trilium/blob/master/README.it.md) | ||||
|  | ||||
| [](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)) | ||||
| * 丰富的所见即所得笔记编辑功能,包括带有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/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/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) | ||||
| * 可用性和性能均能很好地扩展至超过10万个笔记 | ||||
| * 针对智能手机和平板电脑进行触摸优化的[移动前端](https://github.com/zadam/trilium/wiki/Mobile-frontend) | ||||
| * [脚本](https://github.com/zadam/trilium/wiki/Scripts) - 请参阅[高级功能展示](https://github.com/zadam/trilium/wiki/Advanced-showcases) | ||||
| * 在拥有超过 10 万条笔记时仍能保持良好的可用性和性能 | ||||
| * 针对智能手机和平板电脑进行优化的[用于移动设备的前端](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 Clipper](https://github.com/zadam/trilium/wiki/Web-clipper)可轻松保存Web内容 | ||||
| * [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import) 和 [Markdown 导入导出](https://github.com/zadam/trilium/wiki/Markdown)功能 | ||||
| * 使用[网页剪藏](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/wiki/Server-installation)。 | ||||
|     * 当前仅支持(经过测试)最新的Chrome和Firefox浏览器。 | ||||
| * 如果要在桌面上使用 Trilium,请从[最新版本](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/) | ||||
| [有关文档页面的完整列表,请参见 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) | ||||
|  | ||||
| 或在本地克隆并运行 | ||||
| 或者克隆本仓库到本地,并运行 | ||||
|  | ||||
| ``` | ||||
| npm install | ||||
| @@ -56,7 +68,15 @@ npm run start-server | ||||
|  | ||||
| ## 致谢 | ||||
|  | ||||
| * [CKEditor 5](https://github.com/ckeditor/ckeditor5) - 市场上最好的所见即所得编辑器,互动性强且聆听能力强的团队 | ||||
| * [FancyTree](https://github.com/mar10/fancytree) - 一个非常丰富的关于树的库,强大的没有对手。没有它,Trilium Notes将不会如此。 | ||||
| * [CKEditor 5](https://github.com/ckeditor/ckeditor5) - 市面上最好的所见即所得编辑器,拥有互动性强且聆听能力强的团队 | ||||
| * [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) | ||||
| * [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 的第三版或者任何(由你选择)更晚的版本。 | ||||
|   | ||||
							
								
								
									
										93
									
								
								README.it.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								README.it.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,93 @@ | ||||
| # Trilium Notes | ||||
|  | ||||
| ## Trilium è in manutenzione - vedi i dettagli in https://github.com/zadam/trilium/issues/4620 | ||||
|  | ||||
| Le discussioni preliminari sull'organizzazione si stanno svolgendo in [Trilium Next discussions](https://github.com/orgs/TriliumNext/discussions).  | ||||
|  | ||||
| [](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) | [Italian](https://github.com/zadam/trilium/blob/master/README.it.md) | ||||
|  | ||||
|  | ||||
| Trilium Notes è un'applicazione per appunti ad organizzazione gerarchica, studiata per la costruzione di archivi di conoscenza personali di grandi dimensioni. | ||||
|  | ||||
| Vedi [fotografie](https://github.com/zadam/trilium/wiki/Screenshot-tour) per una panoramica veloce: | ||||
|  | ||||
| <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> | ||||
|  | ||||
| L'Ucraina si sta difendendo dall'aggressione russa, considera [donare all'esercito ucraino o a organizzazioni umanitarie](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> | ||||
|  | ||||
| ## 🎁 Funzionalità | ||||
|  | ||||
|  | ||||
| * Gli appunti possono essere organizzati in un albero di profondità arbitraria. Un singolo appunto può essere collocato in più posti nell'albero (vedi [clonazione](https://github.com/zadam/trilium/wiki/Cloning-notes)) | ||||
| * Ricco editor visuale (WYSIWYG), con supporto -tra l'altro- per tabelle, immagini ed [espressioni matematiche](https://github.com/zadam/trilium/wiki/Text-notes#math-support) e con [formattazione automatica](https://github.com/zadam/trilium/wiki/Text-notes#autoformat) per markdown | ||||
| * Supporto per la modifica di [appunti con codice sorgente](https://github.com/zadam/trilium/wiki/Code-notes), con evidenziazione della sintassi | ||||
| * [Navigazione veloce](https://github.com/zadam/trilium/wiki/Note-navigation) tra gli appunti, ricerca testuale completa e [fissaggio degli appunti](https://github.com/zadam/trilium/wiki/Note-hoisting) | ||||
| * Supporto integrato ed automatico per le [revisioni degli appunti](https://github.com/zadam/trilium/wiki/Note-revisions) | ||||
| * Gli [attributi](https://github.com/zadam/trilium/wiki/Attributes) degli appunti possono essere utilizzati per l'organizzazione, per l'interrogazione e per lo scripting avanzato (prorgrammazione). | ||||
| * [Sincronizzazione](https://github.com/zadam/trilium/wiki/Synchronization) con un server di sincronizzazione auto-ospitato | ||||
|   * c'è un [servizio di terze parti per ospitare server di sincronizzazione](https://trilium.cc/paid-hosting) | ||||
| * [Condivisione](https://github.com/zadam/trilium/wiki/Sharing)  (pubblicazione) di appunti sull'internet pubblico | ||||
| * Robusta [crittografia](https://github.com/zadam/trilium/wiki/Protected-notes) configurabile singolarmente per ogni appunto | ||||
| * Disegno di diagrammi con Excalidraw (tipo di appunto "canvas") | ||||
| * [Mappe relazionali](https://github.com/zadam/trilium/wiki/Relation-map) e [mappe di collegamenti](https://github.com/zadam/trilium/wiki/Link-map) per visualizzare gli appunti e le loro relazioni | ||||
| * [Scripting](https://github.com/zadam/trilium/wiki/Scripts) - vedi [Esempi avanzati](https://github.com/zadam/trilium/wiki/Advanced-showcases) | ||||
| * [API REST](https://github.com/zadam/trilium/wiki/ETAPI) per l'automazione | ||||
| * Si adatta bene sia in termini di usabilità che di prestazioni fino ad oltre 100 000 appunti | ||||
| * Interfaccia utente ottimizzata per il [mobile](https://github.com/zadam/trilium/wiki/Mobile-frontend) (smartphone e tablet) | ||||
| * [Tema Notturno](https://github.com/zadam/trilium/wiki/Themes) | ||||
| * Supporto per importazione ed esportazione da e per [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import) e [Markdown import](https://github.com/zadam/trilium/wiki/Markdown) | ||||
| * [Web Clipper](https://github.com/zadam/trilium/wiki/Web-clipper) per il salvataggio facile di contenuti web | ||||
|  | ||||
|  | ||||
| Dai un'occhiata a [awesome-trilium](https://github.com/Nriver/awesome-trilium) per temi, script, plugin e altro di terze parti. | ||||
|  | ||||
| ## 🏗 Rilasci | ||||
|  | ||||
|  | ||||
| Trilium è fornito come applicazione desktop (Linux e Windows) o come applicazione web ospitata sul tuo server (Linux). La versione desktop per Mac OS è disponibile, ma [non è supportata](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support). | ||||
|  | ||||
| * Se vuoi usare Trilium sul tuo desktop, scarica il rilascio binario per la tua piattaforma dall'[ultimo rilascio](https://github.com/zadam/trilium/releases/latest), decomprimi l'archivio e avvia l'eseguibile ```trilium```. | ||||
| * Se vuoi installare Trilium su un server, segui [questa pagina](https://github.com/zadam/trilium/wiki/Server-installation). | ||||
|   * Per ora solo Chrome e Firefox sono i browser supportati (testati). | ||||
|  | ||||
| Trilium è anche disponibile su Flatpak: | ||||
|  | ||||
| [<img width="240" src="https://flathub.org/assets/badges/flathub-badge-en.png">](https://flathub.org/apps/details/com.github.zadam.trilium) | ||||
|  | ||||
| ## 📝 Documentazione | ||||
|  | ||||
| [Vedi la wiki per una lista completa delle pagine di documentazione.](https://github.com/zadam/trilium/wiki/) | ||||
|  | ||||
| Puoi anche leggere ["Patterns of personal knowledge base"](https://github.com/zadam/trilium/wiki/Patterns-of-personal-knowledge-base) per avere un'ispirazione su come potresti utilizzare Trilium. | ||||
|  | ||||
| ## 💻 Contribuire | ||||
|  | ||||
| Usa un ambiente di sviluppo basato su browser | ||||
|  | ||||
| [](https://gitpod.io/#https://github.com/zadam/trilium) | ||||
|  | ||||
| O clona localmente ed esegui | ||||
| ``` | ||||
| npm install | ||||
| npm run start-server | ||||
| ``` | ||||
|  | ||||
| ## 📢 Riconoscimenti | ||||
|  | ||||
| * [CKEditor 5](https://github.com/ckeditor/ckeditor5) - miglior editor visuale (WYSIWYG) sul mercato, squadra di sviluppo attenta e reattiva | ||||
| * [FancyTree](https://github.com/mar10/fancytree) -  libreria per alberi molto ricca di funzionalità, senza pari. Trilium Notes non sarebbe lo stesso senza di essa. | ||||
| * [CodeMirror](https://github.com/codemirror/CodeMirror) - editor di codice con supporto per un'enorme quantità di linguaggi. | ||||
| * [jsPlumb](https://github.com/jsplumb/jsplumb) - libreria per la  connettività visuale senza pari. Utilizzata per [mappe relazionali](https://github.com/zadam/trilium/wiki/Relation-map) e [mappe di collegamenti](https://github.com/zadam/trilium/wiki/Link-map). | ||||
|  | ||||
| ## 🤝 Supporto | ||||
|  | ||||
| È possibile supportare Trilium attraverso Github Sponsors, [PayPal](https://paypal.me/za4am) o Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2). | ||||
|  | ||||
| ## 🔑 Licenza | ||||
|  | ||||
| Questo programma è software libero: è possibile redistribuirlo e/o modificarlo nei termini della GNU Affero General Public License come pubblicata dalla Free Software Foundation, sia la versione 3 della Licenza, o (a propria scelta) qualsiasi versione successiva. | ||||
							
								
								
									
										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) | [Italian](https://github.com/zadam/trilium/blob/master/README.it.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、またはそれ以降のバージョンのいずれかに従って、再配布および/または改変することができます。 | ||||
							
								
								
									
										47
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,13 +1,26 @@ | ||||
| # 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) | ||||
| ## Trilium is in maintenance mode - see details in https://github.com/zadam/trilium/issues/4620 | ||||
|  | ||||
| [](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: | ||||
| Preliminary disccusions on the successor organization are taking place in [Trilium Next discussions](https://github.com/orgs/TriliumNext/discussions).  | ||||
|  | ||||
|  | ||||
| [](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) | [Italian](https://github.com/zadam/trilium/blob/master/README.it.md) | ||||
|  | ||||
| ## Features | ||||
|  | ||||
| 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> | ||||
|  | ||||
| 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)) | ||||
| * 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 +29,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) | ||||
| * 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 | ||||
|   * 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 | ||||
| * 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 | ||||
| * [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 | ||||
| * 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) | ||||
| * [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 | ||||
|  | ||||
| ## 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). | ||||
|  | ||||
| @@ -33,13 +52,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). | ||||
|   * 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/) | ||||
|  | ||||
| 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 | ||||
|  | ||||
| @@ -51,13 +74,17 @@ npm install | ||||
| npm run start-server | ||||
| ``` | ||||
|  | ||||
| ## Shoutouts | ||||
| ## 📢 Shoutouts | ||||
|  | ||||
| * [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. | ||||
| * [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) | ||||
|  | ||||
| ## 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. | ||||
|   | ||||
| @@ -1,12 +1,17 @@ | ||||
| # 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) | [Italian](https://github.com/zadam/trilium/blob/master/README.it.md) | ||||
|  | ||||
| [](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): | ||||
|  | ||||
|  | ||||
|  | ||||
| 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)) | ||||
|   | ||||
							
								
								
									
										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.
										
									
								
							| @@ -5,18 +5,3 @@ echo "Packaging debian x64 distribution..." | ||||
| VERSION=`jq -r ".version" package.json` | ||||
|  | ||||
| ./node_modules/.bin/electron-installer-debian --config bin/deb-options.json --options.version=${VERSION} --arch amd64 | ||||
|  | ||||
|  | ||||
| # hacky stop-gag measure to produce debian compatible XZ compressed debs until this is fixed: https://github.com/electron-userland/electron-installer-debian/issues/272 | ||||
| cd dist | ||||
| ar x trilium_${VERSION}_amd64.deb | ||||
| rm trilium_${VERSION}_amd64.deb | ||||
| # recompress | ||||
| < control.tar.zst zstd -d | xz > control.tar.xz | ||||
| < data.tar.zst zstd -d | xz > data.tar.xz | ||||
| # create deb archive (I really do not know, what argument "sdsd" is for but something is required for ar to create the archive as desired) | ||||
| ar -m -c -a sdsd trilium_${VERSION}_amd64.deb debian-binary control.tar.xz data.tar.xz | ||||
|  | ||||
| rm control* data* debian-binary | ||||
|  | ||||
| echo "Converted to XZ deb" | ||||
|   | ||||
| @@ -2,47 +2,37 @@ | ||||
|  | ||||
| SRC_DIR=./dist/trilium-linux-x64-src | ||||
|  | ||||
| if [ "$1" != "DONTCOPY" ] | ||||
| then | ||||
|     ./bin/copy-trilium.sh $SRC_DIR | ||||
| fi | ||||
| [ "$1" != "DONTCOPY" ] && ./bin/copy-trilium.sh "$SRC_DIR" | ||||
|  | ||||
| rm -r $SRC_DIR/src/public/app-dist/*.mobile.* | ||||
| rm -r "$SRC_DIR"/src/public/app-dist/*.mobile.* | ||||
|  | ||||
| echo "Copying required linux-x64 binaries" | ||||
|  | ||||
| cp -r bin/better-sqlite3/linux-desktop-better_sqlite3.node $SRC_DIR/node_modules/better-sqlite3/build/Release/better_sqlite3.node | ||||
| cp -r bin/better-sqlite3/linux-desktop-better_sqlite3.node "$SRC_DIR"/node_modules/better-sqlite3/build/Release/better_sqlite3.node | ||||
|  | ||||
| echo "Packaging linux x64 electron build" | ||||
|  | ||||
| ./node_modules/.bin/electron-packager $SRC_DIR --asar --out=dist --executable-name=trilium --platform=linux --arch=x64 --overwrite | ||||
| ./node_modules/.bin/electron-packager "$SRC_DIR" --asar --out=dist --executable-name=trilium --platform=linux --arch=x64 --overwrite | ||||
|  | ||||
| BUILD_DIR=./dist/trilium-linux-x64 | ||||
| rm -rf $BUILD_DIR | ||||
| rm -rf "$BUILD_DIR" | ||||
|  | ||||
| mv "./dist/Trilium Notes-linux-x64" $BUILD_DIR | ||||
| 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 | ||||
| cp bin/tpl/anonymize-database.sql "$BUILD_DIR"/ | ||||
|  | ||||
| # removing software WebGL binaries because they are pretty huge and not necessary | ||||
| 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/ | ||||
| chmod 755 $BUILD_DIR/trilium-portable.sh | ||||
|  | ||||
| cp bin/tpl/trilium-safe-mode.sh $BUILD_DIR/ | ||||
| chmod 755 $BUILD_DIR/trilium-safe-mode.sh | ||||
|  | ||||
| cp bin/tpl/trilium-no-cert-check.sh $BUILD_DIR/ | ||||
| chmod 755 $BUILD_DIR/trilium-no-cert-check.sh | ||||
| for f in 'trilium-portable' 'trilium-safe-mode' 'trilium-no-cert-check'; do | ||||
|     cp bin/tpl/"$f".sh "$BUILD_DIR"/ | ||||
|     chmod 755 "$BUILD_DIR"/"$f".sh | ||||
| done | ||||
|  | ||||
| echo "Packaging linux x64 electron distribution..." | ||||
| VERSION=`jq -r ".version" package.json` | ||||
|  | ||||
| cd dist | ||||
|  | ||||
| tar cJf trilium-linux-x64-${VERSION}.tar.xz trilium-linux-x64 | ||||
|  | ||||
| cd .. | ||||
| pushd dist | ||||
|     tar cJf "trilium-linux-x64-${VERSION}.tar.xz" trilium-linux-x64 | ||||
| popd | ||||
|  | ||||
| bin/build-debian.sh | ||||
|   | ||||
| @@ -23,6 +23,11 @@ rm -rf $BUILD_DIR | ||||
| # Mac build has by default useless directory level | ||||
| 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..." | ||||
|  | ||||
| VERSION=`jq -r ".version" package.json` | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| #!/usr/bin/env bash | ||||
|  | ||||
| PKG_DIR=dist/trilium-linux-x64-server | ||||
| NODE_VERSION=16.13.1 | ||||
| NODE_VERSION=18.18.2 | ||||
|  | ||||
| if [ "$1" != "DONTCOPY" ] | ||||
| 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_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 | ||||
|  | ||||
| printf "#!/bin/sh\n./node/bin/node src/www" > $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` | ||||
|  | ||||
| cd dist | ||||
|   | ||||
| @@ -22,12 +22,12 @@ rm -rf $BUILD_DIR | ||||
|  | ||||
| mv "./dist/Trilium Notes-win32-x64" $BUILD_DIR | ||||
|  | ||||
| # removing software WebGL binaries because they are pretty huge and not necessary | ||||
| rm -r $BUILD_DIR/swiftshader | ||||
| cp bin/tpl/anonymize-database.sql $BUILD_DIR/ | ||||
|  | ||||
| cp bin/tpl/trilium-portable.bat $BUILD_DIR/ | ||||
| cp bin/tpl/trilium-no-cert-check.bat $BUILD_DIR/ | ||||
| cp bin/tpl/trilium-safe-mode.bat $BUILD_DIR/ | ||||
| cp -r dump-db $BUILD_DIR/ | ||||
| rm -rf $BUILD_DIR/dump-db/node_modules | ||||
|  | ||||
| cp bin/tpl/trilium-{portable,no-cert-check,safe-mode}.bat $BUILD_DIR/ | ||||
|  | ||||
| echo "Zipping windows x64 electron distribution..." | ||||
| VERSION=`jq -r ".version" package.json` | ||||
|   | ||||
| @@ -4,48 +4,49 @@ if [[ $# -eq 0 ]] ; then | ||||
|     echo "Missing argument of target directory" | ||||
|     exit 1 | ||||
| fi | ||||
| if ! [[ $(which npm) ]]; then | ||||
|     echo "Missing npm" | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| n exec 16.13.1 npm run webpack | ||||
| n exec 18.18.2 npm run webpack || npm run webpack | ||||
|  | ||||
| DIR=$1 | ||||
| DIR="$1" | ||||
|  | ||||
| rm -rf $DIR | ||||
| mkdir $DIR | ||||
| rm -rf "$DIR" | ||||
| mkdir -pv "$DIR" | ||||
|  | ||||
| echo "Copying Trilium to build directory $DIR" | ||||
|  | ||||
| cp -r images $DIR/ | ||||
| cp -r libraries $DIR/ | ||||
| cp -r src $DIR/ | ||||
| cp -r db $DIR/ | ||||
| cp -r package.json $DIR/ | ||||
| cp -r package-lock.json $DIR/ | ||||
| cp -r README.md $DIR/ | ||||
| cp -r LICENSE $DIR/ | ||||
| cp -r config-sample.ini $DIR/ | ||||
| cp -r electron.js $DIR/ | ||||
| cp webpack-* $DIR/ | ||||
| for d in 'images' 'libraries' 'src' 'db'; do | ||||
|     cp -r "$d" "$DIR"/ | ||||
| done | ||||
| for f in 'package.json' 'package-lock.json' 'README.md' 'LICENSE' 'config-sample.ini' 'electron.js'; do | ||||
|     cp "$f" "$DIR"/ | ||||
| done | ||||
| cp webpack-* "$DIR"/      # here warning because there is no 'webpack-*', but webpack.config.js only | ||||
|  | ||||
| # run in subshell (so we return to original dir) | ||||
| (cd $DIR && n exec 16.13.1 npm install --only=prod) | ||||
| (cd $DIR && n exec 18.18.2 npm install --only=prod) | ||||
|  | ||||
| if [[ -d "$DIR"/node_modules ]]; then | ||||
| # cleanup of useless files in dependencies | ||||
| rm -r $DIR/node_modules/image-q/demo | ||||
| rm -r $DIR/node_modules/better-sqlite3/Release | ||||
| rm -r $DIR/node_modules/better-sqlite3/deps/sqlite3.tar.gz | ||||
| rm -r $DIR/node_modules/@jimp/plugin-print/fonts | ||||
| rm -r $DIR/node_modules/jimp/browser | ||||
| rm -r $DIR/node_modules/jimp/fonts | ||||
|     for d in 'image-q/demo' 'better-sqlite3/Release' 'better-sqlite3/deps/sqlite3.tar.gz' '@jimp/plugin-print/fonts' 'jimp/browser' 'jimp/fonts'; do | ||||
|         [[ -e "$DIR"/node_modules/"$d" ]] && rm -rv "$DIR"/node_modules/"$d" | ||||
|     done | ||||
|  | ||||
| # delete all tests (there are often large images as test file for jimp etc.) | ||||
| find $DIR/node_modules -name test -exec rm -rf {} \; | ||||
| find $DIR/node_modules -name docs -exec rm -rf {} \; | ||||
| find $DIR/node_modules -name demo -exec rm -rf {} \; | ||||
|     for d in 'test' 'docs' 'demo'; do | ||||
|         find "$DIR"/node_modules -name "$d" -exec rm -rf {} \; | ||||
|     done | ||||
| fi | ||||
|  | ||||
| find $DIR/libraries -name "*.map" -type f -delete | ||||
|  | ||||
| rm -r $DIR/src/public/app | ||||
| d="$DIR"/src/public | ||||
| [[ -d "$d"/app-dist ]] || mkdir -pv "$d"/app-dist | ||||
| cp "$d"/app/share.js "$d"/app-dist/ | ||||
| cp -r "$d"/app/doc_notes "$d"/app-dist/ | ||||
|  | ||||
| sed -i -e 's/app\/desktop.js/app-dist\/desktop.js/g' $DIR/src/views/desktop.ejs | ||||
| 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 | ||||
| rm -rf "$d"/app | ||||
| unset f d DIR | ||||
|   | ||||
							
								
								
									
										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.js'); | ||||
| 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", | ||||
|   "dest": "dist/", | ||||
|   "compression": "xz", | ||||
|   "name": "trilium", | ||||
|   "productName": "Trilium Notes", | ||||
|   "genericName": "Note taker", | ||||
| @@ -11,4 +12,4 @@ | ||||
|   "bin": "trilium", | ||||
|   "icon": "dist/trilium-linux-x64/icon.png", | ||||
|   "categories": [ "Office" ] | ||||
| } | ||||
| } | ||||
|   | ||||
| @@ -2,6 +2,6 @@ | ||||
|  | ||||
| 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" | ||||
							
								
								
									
										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 | ||||
							
								
								
									
										50
									
								
								bin/tpl/anonymize-database.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								bin/tpl/anonymize-database.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | ||||
| UPDATE etapi_tokens SET tokenHash = 'API token hash value'; | ||||
| UPDATE notes SET title = 'title' | ||||
|              WHERE noteId NOT IN ('root', '_hidden', '_share') | ||||
|                AND SUBSTR(noteId, 1, 8) != '_options' | ||||
|                AND SUBSTR(noteId, 1, 3) != '_lb'; | ||||
| 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', 'shareExternalLink', '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', 'runOnBranchChange', | ||||
|        'runOnBranchDeletion', 'runOnChildNoteCreation', 'runOnAttributeCreation', 'runOnAttributeChange', 'template', | ||||
|        'inherit', 'widget', 'renderNote', 'shareCss', 'shareJs', 'shareTemplate', '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', 'shareExternalLink', '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', 'runOnBranchChange', | ||||
|        'runOnBranchDeletion', 'runOnChildNoteCreation', 'runOnAttributeCreation', 'runOnAttributeChange', 'template', | ||||
|        'inherit', 'widget', 'renderNote', 'shareCss', 'shareJs', 'shareTemplate', '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 NODE_TLS_REJECT_UNAUTHORIZED=0 | ||||
| cd %DIR% | ||||
| 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 TRILIUM_DATA_DIR=%DIR%\trilium-data | ||||
| 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 TRILIUM_SAFE_MODE=1 | ||||
| cd %DIR% | ||||
| start trilium.exe | ||||
| start trilium.exe --disable-gpu | ||||
| GOTO END | ||||
|  | ||||
| :END | ||||
|   | ||||
| @@ -3,5 +3,5 @@ | ||||
| DIR=`dirname "$0"` | ||||
| export TRILIUM_SAFE_MODE=1 | ||||
|  | ||||
| "$DIR/trilium" | ||||
| "$DIR/trilium" --disable-gpu | ||||
|  | ||||
|   | ||||
| @@ -16,8 +16,14 @@ noBackup=false | ||||
| # 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=8080 | ||||
| # true for TLS/SSL/HTTPS (secure), false for HTTP (unsecure). | ||||
| # true for TLS/SSL/HTTPS (secure), false for HTTP (insecure). | ||||
| https=false | ||||
| # path to certificate (run "bash bin/generate-cert.sh" to generate self-signed certificate). Relevant only if https=true | ||||
| certPath= | ||||
| 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 | ||||
| - rename openTabs to openNoteContexts | ||||
| - migrate black theme to dark theme | ||||
| - unify readOnly handling to a single attribute: | ||||
|   * readOnly - like now | ||||
|   * readOnly=auto - like without readOnly (used to override inherited readOnly) | ||||
|   * 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'; | ||||
| @@ -1,2 +0,0 @@ | ||||
| ALTER TABLE branches DROP COLUMN utcDateCreated; | ||||
| ALTER TABLE options DROP COLUMN utcDateCreated; | ||||
| @@ -1,23 +0,0 @@ | ||||
| CREATE TABLE IF NOT EXISTS "mig_entity_changes" ( | ||||
|                                                 `id`	INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, | ||||
|                                                 `entityName`	TEXT NOT NULL, | ||||
|                                                 `entityId`	TEXT NOT NULL, | ||||
|                                                 `hash`	TEXT NOT NULL, | ||||
|                                                 `isErased` INT NOT NULL, | ||||
|                                                 `changeId` TEXT NOT NULL, | ||||
|                                                 `sourceId` TEXT NOT NULL, | ||||
|                                                 `isSynced` INTEGER NOT NULL, | ||||
|                                                 `utcDateChanged` TEXT NOT NULL | ||||
| ); | ||||
|  | ||||
| INSERT INTO mig_entity_changes (entityName, entityId, hash, isErased, changeId, sourceId, isSynced, utcDateChanged) | ||||
|     SELECT entityName, entityId, hash, isErased, '', sourceId, isSynced, utcDateChanged FROM entity_changes; | ||||
|  | ||||
| DROP TABLE  entity_changes; | ||||
|  | ||||
| ALTER TABLE mig_entity_changes RENAME TO entity_changes; | ||||
|  | ||||
| CREATE UNIQUE INDEX `IDX_entityChanges_entityName_entityId` ON "entity_changes" ( | ||||
|                                                                                  `entityName`, | ||||
|                                                                                  `entityId` | ||||
|     ); | ||||
| @@ -1,8 +0,0 @@ | ||||
| UPDATE branches SET branchId = 'hidden' where branchId = ( | ||||
|     SELECT branchId FROM branches | ||||
|     WHERE parentNoteId = 'root' | ||||
|       AND noteId = 'hidden' | ||||
|       AND isDeleted = 0 | ||||
|     ORDER BY utcDateModified | ||||
|     LIMIT 1 | ||||
| ); | ||||
							
								
								
									
										13
									
								
								db/migrations/0215__content_structure.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								db/migrations/0215__content_structure.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| 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; | ||||
|  | ||||
| CREATE INDEX IF NOT EXISTS IDX_notes_blobId on notes (blobId); | ||||
| CREATE INDEX IF NOT EXISTS IDX_note_revisions_blobId on note_revisions (blobId); | ||||
							
								
								
									
										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.js'); | ||||
|     const utils = require('../../src/services/utils.js'); | ||||
|  | ||||
|     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'); | ||||
							
								
								
									
										26
									
								
								db/migrations/0218__rename_note_revision_to_revision.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								db/migrations/0218__rename_note_revision_to_revision.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| 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`); | ||||
| CREATE INDEX IF NOT EXISTS IDX_revisions_blobId on revisions (blobId); | ||||
|  | ||||
| UPDATE entity_changes SET entityName = 'revisions' WHERE entityName = 'note_revisions'; | ||||
							
								
								
									
										23
									
								
								db/migrations/0219__attachments.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								db/migrations/0219__attachments.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| 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); | ||||
|  | ||||
| CREATE INDEX IF NOT EXISTS IDX_attachments_blobId on attachments (blobId); | ||||
							
								
								
									
										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.js'); | ||||
|     const becca = require('../../src/becca/becca.js'); | ||||
|     const cls = require('../../src/services/cls.js'); | ||||
|     const log = require('../../src/services/log.js'); | ||||
|     const sql = require('../../src/services/sql.js'); | ||||
|  | ||||
|     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'; | ||||
							
								
								
									
										17
									
								
								db/migrations/0228__fix_blobIds.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								db/migrations/0228__fix_blobIds.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| -- + is normally replaced by X and / by Y, but this can temporarily cause UNIQUE key exception | ||||
| -- this might create blob duplicates, but cleanup will eventually take care of it | ||||
|  | ||||
| UPDATE blobs SET blobId = REPLACE(blobId, '+', 'A'); | ||||
| UPDATE blobs SET blobId = REPLACE(blobId, '/', 'B'); | ||||
|  | ||||
| UPDATE notes SET blobId = REPLACE(blobId, '+', 'A'); | ||||
| UPDATE notes SET blobId = REPLACE(blobId, '/', 'B'); | ||||
|  | ||||
| UPDATE attachments SET blobId = REPLACE(blobId, '+', 'A'); | ||||
| UPDATE attachments SET blobId = REPLACE(blobId, '/', 'B'); | ||||
|  | ||||
| UPDATE revisions SET blobId = REPLACE(blobId, '+', 'A'); | ||||
| UPDATE revisions SET blobId = REPLACE(blobId, '/', 'B'); | ||||
|  | ||||
| UPDATE entity_changes SET entityId = REPLACE(entityId, '+', 'A') WHERE entityName = 'blobs'; | ||||
| UPDATE entity_changes SET entityId = REPLACE(entityId, '/', 'B') WHERE entityName = 'blobs'; | ||||
| @@ -5,15 +5,18 @@ CREATE TABLE IF NOT EXISTS "entity_changes" ( | ||||
|                                                 `hash`	TEXT NOT NULL, | ||||
|                                                 `isErased` INT NOT NULL, | ||||
|                                                 `changeId` TEXT NOT NULL, | ||||
|                                                 `sourceId` TEXT NOT NULL, | ||||
|                                                 `componentId` TEXT NOT NULL, | ||||
|                                                 `instanceId` TEXT NOT NULL, | ||||
|                                                 `isSynced` INTEGER 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, | ||||
|     token TEXT NOT NULL, | ||||
|     etapiTokenId TEXT PRIMARY KEY NOT NULL, | ||||
|     name TEXT NOT NULL, | ||||
|     tokenHash TEXT NOT NULL, | ||||
|     utcDateCreated TEXT NOT NULL, | ||||
|     utcDateModified TEXT NOT NULL, | ||||
|     isDeleted INT NOT NULL DEFAULT 0); | ||||
| CREATE TABLE IF NOT EXISTS "branches" ( | ||||
|                                           `branchId`	TEXT NOT NULL, | ||||
| @@ -32,6 +35,7 @@ CREATE TABLE IF NOT EXISTS "notes" ( | ||||
|                                        `isProtected`	INT NOT NULL DEFAULT 0, | ||||
|                                        `type` TEXT NOT NULL DEFAULT 'text', | ||||
|                                        `mime` TEXT NOT NULL DEFAULT 'text/html', | ||||
|                                        blobId TEXT DEFAULT NULL, | ||||
|                                        `isDeleted`	INT NOT NULL DEFAULT 0, | ||||
|                                        `deleteId`   TEXT DEFAULT NULL, | ||||
|                                        `dateCreated`	TEXT NOT NULL, | ||||
| @@ -39,31 +43,22 @@ CREATE TABLE IF NOT EXISTS "notes" ( | ||||
|                                        `utcDateCreated`	TEXT NOT NULL, | ||||
|                                        `utcDateModified`	TEXT NOT NULL, | ||||
|                                        PRIMARY KEY(`noteId`)); | ||||
| CREATE TABLE IF NOT EXISTS "note_contents" ( | ||||
|                                                `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, | ||||
| 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, | ||||
|                                              `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); | ||||
| 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" | ||||
| ( | ||||
|     name TEXT not null PRIMARY KEY, | ||||
|     value TEXT, | ||||
|     value TEXT not null, | ||||
|     isSynced INTEGER default 0 not null, | ||||
|     utcDateModified TEXT NOT NULL | ||||
| ); | ||||
| @@ -91,11 +86,12 @@ CREATE INDEX `IDX_notes_dateCreated` ON `notes` (`dateCreated`); | ||||
| CREATE INDEX `IDX_notes_dateModified` ON `notes` (`dateModified`); | ||||
| CREATE INDEX `IDX_notes_utcDateModified` ON `notes` (`utcDateModified`); | ||||
| CREATE INDEX `IDX_notes_utcDateCreated` ON `notes` (`utcDateCreated`); | ||||
| CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (`noteId`); | ||||
| CREATE INDEX `IDX_note_revisions_utcDateCreated` ON `note_revisions` (`utcDateCreated`); | ||||
| CREATE INDEX `IDX_note_revisions_utcDateLastEdited` ON `note_revisions` (`utcDateLastEdited`); | ||||
| CREATE INDEX `IDX_note_revisions_dateCreated` ON `note_revisions` (`dateCreated`); | ||||
| CREATE INDEX `IDX_note_revisions_dateLastEdited` ON `note_revisions` (`dateLastEdited`); | ||||
| 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`); | ||||
| CREATE INDEX `IDX_entity_changes_changeId` ON `entity_changes` (`changeId`); | ||||
| CREATE INDEX IDX_attributes_name_value | ||||
|     on attributes (name, value); | ||||
| CREATE INDEX IDX_attributes_noteId_index | ||||
| @@ -108,3 +104,31 @@ CREATE TABLE IF NOT EXISTS "recent_notes" | ||||
|     notePath 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' | ||||
| services: | ||||
|   trilium: | ||||
|     build: | ||||
|       context: . | ||||
|     image: zadam/trilium | ||||
|     restart: always | ||||
|     environment: | ||||
|       - TRILIUM_DATA_DIR=/data | ||||
|       - TRILIUM_DATA_DIR=/home/node/trilium-data | ||||
|     ports: | ||||
|       - "8080:8080" | ||||
|     volumes: | ||||
|       - trilium:/data | ||||
|       - ${TRILIUM_DATA_DIR:-~/trilium-data}:/home/node/trilium-data | ||||
|  | ||||
| volumes: | ||||
|   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.js'); | ||||
| 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.js'); | ||||
| const host = require('./src/services/host.js'); | ||||
|  | ||||
| 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,378 +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> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|         <h3 class="subsection-title">Members</h3> | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="apiTokenId"><span class="type-signature"></span>apiTokenId<span class="type-signature"> :string</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <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#line18">line 18</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="token"><span class="type-signature"></span>token<span class="type-signature"> :string</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <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#line20">line 20</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="utcDateCreated"><span class="type-signature"></span>utcDateCreated<span class="type-signature"> :string</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <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#line22">line 22</a> | ||||
|     </li></ul></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="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.7</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,767 +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 a relationship between a child note and its parent note. Trilium allows a note to have multiple | ||||
| parents.</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> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line12">line 12</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|      | ||||
|     </div> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|         <h3 class="subsection-title">Members</h3> | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="branchId"><span class="type-signature"></span>branchId<span class="type-signature"> :string</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line43">line 43</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="childNote"><span class="type-signature"></span>childNote<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_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line85">line 85</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="isExpanded"><span class="type-signature"></span>isExpanded<span class="type-signature"> :boolean</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">boolean</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line53">line 53</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="noteId"><span class="type-signature"></span>noteId<span class="type-signature"> :string</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line45">line 45</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="notePosition"><span class="type-signature"></span>notePosition<span class="type-signature"> :int</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">int</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line51">line 51</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="parentNote"><span class="type-signature"></span>parentNote<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_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line99">line 99</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="parentNoteId"><span class="type-signature"></span>parentNoteId<span class="type-signature"> :string</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line47">line 47</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="prefix"><span class="type-signature"></span>prefix<span class="type-signature"> :string</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line49">line 49</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="utcDateModified"><span class="type-signature"></span>utcDateModified<span class="type-signature"> :string</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line55">line 55</a> | ||||
|     </li></ul></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="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.7</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
| <script src="scripts/linenumber.js"> </script> | ||||
| </body> | ||||
| </html> | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,446 +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> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|         <h3 class="subsection-title">Members</h3> | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="isSynced"><span class="type-signature"></span>isSynced<span class="type-signature"> :boolean</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">boolean</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <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#line22">line 22</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="name"><span class="type-signature"></span>name<span class="type-signature"> :string</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <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#line18">line 18</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="utcDateModified"><span class="type-signature"></span>utcDateModified<span class="type-signature"> :string</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <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#line24">line 24</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="value"><span class="type-signature"></span>value<span class="type-signature"> :string</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <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#line20">line 20</a> | ||||
|     </li></ul></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="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.7</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
| <script src="scripts/linenumber.js"> </script> | ||||
| </body> | ||||
| </html> | ||||
| @@ -1,378 +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> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|         <h3 class="subsection-title">Members</h3> | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="noteId"><span class="type-signature"></span>noteId<span class="type-signature"> :string</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <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#line17">line 17</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="notePath"><span class="type-signature"></span>notePath<span class="type-signature"> :string</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <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#line19">line 19</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="utcDateCreated"><span class="type-signature"></span>utcDateCreated<span class="type-signature"> :string</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <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#line21">line 21</a> | ||||
|     </li></ul></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="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.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 the 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><h3>Global</h3><ul><li><a href="global.html#api">api</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,85 +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(); | ||||
|  | ||||
|         /** @type {string} */ | ||||
|         this.apiTokenId = row.apiTokenId; | ||||
|         /** @type {string} */ | ||||
|         this.token = row.token; | ||||
|         /** @type {string} */ | ||||
|         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="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</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.7</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
| <script src="scripts/linenumber.js"> </script> | ||||
| </body> | ||||
| </html> | ||||
							
								
								
									
										294
									
								
								docs/backend_api/becca_entities_battachment.js.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										294
									
								
								docs/backend_api/becca_entities_battachment.js.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,294 @@ | ||||
| <!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; | ||||
|         /**  | ||||
|          * either noteId or revisionId to which this attachment belongs | ||||
|          * @type {string} | ||||
|          */ | ||||
|         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; | ||||
|  | ||||
|         /** | ||||
|          * optionally added to the entity | ||||
|          * @type {int} | ||||
|          */ | ||||
|         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><h3>Global</h3><ul><li><a href="global.html#api">api</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"> | ||||
| <head> | ||||
|     <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/lang-css.js"> </script> | ||||
| @@ -17,7 +17,7 @@ | ||||
| 
 | ||||
| <div id="main"> | ||||
| 
 | ||||
|     <h1 class="page-title">Source: becca/entities/attribute.js</h1> | ||||
|     <h1 class="page-title">Source: becca/entities/battribute.js</h1> | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
| @@ -28,17 +28,26 @@ | ||||
|         <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"); | ||||
| const BNote = require('./bnote'); | ||||
| const AbstractBeccaEntity = require("./abstract_becca_entity"); | ||||
| const sql = require("../../services/sql"); | ||||
| const dateUtils = require("../../services/date_utils"); | ||||
| const promotedAttributeDefinitionParser = require("../../services/promoted_attribute_definition_parser"); | ||||
| const {sanitizeAttributeName} = require("../../services/sanitize_attribute_name"); | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * There are currently only two types of attributes, labels or relations. | ||||
|  * @typedef {"label" | "relation"} AttributeType | ||||
|  */ | ||||
| 
 | ||||
| /** | ||||
|  * 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 Attribute extends AbstractEntity { | ||||
| class BAttribute extends AbstractBeccaEntity { | ||||
|     static get entityName() { return "attributes"; } | ||||
|     static get primaryKeyName() { return "attributeId"; } | ||||
|     static get hashedProperties() { return ["attributeId", "noteId", "type", "name", "value", "isInheritable"]; } | ||||
| @@ -72,14 +81,14 @@ class Attribute extends AbstractEntity { | ||||
|         this.attributeId = attributeId; | ||||
|         /** @type {string} */ | ||||
|         this.noteId = noteId; | ||||
|         /** @type {string} */ | ||||
|         /** @type {AttributeType} */ | ||||
|         this.type = type; | ||||
|         /** @type {string} */ | ||||
|         this.name = name; | ||||
|         /** @type {int} */ | ||||
|         this.position = position; | ||||
|         /** @type {string} */ | ||||
|         this.value = value; | ||||
|         this.value = value || ""; | ||||
|         /** @type {boolean} */ | ||||
|         this.isInheritable = !!isInheritable; | ||||
|         /** @type {string} */ | ||||
| @@ -95,7 +104,7 @@ class Attribute extends AbstractEntity { | ||||
| 
 | ||||
|         if (!(this.noteId in this.becca.notes)) { | ||||
|             // entities can come out of order in sync, create skeleton which will be filled later | ||||
|             this.becca.addNote(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); | ||||
| @@ -111,9 +120,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() { | ||||
|         return this.isInheritable | ||||
|             || (this.type === 'relation' && this.name === 'template'); | ||||
|             || (this.type === 'relation' && ['template', 'inherit'].includes(this.name)); | ||||
|     } | ||||
| 
 | ||||
|     get targetNoteId() { // alias | ||||
| @@ -135,18 +158,24 @@ class Attribute extends AbstractEntity { | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @returns {Note|null} | ||||
|      * @returns {BNote|null} | ||||
|      */ | ||||
|     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() { | ||||
|         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) { | ||||
| @@ -157,7 +186,7 @@ class Attribute extends AbstractEntity { | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @return {boolean} | ||||
|      * @returns {boolean} | ||||
|      */ | ||||
|     isDefinition() { | ||||
|         return this.type === 'label' && (this.name.startsWith('label:') || this.name.startsWith('relation:')); | ||||
| @@ -181,19 +210,23 @@ class Attribute extends AbstractEntity { | ||||
|         return !(this.attributeId in this.becca.attributes); | ||||
|     } | ||||
| 
 | ||||
|     beforeSaving() { | ||||
|         if (!this.value) { | ||||
|             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 | ||||
|             this.value = ""; | ||||
|         } | ||||
| 
 | ||||
|         if (this.position === undefined) { | ||||
|             // TODO: can be calculated from becca | ||||
|             this.position = 1 + sql.getValue(`SELECT COALESCE(MAX(position), 0) FROM attributes WHERE noteId = ?`, [this.noteId]); | ||||
|         if (this.position === undefined || this.position === null) { | ||||
|             const maxExistingPosition = this.getNote().getAttributes() | ||||
|                 .reduce((maxPosition, attr) => Math.max(maxPosition, attr.position || 0), 0); | ||||
| 
 | ||||
|             this.position = maxExistingPosition + 10; | ||||
|         } | ||||
| 
 | ||||
|         if (!this.isInheritable) { | ||||
| @@ -222,7 +255,7 @@ class Attribute extends AbstractEntity { | ||||
|     } | ||||
| 
 | ||||
|     createClone(type, name, value, isInheritable) { | ||||
|         return new Attribute({ | ||||
|         return new BAttribute({ | ||||
|             noteId: this.noteId, | ||||
|             type: type, | ||||
|             name: name, | ||||
| @@ -234,7 +267,7 @@ class Attribute extends AbstractEntity { | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| module.exports = Attribute; | ||||
| module.exports = BAttribute; | ||||
| </code></pre> | ||||
|         </article> | ||||
|     </section> | ||||
| @@ -245,13 +278,13 @@ module.exports = Attribute; | ||||
| </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="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> | ||||
|     <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><h3>Global</h3><ul><li><a href="global.html#api">api</a></li></ul> | ||||
| </nav> | ||||
| 
 | ||||
| <br class="clear"> | ||||
| 
 | ||||
| <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> | ||||
| 
 | ||||
| <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><h3>Global</h3><ul><li><a href="global.html#api">api</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><h3>Global</h3><ul><li><a href="global.html#api">api</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><h3>Global</h3><ul><li><a href="global.html#api">api</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> | ||||
							
								
								
									
										1779
									
								
								docs/backend_api/becca_entities_bnote.js.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1779
									
								
								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"> | ||||
| <head> | ||||
|     <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/lang-css.js"> </script> | ||||
| @@ -17,7 +17,7 @@ | ||||
| 
 | ||||
| <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> | ||||
|             <pre class="prettyprint source linenums"><code>"use strict"; | ||||
| 
 | ||||
| const dateUtils = require('../../services/date_utils.js'); | ||||
| const AbstractEntity = require("./abstract_entity.js"); | ||||
| const dateUtils = require('../../services/date_utils'); | ||||
| 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 primaryKeyName() { return "name"; } | ||||
|     static get hashedProperties() { return ["name", "value"]; } | ||||
| @@ -42,6 +44,11 @@ class Option extends AbstractEntity { | ||||
|     constructor(row) { | ||||
|         super(); | ||||
| 
 | ||||
|         this.updateFromRow(row); | ||||
|         this.becca.options[this.name] = this; | ||||
|     } | ||||
| 
 | ||||
|     updateFromRow(row) { | ||||
|         /** @type {string} */ | ||||
|         this.name = row.name; | ||||
|         /** @type {string} */ | ||||
| @@ -50,8 +57,6 @@ class Option extends AbstractEntity { | ||||
|         this.isSynced = !!row.isSynced; | ||||
|         /** @type {string} */ | ||||
|         this.utcDateModified = row.utcDateModified; | ||||
| 
 | ||||
|         this.becca.options[this.name] = this; | ||||
|     } | ||||
| 
 | ||||
|     beforeSaving() { | ||||
| @@ -65,14 +70,12 @@ class Option extends AbstractEntity { | ||||
|             name: this.name, | ||||
|             value: this.value, | ||||
|             isSynced: this.isSynced, | ||||
|             utcDateModified: this.utcDateModified, | ||||
|             // utcDateCreated is scheduled for removal so the value does not matter | ||||
|             utcDateCreated: dateUtils.utcNowDateTime() | ||||
|             utcDateModified: this.utcDateModified | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| module.exports = Option; | ||||
| module.exports = BOption; | ||||
| </code></pre> | ||||
|         </article> | ||||
|     </section> | ||||
| @@ -83,13 +86,13 @@ module.exports = Option; | ||||
| </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="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> | ||||
|     <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><h3>Global</h3><ul><li><a href="global.html#api">api</a></li></ul> | ||||
| </nav> | ||||
| 
 | ||||
| <br class="clear"> | ||||
| 
 | ||||
| <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> | ||||
| 
 | ||||
| <script> prettyPrint(); </script> | ||||
| @@ -1,207 +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"); | ||||
|  | ||||
| /** | ||||
|  * Branch represents a relationship between a child note and its parent note. Trilium allows a note to have multiple | ||||
|  * parents. | ||||
|  */ | ||||
| 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]) { | ||||
|         /** @type {string} */ | ||||
|         this.branchId = branchId; | ||||
|         /** @type {string} */ | ||||
|         this.noteId = noteId; | ||||
|         /** @type {string} */ | ||||
|         this.parentNoteId = parentNoteId; | ||||
|         /** @type {string} */ | ||||
|         this.prefix = prefix; | ||||
|         /** @type {int} */ | ||||
|         this.notePosition = notePosition; | ||||
|         /** @type {boolean} */ | ||||
|         this.isExpanded = !!isExpanded; | ||||
|         /** @type {string} */ | ||||
|         this.utcDateModified = utcDateModified; | ||||
|  | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     init() { | ||||
|         if (this.branchId === 'root') { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         const childNote = this.childNote; | ||||
|         const parentNote = this.parentNote; | ||||
|  | ||||
|         if (!childNote.parents.includes(parentNote)) { | ||||
|             childNote.parents.push(parentNote); | ||||
|         } | ||||
|  | ||||
|         if (!childNote.parentBranches.includes(this)) { | ||||
|             childNote.parentBranches.push(this); | ||||
|         } | ||||
|  | ||||
|         if (!parentNote.children.includes(childNote)) { | ||||
|             parentNote.children.push(childNote); | ||||
|         } | ||||
|  | ||||
|         this.becca.branches[this.branchId] = this; | ||||
|         this.becca.childParentToBranch[`${this.noteId}-${this.parentNoteId}`] = this; | ||||
|     } | ||||
|  | ||||
|     /** @returns {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.addNote(this.noteId, new Note({noteId: this.noteId})); | ||||
|         } | ||||
|  | ||||
|         return this.becca.notes[this.noteId]; | ||||
|     } | ||||
|  | ||||
|     getNote() { | ||||
|         return this.childNote; | ||||
|     } | ||||
|  | ||||
|     /** @returns {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.addNote(this.parentNoteId, new Note({noteId: this.parentNoteId})); | ||||
|         } | ||||
|  | ||||
|         return this.becca.notes[this.parentNoteId]; | ||||
|     } | ||||
|  | ||||
|     get isDeleted() { | ||||
|         return !(this.branchId in this.becca.branches); | ||||
|     } | ||||
|  | ||||
|     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="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</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.7</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
| <script src="scripts/linenumber.js"> </script> | ||||
| </body> | ||||
| </html> | ||||
| @@ -2,7 +2,7 @@ | ||||
| <html lang="en"> | ||||
| <head> | ||||
|     <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/lang-css.js"> </script> | ||||
| @@ -17,7 +17,7 @@ | ||||
| 
 | ||||
| <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,13 +28,15 @@ | ||||
|         <article> | ||||
|             <pre class="prettyprint source linenums"><code>"use strict"; | ||||
| 
 | ||||
| const dateUtils = require('../../services/date_utils.js'); | ||||
| const AbstractEntity = require("./abstract_entity.js"); | ||||
| const dateUtils = require('../../services/date_utils'); | ||||
| const AbstractBeccaEntity = require("./abstract_becca_entity"); | ||||
| 
 | ||||
| /** | ||||
|  * RecentNote represents recently visited note. | ||||
|  * | ||||
|  * @extends AbstractBeccaEntity | ||||
|  */ | ||||
| class RecentNote extends AbstractEntity { | ||||
| class BRecentNote extends AbstractBeccaEntity { | ||||
|     static get entityName() { return "recent_notes"; } | ||||
|     static get primaryKeyName() { return "noteId"; } | ||||
| 
 | ||||
| @@ -58,7 +60,7 @@ class RecentNote extends AbstractEntity { | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| module.exports = RecentNote; | ||||
| module.exports = BRecentNote; | ||||
| </code></pre> | ||||
|         </article> | ||||
|     </section> | ||||
| @@ -69,13 +71,13 @@ module.exports = RecentNote; | ||||
| </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="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> | ||||
|     <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><h3>Global</h3><ul><li><a href="global.html#api">api</a></li></ul> | ||||
| </nav> | ||||
| 
 | ||||
| <br class="clear"> | ||||
| 
 | ||||
| <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> | ||||
| 
 | ||||
| <script> prettyPrint(); </script> | ||||
							
								
								
									
										259
									
								
								docs/backend_api/becca_entities_brevision.js.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										259
									
								
								docs/backend_api/becca_entities_brevision.js.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,259 @@ | ||||
| <!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) { | ||||
|         // cannot use SQL to filter by title since it can be encrypted | ||||
|         return this.getAttachments().filter(attachment => attachment.title === title)[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><h3>Global</h3><ul><li><a href="global.html#api">api</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,245 +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(); | ||||
|  | ||||
|         /** @type {string} */ | ||||
|         this.noteRevisionId = row.noteRevisionId; | ||||
|         /** @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.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 {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, | ||||
|             content: this.content, | ||||
|             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 = 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="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</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.7</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
| <script src="scripts/linenumber.js"> </script> | ||||
| </body> | ||||
| </html> | ||||
| @@ -94,6 +94,82 @@ | ||||
|      | ||||
|  | ||||
|      | ||||
|         <h3 class="subsection-title">Members</h3> | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="api"><span class="type-signature"></span>api<span class="type-signature"> :<a href="BackendScriptApi.html">BackendScriptApi</a></span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <div class="description"> | ||||
|     An instance of the frontend api available globally. | ||||
| </div> | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type"><a href="BackendScriptApi.html">BackendScriptApi</a></span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line32">line 32</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
| @@ -102,262 +178,30 @@ | ||||
|  | ||||
|          | ||||
|                  | ||||
| <h4 class="name" id="CreateNewNoteParams">CreateNewNoteParams</h4> | ||||
| <h4 class="name" id="AttributeType">AttributeType</h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <div class="description"> | ||||
|     There are currently only two types of attributes, labels or relations. | ||||
| </div> | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">object</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <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>parentNoteId</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">MANDATORY</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>title</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">MANDATORY</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>content</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">string</span> | ||||
| <span class="param-type">"label"</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">buffer</span> | ||||
| <span class="param-type">"relation"</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|              | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">MANDATORY</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>type</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">text, code, file, image, search, book, relation-map - MANDATORY</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>mime</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">value is derived from default mimes for type</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>isProtected</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">boolean</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">default is false</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>isExpanded</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">boolean</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">default is false</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>prefix</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">default is empty string</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>notePosition</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">int</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">default is last existing notePosition in a parent + 10</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|     </tbody> | ||||
| </table> | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -391,7 +235,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line208">line 208</a> | ||||
|         <a href="becca_entities_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line11">line 11</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -409,7 +253,7 @@ | ||||
|  | ||||
|              | ||||
|                  | ||||
| <h4 class="name" id="CreateNoteAttribute">CreateNoteAttribute</h4> | ||||
| <h4 class="name" id="NotePathRecord">NotePathRecord</h4> | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -420,7 +264,7 @@ | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">object</span> | ||||
| <span class="param-type">Object</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
| @@ -444,8 +288,6 @@ | ||||
|         <th>Type</th> | ||||
|  | ||||
|          | ||||
|         <th>Attributes</th> | ||||
|          | ||||
|  | ||||
|          | ||||
|  | ||||
| @@ -458,89 +300,92 @@ | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>type</code></td> | ||||
|                 <td class="name"><code>isArchived</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">string</span> | ||||
| <span class="param-type">boolean</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|                 <td class="attributes"> | ||||
|                  | ||||
|  | ||||
|                  | ||||
|                 </td> | ||||
|              | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">attribute type - label, relation etc.</td> | ||||
|             <td class="description last"></td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>name</code></td> | ||||
|                 <td class="name"><code>isInHoistedSubTree</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">string</span> | ||||
| <span class="param-type">boolean</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|                 <td class="attributes"> | ||||
|                  | ||||
|  | ||||
|                  | ||||
|                 </td> | ||||
|              | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">attribute name</td> | ||||
|             <td class="description last"></td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>value</code></td> | ||||
|                 <td class="name"><code>notePath</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">string</span> | ||||
| <span class="param-type">Array.<string></span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|                 <td class="attributes"> | ||||
|                  | ||||
|                     <optional><br> | ||||
|                  | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last"></td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>isHidden</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
|                 </td> | ||||
| <span class="param-type">boolean</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">attribute value</td> | ||||
|             <td class="description last"></td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
| @@ -579,7 +424,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line169">line 169</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line27">line 27</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -597,18 +442,66 @@ | ||||
|  | ||||
|              | ||||
|                  | ||||
| <h4 class="name" id="CreateNoteAttribute">CreateNoteAttribute</h4> | ||||
| <h4 class="name" id="NoteType">NoteType</h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <div class="description"> | ||||
|     There are many different Note types, some of which are entirely opaque to the | ||||
| end user. Those types should be used only for checking against, they are | ||||
| not for direct use. | ||||
| </div> | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">object</span> | ||||
| <span class="param-type">"file"</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">"image"</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">"search"</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">"noteMap"</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">"launcher"</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">"doc"</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">"contentWidget"</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">"text"</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">"relationMap"</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">"render"</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">"canvas"</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">"mermaid"</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">"book"</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">"webView"</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">"code"</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
| @@ -618,126 +511,6 @@ | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5 class="subsection-title">Properties:</h5> | ||||
|  | ||||
|      | ||||
|  | ||||
| <table class="props"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|          | ||||
|         <th>Name</th> | ||||
|          | ||||
|  | ||||
|         <th>Type</th> | ||||
|  | ||||
|          | ||||
|         <th>Attributes</th> | ||||
|          | ||||
|  | ||||
|          | ||||
|  | ||||
|         <th class="last">Description</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|  | ||||
|     <tbody> | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>type</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|                 <td class="attributes"> | ||||
|                  | ||||
|  | ||||
|                  | ||||
|                 </td> | ||||
|              | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">attribute type - label, relation etc.</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>name</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|                 <td class="attributes"> | ||||
|                  | ||||
|  | ||||
|                  | ||||
|                 </td> | ||||
|              | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">attribute name</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>value</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|                 <td class="attributes"> | ||||
|                  | ||||
|                     <optional><br> | ||||
|                  | ||||
|  | ||||
|                  | ||||
|                 </td> | ||||
|              | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">attribute value</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|     </tbody> | ||||
| </table> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
| @@ -767,7 +540,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line229">line 229</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line20">line 20</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -785,18 +558,22 @@ | ||||
|  | ||||
|              | ||||
|                  | ||||
| <h4 class="name" id="CreateNoteExtraOptions">CreateNoteExtraOptions</h4> | ||||
| <h4 class="name" id="int">int</h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <div class="description"> | ||||
|     A whole number | ||||
| </div> | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">object</span> | ||||
| <span class="param-type">number</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
| @@ -806,224 +583,6 @@ | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5 class="subsection-title">Properties:</h5> | ||||
|  | ||||
|      | ||||
|  | ||||
| <table class="props"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|          | ||||
|         <th>Name</th> | ||||
|          | ||||
|  | ||||
|         <th>Type</th> | ||||
|  | ||||
|          | ||||
|         <th>Attributes</th> | ||||
|          | ||||
|  | ||||
|          | ||||
|         <th>Default</th> | ||||
|          | ||||
|  | ||||
|         <th class="last">Description</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|  | ||||
|     <tbody> | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>json</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">boolean</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|                 <td class="attributes"> | ||||
|                  | ||||
|                     <optional><br> | ||||
|                  | ||||
|  | ||||
|                  | ||||
|                 </td> | ||||
|              | ||||
|  | ||||
|              | ||||
|                 <td class="default"> | ||||
|                  | ||||
|                     false | ||||
|                  | ||||
|                 </td> | ||||
|              | ||||
|  | ||||
|             <td class="description last">should the note be JSON</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>isProtected</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">boolean</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|                 <td class="attributes"> | ||||
|                  | ||||
|                     <optional><br> | ||||
|                  | ||||
|  | ||||
|                  | ||||
|                 </td> | ||||
|              | ||||
|  | ||||
|              | ||||
|                 <td class="default"> | ||||
|                  | ||||
|                     false | ||||
|                  | ||||
|                 </td> | ||||
|              | ||||
|  | ||||
|             <td class="description last">should the note be protected</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>type</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|                 <td class="attributes"> | ||||
|                  | ||||
|                     <optional><br> | ||||
|                  | ||||
|  | ||||
|                  | ||||
|                 </td> | ||||
|              | ||||
|  | ||||
|              | ||||
|                 <td class="default"> | ||||
|                  | ||||
|                     'text' | ||||
|                  | ||||
|                 </td> | ||||
|              | ||||
|  | ||||
|             <td class="description last">note type</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>mime</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|                 <td class="attributes"> | ||||
|                  | ||||
|                     <optional><br> | ||||
|                  | ||||
|  | ||||
|                  | ||||
|                 </td> | ||||
|              | ||||
|  | ||||
|              | ||||
|                 <td class="default"> | ||||
|                  | ||||
|                     'text/html' | ||||
|                  | ||||
|                 </td> | ||||
|              | ||||
|  | ||||
|             <td class="description last">MIME type of the note</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>attributes</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">Array.<<a href="global.html#CreateNoteAttribute">CreateNoteAttribute</a>></span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|                 <td class="attributes"> | ||||
|                  | ||||
|                     <optional><br> | ||||
|                  | ||||
|  | ||||
|                  | ||||
|                 </td> | ||||
|              | ||||
|  | ||||
|              | ||||
|                 <td class="default"> | ||||
|                  | ||||
|                     [] | ||||
|                  | ||||
|                 </td> | ||||
|              | ||||
|  | ||||
|             <td class="description last">attributes to be created for this note</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|     </tbody> | ||||
| </table> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
| @@ -1053,7 +612,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line236">line 236</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line27">line 27</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1083,13 +642,13 @@ | ||||
| </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="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> | ||||
|     <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><h3>Global</h3><ul><li><a href="global.html#api">api</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <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> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -50,13 +50,13 @@ | ||||
| </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="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> | ||||
|     <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><h3>Global</h3><ul><li><a href="global.html#api">api</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <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> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -28,8 +28,6 @@ | ||||
|  | ||||
| <header> | ||||
|      | ||||
|          | ||||
|      | ||||
| </header> | ||||
|  | ||||
| <article> | ||||
| @@ -38,6 +36,50 @@ | ||||
|          | ||||
|  | ||||
|          | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line3">line 3</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|          | ||||
|      | ||||
|     </div> | ||||
|  | ||||
| @@ -208,7 +250,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line352">line 352</a> | ||||
|         <a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line377">line 377</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -388,7 +430,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line343">line 343</a> | ||||
|         <a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line368">line 368</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -590,7 +632,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line333">line 333</a> | ||||
|         <a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line358">line 358</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -792,7 +834,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line309">line 309</a> | ||||
|         <a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line334">line 334</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -994,7 +1036,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line320">line 320</a> | ||||
|         <a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line345">line 345</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1196,7 +1238,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line299">line 299</a> | ||||
|         <a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line324">line 324</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1252,13 +1294,13 @@ | ||||
| </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="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> | ||||
|     <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><h3>Global</h3><ul><li><a href="global.html#api">api</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <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> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -42,37 +42,71 @@ const appInfo = require('./app_info'); | ||||
| const searchService = require('./search/services/search'); | ||||
| const SearchContext = require("./search/search_context"); | ||||
| const becca = require("../becca/becca"); | ||||
| const ws = require("./ws"); | ||||
| const SpacedUpdate = require("./spaced_update"); | ||||
| const specialNotesService = require("./special_notes"); | ||||
| const branchService = require("./branches"); | ||||
| const exportService = require("./export/zip"); | ||||
| const syncMutex = require("./sync_mutex"); | ||||
| const backupService = require("./backup"); | ||||
| const optionsService = require("./options"); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * This is the main backend API interface for scripts. It's published in the local "api" object. | ||||
|  * A whole number | ||||
|  * @typedef {number} int | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * An instance of the frontend api available globally. | ||||
|  * @global | ||||
|  * @var {BackendScriptApi} api | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * <p>This is the main backend API interface for scripts. All the properties and methods are published in the "api" object | ||||
|  * available in the JS backend notes. You can use e.g. <code>api.log(api.startNote.title);</code></p> | ||||
|  * | ||||
|  * @constructor | ||||
|  * @hideconstructor | ||||
|  */ | ||||
| function BackendScriptApi(currentNote, apiParams) { | ||||
|     /** @property {Note} note where script started executing */ | ||||
|     /** | ||||
|      * Note where the script started executing | ||||
|      * @type {BNote} | ||||
|      */ | ||||
|     this.startNote = apiParams.startNote; | ||||
|     /** @property {Note} note where script is currently executing. Don't mix this up with concept of active note */ | ||||
|     /** | ||||
|      * Note where the script is currently executing. Don't mix this up with the concept of active note | ||||
|      * @type {BNote} | ||||
|      */ | ||||
|     this.currentNote = currentNote; | ||||
|     /** @property {Entity} entity whose event triggered this executions */ | ||||
|     /** | ||||
|      * Entity whose event triggered this execution | ||||
|      * @type {AbstractBeccaEntity} | ||||
|      */ | ||||
|     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 */ | ||||
|     /** | ||||
|      * Axios library for HTTP requests. See {@link https://axios-http.com} for documentation | ||||
|      * @type {axios} | ||||
|      * @deprecated use native (browser compatible) fetch() instead | ||||
|      */ | ||||
|     this.axios = axios; | ||||
|     /** @property {dayjs} day.js library for date manipulation. See https://day.js.org/ for documentation */ | ||||
|     /** | ||||
|      * day.js library for date manipulation. See {@link https://day.js.org} for documentation | ||||
|      * @type {dayjs} | ||||
|      */ | ||||
|     this.dayjs = dayjs; | ||||
|     /** @property {axios} xml2js library for XML parsing. See https://github.com/Leonidas-from-XIV/node-xml2js for documentation */ | ||||
|     /** | ||||
|      * xml2js library for XML parsing. See {@link https://github.com/Leonidas-from-XIV/node-xml2js} for documentation | ||||
|      * @type {xml2js} | ||||
|      */ | ||||
|     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. | ||||
| @@ -84,32 +118,79 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|     /** | ||||
|      * @method | ||||
|      * @param {string} noteId | ||||
|      * @returns {Note|null} | ||||
|      * @returns {BNote|null} | ||||
|      */ | ||||
|     this.getNote = noteId => becca.getNote(noteId); | ||||
|  | ||||
|     /** | ||||
|      * @method | ||||
|      * @param {string} branchId | ||||
|      * @returns {Branch|null} | ||||
|      * @returns {BBranch|null} | ||||
|      */ | ||||
|     this.getBranch = branchId => becca.getBranch(branchId); | ||||
|  | ||||
|     /** | ||||
|      * @method | ||||
|      * @param {string} attributeId | ||||
|      * @returns {Attribute|null} | ||||
|      * @returns {BAttribute|null} | ||||
|      */ | ||||
|     this.getAttribute = attributeId => becca.getAttribute(attributeId); | ||||
|  | ||||
|     /** | ||||
|      * @method | ||||
|      * @param {string} attachmentId | ||||
|      * @returns {BAttachment|null} | ||||
|      */ | ||||
|     this.getAttachment = attachmentId => becca.getAttachment(attachmentId); | ||||
|  | ||||
|     /** | ||||
|      * @method | ||||
|      * @param {string} revisionId | ||||
|      * @returns {BRevision|null} | ||||
|      */ | ||||
|     this.getRevision = revisionId => becca.getRevision(revisionId); | ||||
|  | ||||
|     /** | ||||
|      * @method | ||||
|      * @param {string} etapiTokenId | ||||
|      * @returns {BEtapiToken|null} | ||||
|      */ | ||||
|     this.getEtapiToken = etapiTokenId => becca.getEtapiToken(etapiTokenId); | ||||
|  | ||||
|     /** | ||||
|      * @method | ||||
|      * @returns {BEtapiToken[]} | ||||
|      */ | ||||
|     this.getEtapiTokens = () => becca.getEtapiTokens(); | ||||
|  | ||||
|     /** | ||||
|      * @method | ||||
|      * @param {string} optionName | ||||
|      * @returns {BOption|null} | ||||
|      */ | ||||
|     this.getOption = optionName => becca.getOption(optionName); | ||||
|  | ||||
|     /** | ||||
|      * @method | ||||
|      * @returns {BOption[]} | ||||
|      */ | ||||
|     this.getOptions = () => optionsService.getOptions(); | ||||
|  | ||||
|     /** | ||||
|      * @method | ||||
|      * @param {string} attributeId | ||||
|      * @returns {BAttribute|null} | ||||
|      */ | ||||
|     this.getAttribute = attributeId => becca.getAttribute(attributeId); | ||||
|  | ||||
|     /** | ||||
|      * 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 | ||||
|      * "#dateModified =* MONTH AND #log". See {@link https://github.com/zadam/trilium/wiki/Search} for full documentation for all options | ||||
|      * | ||||
|      * @method | ||||
|      * @param {string} query | ||||
|      * @param {Object} [searchParams] | ||||
|      * @returns {Note[]} | ||||
|      * @returns {BNote[]} | ||||
|      */ | ||||
|     this.searchForNotes = (query, searchParams = {}) => { | ||||
|         if (searchParams.includeArchivedNotes === undefined) { | ||||
| @@ -128,12 +209,12 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|  | ||||
|     /** | ||||
|      * 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 | ||||
|      * "#dateModified =* MONTH AND #log". See {@link https://github.com/zadam/trilium/wiki/Search} for full documentation for all options | ||||
|      * | ||||
|      * @method | ||||
|      * @param {string} query | ||||
|      * @param {Object} [searchParams] | ||||
|      * @returns {Note|null} | ||||
|      * @returns {BNote|null} | ||||
|      */ | ||||
|     this.searchForNote = (query, searchParams = {}) => { | ||||
|         const notes = this.searchForNotes(query, searchParams); | ||||
| @@ -147,7 +228,7 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|      * @method | ||||
|      * @param {string} name - attribute name | ||||
|      * @param {string} [value] - attribute value | ||||
|      * @returns {Note[]} | ||||
|      * @returns {BNote[]} | ||||
|      */ | ||||
|     this.getNotesWithLabel = attributeService.getNotesWithLabel; | ||||
|  | ||||
| @@ -157,23 +238,23 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|      * @method | ||||
|      * @param {string} name - attribute name | ||||
|      * @param {string} [value] - attribute value | ||||
|      * @returns {Note|null} | ||||
|      * @returns {BNote|null} | ||||
|      */ | ||||
|     this.getNoteWithLabel = attributeService.getNoteWithLabel; | ||||
|  | ||||
|     /** | ||||
|      * If there's no branch between note and parent note, create one. Otherwise do nothing. | ||||
|      * If there's no branch between note and parent note, create one. Otherwise, do nothing. Returns the new or existing branch. | ||||
|      * | ||||
|      * @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} | ||||
|      * @param {string} prefix - if branch is created between note and parent note, set this prefix | ||||
|      * @returns {{branch: BBranch|null}} | ||||
|      */ | ||||
|     this.ensureNoteIsPresentInParent = cloningService.ensureNoteIsPresentInParent; | ||||
|  | ||||
|     /** | ||||
|      * If there's a branch between note and parent note, remove it. Otherwise do nothing. | ||||
|      * If there's a branch between note and parent note, remove it. Otherwise, do nothing. | ||||
|      * | ||||
|      * @method | ||||
|      * @param {string} noteId | ||||
| @@ -189,25 +270,19 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|      * @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 | ||||
|      * @param {string} prefix - if branch is created 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. | ||||
|      * | ||||
|      * @method | ||||
|      * @param {string} parentNoteId | ||||
|      * @param {string} title | ||||
|      * @param {string} content | ||||
|      * @return {{note: Note, branch: Branch}} - object having "note" and "branch" keys representing respective objects | ||||
|      * @returns {{note: BNote, branch: BBranch}} - object having "note" and "branch" keys representing respective objects | ||||
|      */ | ||||
|     this.createTextNote = (parentNoteId, title, content = '') => noteService.createNewNote({ | ||||
|         parentNoteId, | ||||
| @@ -220,10 +295,11 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|      * 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. | ||||
|      * | ||||
|      * @method | ||||
|      * @param {string} parentNoteId | ||||
|      * @param {string} title | ||||
|      * @param {object} content | ||||
|      * @return {{note: Note, branch: Branch}} object having "note" and "branch" keys representing respective objects | ||||
|      * @returns {{note: BNote, branch: BBranch}} object having "note" and "branch" keys representing respective objects | ||||
|      */ | ||||
|     this.createDataNote = (parentNoteId, title, content = {}) => noteService.createNewNote({ | ||||
|         parentNoteId, | ||||
| @@ -233,43 +309,23 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|         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 | ||||
|      * @param {object} params | ||||
|      * @param {string} params.parentNoteId | ||||
|      * @param {string} params.title | ||||
|      * @param {string|Buffer} params.content | ||||
|      * @param {NoteType} params.type - text, code, file, image, search, book, relationMap, canvas | ||||
|      * @param {string} [params.mime] - value is derived from default mimes for type | ||||
|      * @param {boolean} [params.isProtected=false] | ||||
|      * @param {boolean} [params.isExpanded=false] | ||||
|      * @param {string} [params.prefix=''] | ||||
|      * @param {int} [params.notePosition] - default is last existing notePosition in a parent + 10 | ||||
|      * @returns {{note: BNote, branch: BBranch}} 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 | ||||
| @@ -277,8 +333,16 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|      * @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 | ||||
|      * @param {object} [extraOptions={}] | ||||
|      * @param {boolean} [extraOptions.json=false] - should the note be JSON | ||||
|      * @param {boolean} [extraOptions.isProtected=false] - should the note be protected | ||||
|      * @param {string} [extraOptions.type='text'] - note type | ||||
|      * @param {string} [extraOptions.mime='text/html'] - MIME type of the note | ||||
|      * @param {object[]} [extraOptions.attributes=[]] - attributes to be created for this note | ||||
|      * @param {AttributeType} extraOptions.attributes.type - attribute type - label, relation etc. | ||||
|      * @param {string} extraOptions.attributes.name - attribute name | ||||
|      * @param {string} [extraOptions.attributes.value] - attribute value | ||||
|      * @returns {{note: BNote, branch: BBranch}} object contains newly created entities note and branch | ||||
|      */ | ||||
|     this.createNote = (parentNoteId, title, content = "", extraOptions= {}) => { | ||||
|         extraOptions.parentNoteId = parentNoteId; | ||||
| @@ -286,7 +350,7 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|  | ||||
|         const parentNote = becca.getNote(parentNoteId); | ||||
|  | ||||
|         // code note type can be inherited, otherwise text is default | ||||
|         // code note type can be inherited, otherwise "text" is the default | ||||
|         extraOptions.type = parentNote.type === 'code' ? 'code' : 'text'; | ||||
|         extraOptions.mime = parentNote.type === 'code' ? parentNote.mime : 'text/html'; | ||||
|  | ||||
| @@ -316,18 +380,42 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|         }); | ||||
|     }; | ||||
|  | ||||
|     this.logMessages = {}; | ||||
|     this.logSpacedUpdates = {}; | ||||
|  | ||||
|     /** | ||||
|      * Log given message to trilium logs. | ||||
|      * Log given message to trilium logs and log pane in UI | ||||
|      * | ||||
|      * @method | ||||
|      * @param message | ||||
|      * @returns {void} | ||||
|      */ | ||||
|     this.log = message => log.info(`Script "${currentNote.title}" (${currentNote.noteId}): ${message}`); | ||||
|     this.log = message => { | ||||
|         log.info(message); | ||||
|  | ||||
|         const {noteId} = this.startNote; | ||||
|  | ||||
|         this.logMessages[noteId] = this.logMessages[noteId] || []; | ||||
|         this.logSpacedUpdates[noteId] = this.logSpacedUpdates[noteId] || new SpacedUpdate(() => { | ||||
|             const messages = this.logMessages[noteId]; | ||||
|             this.logMessages[noteId] = []; | ||||
|  | ||||
|             ws.sendMessageToAllClients({ | ||||
|                 type: 'api-log-messages', | ||||
|                 noteId, | ||||
|                 messages | ||||
|             }); | ||||
|         }, 100); | ||||
|  | ||||
|         this.logMessages[noteId].push(message); | ||||
|         this.logSpacedUpdates[noteId].scheduleUpdate(); | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * Returns root note of the calendar. | ||||
|      * | ||||
|      * @method | ||||
|      * @returns {Note|null} | ||||
|      * @returns {BNote|null} | ||||
|      */ | ||||
|     this.getRootCalendarNote = dateNoteService.getRootCalendarNote; | ||||
|  | ||||
| @@ -336,15 +424,17 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|      * | ||||
|      * @method | ||||
|      * @param {string} date in YYYY-MM-DD format | ||||
|      * @returns {Note|null} | ||||
|      * @param {BNote} [rootNote] - specify calendar root note, normally leave empty to use the default calendar | ||||
|      * @returns {BNote|null} | ||||
|      */ | ||||
|     this.getDateNote = dateNoteService.getDateNote; | ||||
|     this.getDayNote = dateNoteService.getDayNote; | ||||
|  | ||||
|     /** | ||||
|      * Returns today's day note. If such note doesn't exist, it is created. | ||||
|      * | ||||
|      * @method | ||||
|      * @returns {Note|null} | ||||
|      * @param {BNote} [rootNote] - specify calendar root note, normally leave empty to use the default calendar | ||||
|      * @returns {BNote|null} | ||||
|      */ | ||||
|     this.getTodayNote = dateNoteService.getTodayNote; | ||||
|  | ||||
| @@ -353,34 +443,51 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|      * | ||||
|      * @method | ||||
|      * @param {string} date in YYYY-MM-DD format | ||||
|      * @param {object} options - "startOfTheWeek" - either "monday" (default) or "sunday" | ||||
|      * @returns {Note|null} | ||||
|      * @param {object} [options] | ||||
|      * @param {string} [options.startOfTheWeek=monday] - either "monday" (default) or "sunday" | ||||
|      * @param {BNote} [rootNote] - specify calendar root note, normally leave empty to use the default calendar | ||||
|      * @returns {BNote|null} | ||||
|      */ | ||||
|     this.getWeekNote = dateNoteService.getWeekNote; | ||||
|  | ||||
|     /** | ||||
|      * Returns month note for given date. If such note doesn't exist, it is created. | ||||
|      * Returns month note for given date. If such a note doesn't exist, it is created. | ||||
|      * | ||||
|      * @method | ||||
|      * @param {string} date in YYYY-MM format | ||||
|      * @returns {Note|null} | ||||
|      * @param {BNote} [rootNote] - specify calendar root note, normally leave empty to use the default calendar | ||||
|      * @returns {BNote|null} | ||||
|      */ | ||||
|     this.getMonthNote = dateNoteService.getMonthNote; | ||||
|  | ||||
|     /** | ||||
|      * Returns year note for given year. If such note doesn't exist, it is created. | ||||
|      * Returns year note for given year. If such a note doesn't exist, it is created. | ||||
|      * | ||||
|      * @method | ||||
|      * @param {string} year in YYYY format | ||||
|      * @returns {Note|null} | ||||
|      * @param {BNote} [rootNote] - specify calendar root note, normally leave empty to use the default calendar | ||||
|      * @returns {BNote|null} | ||||
|      */ | ||||
|     this.getYearNote = dateNoteService.getYearNote; | ||||
|  | ||||
|     /** | ||||
|      * Sort child notes of a given note. | ||||
|      * | ||||
|      * @method | ||||
|      * @param {string} parentNoteId - this note's child notes will be sorted | ||||
|      * @param {object} [sortConfig] | ||||
|      * @param {string} [sortConfig.sortBy=title] - 'title', 'dateCreated', 'dateModified' or a label name | ||||
|      *                                See {@link https://github.com/zadam/trilium/wiki/Sorting} for details. | ||||
|      * @param {boolean} [sortConfig.reverse=false] | ||||
|      * @param {boolean} [sortConfig.foldersFirst=false] | ||||
|      * @returns {void} | ||||
|      */ | ||||
|     this.sortNotesByTitle = parentNoteId => treeService.sortNotes(parentNoteId); | ||||
|     this.sortNotes = (parentNoteId, sortConfig = {}) => treeService.sortNotes( | ||||
|         parentNoteId, | ||||
|         sortConfig.sortBy || "title", | ||||
|         !!sortConfig.reverse, | ||||
|         !!sortConfig.foldersFirst | ||||
|     ); | ||||
|  | ||||
|     /** | ||||
|      * This method finds note by its noteId and prefix and either sets it to the given parentNoteId | ||||
| @@ -389,10 +496,11 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|      * 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 | ||||
|      * @deprecated this method is pretty confusing and serves specialized purpose only | ||||
|      * @param {string} noteId | ||||
|      * @param {string} prefix | ||||
|      * @param {string|null} parentNoteId | ||||
|      * @returns {void} | ||||
|      */ | ||||
|     this.setNoteToParent = treeService.setNoteToParent; | ||||
|  | ||||
| @@ -402,7 +510,7 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|      * | ||||
|      * @method | ||||
|      * @param {function} func | ||||
|      * @returns {?} result of func callback | ||||
|      * @returns {any} result of func callback | ||||
|      */ | ||||
|     this.transactional = sql.transactional; | ||||
|  | ||||
| @@ -410,7 +518,7 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|      * Return randomly generated string of given length. This random string generation is NOT cryptographically secure. | ||||
|      * | ||||
|      * @method | ||||
|      * @param {number} length of the string | ||||
|      * @param {int} length of the string | ||||
|      * @returns {string} random string | ||||
|      */ | ||||
|     this.randomString = utils.randomString; | ||||
| @@ -430,20 +538,175 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|     this.unescapeHtml = utils.unescapeHtml; | ||||
|  | ||||
|     /** | ||||
|      * @property {module:sql} sql | ||||
|      * sql | ||||
|      * @type {module:sql} | ||||
|      */ | ||||
|     this.sql = sql; | ||||
|  | ||||
|     /** | ||||
|      * @method | ||||
|      * @deprecated - this is now no-op since all the changes should be gracefully handled per widget | ||||
|      * @returns {{syncVersion, appVersion, buildRevision, dbVersion, dataDirectory, buildDate}|*} - object representing basic info about running Trilium version | ||||
|      */ | ||||
|     this.refreshTree = () => {}; | ||||
|     this.getAppInfo = () => appInfo; | ||||
|  | ||||
|     /** | ||||
|      * @return {{syncVersion, appVersion, buildRevision, dbVersion, dataDirectory, buildDate}|*} - object representing basic info about running Trilium version | ||||
|      * Creates a new launcher to the launchbar. If the launcher (id) already exists, it will be updated. | ||||
|      * | ||||
|      * @method | ||||
|      * @param {object} opts | ||||
|      * @param {string} opts.id - id of the launcher, only alphanumeric at least 6 characters long | ||||
|      * @param {"note" | "script" | "customWidget"} opts.type - one of | ||||
|      *                          * "note" - activating the launcher will navigate to the target note (specified in targetNoteId param) | ||||
|      *                          * "script" -  activating the launcher will execute the script (specified in scriptNoteId param) | ||||
|      *                          * "customWidget" - the launcher will be rendered with a custom widget (specified in widgetNoteId param) | ||||
|      * @param {string} opts.title | ||||
|      * @param {boolean} [opts.isVisible=false] - if true, will be created in the "Visible launchers", otherwise in "Available launchers" | ||||
|      * @param {string} [opts.icon] - name of the boxicon to be used (e.g. "bx-time") | ||||
|      * @param {string} [opts.keyboardShortcut] - will activate the target note/script upon pressing, e.g. "ctrl+e" | ||||
|      * @param {string} [opts.targetNoteId] - for type "note" | ||||
|      * @param {string} [opts.scriptNoteId] - for type "script" | ||||
|      * @param {string} [opts.widgetNoteId] - for type "customWidget" | ||||
|      * @returns {{note: BNote}} | ||||
|      */ | ||||
|     this.getAppInfo = () => appInfo | ||||
|     this.createOrUpdateLauncher = opts => { | ||||
|         if (!opts.id) { throw new Error("ID is a mandatory parameter for api.createOrUpdateLauncher(opts)"); } | ||||
|         if (!opts.id.match(/[a-z0-9]{6,1000}/i)) { throw new Error(`ID must be an alphanumeric string at least 6 characters long.`); } | ||||
|         if (!opts.type) { throw new Error("Launcher Type is a mandatory parameter for api.createOrUpdateLauncher(opts)"); } | ||||
|         if (!["note", "script", "customWidget"].includes(opts.type)) { throw new Error(`Given launcher type '${opts.type}'`); } | ||||
|         if (!opts.title?.trim()) { throw new Error("Title is a mandatory parameter for api.createOrUpdateLauncher(opts)"); } | ||||
|         if (opts.type === 'note' && !opts.targetNoteId) { throw new Error("targetNoteId is mandatory for launchers of type 'note'"); } | ||||
|         if (opts.type === 'script' && !opts.scriptNoteId) { throw new Error("scriptNoteId is mandatory for launchers of type 'script'"); } | ||||
|         if (opts.type === 'customWidget' && !opts.widgetNoteId) { throw new Error("widgetNoteId is mandatory for launchers of type 'customWidget'"); } | ||||
|  | ||||
|         const parentNoteId = opts.isVisible ? '_lbVisibleLaunchers' : '_lbAvailableLaunchers'; | ||||
|         const noteId = 'al_' + opts.id; | ||||
|  | ||||
|         const launcherNote = | ||||
|             becca.getNote(noteId) || | ||||
|             specialNotesService.createLauncher({ | ||||
|                 noteId: noteId, | ||||
|                 parentNoteId: parentNoteId, | ||||
|                 launcherType: opts.type, | ||||
|             }).note; | ||||
|  | ||||
|         if (launcherNote.title !== opts.title) { | ||||
|             launcherNote.title = opts.title; | ||||
|             launcherNote.save(); | ||||
|         } | ||||
|  | ||||
|         if (launcherNote.getParentBranches().length === 1) { | ||||
|             const branch = launcherNote.getParentBranches()[0]; | ||||
|  | ||||
|             if (branch.parentNoteId !== parentNoteId) { | ||||
|                 branchService.moveBranchToNote(branch, parentNoteId); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         if (opts.type === 'note') { | ||||
|             launcherNote.setRelation('target', opts.targetNoteId); | ||||
|         } else if (opts.type === 'script') { | ||||
|             launcherNote.setRelation('script', opts.scriptNoteId); | ||||
|         } else if (opts.type === 'customWidget') { | ||||
|             launcherNote.setRelation('widget', opts.widgetNoteId); | ||||
|         } else { | ||||
|             throw new Error(`Unrecognized launcher type '${opts.type}'`); | ||||
|         } | ||||
|  | ||||
|         if (opts.keyboardShortcut) { | ||||
|             launcherNote.setLabel('keyboardShortcut', opts.keyboardShortcut); | ||||
|         } else { | ||||
|             launcherNote.removeLabel('keyboardShortcut'); | ||||
|         } | ||||
|  | ||||
|         if (opts.icon) { | ||||
|             launcherNote.setLabel('iconClass', `bx ${opts.icon}`); | ||||
|         } else { | ||||
|             launcherNote.removeLabel('iconClass'); | ||||
|         } | ||||
|  | ||||
|         return {note: launcherNote}; | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * @method | ||||
|      * @param {string} noteId | ||||
|      * @param {string} format - either 'html' or 'markdown' | ||||
|      * @param {string} zipFilePath | ||||
|      * @returns {Promise<void>} | ||||
|      */ | ||||
|     this.exportSubtreeToZipFile = async (noteId, format, zipFilePath) => await exportService.exportToZipFile(noteId, format, zipFilePath); | ||||
|  | ||||
|     /** | ||||
|      * Executes given anonymous function on the frontend(s). | ||||
|      * Internally, this serializes the anonymous function into string and sends it to frontend(s) via WebSocket. | ||||
|      * Note that there can be multiple connected frontend instances (e.g. in different tabs). In such case, all | ||||
|      * instances execute the given function. | ||||
|      * | ||||
|      * @method | ||||
|      * @param {string} script - script to be executed on the frontend | ||||
|      * @param {Array.<?>} params - list of parameters to the anonymous function to be sent to frontend | ||||
|      * @returns {undefined} - no return value is provided. | ||||
|      */ | ||||
|     this.runOnFrontend = async (script, params = []) => { | ||||
|         if (typeof script === "function") { | ||||
|             script = script.toString(); | ||||
|         } | ||||
|  | ||||
|         ws.sendMessageToAllClients({ | ||||
|             type: 'execute-script', | ||||
|             script: script, | ||||
|             params: prepareParams(params), | ||||
|             startNoteId: this.startNote.noteId, | ||||
|             currentNoteId: this.currentNote.noteId, | ||||
|             originEntityName: "notes", // currently there's no other entity on the frontend which can trigger event | ||||
|             originEntityId: this.originEntity?.noteId || null | ||||
|         }); | ||||
|  | ||||
|         function prepareParams(params) { | ||||
|             if (!params) { | ||||
|                 return params; | ||||
|             } | ||||
|  | ||||
|             return params.map(p => { | ||||
|                 if (typeof p === "function") { | ||||
|                     return `!@#Function: ${p.toString()}`; | ||||
|                 } | ||||
|                 else { | ||||
|                     return p; | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * Sync process can make data intermittently inconsistent. Scripts which require strong data consistency | ||||
|      * can use this function to wait for a possible sync process to finish and prevent new sync process from starting | ||||
|      * while it is running. | ||||
|      * | ||||
|      * Because this is an async process, the inner callback doesn't have automatic transaction handling, so in case | ||||
|      * you need to make some DB changes, you need to surround your call with api.transactional(...) | ||||
|      * | ||||
|      * @method | ||||
|      * @param {function} callback - function to be executed while sync process is not running | ||||
|      * @returns {Promise} - resolves once the callback is finished (callback is awaited) | ||||
|      */ | ||||
|     this.runOutsideOfSync = syncMutex.doExclusively; | ||||
|  | ||||
|     /** | ||||
|      * @method | ||||
|      * @param {string} backupName - If the backupName is e.g. "now", then the backup will be written to "backup-now.db" file | ||||
|      * @returns {Promise} - resolves once the backup is finished | ||||
|      */ | ||||
|     this.backupNow = backupService.backupNow; | ||||
|  | ||||
|     /** | ||||
|      * This object contains "at your risk" and "no BC guarantees" objects for advanced use cases. | ||||
|      * | ||||
|      * @property {Becca} becca - provides access to the backend in-memory object graph, see {@link https://github.com/zadam/trilium/blob/master/src/becca/becca.js} | ||||
|      */ | ||||
|     this.__private = { | ||||
|         becca | ||||
|     } | ||||
| } | ||||
|  | ||||
| module.exports = BackendScriptApi; | ||||
| @@ -457,13 +720,13 @@ module.exports = BackendScriptApi; | ||||
| </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="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> | ||||
|     <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><h3>Global</h3><ul><li><a href="global.html#api">api</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <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> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -36,10 +36,13 @@ const log = require('./log'); | ||||
| const Database = require('better-sqlite3'); | ||||
| const dataDir = require('./data_dir'); | ||||
| const cls = require('./cls'); | ||||
| const fs = require("fs-extra"); | ||||
|  | ||||
| const dbConnection = new Database(dataDir.DOCUMENT_PATH); | ||||
| dbConnection.pragma('journal_mode = WAL'); | ||||
|  | ||||
| const LOG_ALL_QUERIES = false; | ||||
|  | ||||
| [`exit`, `SIGINT`, `SIGUSR1`, `SIGUSR2`, `SIGTERM`].forEach(eventType => { | ||||
|     process.on(eventType, () => { | ||||
|         if (dbConnection) { | ||||
| @@ -51,16 +54,22 @@ dbConnection.pragma('journal_mode = WAL'); | ||||
| }); | ||||
|  | ||||
| function insert(tableName, rec, replace = false) { | ||||
|     const keys = Object.keys(rec); | ||||
|     const keys = Object.keys(rec || {}); | ||||
|     if (keys.length === 0) { | ||||
|         log.error("Can't insert empty object into table " + tableName); | ||||
|         log.error(`Can't insert empty object into table ${tableName}`); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     const columns = keys.join(", "); | ||||
|     const questionMarks = keys.map(p => "?").join(", "); | ||||
|  | ||||
|     const query = "INSERT " + (replace ? "OR REPLACE" : "") + " INTO " + tableName + "(" + columns + ") VALUES (" + questionMarks + ")"; | ||||
|     const query = `INSERT | ||||
|     ${replace ? "OR REPLACE" : ""} INTO | ||||
|     ${tableName} | ||||
|     ( | ||||
|     ${columns} | ||||
|     ) | ||||
|     VALUES (${questionMarks})`; | ||||
|  | ||||
|     const res = execute(query, Object.values(rec)); | ||||
|  | ||||
| @@ -72,15 +81,15 @@ function replace(tableName, rec) { | ||||
| } | ||||
|  | ||||
| function upsert(tableName, primaryKey, rec) { | ||||
|     const keys = Object.keys(rec); | ||||
|     const keys = Object.keys(rec || {}); | ||||
|     if (keys.length === 0) { | ||||
|         log.error("Can't upsert empty object into table " + tableName); | ||||
|         log.error(`Can't upsert empty object into table ${tableName}`); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     const columns = keys.join(", "); | ||||
|  | ||||
|     const questionMarks = keys.map(colName => "@" + colName).join(", "); | ||||
|     const questionMarks = keys.map(colName => `@${colName}`).join(", "); | ||||
|  | ||||
|     const updateMarks = keys.map(colName => `${colName} = @${colName}`).join(", "); | ||||
|  | ||||
| @@ -117,13 +126,7 @@ function getRowOrNull(query, params = []) { | ||||
| } | ||||
|  | ||||
| function getValue(query, params = []) { | ||||
|     const row = getRowOrNull(query, params); | ||||
|  | ||||
|     if (!row) { | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     return row[Object.keys(row)[0]]; | ||||
|     return wrap(query, s => s.pluck().get(params)); | ||||
| } | ||||
|  | ||||
| // smaller values can result in better performance due to better usage of statement cache | ||||
| @@ -167,48 +170,37 @@ function getRawRows(query, params = []) { | ||||
| } | ||||
|  | ||||
| function iterateRows(query, params = []) { | ||||
|     if (LOG_ALL_QUERIES) { | ||||
|         console.log(query); | ||||
|     } | ||||
|  | ||||
|     return stmt(query).iterate(params); | ||||
| } | ||||
|  | ||||
| function getMap(query, params = []) { | ||||
|     const map = {}; | ||||
|     const results = getRows(query, params); | ||||
|     const results = getRawRows(query, params); | ||||
|  | ||||
|     for (const row of results) { | ||||
|         const keys = Object.keys(row); | ||||
|  | ||||
|         map[row[keys[0]]] = row[keys[1]]; | ||||
|         map[row[0]] = row[1]; | ||||
|     } | ||||
|  | ||||
|     return map; | ||||
| } | ||||
|  | ||||
| function getColumn(query, params = []) { | ||||
|     const list = []; | ||||
|     const result = getRows(query, params); | ||||
|  | ||||
|     if (result.length === 0) { | ||||
|         return list; | ||||
|     } | ||||
|  | ||||
|     const key = Object.keys(result[0])[0]; | ||||
|  | ||||
|     for (const row of result) { | ||||
|         list.push(row[key]); | ||||
|     } | ||||
|  | ||||
|     return list; | ||||
|     return wrap(query, s => s.pluck().all(params)); | ||||
| } | ||||
|  | ||||
| function execute(query, params = []) { | ||||
|     return wrap(query, s => s.run(params)); | ||||
| } | ||||
|  | ||||
| function executeWithoutTransaction(query, params = []) { | ||||
|     dbConnection.run(query, params); | ||||
| } | ||||
|  | ||||
| function executeMany(query, params) { | ||||
|     if (LOG_ALL_QUERIES) { | ||||
|         console.log(query); | ||||
|     } | ||||
|  | ||||
|     while (params.length > 0) { | ||||
|         const curParams = params.slice(0, Math.min(params.length, PARAM_LIMIT)); | ||||
|         params = params.slice(curParams.length); | ||||
| @@ -229,6 +221,10 @@ function executeMany(query, params) { | ||||
| } | ||||
|  | ||||
| function executeScript(query) { | ||||
|     if (LOG_ALL_QUERIES) { | ||||
|         console.log(query); | ||||
|     } | ||||
|  | ||||
|     return dbConnection.exec(query); | ||||
| } | ||||
|  | ||||
| @@ -236,6 +232,10 @@ function wrap(query, func) { | ||||
|     const startTimestamp = Date.now(); | ||||
|     let result; | ||||
|  | ||||
|     if (LOG_ALL_QUERIES) { | ||||
|         console.log(query); | ||||
|     } | ||||
|  | ||||
|     try { | ||||
|         result = func(stmt(query)); | ||||
|     } | ||||
| @@ -245,7 +245,7 @@ function wrap(query, func) { | ||||
|             // in these cases error should be simply ignored. | ||||
|             console.log(e.message); | ||||
|  | ||||
|             return null | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
|         throw e; | ||||
| @@ -253,7 +253,7 @@ function wrap(query, func) { | ||||
|  | ||||
|     const milliseconds = Date.now() - startTimestamp; | ||||
|  | ||||
|     if (milliseconds >= 20) { | ||||
|     if (milliseconds >= 20 && !cls.isSlowQueryLoggingDisabled()) { | ||||
|         if (query.includes("WITH RECURSIVE")) { | ||||
|             log.info(`Slow recursive query took ${milliseconds}ms.`); | ||||
|         } | ||||
| @@ -276,14 +276,17 @@ function transactional(func) { | ||||
|         return ret; | ||||
|     } | ||||
|     catch (e) { | ||||
|         const entityChanges = cls.getAndClearEntityChangeIds(); | ||||
|         const entityChangeIds = cls.getAndClearEntityChangeIds(); | ||||
|  | ||||
|         if (entityChanges.length > 0) { | ||||
|         if (entityChangeIds.length > 0) { | ||||
|             log.info("Transaction rollback dirtied the becca, forcing reload."); | ||||
|  | ||||
|             require('../becca/becca_loader').load(); | ||||
|         } | ||||
|  | ||||
|         // the maxEntityChangeId has been incremented during failed transaction, need to recalculate | ||||
|         require('./entity_changes').recalculateMaxEntityChangeId(); | ||||
|  | ||||
|         throw e; | ||||
|     } | ||||
| } | ||||
| @@ -306,11 +309,33 @@ function fillParamList(paramIds, truncate = true) { | ||||
|     } | ||||
|  | ||||
|     // doing it manually to avoid this showing up on the sloq query list | ||||
|     const s = stmt(`INSERT INTO param_list VALUES ` + paramIds.map(paramId => `(?)`).join(','), paramIds); | ||||
|     const s = stmt(`INSERT INTO param_list VALUES ${paramIds.map(paramId => `(?)`).join(',')}`); | ||||
|  | ||||
|     s.run(paramIds); | ||||
| } | ||||
|  | ||||
| async function copyDatabase(targetFilePath) { | ||||
|     try { | ||||
|         fs.unlinkSync(targetFilePath); | ||||
|     } catch (e) { | ||||
|     } // unlink throws exception if the file did not exist | ||||
|  | ||||
|     await dbConnection.backup(targetFilePath); | ||||
| } | ||||
|  | ||||
| function disableSlowQueryLogging(cb) { | ||||
|     const orig = cls.isSlowQueryLoggingDisabled(); | ||||
|  | ||||
|     try { | ||||
|         cls.disableSlowQueryLogging(true); | ||||
|  | ||||
|         return cb(); | ||||
|     } | ||||
|     finally { | ||||
|         cls.disableSlowQueryLogging(orig); | ||||
|     } | ||||
| } | ||||
|  | ||||
| module.exports = { | ||||
|     dbConnection, | ||||
|     insert, | ||||
| @@ -322,7 +347,7 @@ module.exports = { | ||||
|      * @method | ||||
|      * @param {string} query - SQL query with ? used as parameter placeholder | ||||
|      * @param {object[]} [params] - array of params if needed | ||||
|      * @return [object] - single value | ||||
|      * @returns [object] - single value | ||||
|      */ | ||||
|     getValue, | ||||
|  | ||||
| @@ -332,7 +357,7 @@ module.exports = { | ||||
|      * @method | ||||
|      * @param {string} query - SQL query with ? used as parameter placeholder | ||||
|      * @param {object[]} [params] - array of params if needed | ||||
|      * @return {object} - map of column name to column value | ||||
|      * @returns {object} - map of column name to column value | ||||
|      */ | ||||
|     getRow, | ||||
|     getRowOrNull, | ||||
| @@ -343,7 +368,7 @@ module.exports = { | ||||
|      * @method | ||||
|      * @param {string} query - SQL query with ? used as parameter placeholder | ||||
|      * @param {object[]} [params] - array of params if needed | ||||
|      * @return {object[]} - array of all rows, each row is a map of column name to column value | ||||
|      * @returns {object[]} - array of all rows, each row is a map of column name to column value | ||||
|      */ | ||||
|     getRows, | ||||
|     getRawRows, | ||||
| @@ -356,7 +381,7 @@ module.exports = { | ||||
|      * @method | ||||
|      * @param {string} query - SQL query with ? used as parameter placeholder | ||||
|      * @param {object[]} [params] - array of params if needed | ||||
|      * @return {object} - map of first column to second column | ||||
|      * @returns {object} - map of first column to second column | ||||
|      */ | ||||
|     getMap, | ||||
|  | ||||
| @@ -366,7 +391,7 @@ module.exports = { | ||||
|      * @method | ||||
|      * @param {string} query - SQL query with ? used as parameter placeholder | ||||
|      * @param {object[]} [params] - array of params if needed | ||||
|      * @return {object[]} - array of first column of all returned rows | ||||
|      * @returns {object[]} - array of first column of all returned rows | ||||
|      */ | ||||
|     getColumn, | ||||
|  | ||||
| @@ -378,12 +403,13 @@ module.exports = { | ||||
|      * @param {object[]} [params] - array of params if needed | ||||
|      */ | ||||
|     execute, | ||||
|     executeWithoutTransaction, | ||||
|     executeMany, | ||||
|     executeScript, | ||||
|     transactional, | ||||
|     upsert, | ||||
|     fillParamList | ||||
|     fillParamList, | ||||
|     copyDatabase, | ||||
|     disableSlowQueryLogging | ||||
| }; | ||||
| </code></pre> | ||||
|         </article> | ||||
| @@ -395,13 +421,13 @@ module.exports = { | ||||
| </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="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> | ||||
|     <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><h3>Global</h3><ul><li><a href="global.html#api">api</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <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> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -1,757 +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 an abstract concept which has two real uses - label (key - value pair) | ||||
| and relation (representing named relationship between source and target 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> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <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#line7">line 7</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|      | ||||
|     </div> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|         <h3 class="subsection-title">Members</h3> | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="attributeId"><span class="type-signature"></span>attributeId<span class="type-signature"> :string</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <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#line16">line 16</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="isInheritable"><span class="type-signature"></span>isInheritable<span class="type-signature"> :boolean</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">boolean</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <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#line28">line 28</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="name"><span class="type-signature"></span>name<span class="type-signature"> :string</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <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#line22">line 22</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="noteId"><span class="type-signature"></span>noteId<span class="type-signature"> :string</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <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#line18">line 18</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="position"><span class="type-signature"></span>position<span class="type-signature"> :int</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">int</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <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#line26">line 26</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="type"><span class="type-signature"></span>type<span class="type-signature"> :string</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <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#line20">line 20</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="value"><span class="type-signature"></span>value<span class="type-signature"> :string</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <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#line24">line 24</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|      | ||||
|  | ||||
|      | ||||
|         <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="NoteShort.html">NoteShort</a>}</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#line32">line 32</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <h5>Returns:</h5> | ||||
|  | ||||
|          | ||||
|  | ||||
|  | ||||
| <dl> | ||||
|     <dt> | ||||
|         Type | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type"><a href="NoteShort.html">NoteShort</a></span> | ||||
|  | ||||
|  | ||||
|     </dd> | ||||
| </dl> | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </article> | ||||
|  | ||||
| </section> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul> | ||||
| </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> | ||||
							
								
								
									
										426
									
								
								docs/frontend_api/BasicWidget.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										426
									
								
								docs/frontend_api/BasicWidget.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,426 @@ | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
| <head> | ||||
|     <meta charset="utf-8"> | ||||
|     <title>JSDoc: Class: BasicWidget</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: BasicWidget</h1> | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <section> | ||||
|  | ||||
| <header> | ||||
|      | ||||
|         <h2><span class="attribs"><span class="type-signature"></span></span>BasicWidget<span class="signature">()</span><span class="type-signature"></span></h2> | ||||
|          | ||||
|             <div class="class-description">This is the base widget for all other widgets. | ||||
|  | ||||
| For information on using widgets, see the tutorial widget_basics.</div> | ||||
|          | ||||
|      | ||||
| </header> | ||||
|  | ||||
| <article> | ||||
|     <div class="container-overview"> | ||||
|      | ||||
|          | ||||
|  | ||||
|      | ||||
|     <h2>Constructor</h2> | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="BasicWidget"><span class="type-signature"></span>new BasicWidget<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="widgets_basic_widget.js.html">widgets/basic_widget.js</a>, <a href="widgets_basic_widget.js.html#line9">line 9</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|      | ||||
|     </div> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|         <h3 class="subsection-title">Methods</h3> | ||||
|  | ||||
|          | ||||
|              | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="cssBlock"><span class="type-signature"></span>cssBlock<span class="signature">(block)</span><span class="type-signature"> → {this}</span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
| <div class="description"> | ||||
|     Accepts a string of CSS to add with the widget. | ||||
| </div> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <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>block</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="widgets_basic_widget.js.html">widgets/basic_widget.js</a>, <a href="widgets_basic_widget.js.html#line78">line 78</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <h5>Returns:</h5> | ||||
|  | ||||
|          | ||||
| <div class="param-desc"> | ||||
|     for chaining | ||||
| </div> | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl> | ||||
|     <dt> | ||||
|         Type | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type">this</span> | ||||
|  | ||||
|  | ||||
|     </dd> | ||||
| </dl> | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="doRender"><span class="type-signature"></span>doRender<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
| <div class="description"> | ||||
|     Method used for rendering the widget. | ||||
|  | ||||
| Your class should override this method. | ||||
| The method is expected to create a this.$widget containing jQuery object | ||||
| </div> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="widgets_basic_widget.js.html">widgets/basic_widget.js</a>, <a href="widgets_basic_widget.js.html#line132">line 132</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </article> | ||||
|  | ||||
| </section> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="BasicWidget.html">BasicWidget</a></li><li><a href="FAttachment.html">FAttachment</a></li><li><a href="FAttribute.html">FAttribute</a></li><li><a href="FBranch.html">FBranch</a></li><li><a href="FNote.html">FNote</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteContextAwareWidget.html">NoteContextAwareWidget</a></li><li><a href="RightPanelWidget.html">RightPanelWidget</a></li></ul><h3>Global</h3><ul><li><a href="global.html#api">api</a></li><li><a href="global.html#getJsonContent">getJsonContent</a></li><li><a href="global.html#getJsonContentSafely">getJsonContentSafely</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> | ||||
							
								
								
									
										1067
									
								
								docs/frontend_api/FAttachment.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1067
									
								
								docs/frontend_api/FAttachment.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -2,7 +2,7 @@ | ||||
| <html lang="en"> | ||||
| <head> | ||||
|     <meta charset="utf-8"> | ||||
|     <title>JSDoc: Class: Attribute</title> | ||||
|     <title>JSDoc: Class: FAttribute</title> | ||||
| 
 | ||||
|     <script src="scripts/prettify/prettify.js"> </script> | ||||
|     <script src="scripts/prettify/lang-css.js"> </script> | ||||
| @@ -17,7 +17,7 @@ | ||||
| 
 | ||||
| <div id="main"> | ||||
| 
 | ||||
|     <h1 class="page-title">Class: Attribute</h1> | ||||
|     <h1 class="page-title">Class: FAttribute</h1> | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
| @@ -28,7 +28,7 @@ | ||||
| 
 | ||||
| <header> | ||||
|      | ||||
|         <h2><span class="attribs"><span class="type-signature"></span></span>Attribute<span class="signature">()</span><span class="type-signature"></span></h2> | ||||
|         <h2><span class="attribs"><span class="type-signature"></span></span>FAttribute<span class="signature">()</span><span class="type-signature"></span></h2> | ||||
|          | ||||
|             <div class="class-description">Attribute is an abstract concept which has two real uses - label (key - value pair) | ||||
| and relation (representing named relationship between source and target note)</div> | ||||
| @@ -46,7 +46,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <h4 class="name" id="Attribute"><span class="type-signature"></span>new Attribute<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|     <h4 class="name" id="FAttribute"><span class="type-signature"></span>new FAttribute<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| @@ -94,7 +94,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line13">line 13</a> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line12">line 12</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -194,7 +194,75 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line44">line 44</a> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line22">line 22</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| </dl> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="froca"><span class="type-signature"></span>froca<span class="type-signature"> :Froca</span></h4> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">Froca</span> | ||||
| 
 | ||||
| 
 | ||||
|         </li> | ||||
|     </ul> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| <dl class="details"> | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line15">line 15</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -262,7 +330,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line56">line 56</a> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line34">line 34</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -330,7 +398,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line50">line 50</a> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line28">line 28</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -398,7 +466,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line46">line 46</a> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line24">line 24</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -416,7 +484,7 @@ and relation (representing named relationship between source and target note)</d | ||||
| 
 | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="position"><span class="type-signature"></span>position<span class="type-signature"> :int</span></h4> | ||||
| <h4 class="name" id="position"><span class="type-signature"></span>position<span class="type-signature"> :<a href="global.html#int">int</a></span></h4> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| @@ -427,7 +495,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">int</span> | ||||
| <span class="param-type"><a href="global.html#int">int</a></span> | ||||
| 
 | ||||
| 
 | ||||
|         </li> | ||||
| @@ -466,7 +534,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line52">line 52</a> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line32">line 32</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -484,7 +552,7 @@ and relation (representing named relationship between source and target note)</d | ||||
| 
 | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="type"><span class="type-signature"></span>type<span class="type-signature"> :string</span></h4> | ||||
| <h4 class="name" id="type"><span class="type-signature"></span>type<span class="type-signature"> :<a href="global.html#AttributeType">AttributeType</a></span></h4> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| @@ -495,7 +563,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
| <span class="param-type"><a href="global.html#AttributeType">AttributeType</a></span> | ||||
| 
 | ||||
| 
 | ||||
|         </li> | ||||
| @@ -534,75 +602,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line48">line 48</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| </dl> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="utcDateModified"><span class="type-signature"></span>utcDateModified<span class="type-signature"> :string</span></h4> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">string</span> | ||||
| 
 | ||||
| 
 | ||||
|         </li> | ||||
|     </ul> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| <dl class="details"> | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line58">line 58</a> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line26">line 26</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -670,7 +670,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line54">line 54</a> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line30">line 30</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -698,7 +698,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <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> | ||||
|     <h4 class="name" id="getNote"><span class="type-signature"></span>getNote<span class="signature">()</span><span class="type-signature"> → {<a href="FNote.html">FNote</a>}</span></h4> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| @@ -746,7 +746,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line112">line 112</a> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line38">line 38</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -782,10 +782,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type"><a href="Note.html">Note</a></span> | ||||
| | | ||||
| 
 | ||||
| <span class="param-type">null</span> | ||||
| <span class="param-type"><a href="FNote.html">FNote</a></span> | ||||
| 
 | ||||
| 
 | ||||
|     </dd> | ||||
| @@ -803,7 +800,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <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> | ||||
|     <h4 class="name" id="getTargetNote"><span class="type-signature">(async) </span>getTargetNote<span class="signature">()</span><span class="type-signature"> → {Promise.<<a href="FNote.html">FNote</a>>}</span></h4> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| @@ -851,7 +848,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line119">line 119</a> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line43">line 43</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -887,112 +884,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|     </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="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line134">line 134</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| </dl> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| <h5>Returns:</h5> | ||||
| 
 | ||||
|          | ||||
| 
 | ||||
| 
 | ||||
| <dl> | ||||
|     <dt> | ||||
|         Type | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type">boolean</span> | ||||
| <span class="param-type">Promise.<<a href="FNote.html">FNote</a>></span> | ||||
| 
 | ||||
| 
 | ||||
|     </dd> | ||||
| @@ -1020,13 +912,13 @@ and relation (representing named relationship between source and target note)</d | ||||
| </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="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> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="BasicWidget.html">BasicWidget</a></li><li><a href="FAttachment.html">FAttachment</a></li><li><a href="FAttribute.html">FAttribute</a></li><li><a href="FBranch.html">FBranch</a></li><li><a href="FNote.html">FNote</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteContextAwareWidget.html">NoteContextAwareWidget</a></li><li><a href="RightPanelWidget.html">RightPanelWidget</a></li></ul><h3>Global</h3><ul><li><a href="global.html#api">api</a></li><li><a href="global.html#getJsonContent">getJsonContent</a></li><li><a href="global.html#getJsonContentSafely">getJsonContentSafely</a></li></ul> | ||||
| </nav> | ||||
| 
 | ||||
| <br class="clear"> | ||||
| 
 | ||||
| <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> | ||||
| 
 | ||||
| <script> prettyPrint(); </script> | ||||
| @@ -2,7 +2,7 @@ | ||||
| <html lang="en"> | ||||
| <head> | ||||
|     <meta charset="utf-8"> | ||||
|     <title>JSDoc: Class: Branch</title> | ||||
|     <title>JSDoc: Class: FBranch</title> | ||||
| 
 | ||||
|     <script src="scripts/prettify/prettify.js"> </script> | ||||
|     <script src="scripts/prettify/lang-css.js"> </script> | ||||
| @@ -17,7 +17,7 @@ | ||||
| 
 | ||||
| <div id="main"> | ||||
| 
 | ||||
|     <h1 class="page-title">Class: Branch</h1> | ||||
|     <h1 class="page-title">Class: FBranch</h1> | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
| @@ -28,7 +28,7 @@ | ||||
| 
 | ||||
| <header> | ||||
|      | ||||
|         <h2><span class="attribs"><span class="type-signature"></span></span>Branch<span class="signature">()</span><span class="type-signature"></span></h2> | ||||
|         <h2><span class="attribs"><span class="type-signature"></span></span>FBranch<span class="signature">()</span><span class="type-signature"></span></h2> | ||||
|          | ||||
|             <div class="class-description">Branch represents a relationship between a child note and its parent note. Trilium allows a note to have multiple | ||||
| parents.</div> | ||||
| @@ -46,7 +46,7 @@ parents.</div> | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <h4 class="name" id="Branch"><span class="type-signature"></span>new Branch<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|     <h4 class="name" id="FBranch"><span class="type-signature"></span>new FBranch<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| @@ -94,7 +94,7 @@ parents.</div> | ||||
|      | ||||
|     <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#line5">line 5</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line5">line 5</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -198,7 +198,75 @@ parents.</div> | ||||
|      | ||||
|     <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#line17">line 17</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line18">line 18</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| </dl> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="froca"><span class="type-signature"></span>froca<span class="type-signature"> :Froca</span></h4> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">Froca</span> | ||||
| 
 | ||||
| 
 | ||||
|         </li> | ||||
|     </ul> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| <dl class="details"> | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line8">line 8</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -266,7 +334,7 @@ parents.</div> | ||||
|      | ||||
|     <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#line29">line 29</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line30">line 30</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -334,7 +402,7 @@ parents.</div> | ||||
|      | ||||
|     <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#line27">line 27</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line28">line 28</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -402,7 +470,7 @@ parents.</div> | ||||
|      | ||||
|     <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#line19">line 19</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line20">line 20</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -420,7 +488,7 @@ parents.</div> | ||||
| 
 | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="notePosition"><span class="type-signature"></span>notePosition<span class="type-signature"> :int</span></h4> | ||||
| <h4 class="name" id="notePosition"><span class="type-signature"></span>notePosition<span class="type-signature"> :<a href="global.html#int">int</a></span></h4> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| @@ -431,7 +499,7 @@ parents.</div> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">int</span> | ||||
| <span class="param-type"><a href="global.html#int">int</a></span> | ||||
| 
 | ||||
| 
 | ||||
|         </li> | ||||
| @@ -470,7 +538,7 @@ parents.</div> | ||||
|      | ||||
|     <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#line23">line 23</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line24">line 24</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -538,7 +606,7 @@ parents.</div> | ||||
|      | ||||
|     <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#line21">line 21</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line22">line 22</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -606,7 +674,7 @@ parents.</div> | ||||
|      | ||||
|     <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#line25">line 25</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line26">line 26</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -634,7 +702,7 @@ parents.</div> | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <h4 class="name" id="getNote"><span class="type-signature">(async) </span>getNote<span class="signature">()</span><span class="type-signature"> → {<a href="NoteShort.html">NoteShort</a>}</span></h4> | ||||
|     <h4 class="name" id="getNote"><span class="type-signature">(async) </span>getNote<span class="signature">()</span><span class="type-signature"> → {<a href="FNote.html">FNote</a>}</span></h4> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| @@ -682,7 +750,7 @@ parents.</div> | ||||
|      | ||||
|     <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#line33">line 33</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line34">line 34</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -718,7 +786,7 @@ parents.</div> | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type"><a href="NoteShort.html">NoteShort</a></span> | ||||
| <span class="param-type"><a href="FNote.html">FNote</a></span> | ||||
| 
 | ||||
| 
 | ||||
|     </dd> | ||||
| @@ -736,7 +804,7 @@ parents.</div> | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <h4 class="name" id="getNoteFromCache"><span class="type-signature"></span>getNoteFromCache<span class="signature">()</span><span class="type-signature"> → {<a href="NoteShort.html">NoteShort</a>}</span></h4> | ||||
|     <h4 class="name" id="getNoteFromCache"><span class="type-signature"></span>getNoteFromCache<span class="signature">()</span><span class="type-signature"> → {<a href="FNote.html">FNote</a>}</span></h4> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| @@ -784,7 +852,7 @@ parents.</div> | ||||
|      | ||||
|     <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#line38">line 38</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line39">line 39</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -820,7 +888,7 @@ parents.</div> | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type"><a href="NoteShort.html">NoteShort</a></span> | ||||
| <span class="param-type"><a href="FNote.html">FNote</a></span> | ||||
| 
 | ||||
| 
 | ||||
|     </dd> | ||||
| @@ -838,7 +906,7 @@ parents.</div> | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <h4 class="name" id="getParentNote"><span class="type-signature">(async) </span>getParentNote<span class="signature">()</span><span class="type-signature"> → {<a href="NoteShort.html">NoteShort</a>}</span></h4> | ||||
|     <h4 class="name" id="getParentNote"><span class="type-signature">(async) </span>getParentNote<span class="signature">()</span><span class="type-signature"> → {<a href="FNote.html">FNote</a>}</span></h4> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| @@ -886,7 +954,7 @@ parents.</div> | ||||
|      | ||||
|     <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#line43">line 43</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line44">line 44</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -922,7 +990,7 @@ parents.</div> | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type"><a href="NoteShort.html">NoteShort</a></span> | ||||
| <span class="param-type"><a href="FNote.html">FNote</a></span> | ||||
| 
 | ||||
| 
 | ||||
|     </dd> | ||||
| @@ -988,7 +1056,7 @@ parents.</div> | ||||
|      | ||||
|     <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#line48">line 48</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line49">line 49</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -1017,7 +1085,7 @@ parents.</div> | ||||
| 
 | ||||
|          | ||||
| <div class="param-desc"> | ||||
|     true if it's top level, meaning its parent is root note | ||||
|     true if it's top level, meaning its parent is the root note | ||||
| </div> | ||||
| 
 | ||||
| 
 | ||||
| @@ -1056,13 +1124,13 @@ parents.</div> | ||||
| </div> | ||||
| 
 | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="BasicWidget.html">BasicWidget</a></li><li><a href="FAttachment.html">FAttachment</a></li><li><a href="FAttribute.html">FAttribute</a></li><li><a href="FBranch.html">FBranch</a></li><li><a href="FNote.html">FNote</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteContextAwareWidget.html">NoteContextAwareWidget</a></li><li><a href="RightPanelWidget.html">RightPanelWidget</a></li></ul><h3>Global</h3><ul><li><a href="global.html#api">api</a></li><li><a href="global.html#getJsonContent">getJsonContent</a></li><li><a href="global.html#getJsonContentSafely">getJsonContentSafely</a></li></ul> | ||||
| </nav> | ||||
| 
 | ||||
| <br class="clear"> | ||||
| 
 | ||||
| <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> | ||||
| 
 | ||||
| <script> prettyPrint(); </script> | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user