mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-03 03:46:37 +01:00 
			
		
		
		
	Compare commits
	
		
			577 Commits
		
	
	
		
			v0.60.0-be
			...
			v0.62.0-be
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					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 | ||
| 
						 | 
					1f8798d7ac | ||
| 
						 | 
					af95d387b9 | ||
| 
						 | 
					76196ed42c | ||
| 
						 | 
					8a6002c6be | ||
| 
						 | 
					38781d33ac | ||
| 
						 | 
					ff5d3a5f0c | ||
| 
						 | 
					626af84f42 | ||
| 
						 | 
					b05ce12e7b | ||
| 
						 | 
					274505188b | ||
| 
						 | 
					f85209a72f | ||
| 
						 | 
					291f0e79d9 | ||
| 
						 | 
					64db5e2542 | ||
| 
						 | 
					9f5f0aeddd | ||
| 
						 | 
					4d5612e845 | ||
| 
						 | 
					371f174756 | ||
| 
						 | 
					8284c673f9 | ||
| 
						 | 
					cc02546ed3 | ||
| 
						 | 
					2aa987c072 | ||
| 
						 | 
					a06ddc439d | ||
| 
						 | 
					f6944b8219 | ||
| 
						 | 
					fa3cbb4645 | ||
| 
						 | 
					6dfc72c065 | ||
| 
						 | 
					0af6f91d21 | ||
| 
						 | 
					5e1f81e53e | ||
| 
						 | 
					9cdcbb3125 | ||
| 
						 | 
					35338e9ec6 | ||
| 
						 | 
					78d83b8826 | ||
| 
						 | 
					8edf06d28d | ||
| 
						 | 
					ecd2a5cbac | ||
| 
						 | 
					c0cf319521 | ||
| 
						 | 
					9b32d86f78 | ||
| 
						 | 
					fbffc6b2b5 | ||
| 
						 | 
					cd01886eb2 | ||
| 
						 | 
					d8bc9c2982 | ||
| 
						 | 
					d232694dec | ||
| 
						 | 
					735ac55bb8 | ||
| 
						 | 
					330e7ac08e | ||
| 
						 | 
					49fb913eab | ||
| 
						 | 
					4b074365e7 | ||
| 
						 | 
					5e2efca933 | ||
| 
						 | 
					e71b0d82a1 | ||
| 
						 | 
					c6c162cdda | ||
| 
						 | 
					8b46d6c718 | ||
| 
						 | 
					e28fbf4617 | ||
| 
						 | 
					0e4a040ed8 | ||
| 
						 | 
					b84670d503 | ||
| 
						 | 
					f01657e1dd | ||
| 
						 | 
					34ecd77bd4 | ||
| 
						 | 
					6cf0fe0b73 | ||
| 
						 | 
					3f8bf7cacc | ||
| 
						 | 
					17128c5874 | ||
| 
						 | 
					9e71c44c76 | ||
| 
						 | 
					54c0268593 | ||
| 
						 | 
					a5f0b2a81e | ||
| 
						 | 
					a154bea016 | ||
| 
						 | 
					15a11daf38 | ||
| 
						 | 
					5d6d9ab6d6 | ||
| 
						 | 
					2bc78ccafb | ||
| 
						 | 
					53aebf1448 | ||
| 
						 | 
					fa406d3ded | ||
| 
						 | 
					9be524ef89 | ||
| 
						 | 
					fd8a2d4d92 | ||
| 
						 | 
					0b270ee87a | ||
| 
						 | 
					5cc5859211 | ||
| 
						 | 
					bd489d5780 | ||
| 
						 | 
					a24c56a9d5 | ||
| 
						 | 
					95e38a037b | ||
| 
						 | 
					256b800d0e | ||
| 
						 | 
					b3c4c850db | ||
| 
						 | 
					e698aa5822 | ||
| 
						 | 
					1fdb23746a | ||
| 
						 | 
					9cd5bdeb53 | ||
| 
						 | 
					e6183b9a1d | ||
| 
						 | 
					d83005fe4d | ||
| 
						 | 
					2b84f1be00 | ||
| 
						 | 
					bb45c67e60 | ||
| 
						 | 
					515fb4e5db | ||
| 
						 | 
					b6efc954bd | ||
| 
						 | 
					eee05a4d01 | ||
| 
						 | 
					dc97400dbf | ||
| 
						 | 
					e16bedfab4 | ||
| 
						 | 
					5a8e216dec | ||
| 
						 | 
					1faf8225c7 | ||
| 
						 | 
					5225a99995 | ||
| 
						 | 
					929f8ef720 | 
							
								
								
									
										11
									
								
								.eslintrc.js
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								.eslintrc.js
									
									
									
									
									
								
							@@ -75,8 +75,6 @@ module.exports = {
 | 
			
		||||
        glob: true,
 | 
			
		||||
        log: true,
 | 
			
		||||
        EditorWatchdog: true,
 | 
			
		||||
        baseApiUrl: true,
 | 
			
		||||
        // \src\share\canvas_share.js
 | 
			
		||||
        React: true,
 | 
			
		||||
        appState: true,
 | 
			
		||||
        ExcalidrawLib: true,
 | 
			
		||||
@@ -93,17 +91,16 @@ module.exports = {
 | 
			
		||||
        renderMathInElement: true,
 | 
			
		||||
        // \src\public\app\widgets\type_widgets\editable_text.js
 | 
			
		||||
        BalloonEditor: true,
 | 
			
		||||
        FancytreeNode: true,
 | 
			
		||||
        CKEditorInspector: true,
 | 
			
		||||
        // \src\public\app\widgets\type_widgets\editable_code.js
 | 
			
		||||
        CodeMirror: true,
 | 
			
		||||
        // \src\public\app\services\resizer.js
 | 
			
		||||
        Split: true,
 | 
			
		||||
        // \src\public\app\services\note_content_renderer.js
 | 
			
		||||
        // \src\public\app\services\content_renderer.js
 | 
			
		||||
        mermaid: true,
 | 
			
		||||
        // src\public\app\services\frontend_script_api.js
 | 
			
		||||
        dayjs: true,
 | 
			
		||||
        // \src\public\app\widgets\dialogs\markdown_import.js
 | 
			
		||||
        commonmark: true,
 | 
			
		||||
        // \src\public\app\widgets\note_map.js
 | 
			
		||||
        ForceGraph: true,
 | 
			
		||||
        // \src\public\app\setup.js
 | 
			
		||||
@@ -112,7 +109,9 @@ module.exports = {
 | 
			
		||||
        // src\public\app\services\utils.js
 | 
			
		||||
        logInfo: true,
 | 
			
		||||
        __non_webpack_require__: true,
 | 
			
		||||
        //
 | 
			
		||||
        describe: true,
 | 
			
		||||
        it: true,
 | 
			
		||||
        expect: true
 | 
			
		||||
    },
 | 
			
		||||
    parserOptions: {
 | 
			
		||||
        ecmaVersion: 'latest',
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -11,5 +11,6 @@ cert.crt
 | 
			
		||||
server-package.json
 | 
			
		||||
.idea/httpRequests/
 | 
			
		||||
data/
 | 
			
		||||
data-test/
 | 
			
		||||
tmp/
 | 
			
		||||
.eslintcache
 | 
			
		||||
@@ -2,7 +2,7 @@ image:
 | 
			
		||||
  file: .gitpod.dockerfile
 | 
			
		||||
 | 
			
		||||
tasks:
 | 
			
		||||
    - before: nvm install 16.19.1 && nvm use 16.19.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>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								.idea/misc.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1
									
								
								.idea/misc.xml
									
									
									
										generated
									
									
									
								
							@@ -1,4 +1,3 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project version="4">
 | 
			
		||||
  <component name="JavaScriptSettings">
 | 
			
		||||
    <option name="languageLevel" value="ES6" />
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,13 @@
 | 
			
		||||
//https://prettier.io/docs/en/options.html
 | 
			
		||||
module.exports = {
 | 
			
		||||
	semi: true,
 | 
			
		||||
	trailingComma: 'es5',
 | 
			
		||||
	trailingComma: 'none',
 | 
			
		||||
	singleQuote: true,
 | 
			
		||||
	printWidth: 120,
 | 
			
		||||
	printWidth: 100,
 | 
			
		||||
	tabWidth: 4,
 | 
			
		||||
	// useTabs: false,
 | 
			
		||||
	// bracketSpacing: true,
 | 
			
		||||
	useTabs: false,
 | 
			
		||||
	quoteProps: "as-needed",
 | 
			
		||||
	bracketSpacing: true,
 | 
			
		||||
	arrowParens: "avoid"
 | 
			
		||||
	// htmlWhitespaceSensitivity: 'ignore',
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
# !!! Don't try to build this Dockerfile directly, run it through bin/build-docker.sh script !!!
 | 
			
		||||
FROM node:16.19.1-alpine
 | 
			
		||||
FROM node:18.18.2-alpine
 | 
			
		||||
 | 
			
		||||
# Create app directory
 | 
			
		||||
WORKDIR /usr/src/app
 | 
			
		||||
 
 | 
			
		||||
										
											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"
 | 
			
		||||
 
 | 
			
		||||
@@ -24,9 +24,6 @@ mv "./dist/Trilium Notes-linux-x64" $BUILD_DIR
 | 
			
		||||
 | 
			
		||||
cp images/app-icons/png/128x128.png $BUILD_DIR/icon.png
 | 
			
		||||
 | 
			
		||||
# 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 -r dump-db $BUILD_DIR/
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
PKG_DIR=dist/trilium-linux-x64-server
 | 
			
		||||
NODE_VERSION=16.19.1
 | 
			
		||||
NODE_VERSION=18.18.2
 | 
			
		||||
 | 
			
		||||
if [ "$1" != "DONTCOPY" ]
 | 
			
		||||
then
 | 
			
		||||
 
 | 
			
		||||
@@ -22,9 +22,6 @@ 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 -r dump-db $BUILD_DIR/
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ if [[ $# -eq 0 ]] ; then
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
n exec 16.19.1 npm run webpack
 | 
			
		||||
n exec 18.18.2 npm run webpack
 | 
			
		||||
 | 
			
		||||
DIR=$1
 | 
			
		||||
 | 
			
		||||
@@ -27,7 +27,7 @@ cp -r electron.js $DIR/
 | 
			
		||||
cp webpack-* $DIR/
 | 
			
		||||
 | 
			
		||||
# run in subshell (so we return to original dir)
 | 
			
		||||
(cd $DIR && n exec 16.19.1 npm install --only=prod)
 | 
			
		||||
(cd $DIR && n exec 18.18.2 npm install --only=prod)
 | 
			
		||||
 | 
			
		||||
# cleanup of useless files in dependencies
 | 
			
		||||
rm -r $DIR/node_modules/image-q/demo
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										0
									
								
								bin/create-anonymization-script.js
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										0
									
								
								bin/create-anonymization-script.js
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -1,6 +1,7 @@
 | 
			
		||||
{
 | 
			
		||||
  "src": "dist/trilium-linux-x64",
 | 
			
		||||
  "dest": "dist/",
 | 
			
		||||
  "compression": "xz",
 | 
			
		||||
  "name": "trilium",
 | 
			
		||||
  "productName": "Trilium Notes",
 | 
			
		||||
  "genericName": "Note taker",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,161 +1,45 @@
 | 
			
		||||
 | 
			
		||||
UPDATE etapi_tokens SET tokenHash = 'API token hash value';
 | 
			
		||||
UPDATE notes SET title = 'title' WHERE noteId != 'root' AND noteId NOT LIKE '\_%' ESCAPE '\';
 | 
			
		||||
UPDATE note_contents SET content = 'text' WHERE content IS NOT NULL;
 | 
			
		||||
UPDATE note_revisions SET title = 'title';
 | 
			
		||||
UPDATE note_revision_contents SET content = 'text' WHERE content IS NOT NULL;
 | 
			
		||||
 | 
			
		||||
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',
 | 
			
		||||
                                     'noteRevisionsWidgetDisabled',
 | 
			
		||||
                                     'whatLinksHereWidgetDisabled',
 | 
			
		||||
                                     'similarNotesWidgetDisabled',
 | 
			
		||||
                                     'workspace',
 | 
			
		||||
                                     'workspaceIconClass',
 | 
			
		||||
                                     'workspaceTabBackgroundColor',
 | 
			
		||||
                                     'searchHome',
 | 
			
		||||
                                     'workspaceInbox',
 | 
			
		||||
                                     'workspaceSearchHome',
 | 
			
		||||
                                     'sqlConsoleHome',
 | 
			
		||||
                                     'datePattern',
 | 
			
		||||
                                     'pageSize',
 | 
			
		||||
                                     'viewType',
 | 
			
		||||
                                     'mapRootNoteId',
 | 
			
		||||
                                     'bookmarkFolder',
 | 
			
		||||
                                     'sorted',
 | 
			
		||||
                                     'top',
 | 
			
		||||
                                     'fullContentWidth',
 | 
			
		||||
                                     'shareHiddenFromTree',
 | 
			
		||||
                                     'shareAlias',
 | 
			
		||||
                                     'shareOmitDefaultCss',
 | 
			
		||||
                                     'shareRoot',
 | 
			
		||||
                                     'internalLink',
 | 
			
		||||
                                     'imageLink',
 | 
			
		||||
                                     'relationMapLink',
 | 
			
		||||
                                     'includeMapLink',
 | 
			
		||||
                                     'runOnNoteCreation',
 | 
			
		||||
                                     'runOnNoteTitleChange',
 | 
			
		||||
                                     'runOnNoteContentChange',
 | 
			
		||||
                                     'runOnNoteChange',
 | 
			
		||||
                                     'runOnChildNoteCreation',
 | 
			
		||||
                                     'runOnAttributeCreation',
 | 
			
		||||
                                     'runOnAttributeChange',
 | 
			
		||||
                                     'template',
 | 
			
		||||
                                     'inherit',
 | 
			
		||||
                                     'widget',
 | 
			
		||||
                                     'renderNote',
 | 
			
		||||
                                     'shareCss',
 | 
			
		||||
                                     'shareJs',
 | 
			
		||||
                                     'shareFavicon',
 | 
			
		||||
                                     'executeButton',
 | 
			
		||||
                                     'keepCurrentHoisting',
 | 
			
		||||
                                     'color',
 | 
			
		||||
                                     'toc',
 | 
			
		||||
                                     'excludeFromNoteMap',
 | 
			
		||||
                                     'docName',
 | 
			
		||||
                                     'launcherType',
 | 
			
		||||
                                     'builtinWidget',
 | 
			
		||||
                                     'baseSize',
 | 
			
		||||
                                     'growthFactor'
 | 
			
		||||
                      );
 | 
			
		||||
 | 
			
		||||
UPDATE attributes SET name = 'name'
 | 
			
		||||
                    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',
 | 
			
		||||
                                     'noteRevisionsWidgetDisabled',
 | 
			
		||||
                                     'whatLinksHereWidgetDisabled',
 | 
			
		||||
                                     'similarNotesWidgetDisabled',
 | 
			
		||||
                                     'workspace',
 | 
			
		||||
                                     'workspaceIconClass',
 | 
			
		||||
                                     'workspaceTabBackgroundColor',
 | 
			
		||||
                                     'searchHome',
 | 
			
		||||
                                     'workspaceInbox',
 | 
			
		||||
                                     'workspaceSearchHome',
 | 
			
		||||
                                     'sqlConsoleHome',
 | 
			
		||||
                                     'datePattern',
 | 
			
		||||
                                     'pageSize',
 | 
			
		||||
                                     'viewType',
 | 
			
		||||
                                     'mapRootNoteId',
 | 
			
		||||
                                     'bookmarkFolder',
 | 
			
		||||
                                     'sorted',
 | 
			
		||||
                                     'top',
 | 
			
		||||
                                     'fullContentWidth',
 | 
			
		||||
                                     'shareHiddenFromTree',
 | 
			
		||||
                                     'shareAlias',
 | 
			
		||||
                                     'shareOmitDefaultCss',
 | 
			
		||||
                                     'shareRoot',
 | 
			
		||||
                                     'internalLink',
 | 
			
		||||
                                     'imageLink',
 | 
			
		||||
                                     'relationMapLink',
 | 
			
		||||
                                     'includeMapLink',
 | 
			
		||||
                                     'runOnNoteCreation',
 | 
			
		||||
                                     'runOnNoteTitleChange',
 | 
			
		||||
                                     'runOnNoteContentChange',
 | 
			
		||||
                                     'runOnNoteChange',
 | 
			
		||||
                                     'runOnChildNoteCreation',
 | 
			
		||||
                                     'runOnAttributeCreation',
 | 
			
		||||
                                     'runOnAttributeChange',
 | 
			
		||||
                                     'template',
 | 
			
		||||
                                     'inherit',
 | 
			
		||||
                                     'widget',
 | 
			
		||||
                                     'renderNote',
 | 
			
		||||
                                     'shareCss',
 | 
			
		||||
                                     'shareJs',
 | 
			
		||||
                                     'shareFavicon',
 | 
			
		||||
                                     'executeButton',
 | 
			
		||||
                                     'keepCurrentHoisting',
 | 
			
		||||
                                     'color',
 | 
			
		||||
                                     'toc',
 | 
			
		||||
                                     'excludeFromNoteMap',
 | 
			
		||||
                                     'docName',
 | 
			
		||||
                                     'launcherType',
 | 
			
		||||
                                     'builtinWidget',
 | 
			
		||||
                                     'baseSize',
 | 
			
		||||
                                     'growthFactor'
 | 
			
		||||
                                    );
 | 
			
		||||
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',
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,7 @@ 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=
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
- isDeleted = 0 by default
 | 
			
		||||
- rename openTabs to openNoteContexts
 | 
			
		||||
- unify readOnly handling to a single attribute:
 | 
			
		||||
  * readOnly - like now
 | 
			
		||||
  * readOnly=auto - like without readOnly (used to override inherited readOnly)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								db/demo.zip
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								db/demo.zip
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -1 +0,0 @@
 | 
			
		||||
module.exports = () => console.log("NOOP, moved to migration 0189");
 | 
			
		||||
@@ -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,33 +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 (id, entityName, entityId, hash, isErased, changeId, sourceId, isSynced, utcDateChanged)
 | 
			
		||||
    SELECT id, entityName, entityId, hash, isErased, '', sourceId, isSynced, utcDateChanged FROM entity_changes;
 | 
			
		||||
 | 
			
		||||
-- delete duplicates https://github.com/zadam/trilium/issues/2534
 | 
			
		||||
DELETE FROM mig_entity_changes WHERE isErased = 0 AND id IN (
 | 
			
		||||
    SELECT id FROM mig_entity_changes ec
 | 
			
		||||
    WHERE (
 | 
			
		||||
              SELECT COUNT(*) FROM mig_entity_changes
 | 
			
		||||
              WHERE ec.entityName = mig_entity_changes.entityName
 | 
			
		||||
                AND ec.entityId = mig_entity_changes.entityId
 | 
			
		||||
          ) > 1
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
);
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
DELETE FROM options WHERE name = 'username';
 | 
			
		||||
@@ -1,15 +0,0 @@
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "etapi_tokens"
 | 
			
		||||
(
 | 
			
		||||
    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);
 | 
			
		||||
 | 
			
		||||
INSERT INTO etapi_tokens (etapiTokenId, name, tokenHash, utcDateCreated, utcDateModified, isDeleted)
 | 
			
		||||
SELECT apiTokenId, 'Trilium Sender', token, utcDateCreated, utcDateCreated, isDeleted FROM api_tokens;
 | 
			
		||||
 | 
			
		||||
DROP TABLE api_tokens;
 | 
			
		||||
 | 
			
		||||
UPDATE entity_changes SET entityName = 'etapi_tokens' WHERE entityName = 'api_tokens';
 | 
			
		||||
@@ -1,10 +0,0 @@
 | 
			
		||||
module.exports = () => {
 | 
			
		||||
    const sql = require('../../src/services/sql');
 | 
			
		||||
    const crypto = require('crypto');
 | 
			
		||||
 | 
			
		||||
    for (const {etapiTokenId, token} of sql.getRows("SELECT etapiTokenId, tokenHash AS token FROM etapi_tokens")) {
 | 
			
		||||
        const tokenHash = crypto.createHash('sha256').update(token).digest('base64');
 | 
			
		||||
        
 | 
			
		||||
        sql.execute(`UPDATE etapi_tokens SET tokenHash = ? WHERE etapiTokenId = ?`, [tokenHash, etapiTokenId]);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
@@ -1,20 +0,0 @@
 | 
			
		||||
DROP TABLE entity_changes;
 | 
			
		||||
-- not preserving the data because of https://github.com/zadam/trilium/issues/3447
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "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,
 | 
			
		||||
                                                    `componentId` TEXT NOT NULL,
 | 
			
		||||
                                                    `instanceId` TEXT NOT NULL,
 | 
			
		||||
                                                    `isSynced` INTEGER NOT NULL,
 | 
			
		||||
                                                    `utcDateChanged` TEXT NOT NULL
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
CREATE UNIQUE INDEX `IDX_entityChanges_entityName_entityId` ON "entity_changes" (
 | 
			
		||||
                                                                                 `entityName`,
 | 
			
		||||
                                                                                 `entityId`
 | 
			
		||||
    );
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
CREATE INDEX `IDX_entity_changes_changeId` ON `entity_changes` (`changeId`);
 | 
			
		||||
@@ -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,2 +0,0 @@
 | 
			
		||||
-- removing potential remnants of recent notes in entity changes, see https://github.com/zadam/trilium/issues/2842
 | 
			
		||||
DELETE FROM entity_changes WHERE entityName = 'recent_notes';
 | 
			
		||||
@@ -1,2 +0,0 @@
 | 
			
		||||
UPDATE attributes SET value = replace(value, 'setLabelValue', 'updateLabelValue') WHERE name = 'action' AND type = 'label';
 | 
			
		||||
UPDATE attributes SET value = replace(value, 'setRelationTarget', 'updateRelationTarget') WHERE name = 'action' AND type = 'label';
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
module.exports = () => console.log("NOOP, increased because of protected notes IV change");
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
UPDATE branches SET branchId = '_hidden__search' WHERE parentNoteId = 'hidden' AND noteId = 'search' AND isDeleted = 0;
 | 
			
		||||
UPDATE branches SET branchId = 'root__globalNoteMap' WHERE parentNoteId = 'singles' AND noteId = 'globalnotemap' AND isDeleted = 0;
 | 
			
		||||
UPDATE branches SET branchId = '_hidden__sqlConsole' WHERE parentNoteId = 'hidden' AND noteId = 'sqlconsole' AND isDeleted = 0;
 | 
			
		||||
UPDATE branches SET branchId = 'root__hidden' WHERE parentNoteId = 'root' AND noteId = 'hidden' AND isDeleted = 0;
 | 
			
		||||
UPDATE branches SET branchId = '_hidden__bulkAction' WHERE parentNoteId = 'hidden' AND noteId = 'bulkaction' AND isDeleted = 0;
 | 
			
		||||
UPDATE branches SET branchId = '_hidden__share' WHERE parentNoteId = 'root' AND noteId = 'share' AND isDeleted = 0;
 | 
			
		||||
@@ -1,53 +0,0 @@
 | 
			
		||||
UPDATE notes SET noteId = '_globalNoteMap', title = 'Note Map' WHERE noteId = 'globalnotemap';
 | 
			
		||||
UPDATE note_contents SET noteId = '_globalNoteMap' WHERE noteId = 'globalnotemap';
 | 
			
		||||
UPDATE note_revisions SET noteId = '_globalNoteMap' WHERE noteId = 'globalnotemap';
 | 
			
		||||
UPDATE branches SET noteId = '_globalNoteMap' WHERE noteId = 'globalnotemap';
 | 
			
		||||
UPDATE branches SET parentNoteId = '_globalNoteMap' WHERE parentNoteId = 'globalnotemap';
 | 
			
		||||
UPDATE attributes SET noteId = '_globalNoteMap' WHERE noteId = 'globalnotemap';
 | 
			
		||||
UPDATE attributes SET value = '_globalNoteMap' WHERE type = 'relation' AND value = 'globalnotemap';
 | 
			
		||||
UPDATE entity_changes SET entityId = '_globalNoteMap' WHERE entityId = 'globalnotemap';
 | 
			
		||||
 | 
			
		||||
UPDATE notes SET noteId = '_bulkAction', title = 'Bulk Action' WHERE noteId = 'bulkaction';
 | 
			
		||||
UPDATE note_contents SET noteId = '_bulkAction' WHERE noteId = 'bulkaction';
 | 
			
		||||
UPDATE note_revisions SET noteId = '_bulkAction' WHERE noteId = 'bulkaction';
 | 
			
		||||
UPDATE branches SET parentNoteId = '_bulkAction' WHERE parentNoteId = 'bulkaction';
 | 
			
		||||
UPDATE branches SET noteId = '_bulkAction' WHERE noteId = 'bulkaction';
 | 
			
		||||
UPDATE attributes SET noteId = '_bulkAction' WHERE noteId = 'bulkaction';
 | 
			
		||||
UPDATE attributes SET value = '_bulkAction' WHERE type = 'relation' AND value = 'bulkaction';
 | 
			
		||||
UPDATE entity_changes SET entityId = '_bulkAction' WHERE entityId = 'bulkaction';
 | 
			
		||||
 | 
			
		||||
UPDATE notes SET noteId = '_sqlConsole', title = 'SQL Console History' WHERE noteId = 'sqlconsole';
 | 
			
		||||
UPDATE note_contents SET noteId = '_sqlConsole' WHERE noteId = 'sqlconsole';
 | 
			
		||||
UPDATE note_revisions SET noteId = '_sqlConsole' WHERE noteId = 'sqlconsole';
 | 
			
		||||
UPDATE branches SET noteId = '_sqlConsole' WHERE noteId = 'sqlconsole';
 | 
			
		||||
UPDATE branches SET parentNoteId = '_sqlConsole' WHERE parentNoteId = 'sqlconsole';
 | 
			
		||||
UPDATE attributes SET noteId = '_sqlConsole' WHERE noteId = 'sqlconsole';
 | 
			
		||||
UPDATE attributes SET value = '_sqlConsole' WHERE type = 'relation' AND value = 'sqlconsole';
 | 
			
		||||
UPDATE entity_changes SET entityId = '_sqlConsole' WHERE entityId = 'sqlconsole';
 | 
			
		||||
 | 
			
		||||
UPDATE notes SET noteId = '_hidden', title = 'Hidden Notes' WHERE noteId = 'hidden';
 | 
			
		||||
UPDATE note_contents SET noteId = '_hidden' WHERE noteId = 'hidden';
 | 
			
		||||
UPDATE note_revisions SET noteId = '_hidden' WHERE noteId = 'hidden';
 | 
			
		||||
UPDATE branches SET noteId = '_hidden', prefix = NULL WHERE noteId = 'hidden';
 | 
			
		||||
UPDATE branches SET parentNoteId = '_hidden' WHERE parentNoteId = 'hidden';
 | 
			
		||||
UPDATE attributes SET noteId = '_hidden' WHERE noteId = 'hidden';
 | 
			
		||||
UPDATE attributes SET value = '_hidden' WHERE type = 'relation' AND value = 'hidden';
 | 
			
		||||
UPDATE entity_changes SET entityId = '_hidden' WHERE entityId = 'hidden';
 | 
			
		||||
 | 
			
		||||
UPDATE notes SET noteId = '_search', title = 'Search History' WHERE noteId = 'search';
 | 
			
		||||
UPDATE note_contents SET noteId = '_search' WHERE noteId = 'search';
 | 
			
		||||
UPDATE note_revisions SET noteId = '_search' WHERE noteId = 'search';
 | 
			
		||||
UPDATE branches SET noteId = '_search' WHERE noteId = 'search';
 | 
			
		||||
UPDATE branches SET parentNoteId = '_search' WHERE parentNoteId = 'search';
 | 
			
		||||
UPDATE attributes SET noteId = '_search' WHERE noteId = 'search';
 | 
			
		||||
UPDATE attributes SET value = '_search' WHERE type = 'relation' AND value = 'search';
 | 
			
		||||
UPDATE entity_changes SET entityId = '_search' WHERE entityId = 'search';
 | 
			
		||||
 | 
			
		||||
UPDATE notes SET noteId = '_share', title = 'Shared Notes' WHERE noteId = 'share';
 | 
			
		||||
UPDATE note_contents SET noteId = '_share' WHERE noteId = 'share';
 | 
			
		||||
UPDATE note_revisions SET noteId = '_share' WHERE noteId = 'share';
 | 
			
		||||
UPDATE branches SET noteId = '_share' WHERE noteId = 'share';
 | 
			
		||||
UPDATE branches SET parentNoteId = '_share' WHERE parentNoteId = 'share';
 | 
			
		||||
UPDATE attributes SET noteId = '_share' WHERE noteId = 'share';
 | 
			
		||||
UPDATE attributes SET value = '_share' WHERE type = 'relation' AND value = 'share';
 | 
			
		||||
UPDATE entity_changes SET entityId = '_share' WHERE entityId = 'share';
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
module.exports = () => {
 | 
			
		||||
    const hiddenSubtreeService = require('../../src/services/hidden_subtree');
 | 
			
		||||
    const cls = require("../../src/services/cls");
 | 
			
		||||
    const beccaLoader = require("../../src/becca/becca_loader");
 | 
			
		||||
 | 
			
		||||
    cls.init(() => {
 | 
			
		||||
        beccaLoader.load();
 | 
			
		||||
        // make sure the hidden subtree exists since the subsequent migrations we will move some existing notes into it (share...)
 | 
			
		||||
        // in previous releases hidden subtree was created lazily
 | 
			
		||||
        hiddenSubtreeService.checkHiddenSubtree(true);
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
@@ -1,2 +0,0 @@
 | 
			
		||||
DELETE FROM branches WHERE noteId = '_share' AND parentNoteId != 'root' AND parentNoteId != '_hidden'; -- delete all other branches of _share if any
 | 
			
		||||
UPDATE branches SET parentNoteId = '_hidden' WHERE noteId = '_share';
 | 
			
		||||
@@ -1,2 +0,0 @@
 | 
			
		||||
DELETE FROM branches WHERE noteId = '_globalNoteMap' AND parentNoteId != 'singles' AND parentNoteId != '_hidden'; -- make sure there are no clones which would fail at the next line
 | 
			
		||||
UPDATE branches SET parentNoteId = '_hidden' WHERE noteId = '_globalNoteMap';
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
DELETE FROM branches WHERE noteId = 'singles';
 | 
			
		||||
DELETE FROM notes WHERE noteId = 'singles';
 | 
			
		||||
DELETE FROM note_contents WHERE noteId = 'singles';
 | 
			
		||||
DELETE FROM note_revisions WHERE noteId = 'singles';
 | 
			
		||||
DELETE FROM attributes WHERE noteId = 'singles';
 | 
			
		||||
DELETE FROM entity_changes WHERE entityId = 'singles';
 | 
			
		||||
@@ -1,21 +0,0 @@
 | 
			
		||||
module.exports = () => {
 | 
			
		||||
    const cls = require("../../src/services/cls");
 | 
			
		||||
    const cloningService = require("../../src/services/cloning");
 | 
			
		||||
    const beccaLoader = require("../../src/becca/becca_loader");
 | 
			
		||||
    const becca = require("../../src/becca/becca");
 | 
			
		||||
 | 
			
		||||
    cls.init(() => {
 | 
			
		||||
        beccaLoader.load();
 | 
			
		||||
 | 
			
		||||
        for (const attr of becca.findAttributes('label','bookmarked')) {
 | 
			
		||||
            cloningService.toggleNoteInParent(true, attr.noteId, '_lbBookmarks');
 | 
			
		||||
 | 
			
		||||
            attr.markAsDeleted("0204__migrate_bookmarks_to_clones");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // bookmarkFolder used to work in 0.57 without the bookmarked label
 | 
			
		||||
        for (const attr of becca.findAttributes('label','bookmarkFolder')) {
 | 
			
		||||
            cloningService.toggleNoteInParent(true, attr.noteId, '_lbBookmarks');
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
UPDATE notes SET type = 'relationMap' WHERE type = 'relation-map';
 | 
			
		||||
UPDATE notes SET type = 'noteMap' WHERE type = 'note-map';
 | 
			
		||||
UPDATE notes SET type = 'webView' WHERE type = 'web-view';
 | 
			
		||||
@@ -1,33 +0,0 @@
 | 
			
		||||
// the history was previously not exposed and the fact they were not cleaned up is rather a side-effect than an intention
 | 
			
		||||
 | 
			
		||||
module.exports = () => {
 | 
			
		||||
    const cls = require("../../src/services/cls");
 | 
			
		||||
    const beccaLoader = require("../../src/becca/becca_loader");
 | 
			
		||||
    const becca = require("../../src/becca/becca");
 | 
			
		||||
 | 
			
		||||
    cls.init(() => {
 | 
			
		||||
        beccaLoader.load();
 | 
			
		||||
 | 
			
		||||
        // deleting just branches because they might be cloned (and therefore saved) also outside of the hidden subtree
 | 
			
		||||
 | 
			
		||||
        const searchRoot = becca.getNote('_search');
 | 
			
		||||
 | 
			
		||||
        for (const searchBranch of searchRoot.getChildBranches()) {
 | 
			
		||||
            const searchNote = searchBranch.getNote();
 | 
			
		||||
 | 
			
		||||
            if (searchNote.type === 'search') {
 | 
			
		||||
                searchBranch.deleteBranch('0206__delete_search_and_sql_console_history');
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const sqlConsoleRoot = becca.getNote('_sqlConsole');
 | 
			
		||||
 | 
			
		||||
        for (const sqlConsoleBranch of sqlConsoleRoot.getChildBranches()) {
 | 
			
		||||
            const sqlConsoleNote = sqlConsoleBranch.getNote();
 | 
			
		||||
 | 
			
		||||
            if (sqlConsoleNote.type === 'code' && sqlConsoleNote.mime === 'text/x-sqlite;schema=trilium') {
 | 
			
		||||
                sqlConsoleBranch.deleteBranch('0206__delete_search_and_sql_console_history');
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
@@ -1,2 +0,0 @@
 | 
			
		||||
UPDATE notes SET title = 'SQL Console History' WHERE noteId = '_sqlConsole';
 | 
			
		||||
UPDATE notes SET title = 'Search History' WHERE noteId = '_search';
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
module.exports = () => {
 | 
			
		||||
    const cls = require("../../src/services/cls");
 | 
			
		||||
    const beccaLoader = require("../../src/becca/becca_loader");
 | 
			
		||||
    const becca = require("../../src/becca/becca");
 | 
			
		||||
 | 
			
		||||
    cls.init(() => {
 | 
			
		||||
        beccaLoader.load();
 | 
			
		||||
 | 
			
		||||
        for (const label of becca.getNote('_hidden').getLabels('archived')) {
 | 
			
		||||
            label.markAsDeleted('0208__remove_archived_from_hidden');
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
UPDATE attributes SET name = 'workspaceInbox' WHERE type = 'label' AND name = 'hoistedInbox';
 | 
			
		||||
UPDATE entity_changes SET entityId = 'workspaceInbox' WHERE entityName = 'attributes' AND entityId = 'hoistedInbox';
 | 
			
		||||
 | 
			
		||||
UPDATE attributes SET name = 'workspaceSearchHome' WHERE type = 'label' AND name = 'hoistedSearchHome';
 | 
			
		||||
UPDATE entity_changes SET entityId = 'workspaceSearchHome' WHERE entityName = 'attributes' AND entityId = 'hoistedSearchHome';
 | 
			
		||||
@@ -1,24 +0,0 @@
 | 
			
		||||
module.exports = async () => {
 | 
			
		||||
    const cls = require("../../src/services/cls");
 | 
			
		||||
    const beccaLoader = require("../../src/becca/becca_loader");
 | 
			
		||||
    const log = require("../../src/services/log");
 | 
			
		||||
    const consistencyChecks = require("../../src/services/consistency_checks");
 | 
			
		||||
    const noteService = require("../../src/services/notes");
 | 
			
		||||
 | 
			
		||||
    await cls.init(async () => {
 | 
			
		||||
        // precaution for the 0211 migration
 | 
			
		||||
        noteService.eraseDeletedNotesNow();
 | 
			
		||||
 | 
			
		||||
        beccaLoader.load();
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            // precaution before running 211 which might produce unique constraint problems if the DB was not consistent
 | 
			
		||||
            consistencyChecks.runOnDemandChecksWithoutExclusiveLock(true);
 | 
			
		||||
        }
 | 
			
		||||
        catch (e) {
 | 
			
		||||
            // consistency checks might start failing in the future if there's some incompatible migration down the road
 | 
			
		||||
            // we can optimistically assume the DB is consistent and still continue
 | 
			
		||||
            log.error(`Consistency checks failed in migration 0210: ${e.message} ${e.stack}`);
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
-- case based on isDeleted is needed, otherwise 2 branches (1 deleted, 1 not) might get the same ID
 | 
			
		||||
UPDATE entity_changes SET entityId = COALESCE((
 | 
			
		||||
    SELECT
 | 
			
		||||
        CASE isDeleted
 | 
			
		||||
            WHEN 0 THEN parentNoteId || '_' || noteId
 | 
			
		||||
            WHEN 1 THEN branchId
 | 
			
		||||
        END
 | 
			
		||||
    FROM branches WHERE branchId = entityId
 | 
			
		||||
), entityId)
 | 
			
		||||
WHERE entityName = 'branches' AND isErased = 0;
 | 
			
		||||
 | 
			
		||||
UPDATE branches SET branchId = parentNoteId || '_' || noteId WHERE isDeleted = 0;
 | 
			
		||||
@@ -1,27 +0,0 @@
 | 
			
		||||
module.exports = () => {
 | 
			
		||||
    const cls = require("../../src/services/cls");
 | 
			
		||||
    const beccaLoader = require("../../src/becca/becca_loader");
 | 
			
		||||
    const becca = require("../../src/becca/becca");
 | 
			
		||||
    const log = require("../../src/services/log");
 | 
			
		||||
 | 
			
		||||
    cls.init(() => {
 | 
			
		||||
        beccaLoader.load();
 | 
			
		||||
 | 
			
		||||
        const hidden = becca.getNote("_hidden");
 | 
			
		||||
 | 
			
		||||
        if (!hidden) {
 | 
			
		||||
            log.info("MIGRATION 212: no _hidden note, skipping.");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for (const noteId of hidden.getSubtreeNoteIds({includeHidden: true})) {
 | 
			
		||||
            if (noteId.startsWith("_")) { // is "named" note
 | 
			
		||||
                const note = becca.getNote(noteId);
 | 
			
		||||
 | 
			
		||||
                for (const attr of note.getOwnedAttributes()) {
 | 
			
		||||
                    attr.markAsDeleted("0212__delete_all_attributes_of_named_notes");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
@@ -1,48 +0,0 @@
 | 
			
		||||
module.exports = () => {
 | 
			
		||||
    const beccaLoader = require("../../src/becca/becca_loader");
 | 
			
		||||
    const becca = require("../../src/becca/becca");
 | 
			
		||||
    const cls = require("../../src/services/cls");
 | 
			
		||||
    const log = require("../../src/services/log");
 | 
			
		||||
 | 
			
		||||
    cls.init(() => {
 | 
			
		||||
        beccaLoader.load();
 | 
			
		||||
 | 
			
		||||
        for (const note of Object.values(becca.notes)) {
 | 
			
		||||
            try {
 | 
			
		||||
                if (!note.isJavaScript()) {
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (!note.mime?.endsWith('env=frontend') && !note.mime?.endsWith('env=backend')) {
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                const origContent = note.getContent().toString();
 | 
			
		||||
                const fixedContent = origContent
 | 
			
		||||
                    .replaceAll("runOnServer", "runOnBackend")
 | 
			
		||||
                    .replaceAll("api.refreshTree()", "")
 | 
			
		||||
                    .replaceAll("addTextToActiveTabEditor", "addTextToActiveContextEditor")
 | 
			
		||||
                    .replaceAll("getActiveTabNote", "getActiveContextNote")
 | 
			
		||||
                    .replaceAll("getActiveTabTextEditor", "getActiveContextTextEditor")
 | 
			
		||||
                    .replaceAll("getActiveTabNotePath", "getActiveContextNotePath")
 | 
			
		||||
                    .replaceAll("getDateNote", "getDayNote")
 | 
			
		||||
                    .replaceAll("utils.unescapeHtml", "unescapeHtml")
 | 
			
		||||
                    .replaceAll("sortNotesByTitle", "sortNotes")
 | 
			
		||||
                    .replaceAll("CollapsibleWidget", "RightPanelWidget")
 | 
			
		||||
                    .replaceAll("TabAwareWidget", "NoteContextAwareWidget")
 | 
			
		||||
                    .replaceAll("TabCachingWidget", "NoteContextAwareWidget")
 | 
			
		||||
                    .replaceAll("NoteContextCachingWidget", "NoteContextAwareWidget");
 | 
			
		||||
 | 
			
		||||
                if (origContent !== fixedContent) {
 | 
			
		||||
                    log.info(`Replacing legacy API calls for note '${note.noteId}'`);
 | 
			
		||||
 | 
			
		||||
                    note.saveNoteRevision();
 | 
			
		||||
                    note.setContent(fixedContent);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch (e) {
 | 
			
		||||
                log.error(`Error during migration to 213 for note '${note.noteId}': ${e.message} ${e.stack}`);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										10
									
								
								db/migrations/0215__content_structure.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								db/migrations/0215__content_structure.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "blobs" (
 | 
			
		||||
                                               `blobId`	TEXT NOT NULL,
 | 
			
		||||
                                               `content`	TEXT NULL DEFAULT NULL,
 | 
			
		||||
                                               `dateModified` TEXT NOT NULL,
 | 
			
		||||
                                               `utcDateModified` TEXT NOT NULL,
 | 
			
		||||
                                               PRIMARY KEY(`blobId`)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
ALTER TABLE notes ADD blobId TEXT DEFAULT NULL;
 | 
			
		||||
ALTER TABLE note_revisions ADD blobId TEXT DEFAULT NULL;
 | 
			
		||||
							
								
								
									
										62
									
								
								db/migrations/0216__move_content_into_blobs.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								db/migrations/0216__move_content_into_blobs.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
module.exports = () => {
 | 
			
		||||
    const sql = require("../../src/services/sql");
 | 
			
		||||
    const utils = require("../../src/services/utils");
 | 
			
		||||
 | 
			
		||||
    const existingBlobIds = new Set();
 | 
			
		||||
 | 
			
		||||
    for (const noteId of sql.getColumn(`SELECT noteId FROM note_contents`)) {
 | 
			
		||||
        const row = sql.getRow(`SELECT noteId, content, dateModified, utcDateModified FROM note_contents WHERE noteId = ?`, [noteId]);
 | 
			
		||||
        const blobId = utils.hashedBlobId(row.content);
 | 
			
		||||
 | 
			
		||||
        if (!existingBlobIds.has(blobId)) {
 | 
			
		||||
            existingBlobIds.add(blobId);
 | 
			
		||||
 | 
			
		||||
            sql.insert('blobs', {
 | 
			
		||||
                blobId,
 | 
			
		||||
                content: row.content,
 | 
			
		||||
                dateModified: row.dateModified,
 | 
			
		||||
                utcDateModified: row.utcDateModified
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            sql.execute("UPDATE entity_changes SET entityName = 'blobs', entityId = ? WHERE entityName = 'note_contents' AND entityId = ?", [blobId, row.noteId]);
 | 
			
		||||
        } else {
 | 
			
		||||
            // duplicates
 | 
			
		||||
            sql.execute("DELETE FROM entity_changes WHERE entityName = 'note_contents' AND entityId = ?", [row.noteId]);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        sql.execute('UPDATE notes SET blobId = ? WHERE noteId = ?', [blobId, row.noteId]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (const noteRevisionId of sql.getColumn(`SELECT noteRevisionId FROM note_revision_contents`)) {
 | 
			
		||||
        const row = sql.getRow(`SELECT noteRevisionId, content, utcDateModified FROM note_revision_contents WHERE noteRevisionId = ?`, [noteRevisionId]);
 | 
			
		||||
        const blobId = utils.hashedBlobId(row.content);
 | 
			
		||||
 | 
			
		||||
        if (!existingBlobIds.has(blobId)) {
 | 
			
		||||
            existingBlobIds.add(blobId);
 | 
			
		||||
 | 
			
		||||
            sql.insert('blobs', {
 | 
			
		||||
                blobId,
 | 
			
		||||
                content: row.content,
 | 
			
		||||
                dateModified: row.utcDateModified,
 | 
			
		||||
                utcDateModified: row.utcDateModified
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            sql.execute("UPDATE entity_changes SET entityName = 'blobs', entityId = ? WHERE entityName = 'note_revision_contents' AND entityId = ?", [blobId, row.noteRevisionId]);
 | 
			
		||||
        } else {
 | 
			
		||||
            // duplicates
 | 
			
		||||
            sql.execute("DELETE FROM entity_changes WHERE entityName = 'note_revision_contents' AND entityId = ?", [row.noteId]);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        sql.execute('UPDATE note_revisions SET blobId = ? WHERE noteRevisionId = ?', [blobId, row.noteRevisionId]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const notesWithoutBlobIds = sql.getColumn("SELECT noteId FROM notes WHERE blobId IS NULL");
 | 
			
		||||
    if (notesWithoutBlobIds.length > 0) {
 | 
			
		||||
        throw new Error("BlobIds were not filled correctly in notes: " + JSON.stringify(notesWithoutBlobIds));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const noteRevisionsWithoutBlobIds = sql.getColumn("SELECT noteRevisionId FROM note_revisions WHERE blobId IS NULL");
 | 
			
		||||
    if (noteRevisionsWithoutBlobIds.length > 0) {
 | 
			
		||||
        throw new Error("BlobIds were not filled correctly in note revisions: " + JSON.stringify(noteRevisionsWithoutBlobIds));
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										4
									
								
								db/migrations/0217__drop_content_tables.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								db/migrations/0217__drop_content_tables.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
DROP TABLE note_contents;
 | 
			
		||||
DROP TABLE note_revision_contents;
 | 
			
		||||
 | 
			
		||||
DELETE FROM entity_changes WHERE entityName IN ('note_contents', 'note_revision_contents');
 | 
			
		||||
							
								
								
									
										25
									
								
								db/migrations/0218__rename_note_revision_to_revision.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								db/migrations/0218__rename_note_revision_to_revision.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "revisions" (`revisionId`	TEXT NOT NULL PRIMARY KEY,
 | 
			
		||||
                                        `noteId`	TEXT NOT NULL,
 | 
			
		||||
                                        type TEXT DEFAULT '' NOT NULL,
 | 
			
		||||
                                        mime TEXT DEFAULT '' NOT NULL,
 | 
			
		||||
                                        `title`	TEXT NOT NULL,
 | 
			
		||||
                                        `isProtected`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
                                        blobId TEXT DEFAULT NULL,
 | 
			
		||||
                                        `utcDateLastEdited` TEXT NOT NULL,
 | 
			
		||||
                                        `utcDateCreated` TEXT NOT NULL,
 | 
			
		||||
                                        `utcDateModified` TEXT NOT NULL,
 | 
			
		||||
                                        `dateLastEdited` TEXT NOT NULL,
 | 
			
		||||
                                        `dateCreated` TEXT NOT NULL);
 | 
			
		||||
 | 
			
		||||
INSERT INTO revisions (revisionId, noteId, type, mime, title, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, blobId)
 | 
			
		||||
SELECT noteRevisionId, noteId, type, mime, title, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, blobId FROM note_revisions;
 | 
			
		||||
 | 
			
		||||
DROP TABLE note_revisions;
 | 
			
		||||
 | 
			
		||||
CREATE INDEX `IDX_revisions_noteId` ON `revisions` (`noteId`);
 | 
			
		||||
CREATE INDEX `IDX_revisions_utcDateCreated` ON `revisions` (`utcDateCreated`);
 | 
			
		||||
CREATE INDEX `IDX_revisions_utcDateLastEdited` ON `revisions` (`utcDateLastEdited`);
 | 
			
		||||
CREATE INDEX `IDX_revisions_dateCreated` ON `revisions` (`dateCreated`);
 | 
			
		||||
CREATE INDEX `IDX_revisions_dateLastEdited` ON `revisions` (`dateLastEdited`);
 | 
			
		||||
 | 
			
		||||
UPDATE entity_changes SET entityName = 'revisions' WHERE entityName = 'note_revisions';
 | 
			
		||||
							
								
								
									
										21
									
								
								db/migrations/0219__attachments.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								db/migrations/0219__attachments.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "attachments"
 | 
			
		||||
(
 | 
			
		||||
    attachmentId      TEXT not null primary key,
 | 
			
		||||
    ownerId       TEXT not null,
 | 
			
		||||
    role         TEXT not null,
 | 
			
		||||
    mime         TEXT not null,
 | 
			
		||||
    title         TEXT not null,
 | 
			
		||||
    isProtected    INT  not null DEFAULT 0,
 | 
			
		||||
    position     INT  default 0 not null,
 | 
			
		||||
    blobId    TEXT DEFAULT null,
 | 
			
		||||
    dateModified TEXT NOT NULL,
 | 
			
		||||
    utcDateModified TEXT not null,
 | 
			
		||||
    utcDateScheduledForErasureSince TEXT DEFAULT NULL,
 | 
			
		||||
    isDeleted    INT  not null,
 | 
			
		||||
    deleteId    TEXT DEFAULT NULL);
 | 
			
		||||
 | 
			
		||||
CREATE INDEX IDX_attachments_ownerId_role
 | 
			
		||||
    on attachments (ownerId, role);
 | 
			
		||||
 | 
			
		||||
CREATE INDEX IDX_attachments_utcDateScheduledForErasureSince
 | 
			
		||||
    on attachments (utcDateScheduledForErasureSince);
 | 
			
		||||
							
								
								
									
										27
									
								
								db/migrations/0220__migrate_images_to_attachments.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								db/migrations/0220__migrate_images_to_attachments.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
module.exports = () => {
 | 
			
		||||
    const beccaLoader = require("../../src/becca/becca_loader");
 | 
			
		||||
    const becca = require("../../src/becca/becca");
 | 
			
		||||
    const cls = require("../../src/services/cls");
 | 
			
		||||
    const log = require("../../src/services/log");
 | 
			
		||||
    const sql = require("../../src/services/sql");
 | 
			
		||||
 | 
			
		||||
    cls.init(() => {
 | 
			
		||||
        // emergency disabling of image compression since it appears to make problems in migration to 0.61
 | 
			
		||||
        sql.execute(`UPDATE options SET value = 'false' WHERE name = 'compressImages'`);
 | 
			
		||||
 | 
			
		||||
        beccaLoader.load();
 | 
			
		||||
 | 
			
		||||
        for (const note of Object.values(becca.notes)) {
 | 
			
		||||
            try {
 | 
			
		||||
                const attachment = note.convertToParentAttachment({autoConversion: true});
 | 
			
		||||
 | 
			
		||||
                if (attachment) {
 | 
			
		||||
                    log.info(`Auto-converted note '${note.noteId}' into attachment '${attachment.attachmentId}'.`);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch (e) {
 | 
			
		||||
                log.error(`Cannot convert note '${note.noteId}' to attachment: ${e.message} ${e.stack}`);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
@@ -0,0 +1,2 @@
 | 
			
		||||
DELETE FROM options WHERE name = 'hideIncludedImages_main';
 | 
			
		||||
DELETE FROM entity_changes WHERE entityName = 'options' AND entityId = 'hideIncludedImages_main';
 | 
			
		||||
@@ -0,0 +1,2 @@
 | 
			
		||||
UPDATE options SET name = 'openNoteContexts' WHERE name = 'openTabs';
 | 
			
		||||
UPDATE entity_changes SET entityId = 'openNoteContexts' WHERE entityName = 'options' AND entityId = 'openTabs';
 | 
			
		||||
							
								
								
									
										1
									
								
								db/migrations/0223__NOOP.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								db/migrations/0223__NOOP.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
SELECT 1;
 | 
			
		||||
							
								
								
									
										14
									
								
								db/migrations/0224__fix_blobIds.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								db/migrations/0224__fix_blobIds.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
UPDATE blobs SET blobId = REPLACE(blobId, '+', 'X');
 | 
			
		||||
UPDATE blobs SET blobId = REPLACE(blobId, '/', 'Y');
 | 
			
		||||
 | 
			
		||||
UPDATE notes SET blobId = REPLACE(blobId, '+', 'X');
 | 
			
		||||
UPDATE notes SET blobId = REPLACE(blobId, '/', 'Y');
 | 
			
		||||
 | 
			
		||||
UPDATE attachments SET blobId = REPLACE(blobId, '+', 'X');
 | 
			
		||||
UPDATE attachments SET blobId = REPLACE(blobId, '/', 'Y');
 | 
			
		||||
 | 
			
		||||
UPDATE revisions SET blobId = REPLACE(blobId, '+', 'X');
 | 
			
		||||
UPDATE revisions SET blobId = REPLACE(blobId, '/', 'Y');
 | 
			
		||||
 | 
			
		||||
UPDATE entity_changes SET entityId = REPLACE(entityId, '+', 'X') WHERE entityName = 'blobs';
 | 
			
		||||
UPDATE entity_changes SET entityId = REPLACE(entityId, '/', 'Y') WHERE entityName = 'blobs';
 | 
			
		||||
							
								
								
									
										3
									
								
								db/migrations/0225__create_blobId_indices.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								db/migrations/0225__create_blobId_indices.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
CREATE INDEX IF NOT EXISTS IDX_notes_blobId on notes (blobId);
 | 
			
		||||
CREATE INDEX IF NOT EXISTS IDX_revisions_blobId on revisions (blobId);
 | 
			
		||||
CREATE INDEX IF NOT EXISTS IDX_attachments_blobId on attachments (blobId);
 | 
			
		||||
							
								
								
									
										1
									
								
								db/migrations/0226__rename_noteSize_label.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								db/migrations/0226__rename_noteSize_label.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
UPDATE attributes SET value = 'contentAndAttachmentsAndRevisionsSize' WHERE name = 'orderBy' AND value = 'noteSize';
 | 
			
		||||
							
								
								
									
										2
									
								
								db/migrations/0227__disable_image_compression.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								db/migrations/0227__disable_image_compression.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
-- emergency disabling of image compression since it appears to make problems in migration to 0.61
 | 
			
		||||
UPDATE options SET value = 'false' WHERE name = 'compressImages';
 | 
			
		||||
@@ -35,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,
 | 
			
		||||
@@ -42,27 +43,18 @@ 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 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,
 | 
			
		||||
@@ -94,11 +86,11 @@ 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);
 | 
			
		||||
@@ -112,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,3 +1,5 @@
 | 
			
		||||
# 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:
 | 
			
		||||
@@ -8,7 +10,7 @@ services:
 | 
			
		||||
    ports:
 | 
			
		||||
      - "8080:8080"
 | 
			
		||||
    volumes:
 | 
			
		||||
      - trilium:/home/node/trilium-data
 | 
			
		||||
      - ${TRILIUM_DATA_DIR:-~/trilium-data}:/home/node/trilium-data
 | 
			
		||||
 | 
			
		||||
volumes:
 | 
			
		||||
  trilium:
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@ const fs = require("fs");
 | 
			
		||||
const dataDir = require("./src/services/data_dir");
 | 
			
		||||
const config = ini.parse(fs.readFileSync(dataDir.CONFIG_INI_PATH, 'utf-8'));
 | 
			
		||||
 | 
			
		||||
if (config.https) {
 | 
			
		||||
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);
 | 
			
		||||
 
 | 
			
		||||
@@ -93,7 +93,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line16">line 16</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line18">line 18</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -183,7 +183,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line53">line 53</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line35">line 35</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -211,7 +211,7 @@
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="addEntityChange"><span class="type-signature">(protected) </span>addEntityChange<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    <h4 class="name" id="_getContent"><span class="type-signature">(protected) </span>_getContent<span class="signature">()</span><span class="type-signature"> → {string|Buffer}</span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -259,7 +259,112 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line62">line 62</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line250">line 250</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
    <dt>
 | 
			
		||||
        Type
 | 
			
		||||
    </dt>
 | 
			
		||||
    <dd>
 | 
			
		||||
        
 | 
			
		||||
<span class="param-type">string</span>
 | 
			
		||||
|
 | 
			
		||||
 | 
			
		||||
<span class="param-type">Buffer</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="_setContent"><span class="type-signature">(protected) </span>_setContent<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_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line128">line 128</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -343,7 +448,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line18">line 18</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line20">line 20</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -379,7 +484,7 @@
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="generateHash"><span class="type-signature">(protected) </span>generateHash<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    <h4 class="name" id="generateHash"><span class="type-signature">(protected) </span>generateHash<span class="signature">()</span><span class="type-signature"> → {string}</span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -427,7 +532,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line30">line 30</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line59">line 59</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -452,6 +557,22 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
    <dt>
 | 
			
		||||
        Type
 | 
			
		||||
    </dt>
 | 
			
		||||
    <dd>
 | 
			
		||||
        
 | 
			
		||||
<span class="param-type">string</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -463,7 +584,9 @@
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="generateIdIfNecessary"><span class="type-signature">(protected) </span>generateIdIfNecessary<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="getPojo"><span class="type-signature">(abstract, protected) </span>getPojo<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -511,7 +634,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line23">line 23</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line82">line 82</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -679,7 +802,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line45">line 45</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line27">line 27</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -725,7 +848,7 @@
 | 
			
		||||
<div class="description">
 | 
			
		||||
    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.
 | 
			
		||||
This is a low-level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead.
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -833,7 +956,91 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line128">line 128</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line267">line 267</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="putEntityChange"><span class="type-signature">(protected) </span>putEntityChange<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_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line44">line 44</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -921,7 +1128,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line83">line 83</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line91">line 91</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -985,13 +1192,13 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
 | 
			
		||||
</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="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="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
 | 
			
		||||
    <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.1</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -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_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line16">line 16</a>
 | 
			
		||||
        <a href="becca_entities_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line22">line 22</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -205,7 +205,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_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line47">line 47</a>
 | 
			
		||||
        <a href="becca_entities_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line53">line 53</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -268,7 +268,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_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line53">line 53</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line35">line 35</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -336,7 +336,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_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line59">line 59</a>
 | 
			
		||||
        <a href="becca_entities_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line65">line 65</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -404,7 +404,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_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line53">line 53</a>
 | 
			
		||||
        <a href="becca_entities_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line59">line 59</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -464,74 +464,6 @@ 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_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line49">line 49</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">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -558,7 +490,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="position"><span class="type-signature"></span>position<span class="type-signature"> :<a href="global.html#int">int</a></span></h4>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -569,7 +501,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#int">int</a></span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        </li>
 | 
			
		||||
@@ -608,7 +540,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_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line51">line 51</a>
 | 
			
		||||
        <a href="becca_entities_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line61">line 61</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
<h4 class="name" id="type"><span class="type-signature"></span>type<span class="type-signature"> :<a href="global.html#AttributeType">AttributeType</a></span></h4>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <h5>Type:</h5>
 | 
			
		||||
    <ul>
 | 
			
		||||
        <li>
 | 
			
		||||
            
 | 
			
		||||
<span class="param-type"><a href="global.html#AttributeType">AttributeType</a></span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        </li>
 | 
			
		||||
    </ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line57">line 57</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -676,7 +676,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_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line61">line 61</a>
 | 
			
		||||
        <a href="becca_entities_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line67">line 67</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -744,7 +744,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_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line57">line 57</a>
 | 
			
		||||
        <a href="becca_entities_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line63">line 63</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -772,7 +772,7 @@ and relation (representing named relationship between source and target note)</d
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="addEntityChange"><span class="type-signature">(protected) </span>addEntityChange<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    <h4 class="name" id="_getContent"><span class="type-signature">(protected) </span>_getContent<span class="signature">()</span><span class="type-signature"> → {string|Buffer}</span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -802,7 +802,7 @@ and relation (representing named relationship between source and target note)</d
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#addEntityChange">AbstractBeccaEntity#addEntityChange</a>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#_getContent">AbstractBeccaEntity#_getContent</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -825,7 +825,117 @@ 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_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line62">line 62</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line250">line 250</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
    <dt>
 | 
			
		||||
        Type
 | 
			
		||||
    </dt>
 | 
			
		||||
    <dd>
 | 
			
		||||
        
 | 
			
		||||
<span class="param-type">string</span>
 | 
			
		||||
|
 | 
			
		||||
 | 
			
		||||
<span class="param-type">Buffer</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="_setContent"><span class="type-signature">(protected) </span>_setContent<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#_setContent">AbstractBeccaEntity#_setContent</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line128">line 128</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -914,7 +1024,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_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line18">line 18</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line20">line 20</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -950,7 +1060,7 @@ and relation (representing named relationship between source and target note)</d
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="generateHash"><span class="type-signature">(protected) </span>generateHash<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    <h4 class="name" id="generateHash"><span class="type-signature">(protected) </span>generateHash<span class="signature">()</span><span class="type-signature"> → {string}</span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -1003,7 +1113,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_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line30">line 30</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line59">line 59</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1028,98 +1138,27 @@ and relation (representing named relationship between source and target note)</d
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
    <dt>
 | 
			
		||||
        Type
 | 
			
		||||
    </dt>
 | 
			
		||||
    <dd>
 | 
			
		||||
        
 | 
			
		||||
<span class="param-type">string</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="generateIdIfNecessary"><span class="type-signature">(protected) </span>generateIdIfNecessary<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#generateIdIfNecessary">AbstractBeccaEntity#generateIdIfNecessary</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line23">line 23</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    </dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
@@ -1176,7 +1215,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_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line129">line 129</a>
 | 
			
		||||
        <a href="becca_entities_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line135">line 135</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1227,6 +1266,95 @@ and relation (representing named relationship between source and target note)</d
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="getPojo"><span class="type-signature">(abstract, protected) </span>getPojo<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#getPojo">AbstractBeccaEntity#getPojo</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line82">line 82</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
@@ -1370,7 +1498,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_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line142">line 142</a>
 | 
			
		||||
        <a href="becca_entities_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line148">line 148</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1480,7 +1608,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_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line45">line 45</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line27">line 27</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1564,7 +1692,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_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line157">line 157</a>
 | 
			
		||||
        <a href="becca_entities_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line163">line 163</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1628,7 +1756,7 @@ and relation (representing named relationship between source and target note)</d
 | 
			
		||||
<div class="description">
 | 
			
		||||
    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.
 | 
			
		||||
This is a low-level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead.
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1741,7 +1869,96 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line128">line 128</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line267">line 267</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="putEntityChange"><span class="type-signature">(protected) </span>putEntityChange<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#putEntityChange">AbstractBeccaEntity#putEntityChange</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line44">line 44</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1834,7 +2051,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line83">line 83</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line91">line 91</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1898,13 +2115,13 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
 | 
			
		||||
</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="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="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
 | 
			
		||||
    <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.1</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -203,7 +203,7 @@ Always check noteId instead.</div>
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line53">line 53</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line35">line 35</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -463,7 +463,7 @@ of deletion should not act as a clone.
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_bbranch.js.html">becca/entities/bbranch.js</a>, <a href="becca_entities_bbranch.js.html#line133">line 133</a>
 | 
			
		||||
        <a href="becca_entities_bbranch.js.html">becca/entities/bbranch.js</a>, <a href="becca_entities_bbranch.js.html#line134">line 134</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -549,7 +549,7 @@ of deletion should not act as a clone.
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
<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>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -560,7 +560,7 @@ of deletion should not act as a clone.
 | 
			
		||||
    <ul>
 | 
			
		||||
        <li>
 | 
			
		||||
            
 | 
			
		||||
<span class="param-type">int</span>
 | 
			
		||||
<span class="param-type"><a href="global.html#int">int</a></span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        </li>
 | 
			
		||||
@@ -657,7 +657,7 @@ of deletion should not act as a clone.
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_bbranch.js.html">becca/entities/bbranch.js</a>, <a href="becca_entities_bbranch.js.html#line111">line 111</a>
 | 
			
		||||
        <a href="becca_entities_bbranch.js.html">becca/entities/bbranch.js</a>, <a href="becca_entities_bbranch.js.html#line112">line 112</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -892,7 +892,7 @@ of deletion should not act as a clone.
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="addEntityChange"><span class="type-signature">(protected) </span>addEntityChange<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    <h4 class="name" id="_getContent"><span class="type-signature">(protected) </span>_getContent<span class="signature">()</span><span class="type-signature"> → {string|Buffer}</span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -922,7 +922,7 @@ of deletion should not act as a clone.
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#addEntityChange">AbstractBeccaEntity#addEntityChange</a>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#_getContent">AbstractBeccaEntity#_getContent</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -945,7 +945,117 @@ of deletion should not act as a clone.
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line62">line 62</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line250">line 250</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
    <dt>
 | 
			
		||||
        Type
 | 
			
		||||
    </dt>
 | 
			
		||||
    <dd>
 | 
			
		||||
        
 | 
			
		||||
<span class="param-type">string</span>
 | 
			
		||||
|
 | 
			
		||||
 | 
			
		||||
<span class="param-type">Buffer</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="_setContent"><span class="type-signature">(protected) </span>_setContent<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#_setContent">AbstractBeccaEntity#_setContent</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line128">line 128</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1034,7 +1144,7 @@ of deletion should not act as a clone.
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line18">line 18</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line20">line 20</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1216,7 +1326,7 @@ of deletion should not act as a clone.
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_bbranch.js.html">becca/entities/bbranch.js</a>, <a href="becca_entities_bbranch.js.html#line145">line 145</a>
 | 
			
		||||
        <a href="becca_entities_bbranch.js.html">becca/entities/bbranch.js</a>, <a href="becca_entities_bbranch.js.html#line146">line 146</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1274,7 +1384,7 @@ of deletion should not act as a clone.
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="generateHash"><span class="type-signature">(protected) </span>generateHash<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    <h4 class="name" id="generateHash"><span class="type-signature">(protected) </span>generateHash<span class="signature">()</span><span class="type-signature"> → {string}</span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -1327,7 +1437,7 @@ of deletion should not act as a clone.
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line30">line 30</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line59">line 59</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1352,6 +1462,22 @@ of deletion should not act as a clone.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
    <dt>
 | 
			
		||||
        Type
 | 
			
		||||
    </dt>
 | 
			
		||||
    <dd>
 | 
			
		||||
        
 | 
			
		||||
<span class="param-type">string</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1363,7 +1489,111 @@ of deletion should not act as a clone.
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="generateIdIfNecessary"><span class="type-signature">(protected) </span>generateIdIfNecessary<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="getNote"><span class="type-signature"></span>getNote<span class="signature">()</span><span class="type-signature"> → {<a href="BNote.html">BNote</a>}</span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_bbranch.js.html">becca/entities/bbranch.js</a>, <a href="becca_entities_bbranch.js.html#line107">line 107</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
    <dt>
 | 
			
		||||
        Type
 | 
			
		||||
    </dt>
 | 
			
		||||
    <dd>
 | 
			
		||||
        
 | 
			
		||||
<span class="param-type"><a href="BNote.html">BNote</a></span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="getPojo"><span class="type-signature">(abstract, protected) </span>getPojo<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -1393,7 +1623,7 @@ of deletion should not act as a clone.
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#generateIdIfNecessary">AbstractBeccaEntity#generateIdIfNecessary</a>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#getPojo">AbstractBeccaEntity#getPojo</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1416,7 +1646,7 @@ of deletion should not act as a clone.
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line23">line 23</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line82">line 82</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1594,7 +1824,7 @@ of deletion should not act as a clone.
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line45">line 45</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line27">line 27</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1640,7 +1870,7 @@ of deletion should not act as a clone.
 | 
			
		||||
<div class="description">
 | 
			
		||||
    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.
 | 
			
		||||
This is a low-level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead.
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1753,7 +1983,96 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line128">line 128</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line267">line 267</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="putEntityChange"><span class="type-signature">(protected) </span>putEntityChange<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#putEntityChange">AbstractBeccaEntity#putEntityChange</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line44">line 44</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1846,7 +2165,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line83">line 83</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line91">line 91</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1910,13 +2229,13 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
 | 
			
		||||
</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="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="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
 | 
			
		||||
    <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.1</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -205,7 +205,7 @@ from tokenHash and token.</div>
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line53">line 53</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line35">line 35</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -641,7 +641,7 @@ from tokenHash and token.</div>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="addEntityChange"><span class="type-signature">(protected) </span>addEntityChange<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    <h4 class="name" id="_getContent"><span class="type-signature">(protected) </span>_getContent<span class="signature">()</span><span class="type-signature"> → {string|Buffer}</span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -671,7 +671,7 @@ from tokenHash and token.</div>
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#addEntityChange">AbstractBeccaEntity#addEntityChange</a>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#_getContent">AbstractBeccaEntity#_getContent</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -694,7 +694,117 @@ from tokenHash and token.</div>
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line62">line 62</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line250">line 250</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
    <dt>
 | 
			
		||||
        Type
 | 
			
		||||
    </dt>
 | 
			
		||||
    <dd>
 | 
			
		||||
        
 | 
			
		||||
<span class="param-type">string</span>
 | 
			
		||||
|
 | 
			
		||||
 | 
			
		||||
<span class="param-type">Buffer</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="_setContent"><span class="type-signature">(protected) </span>_setContent<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#_setContent">AbstractBeccaEntity#_setContent</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line128">line 128</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -783,7 +893,7 @@ from tokenHash and token.</div>
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line18">line 18</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line20">line 20</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -819,7 +929,7 @@ from tokenHash and token.</div>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="generateHash"><span class="type-signature">(protected) </span>generateHash<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    <h4 class="name" id="generateHash"><span class="type-signature">(protected) </span>generateHash<span class="signature">()</span><span class="type-signature"> → {string}</span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -872,7 +982,7 @@ from tokenHash and token.</div>
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line30">line 30</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line59">line 59</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -897,6 +1007,22 @@ from tokenHash and token.</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
    <dt>
 | 
			
		||||
        Type
 | 
			
		||||
    </dt>
 | 
			
		||||
    <dd>
 | 
			
		||||
        
 | 
			
		||||
<span class="param-type">string</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -908,7 +1034,9 @@ from tokenHash and token.</div>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="generateIdIfNecessary"><span class="type-signature">(protected) </span>generateIdIfNecessary<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="getPojo"><span class="type-signature">(abstract, protected) </span>getPojo<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -938,7 +1066,7 @@ from tokenHash and token.</div>
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#generateIdIfNecessary">AbstractBeccaEntity#generateIdIfNecessary</a>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#getPojo">AbstractBeccaEntity#getPojo</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -961,7 +1089,7 @@ from tokenHash and token.</div>
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line23">line 23</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line82">line 82</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1139,7 +1267,7 @@ from tokenHash and token.</div>
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line45">line 45</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line27">line 27</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1185,7 +1313,7 @@ from tokenHash and token.</div>
 | 
			
		||||
<div class="description">
 | 
			
		||||
    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.
 | 
			
		||||
This is a low-level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead.
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1298,7 +1426,96 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line128">line 128</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line267">line 267</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="putEntityChange"><span class="type-signature">(protected) </span>putEntityChange<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#putEntityChange">AbstractBeccaEntity#putEntityChange</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line44">line 44</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1391,7 +1608,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line83">line 83</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line91">line 91</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1455,13 +1672,13 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
 | 
			
		||||
</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="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="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
 | 
			
		||||
    <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.1</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -30,7 +30,7 @@
 | 
			
		||||
    
 | 
			
		||||
        <h2><span class="attribs"><span class="type-signature"></span></span>BOption<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>
 | 
			
		||||
            <div class="class-description">Option represents a name-value pair, either directly configurable by the user or some system property.</div>
 | 
			
		||||
        
 | 
			
		||||
    
 | 
			
		||||
</header>
 | 
			
		||||
@@ -199,7 +199,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line53">line 53</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line35">line 35</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -267,7 +267,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_boption.js.html">becca/entities/boption.js</a>, <a href="becca_entities_boption.js.html#line24">line 24</a>
 | 
			
		||||
        <a href="becca_entities_boption.js.html">becca/entities/boption.js</a>, <a href="becca_entities_boption.js.html#line29">line 29</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -335,7 +335,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_boption.js.html">becca/entities/boption.js</a>, <a href="becca_entities_boption.js.html#line20">line 20</a>
 | 
			
		||||
        <a href="becca_entities_boption.js.html">becca/entities/boption.js</a>, <a href="becca_entities_boption.js.html#line25">line 25</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -403,7 +403,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_boption.js.html">becca/entities/boption.js</a>, <a href="becca_entities_boption.js.html#line26">line 26</a>
 | 
			
		||||
        <a href="becca_entities_boption.js.html">becca/entities/boption.js</a>, <a href="becca_entities_boption.js.html#line31">line 31</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -471,7 +471,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_boption.js.html">becca/entities/boption.js</a>, <a href="becca_entities_boption.js.html#line22">line 22</a>
 | 
			
		||||
        <a href="becca_entities_boption.js.html">becca/entities/boption.js</a>, <a href="becca_entities_boption.js.html#line27">line 27</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -499,7 +499,7 @@
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="addEntityChange"><span class="type-signature">(protected) </span>addEntityChange<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    <h4 class="name" id="_getContent"><span class="type-signature">(protected) </span>_getContent<span class="signature">()</span><span class="type-signature"> → {string|Buffer}</span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -529,7 +529,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#addEntityChange">AbstractBeccaEntity#addEntityChange</a>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#_getContent">AbstractBeccaEntity#_getContent</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -552,7 +552,117 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line62">line 62</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line250">line 250</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
    <dt>
 | 
			
		||||
        Type
 | 
			
		||||
    </dt>
 | 
			
		||||
    <dd>
 | 
			
		||||
        
 | 
			
		||||
<span class="param-type">string</span>
 | 
			
		||||
|
 | 
			
		||||
 | 
			
		||||
<span class="param-type">Buffer</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="_setContent"><span class="type-signature">(protected) </span>_setContent<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#_setContent">AbstractBeccaEntity#_setContent</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line128">line 128</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -641,7 +751,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line18">line 18</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line20">line 20</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -677,7 +787,7 @@
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="generateHash"><span class="type-signature">(protected) </span>generateHash<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    <h4 class="name" id="generateHash"><span class="type-signature">(protected) </span>generateHash<span class="signature">()</span><span class="type-signature"> → {string}</span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -730,7 +840,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line30">line 30</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line59">line 59</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -755,6 +865,22 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
    <dt>
 | 
			
		||||
        Type
 | 
			
		||||
    </dt>
 | 
			
		||||
    <dd>
 | 
			
		||||
        
 | 
			
		||||
<span class="param-type">string</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -766,7 +892,9 @@
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="generateIdIfNecessary"><span class="type-signature">(protected) </span>generateIdIfNecessary<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="getPojo"><span class="type-signature">(abstract, protected) </span>getPojo<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -796,7 +924,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#generateIdIfNecessary">AbstractBeccaEntity#generateIdIfNecessary</a>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#getPojo">AbstractBeccaEntity#getPojo</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -819,7 +947,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line23">line 23</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line82">line 82</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -997,7 +1125,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line45">line 45</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line27">line 27</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1043,7 +1171,7 @@
 | 
			
		||||
<div class="description">
 | 
			
		||||
    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.
 | 
			
		||||
This is a low-level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead.
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1156,7 +1284,96 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line128">line 128</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line267">line 267</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="putEntityChange"><span class="type-signature">(protected) </span>putEntityChange<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#putEntityChange">AbstractBeccaEntity#putEntityChange</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line44">line 44</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1249,7 +1466,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line83">line 83</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line91">line 91</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1313,13 +1530,13 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
 | 
			
		||||
</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="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="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
 | 
			
		||||
    <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.1</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -199,7 +199,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line53">line 53</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line35">line 35</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -431,7 +431,7 @@
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="addEntityChange"><span class="type-signature">(protected) </span>addEntityChange<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    <h4 class="name" id="_getContent"><span class="type-signature">(protected) </span>_getContent<span class="signature">()</span><span class="type-signature"> → {string|Buffer}</span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -461,7 +461,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#addEntityChange">AbstractBeccaEntity#addEntityChange</a>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#_getContent">AbstractBeccaEntity#_getContent</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -484,7 +484,117 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line62">line 62</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line250">line 250</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
    <dt>
 | 
			
		||||
        Type
 | 
			
		||||
    </dt>
 | 
			
		||||
    <dd>
 | 
			
		||||
        
 | 
			
		||||
<span class="param-type">string</span>
 | 
			
		||||
|
 | 
			
		||||
 | 
			
		||||
<span class="param-type">Buffer</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="_setContent"><span class="type-signature">(protected) </span>_setContent<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#_setContent">AbstractBeccaEntity#_setContent</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line128">line 128</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -573,7 +683,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line18">line 18</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line20">line 20</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -609,7 +719,7 @@
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="generateHash"><span class="type-signature">(protected) </span>generateHash<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    <h4 class="name" id="generateHash"><span class="type-signature">(protected) </span>generateHash<span class="signature">()</span><span class="type-signature"> → {string}</span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -662,7 +772,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line30">line 30</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line59">line 59</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -687,6 +797,22 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
    <dt>
 | 
			
		||||
        Type
 | 
			
		||||
    </dt>
 | 
			
		||||
    <dd>
 | 
			
		||||
        
 | 
			
		||||
<span class="param-type">string</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -698,7 +824,9 @@
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="generateIdIfNecessary"><span class="type-signature">(protected) </span>generateIdIfNecessary<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="getPojo"><span class="type-signature">(abstract, protected) </span>getPojo<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -728,7 +856,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#generateIdIfNecessary">AbstractBeccaEntity#generateIdIfNecessary</a>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#getPojo">AbstractBeccaEntity#getPojo</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -751,7 +879,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line23">line 23</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line82">line 82</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -929,7 +1057,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line45">line 45</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line27">line 27</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -975,7 +1103,7 @@
 | 
			
		||||
<div class="description">
 | 
			
		||||
    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.
 | 
			
		||||
This is a low-level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead.
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -1088,7 +1216,96 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line128">line 128</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line267">line 267</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="putEntityChange"><span class="type-signature">(protected) </span>putEntityChange<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-overrides">Overrides:</dt>
 | 
			
		||||
    <dd class="tag-overrides"><ul class="dummy"><li>
 | 
			
		||||
        <a href="AbstractBeccaEntity.html#putEntityChange">AbstractBeccaEntity#putEntityChange</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line44">line 44</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1181,7 +1398,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line83">line 83</a>
 | 
			
		||||
        <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line91">line 91</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1245,13 +1462,13 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
 | 
			
		||||
</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="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="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
 | 
			
		||||
    <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.1</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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
											
										
									
								
							@@ -35,6 +35,8 @@ 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;
 | 
			
		||||
 | 
			
		||||
@@ -44,31 +46,11 @@ let becca = null;
 | 
			
		||||
class AbstractBeccaEntity {
 | 
			
		||||
    /** @protected */
 | 
			
		||||
    beforeSaving() {
 | 
			
		||||
        this.generateIdIfNecessary();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @protected */
 | 
			
		||||
    generateIdIfNecessary() {
 | 
			
		||||
        if (!this[this.constructor.primaryKeyName]) {
 | 
			
		||||
            this[this.constructor.primaryKeyName] = utils.newEntityId();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @protected */
 | 
			
		||||
    generateHash(isDeleted = false) {
 | 
			
		||||
        let contentToHash = "";
 | 
			
		||||
 | 
			
		||||
        for (const propertyName of this.constructor.hashedProperties) {
 | 
			
		||||
            contentToHash += `|${this[propertyName]}`;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (isDeleted) {
 | 
			
		||||
            contentToHash += "|deleted";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return utils.hash(contentToHash).substr(0, 10);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @protected */
 | 
			
		||||
    getUtcDateChanged() {
 | 
			
		||||
        return this.utcDateModified || this.utcDateCreated;
 | 
			
		||||
@@ -87,8 +69,8 @@ class AbstractBeccaEntity {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @protected */
 | 
			
		||||
    addEntityChange(isDeleted = false) {
 | 
			
		||||
        entityChangesService.addEntityChange({
 | 
			
		||||
    putEntityChange(isDeleted) {
 | 
			
		||||
        entityChangesService.putEntityChange({
 | 
			
		||||
            entityName: this.constructor.entityName,
 | 
			
		||||
            entityId: this[this.constructor.primaryKeyName],
 | 
			
		||||
            hash: this.generateHash(isDeleted),
 | 
			
		||||
@@ -98,11 +80,37 @@ class AbstractBeccaEntity {
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @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
 | 
			
		||||
     *
 | 
			
		||||
@@ -114,9 +122,7 @@ class AbstractBeccaEntity {
 | 
			
		||||
 | 
			
		||||
        const isNewEntity = !this[primaryKeyName];
 | 
			
		||||
 | 
			
		||||
        if (this.beforeSaving) {
 | 
			
		||||
        this.beforeSaving(opts);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const pojo = this.getPojoToSave();
 | 
			
		||||
 | 
			
		||||
@@ -127,7 +133,7 @@ class AbstractBeccaEntity {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            this.addEntityChange(false);
 | 
			
		||||
            this.putEntityChange(!!this.isDeleted);
 | 
			
		||||
 | 
			
		||||
            if (!cls.isEntityEventsDisabled()) {
 | 
			
		||||
                const eventPayload = {
 | 
			
		||||
@@ -146,10 +152,143 @@ class AbstractBeccaEntity {
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @protected */
 | 
			
		||||
    _setContent(content, opts = {}) {
 | 
			
		||||
        // client code asks to save entity even if blobId didn't change (something else was changed)
 | 
			
		||||
        opts.forceSave = !!opts.forceSave;
 | 
			
		||||
        opts.forceFrontendReload = !!opts.forceFrontendReload;
 | 
			
		||||
 | 
			
		||||
        if (content === null || content === undefined) {
 | 
			
		||||
            throw new Error(`Cannot set null content to ${this.constructor.primaryKeyName} '${this[this.constructor.primaryKeyName]}'`);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (this.hasStringContent()) {
 | 
			
		||||
            content = content.toString();
 | 
			
		||||
        } else {
 | 
			
		||||
            content = Buffer.isBuffer(content) ? content : Buffer.from(content);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const unencryptedContentForHashCalculation = this.#getUnencryptedContentForHashCalculation(content);
 | 
			
		||||
 | 
			
		||||
        if (this.isProtected) {
 | 
			
		||||
            if (protectedSessionService.isProtectedSessionAvailable()) {
 | 
			
		||||
                content = protectedSessionService.encrypt(content);
 | 
			
		||||
            } else {
 | 
			
		||||
                throw new Error(`Cannot update content of blob since protected session is not available.`);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        sql.transactional(() => {
 | 
			
		||||
            const newBlobId = this.#saveBlob(content, unencryptedContentForHashCalculation, opts);
 | 
			
		||||
            const oldBlobId = this.blobId;
 | 
			
		||||
 | 
			
		||||
            if (newBlobId !== oldBlobId || opts.forceSave) {
 | 
			
		||||
                this.blobId = newBlobId;
 | 
			
		||||
                this.save();
 | 
			
		||||
 | 
			
		||||
                if (newBlobId !== oldBlobId) {
 | 
			
		||||
                    this.#deleteBlobIfNotUsed(oldBlobId);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #deleteBlobIfNotUsed(oldBlobId) {
 | 
			
		||||
        if (sql.getValue("SELECT 1 FROM notes WHERE blobId = ? LIMIT 1", [oldBlobId])) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (sql.getValue("SELECT 1 FROM attachments WHERE blobId = ? LIMIT 1", [oldBlobId])) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (sql.getValue("SELECT 1 FROM revisions WHERE blobId = ? LIMIT 1", [oldBlobId])) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        sql.execute("DELETE FROM blobs WHERE blobId = ?", [oldBlobId]);
 | 
			
		||||
        // blobs are not marked as erased in entity_changes, they are just purged completely
 | 
			
		||||
        // this is because technically every keystroke can create a new blob and there would be just too many
 | 
			
		||||
        sql.execute("DELETE FROM entity_changes WHERE entityName = 'blobs' AND entityId = ?", [oldBlobId]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #getUnencryptedContentForHashCalculation(unencryptedContent) {
 | 
			
		||||
        if (this.isProtected) {
 | 
			
		||||
            // a "random" prefix makes sure that the calculated hash/blobId is different for a decrypted/encrypted content
 | 
			
		||||
            const encryptedPrefixSuffix = "t$[nvQg7q)&_ENCRYPTED_?M:Bf&j3jr_";
 | 
			
		||||
            return Buffer.isBuffer(unencryptedContent)
 | 
			
		||||
                ? Buffer.concat([Buffer.from(encryptedPrefixSuffix), unencryptedContent])
 | 
			
		||||
                : `${encryptedPrefixSuffix}${unencryptedContent}`;
 | 
			
		||||
        } else {
 | 
			
		||||
            return unencryptedContent;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #saveBlob(content, unencryptedContentForHashCalculation, opts = {}) {
 | 
			
		||||
        /*
 | 
			
		||||
         * We're using the unencrypted blob for the hash calculation, because otherwise the random IV would
 | 
			
		||||
         * cause every content blob to be unique which would balloon the database size (esp. with revisioning).
 | 
			
		||||
         * This has minor security implications (it's easy to infer that given content is shared between different
 | 
			
		||||
         * notes/attachments), but the trade-off comes out clearly positive.
 | 
			
		||||
         */
 | 
			
		||||
        const newBlobId = utils.hashedBlobId(unencryptedContentForHashCalculation);
 | 
			
		||||
        const blobNeedsInsert = !sql.getValue('SELECT 1 FROM blobs WHERE blobId = ?', [newBlobId]);
 | 
			
		||||
 | 
			
		||||
        if (!blobNeedsInsert) {
 | 
			
		||||
            return newBlobId;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const pojo = {
 | 
			
		||||
            blobId: newBlobId,
 | 
			
		||||
            content: content,
 | 
			
		||||
            dateModified: dateUtils.localNowDateTime(),
 | 
			
		||||
            utcDateModified: dateUtils.utcNowDateTime()
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        sql.upsert("blobs", "blobId", pojo);
 | 
			
		||||
 | 
			
		||||
        // we can't reuse blobId as an entity_changes hash, because this one has to be calculatable without having
 | 
			
		||||
        // access to the decrypted content
 | 
			
		||||
        const hash = blobService.calculateContentHash(pojo);
 | 
			
		||||
 | 
			
		||||
        entityChangesService.putEntityChange({
 | 
			
		||||
            entityName: 'blobs',
 | 
			
		||||
            entityId: newBlobId,
 | 
			
		||||
            hash: hash,
 | 
			
		||||
            isErased: false,
 | 
			
		||||
            utcDateChanged: pojo.utcDateModified,
 | 
			
		||||
            isSynced: true,
 | 
			
		||||
            // overriding componentId will cause frontend to think the change is coming from a different component
 | 
			
		||||
            // and thus reload
 | 
			
		||||
            componentId: opts.forceFrontendReload ? utils.randomString(10) : null
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        eventService.emit(eventService.ENTITY_CHANGED, {
 | 
			
		||||
            entityName: 'blobs',
 | 
			
		||||
            entity: this
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        return newBlobId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @protected
 | 
			
		||||
     * @returns {string|Buffer}
 | 
			
		||||
     */
 | 
			
		||||
    _getContent() {
 | 
			
		||||
        const row = sql.getRow(`SELECT content FROM blobs WHERE blobId = ?`, [this.blobId]);
 | 
			
		||||
 | 
			
		||||
        if (!row) {
 | 
			
		||||
            throw new Error(`Cannot find content for ${this.constructor.primaryKeyName} '${this[this.constructor.primaryKeyName]}', blobId '${this.blobId}'`);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return blobService.processContent(row.content, this.isProtected, this.hasStringContent());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Mark the entity as (soft) deleted. It will be completely erased later.
 | 
			
		||||
     *
 | 
			
		||||
     * This is a low level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead.
 | 
			
		||||
     * This is a low-level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead.
 | 
			
		||||
     *
 | 
			
		||||
     * @param [deleteId=null]
 | 
			
		||||
     */
 | 
			
		||||
@@ -172,7 +311,7 @@ class AbstractBeccaEntity {
 | 
			
		||||
 | 
			
		||||
        log.info(`Marking ${entityName} ${entityId} as deleted`);
 | 
			
		||||
 | 
			
		||||
        this.addEntityChange(true);
 | 
			
		||||
        this.putEntityChange(true);
 | 
			
		||||
 | 
			
		||||
        eventService.emit(eventService.ENTITY_DELETED, { entityName, entityId, entity: this });
 | 
			
		||||
    }
 | 
			
		||||
@@ -189,7 +328,7 @@ class AbstractBeccaEntity {
 | 
			
		||||
 | 
			
		||||
        log.info(`Marking ${entityName} ${entityId} as deleted`);
 | 
			
		||||
 | 
			
		||||
        this.addEntityChange(true);
 | 
			
		||||
        this.putEntityChange(true);
 | 
			
		||||
 | 
			
		||||
        eventService.emit(eventService.ENTITY_DELETED, { entityName, entityId, entity: this });
 | 
			
		||||
    }
 | 
			
		||||
@@ -206,13 +345,13 @@ module.exports = AbstractBeccaEntity;
 | 
			
		||||
</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="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="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
 | 
			
		||||
    <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.1</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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>
 | 
			
		||||
@@ -35,6 +35,12 @@ 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)
 | 
			
		||||
@@ -75,7 +81,7 @@ class BAttribute extends AbstractBeccaEntity {
 | 
			
		||||
        this.attributeId = attributeId;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.noteId = noteId;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        /** @type {AttributeType} */
 | 
			
		||||
        this.type = type;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.name = name;
 | 
			
		||||
@@ -124,7 +130,7 @@ class BAttribute extends AbstractBeccaEntity {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (this.type === 'relation' && !(this.value in this.becca.notes)) {
 | 
			
		||||
            throw new Error(`Cannot save relation '${this.name}' of note '${this.noteId}' since it target not existing note '${this.value}'.`);
 | 
			
		||||
            throw new Error(`Cannot save relation '${this.name}' of note '${this.noteId}' since it targets not existing note '${this.value}'.`);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -169,7 +175,7 @@ class BAttribute extends AbstractBeccaEntity {
 | 
			
		||||
     */
 | 
			
		||||
    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) {
 | 
			
		||||
@@ -216,9 +222,11 @@ class BAttribute extends AbstractBeccaEntity {
 | 
			
		||||
            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) {
 | 
			
		||||
@@ -270,13 +278,13 @@ module.exports = BAttribute;
 | 
			
		||||
</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="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="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
 | 
			
		||||
    <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.1</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>
 | 
			
		||||
@@ -131,6 +131,7 @@ class BBranch extends AbstractBeccaEntity {
 | 
			
		||||
        return this.becca.notes[this.noteId];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {BNote} */
 | 
			
		||||
    getNote() {
 | 
			
		||||
        return this.childNote;
 | 
			
		||||
    }
 | 
			
		||||
@@ -214,11 +215,11 @@ class BBranch extends AbstractBeccaEntity {
 | 
			
		||||
 | 
			
		||||
            // first delete children and then parent - this will show up better in recent changes
 | 
			
		||||
 | 
			
		||||
            log.info(`Deleting note ${note.noteId}`);
 | 
			
		||||
            log.info(`Deleting note '${note.noteId}'`);
 | 
			
		||||
 | 
			
		||||
            this.becca.notes[note.noteId].isBeingDeleted = true;
 | 
			
		||||
 | 
			
		||||
            for (const attribute of note.getOwnedAttributes()) {
 | 
			
		||||
            for (const attribute of note.getOwnedAttributes().slice()) {
 | 
			
		||||
                attribute.markAsDeleted(deleteId);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@@ -226,6 +227,10 @@ class BBranch extends AbstractBeccaEntity {
 | 
			
		||||
                relation.markAsDeleted(deleteId);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            for (const attachment of note.getAttachments()) {
 | 
			
		||||
                attachment.markAsDeleted(deleteId);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            note.markAsDeleted(deleteId);
 | 
			
		||||
 | 
			
		||||
            return true;
 | 
			
		||||
@@ -247,7 +252,7 @@ class BBranch extends AbstractBeccaEntity {
 | 
			
		||||
 | 
			
		||||
            for (const childBranch of this.parentNote.getChildBranches()) {
 | 
			
		||||
                if (maxNotePos < childBranch.notePosition
 | 
			
		||||
                    && childBranch.noteId !== '_hidden' // hidden has very large notePosition to always stay last
 | 
			
		||||
                    && childBranch.noteId !== '_hidden' // hidden has a very large notePosition to always stay last
 | 
			
		||||
                ) {
 | 
			
		||||
                    maxNotePos = childBranch.notePosition;
 | 
			
		||||
                }
 | 
			
		||||
@@ -313,13 +318,13 @@ module.exports = BBranch;
 | 
			
		||||
</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="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="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
 | 
			
		||||
    <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.1</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -114,13 +114,13 @@ module.exports = BEtapiToken;
 | 
			
		||||
</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="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="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
 | 
			
		||||
    <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.1</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -33,9 +33,9 @@ const log = require('../../services/log');
 | 
			
		||||
const sql = require('../../services/sql');
 | 
			
		||||
const utils = require('../../services/utils');
 | 
			
		||||
const dateUtils = require('../../services/date_utils');
 | 
			
		||||
const entityChangesService = require('../../services/entity_changes');
 | 
			
		||||
const AbstractBeccaEntity = require("./abstract_becca_entity");
 | 
			
		||||
const BNoteRevision = require("./bnote_revision");
 | 
			
		||||
const BRevision = require("./brevision");
 | 
			
		||||
const BAttachment = require("./battachment");
 | 
			
		||||
const TaskContext = require("../../services/task_context");
 | 
			
		||||
const dayjs = require("dayjs");
 | 
			
		||||
const utc = require('dayjs/plugin/utc');
 | 
			
		||||
@@ -46,14 +46,29 @@ const LABEL = 'label';
 | 
			
		||||
const RELATION = 'relation';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Trilium's main entity which can represent text note, image, code note, file attachment etc.
 | 
			
		||||
 * 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.
 | 
			
		||||
 * @typedef {"file" | "image" | "search" | "noteMap" | "launcher" | "doc" | "contentWidget" | "text" | "relationMap" | "render" | "canvas" | "mermaid" | "book" | "webView" | "code"} NoteType
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef {Object} NotePathRecord
 | 
			
		||||
 * @property {boolean} isArchived
 | 
			
		||||
 * @property {boolean} isInHoistedSubTree
 | 
			
		||||
 * @property {Array<string>} notePath
 | 
			
		||||
 * @property {boolean} isHidden
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Trilium's main entity, which can represent text note, image, code note, file attachment etc.
 | 
			
		||||
 *
 | 
			
		||||
 * @extends AbstractBeccaEntity
 | 
			
		||||
 */
 | 
			
		||||
class BNote extends AbstractBeccaEntity {
 | 
			
		||||
    static get entityName() { return "notes"; }
 | 
			
		||||
    static get primaryKeyName() { return "noteId"; }
 | 
			
		||||
    static get hashedProperties() { return ["noteId", "title", "isProtected", "type", "mime"]; }
 | 
			
		||||
    static get hashedProperties() { return ["noteId", "title", "isProtected", "type", "mime", "blobId"]; }
 | 
			
		||||
 | 
			
		||||
    constructor(row) {
 | 
			
		||||
        super();
 | 
			
		||||
@@ -73,6 +88,7 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
            row.type,
 | 
			
		||||
            row.mime,
 | 
			
		||||
            row.isProtected,
 | 
			
		||||
            row.blobId,
 | 
			
		||||
            row.dateCreated,
 | 
			
		||||
            row.dateModified,
 | 
			
		||||
            row.utcDateCreated,
 | 
			
		||||
@@ -80,19 +96,21 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    update([noteId, title, type, mime, isProtected, dateCreated, dateModified, utcDateCreated, utcDateModified]) {
 | 
			
		||||
    update([noteId, title, type, mime, isProtected, blobId, dateCreated, dateModified, utcDateCreated, utcDateModified]) {
 | 
			
		||||
        // ------ Database persisted attributes ------
 | 
			
		||||
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.noteId = noteId;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.title = title;
 | 
			
		||||
        /** @type {boolean} */
 | 
			
		||||
        this.isProtected = !!isProtected;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        /** @type {NoteType} */
 | 
			
		||||
        this.type = type;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.mime = mime;
 | 
			
		||||
        /** @type {boolean} */
 | 
			
		||||
        this.isProtected = !!isProtected;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.blobId = blobId;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.dateCreated = dateCreated || dateUtils.localNowDateTime();
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
@@ -101,7 +119,10 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
        this.utcDateCreated = utcDateCreated || dateUtils.utcNowDateTime();
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.utcDateModified = utcDateModified;
 | 
			
		||||
        /** @type {boolean} - set during the deletion operation, before it is completed (removed from becca completely) */
 | 
			
		||||
        /**
 | 
			
		||||
         * set during the deletion operation, before it is completed (removed from becca completely)
 | 
			
		||||
         * @type {boolean}
 | 
			
		||||
         */
 | 
			
		||||
        this.isBeingDeleted = false;
 | 
			
		||||
 | 
			
		||||
        // ------ Derived attributes ------
 | 
			
		||||
@@ -112,7 +133,7 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
        this.decrypt();
 | 
			
		||||
 | 
			
		||||
        /** @type {string|null} */
 | 
			
		||||
        this.flatTextCache = null;
 | 
			
		||||
        this.__flatTextCache = null;
 | 
			
		||||
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
@@ -136,7 +157,7 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
        this.__attributeCache = null;
 | 
			
		||||
        /** @type {BAttribute[]|null}
 | 
			
		||||
         * @private */
 | 
			
		||||
        this.inheritableAttributeCache = null;
 | 
			
		||||
        this.__inheritableAttributeCache = null;
 | 
			
		||||
 | 
			
		||||
        /** @type {BAttribute[]}
 | 
			
		||||
         * @private */
 | 
			
		||||
@@ -146,9 +167,9 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
 | 
			
		||||
        /** @type {BNote[]|null}
 | 
			
		||||
         * @private */
 | 
			
		||||
        this.ancestorCache = null;
 | 
			
		||||
        this.__ancestorCache = null;
 | 
			
		||||
 | 
			
		||||
        // following attributes are filled during searching from database
 | 
			
		||||
        // following attributes are filled during searching in the database
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * size of the content in bytes
 | 
			
		||||
@@ -157,11 +178,17 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
         */
 | 
			
		||||
        this.contentSize = null;
 | 
			
		||||
        /**
 | 
			
		||||
         * size of the content and note revision contents in bytes
 | 
			
		||||
         * size of the note content, attachment contents in bytes
 | 
			
		||||
         * @type {int|null}
 | 
			
		||||
         * @private
 | 
			
		||||
         */
 | 
			
		||||
        this.noteSize = null;
 | 
			
		||||
        this.contentAndAttachmentsSize = null;
 | 
			
		||||
        /**
 | 
			
		||||
         * size of the note content, attachment contents and revision contents in bytes
 | 
			
		||||
         * @type {int|null}
 | 
			
		||||
         * @private
 | 
			
		||||
         */
 | 
			
		||||
        this.contentAndAttachmentsAndRevisionsSize = null;
 | 
			
		||||
        /**
 | 
			
		||||
         * number of note revisions for this note
 | 
			
		||||
         * @type {int|null}
 | 
			
		||||
@@ -231,49 +258,48 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
     * - but to the user note content and title changes are one and the same - single dateModified (so all changes must go through Note and content is not a separate entity)
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    /** @returns {*} */
 | 
			
		||||
    getContent(silentNotFoundError = false) {
 | 
			
		||||
        const row = sql.getRow(`SELECT content FROM note_contents WHERE noteId = ?`, [this.noteId]);
 | 
			
		||||
 | 
			
		||||
        if (!row) {
 | 
			
		||||
            if (silentNotFoundError) {
 | 
			
		||||
                return undefined;
 | 
			
		||||
    /** @returns {string|Buffer}  */
 | 
			
		||||
    getContent() {
 | 
			
		||||
        return this._getContent();
 | 
			
		||||
    }
 | 
			
		||||
            else {
 | 
			
		||||
                throw new Error(`Cannot find note content for noteId=${this.noteId}`);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @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;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        let content = row.content;
 | 
			
		||||
    /**
 | 
			
		||||
     * @param content
 | 
			
		||||
     * @param {object} [opts]
 | 
			
		||||
     * @param {object} [opts.forceSave=false] - will also save this BNote entity
 | 
			
		||||
     * @param {object} [opts.forceFrontendReload=false] - override frontend heuristics on when to reload, instruct to reload
 | 
			
		||||
     */
 | 
			
		||||
    setContent(content, opts) {
 | 
			
		||||
        this._setContent(content, opts);
 | 
			
		||||
 | 
			
		||||
        if (this.isProtected) {
 | 
			
		||||
            if (protectedSessionService.isProtectedSessionAvailable()) {
 | 
			
		||||
                content = content === null ? null : protectedSessionService.decrypt(content);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                content = "";
 | 
			
		||||
            }
 | 
			
		||||
        eventService.emit(eventService.NOTE_CONTENT_CHANGE, { entity: this });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        if (this.isStringNote()) {
 | 
			
		||||
            return content === null
 | 
			
		||||
                ? ""
 | 
			
		||||
                : content.toString("UTF-8");
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            return content;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {{contentLength, dateModified, utcDateModified}} */
 | 
			
		||||
    getContentMetadata() {
 | 
			
		||||
        return sql.getRow(`
 | 
			
		||||
            SELECT 
 | 
			
		||||
                LENGTH(content) AS contentLength, 
 | 
			
		||||
                dateModified,
 | 
			
		||||
                utcDateModified 
 | 
			
		||||
            FROM note_contents 
 | 
			
		||||
            WHERE noteId = ?`, [this.noteId]);
 | 
			
		||||
    setJsonContent(content) {
 | 
			
		||||
        this.setContent(JSON.stringify(content, null, '\t'));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get dateCreatedObj() {
 | 
			
		||||
@@ -292,68 +318,6 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
        return this.utcDateModified === null ? null : dayjs.utc(this.utcDateModified);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {*} */
 | 
			
		||||
    getJsonContent() {
 | 
			
		||||
        const content = this.getContent();
 | 
			
		||||
 | 
			
		||||
        if (!content || !content.trim()) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return JSON.parse(content);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setContent(content, ignoreMissingProtectedSession = false) {
 | 
			
		||||
        if (content === null || content === undefined) {
 | 
			
		||||
            throw new Error(`Cannot set null content to note '${this.noteId}'`);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (this.isStringNote()) {
 | 
			
		||||
            content = content.toString();
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            content = Buffer.isBuffer(content) ? content : Buffer.from(content);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const pojo = {
 | 
			
		||||
            noteId: this.noteId,
 | 
			
		||||
            content: content,
 | 
			
		||||
            dateModified: dateUtils.localNowDateTime(),
 | 
			
		||||
            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 noteId '${this.noteId}' since we're out of protected session.`);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        sql.upsert("note_contents", "noteId", pojo);
 | 
			
		||||
 | 
			
		||||
        const hash = utils.hash(`${this.noteId}|${pojo.content.toString()}`);
 | 
			
		||||
 | 
			
		||||
        entityChangesService.addEntityChange({
 | 
			
		||||
            entityName: 'note_contents',
 | 
			
		||||
            entityId: this.noteId,
 | 
			
		||||
            hash: hash,
 | 
			
		||||
            isErased: false,
 | 
			
		||||
            utcDateChanged: pojo.utcDateModified,
 | 
			
		||||
            isSynced: true
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        eventService.emit(eventService.ENTITY_CHANGED, {
 | 
			
		||||
            entityName: 'note_contents',
 | 
			
		||||
            entity: this
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    setJsonContent(content) {
 | 
			
		||||
        this.setContent(JSON.stringify(content, null, '\t'));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {boolean} true if this note is the root of the note tree. Root note has "root" noteId */
 | 
			
		||||
    isRoot() {
 | 
			
		||||
        return this.noteId === 'root';
 | 
			
		||||
@@ -384,8 +348,13 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
            || (this.type === 'file' && this.mime?.startsWith('image/'));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {boolean} true if the note has string content (not binary) */
 | 
			
		||||
    /** @deprecated use hasStringContent() instead */
 | 
			
		||||
    isStringNote() {
 | 
			
		||||
        return this.hasStringContent();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {boolean} true if the note has string content (not binary) */
 | 
			
		||||
    hasStringContent() {
 | 
			
		||||
        return utils.isStringNote(this.type, this.mime);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -407,6 +376,9 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Beware that the method must not create a copy of the array, but actually returns its internal array
 | 
			
		||||
     * (for performance reasons)
 | 
			
		||||
     *
 | 
			
		||||
     * @param {string} [type] - (optional) attribute type to filter
 | 
			
		||||
     * @param {string} [name] - (optional) attribute name to filter
 | 
			
		||||
     * @returns {BAttribute[]} all note's attributes, including inherited ones
 | 
			
		||||
@@ -425,7 +397,6 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
            return this.__attributeCache.filter(attr => attr.name === name);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            // a bit unsafe to return the original array, but defensive copy would be costly
 | 
			
		||||
            return this.__attributeCache;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -482,11 +453,11 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            this.inheritableAttributeCache = [];
 | 
			
		||||
            this.__inheritableAttributeCache = [];
 | 
			
		||||
 | 
			
		||||
            for (const attr of this.__attributeCache) {
 | 
			
		||||
                if (attr.isInheritable) {
 | 
			
		||||
                    this.inheritableAttributeCache.push(attr);
 | 
			
		||||
                    this.__inheritableAttributeCache.push(attr);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -503,11 +474,11 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
            return [];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!this.inheritableAttributeCache) {
 | 
			
		||||
            this.__getAttributes(path); // will refresh also this.inheritableAttributeCache
 | 
			
		||||
        if (!this.__inheritableAttributeCache) {
 | 
			
		||||
            this.__getAttributes(path); // will refresh also this.__inheritableAttributeCache
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return this.inheritableAttributeCache;
 | 
			
		||||
        return this.__inheritableAttributeCache;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    __validateTypeName(type, name) {
 | 
			
		||||
@@ -560,6 +531,20 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
     */
 | 
			
		||||
    hasLabel(name, value) { return this.hasAttribute(LABEL, name, value); }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param {string} name - label name
 | 
			
		||||
     * @returns {boolean} true if label exists (including inherited) and does not have "false" value.
 | 
			
		||||
     */
 | 
			
		||||
    isLabelTruthy(name) {
 | 
			
		||||
        const label = this.getLabel(name);
 | 
			
		||||
 | 
			
		||||
        if (!label) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return label && label.value !== 'false';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param {string} name - label name
 | 
			
		||||
     * @param {string} [value] - label value
 | 
			
		||||
@@ -642,7 +627,8 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
    /**
 | 
			
		||||
     * @param {string} type - attribute type (label, relation, etc.)
 | 
			
		||||
     * @param {string} name - attribute name
 | 
			
		||||
     * @returns {BAttribute} attribute of given type and name. If there's more such attributes, first is  returned. Returns null if there's no such attribute belonging to this note.
 | 
			
		||||
     * @returns {BAttribute} attribute of the given type and name. If there are more such attributes, first is returned.
 | 
			
		||||
     *                       Returns null if there's no such attribute belonging to this note.
 | 
			
		||||
     */
 | 
			
		||||
    getAttribute(type, name) {
 | 
			
		||||
        const attributes = this.getAttributes();
 | 
			
		||||
@@ -721,6 +707,9 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Beware that the method must not create a copy of the array, but actually returns its internal array
 | 
			
		||||
     * (for performance reasons)
 | 
			
		||||
     *
 | 
			
		||||
     * @param {string|null} [type] - (optional) attribute type to filter
 | 
			
		||||
     * @param {string|null} [name] - (optional) attribute name to filter
 | 
			
		||||
     * @param {string|null} [value] - (optional) attribute value to filter
 | 
			
		||||
@@ -742,7 +731,7 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
            return this.ownedAttributes.filter(attr => attr.name === name);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            return this.ownedAttributes.slice();
 | 
			
		||||
            return this.ownedAttributes;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -761,6 +750,21 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
        return this.hasAttribute('label', 'archived');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    areAllNotePathsArchived() {
 | 
			
		||||
        // there's a slight difference between note being itself archived and all its note paths being archived
 | 
			
		||||
        // - note is archived when it itself has an archived label or inherits it
 | 
			
		||||
        // - note does not have or inherit archived label, but each note path contains a note with (non-inheritable)
 | 
			
		||||
        //   archived label
 | 
			
		||||
 | 
			
		||||
        const bestNotePathRecord = this.getSortedNotePathRecords()[0];
 | 
			
		||||
 | 
			
		||||
        if (!bestNotePathRecord) {
 | 
			
		||||
            throw new Error(`No note path available for note '${this.noteId}'`);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return bestNotePathRecord.isArchived;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    hasInheritableArchivedLabel() {
 | 
			
		||||
        for (const attr of this.getAttributes()) {
 | 
			
		||||
            if (attr.name === 'archived' && attr.type === LABEL && attr.isInheritable) {
 | 
			
		||||
@@ -780,7 +784,7 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
            } else if (a.parentNote?.isHiddenCompletely()) {
 | 
			
		||||
                return 1;
 | 
			
		||||
            } else {
 | 
			
		||||
                return -1;
 | 
			
		||||
                return 0;
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
@@ -800,7 +804,7 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
            const aBranch = becca.getBranchFromChildAndParent(a.noteId, this.noteId);
 | 
			
		||||
            const bBranch = becca.getBranchFromChildAndParent(b.noteId, this.noteId);
 | 
			
		||||
 | 
			
		||||
            return aBranch?.notePosition < bBranch?.notePosition ? -1 : 1;
 | 
			
		||||
            return (aBranch?.notePosition - bBranch?.notePosition) || 0;
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -812,40 +816,40 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
     * @returns {string} - returns flattened textual representation of note, prefixes and attributes
 | 
			
		||||
     */
 | 
			
		||||
    getFlatText() {
 | 
			
		||||
        if (!this.flatTextCache) {
 | 
			
		||||
            this.flatTextCache = `${this.noteId} ${this.type} ${this.mime} `;
 | 
			
		||||
        if (!this.__flatTextCache) {
 | 
			
		||||
            this.__flatTextCache = `${this.noteId} ${this.type} ${this.mime} `;
 | 
			
		||||
 | 
			
		||||
            for (const branch of this.parentBranches) {
 | 
			
		||||
                if (branch.prefix) {
 | 
			
		||||
                    this.flatTextCache += `${branch.prefix} `;
 | 
			
		||||
                    this.__flatTextCache += `${branch.prefix} `;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            this.flatTextCache += `${this.title} `;
 | 
			
		||||
            this.__flatTextCache += `${this.title} `;
 | 
			
		||||
 | 
			
		||||
            for (const attr of this.getAttributes()) {
 | 
			
		||||
                // it's best to use space as separator since spaces are filtered from the search string by the tokenization into words
 | 
			
		||||
                this.flatTextCache += `${attr.type === 'label' ? '#' : '~'}${attr.name}`;
 | 
			
		||||
                this.__flatTextCache += `${attr.type === 'label' ? '#' : '~'}${attr.name}`;
 | 
			
		||||
 | 
			
		||||
                if (attr.value) {
 | 
			
		||||
                    this.flatTextCache += `=${attr.value}`;
 | 
			
		||||
                    this.__flatTextCache += `=${attr.value}`;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                this.flatTextCache += ' ';
 | 
			
		||||
                this.__flatTextCache += ' ';
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            this.flatTextCache = utils.normalize(this.flatTextCache);
 | 
			
		||||
            this.__flatTextCache = utils.normalize(this.__flatTextCache);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return this.flatTextCache;
 | 
			
		||||
        return this.__flatTextCache;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    invalidateThisCache() {
 | 
			
		||||
        this.flatTextCache = null;
 | 
			
		||||
        this.__flatTextCache = null;
 | 
			
		||||
 | 
			
		||||
        this.__attributeCache = null;
 | 
			
		||||
        this.inheritableAttributeCache = null;
 | 
			
		||||
        this.ancestorCache = null;
 | 
			
		||||
        this.__inheritableAttributeCache = null;
 | 
			
		||||
        this.__ancestorCache = null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    invalidateSubTree(path = []) {
 | 
			
		||||
@@ -874,24 +878,6 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    invalidateSubtreeFlatText() {
 | 
			
		||||
        this.flatTextCache = null;
 | 
			
		||||
 | 
			
		||||
        for (const childNote of this.children) {
 | 
			
		||||
            childNote.invalidateSubtreeFlatText();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for (const targetRelation of this.targetRelations) {
 | 
			
		||||
            if (targetRelation.name === 'template' || targetRelation.name === 'inherit') {
 | 
			
		||||
                const note = targetRelation.note;
 | 
			
		||||
 | 
			
		||||
                if (note) {
 | 
			
		||||
                    note.invalidateSubtreeFlatText();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    getRelationDefinitions() {
 | 
			
		||||
        return this.getLabels()
 | 
			
		||||
            .filter(l => l.name.startsWith("relation:"));
 | 
			
		||||
@@ -1020,7 +1006,7 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {String[]} - includes the subtree node as well */
 | 
			
		||||
    /** @returns {string[]} - includes the subtree root note as well */
 | 
			
		||||
    getSubtreeNoteIds({includeArchived = true, includeHidden = false, resolveSearch = false} = {}) {
 | 
			
		||||
        return this.getSubtree({includeArchived, includeHidden, resolveSearch})
 | 
			
		||||
            .notes
 | 
			
		||||
@@ -1082,28 +1068,33 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
 | 
			
		||||
    /** @returns {BNote[]} */
 | 
			
		||||
    getAncestors() {
 | 
			
		||||
        if (!this.ancestorCache) {
 | 
			
		||||
        if (!this.__ancestorCache) {
 | 
			
		||||
            const noteIds = new Set();
 | 
			
		||||
            this.ancestorCache = [];
 | 
			
		||||
            this.__ancestorCache = [];
 | 
			
		||||
 | 
			
		||||
            for (const parent of this.parents) {
 | 
			
		||||
                if (noteIds.has(parent.noteId)) {
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                this.ancestorCache.push(parent);
 | 
			
		||||
                this.__ancestorCache.push(parent);
 | 
			
		||||
                noteIds.add(parent.noteId);
 | 
			
		||||
 | 
			
		||||
                for (const ancestorNote of parent.getAncestors()) {
 | 
			
		||||
                    if (!noteIds.has(ancestorNote.noteId)) {
 | 
			
		||||
                        this.ancestorCache.push(ancestorNote);
 | 
			
		||||
                        this.__ancestorCache.push(ancestorNote);
 | 
			
		||||
                        noteIds.add(ancestorNote.noteId);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return this.ancestorCache;
 | 
			
		||||
        return this.__ancestorCache;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {string[]} */
 | 
			
		||||
    getAncestorNoteIds() {
 | 
			
		||||
        return this.getAncestors().map(note => note.noteId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {boolean} */
 | 
			
		||||
@@ -1121,6 +1112,7 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
        return this.noteId === '_hidden' || this.hasAncestor('_hidden');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {BAttribute[]} */
 | 
			
		||||
    getTargetRelations() {
 | 
			
		||||
        return this.targetRelations;
 | 
			
		||||
    }
 | 
			
		||||
@@ -1157,13 +1149,72 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
        return minDistance;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {BNoteRevision[]} */
 | 
			
		||||
    getNoteRevisions() {
 | 
			
		||||
        return sql.getRows("SELECT * FROM note_revisions WHERE noteId = ?", [this.noteId])
 | 
			
		||||
            .map(row => new BNoteRevision(row));
 | 
			
		||||
    /** @returns {BRevision[]} */
 | 
			
		||||
    getRevisions() {
 | 
			
		||||
        return sql.getRows("SELECT * FROM revisions WHERE noteId = ?", [this.noteId])
 | 
			
		||||
            .map(row => new BRevision(row));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {BAttachment[]} */
 | 
			
		||||
    getAttachments(opts = {}) {
 | 
			
		||||
        opts.includeContentLength = !!opts.includeContentLength;
 | 
			
		||||
        // from testing, it looks like calculating length does not make a difference in performance even on large-ish DB
 | 
			
		||||
        // given that we're always fetching attachments only for a specific note, we might just do it always
 | 
			
		||||
 | 
			
		||||
        const query = opts.includeContentLength
 | 
			
		||||
            ? `SELECT attachments.*, LENGTH(blobs.content) AS contentLength
 | 
			
		||||
               FROM attachments 
 | 
			
		||||
               JOIN blobs USING (blobId) 
 | 
			
		||||
               WHERE ownerId = ? AND isDeleted = 0 
 | 
			
		||||
               ORDER BY position`
 | 
			
		||||
            : `SELECT * FROM attachments WHERE ownerId = ? AND isDeleted = 0 ORDER BY position`;
 | 
			
		||||
 | 
			
		||||
        return sql.getRows(query, [this.noteId])
 | 
			
		||||
            .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.noteId, 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.noteId, role])
 | 
			
		||||
            .map(row => new BAttachment(row));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {BAttachment} */
 | 
			
		||||
    getAttachmentByTitle(title) {
 | 
			
		||||
        return sql.getRows(`
 | 
			
		||||
                SELECT attachments.*
 | 
			
		||||
                FROM attachments 
 | 
			
		||||
                WHERE ownerId = ? 
 | 
			
		||||
                  AND title = ?
 | 
			
		||||
                  AND isDeleted = 0
 | 
			
		||||
                ORDER BY position`, [this.noteId, title])
 | 
			
		||||
            .map(row => new BAttachment(row))[0];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gives all possible note paths leading to this note. Paths containing search note are ignored (could form cycles)
 | 
			
		||||
     *
 | 
			
		||||
     * @returns {string[][]} - array of notePaths (each represented by array of noteIds constituting the particular note path)
 | 
			
		||||
     */
 | 
			
		||||
    getAllNotePaths() {
 | 
			
		||||
@@ -1171,18 +1222,70 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
            return [['root']];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const notePaths = [];
 | 
			
		||||
        const parentNotes = this.getParentNotes();
 | 
			
		||||
 | 
			
		||||
        for (const parentNote of this.getParentNotes()) {
 | 
			
		||||
            for (const parentPath of parentNote.getAllNotePaths()) {
 | 
			
		||||
                parentPath.push(this.noteId);
 | 
			
		||||
                notePaths.push(parentPath);
 | 
			
		||||
            }
 | 
			
		||||
        const notePaths = parentNotes.length === 1
 | 
			
		||||
            ? parentNotes[0].getAllNotePaths() // optimization for the most common case
 | 
			
		||||
            : parentNotes.flatMap(parentNote => parentNote.getAllNotePaths());
 | 
			
		||||
 | 
			
		||||
        for (const notePath of notePaths) {
 | 
			
		||||
            notePath.push(this.noteId);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return notePaths;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param {string} [hoistedNoteId='root']
 | 
			
		||||
     * @return {Array<NotePathRecord>}
 | 
			
		||||
     */
 | 
			
		||||
    getSortedNotePathRecords(hoistedNoteId = 'root') {
 | 
			
		||||
        const isHoistedRoot = hoistedNoteId === 'root';
 | 
			
		||||
 | 
			
		||||
        const notePaths = this.getAllNotePaths().map(path => ({
 | 
			
		||||
            notePath: path,
 | 
			
		||||
            isInHoistedSubTree: isHoistedRoot || path.includes(hoistedNoteId),
 | 
			
		||||
            isArchived: path.some(noteId => this.becca.notes[noteId].isArchived),
 | 
			
		||||
            isHidden: path.includes('_hidden')
 | 
			
		||||
        }));
 | 
			
		||||
 | 
			
		||||
        notePaths.sort((a, b) => {
 | 
			
		||||
            if (a.isInHoistedSubTree !== b.isInHoistedSubTree) {
 | 
			
		||||
                return a.isInHoistedSubTree ? -1 : 1;
 | 
			
		||||
            } else if (a.isArchived !== b.isArchived) {
 | 
			
		||||
                return a.isArchived ? 1 : -1;
 | 
			
		||||
            } else if (a.isHidden !== b.isHidden) {
 | 
			
		||||
                return a.isHidden ? 1 : -1;
 | 
			
		||||
            } else {
 | 
			
		||||
                return a.notePath.length - b.notePath.length;
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        return notePaths;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a note path considered to be the "best"
 | 
			
		||||
     *
 | 
			
		||||
     * @param {string} [hoistedNoteId='root']
 | 
			
		||||
     * @return {string[]} array of noteIds constituting the particular note path
 | 
			
		||||
     */
 | 
			
		||||
    getBestNotePath(hoistedNoteId = 'root') {
 | 
			
		||||
        return this.getSortedNotePathRecords(hoistedNoteId)[0]?.notePath;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a note path considered to be the "best"
 | 
			
		||||
     *
 | 
			
		||||
     * @param {string} [hoistedNoteId='root']
 | 
			
		||||
     * @return {string} serialized note path (e.g. 'root/a1h315/js725h')
 | 
			
		||||
     */
 | 
			
		||||
    getBestNotePathString(hoistedNoteId = 'root') {
 | 
			
		||||
        const notePath = this.getBestNotePath(hoistedNoteId);
 | 
			
		||||
 | 
			
		||||
        return notePath?.join("/");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return boolean - true if there's no non-hidden path, note is not cloned to the visible tree
 | 
			
		||||
     */
 | 
			
		||||
@@ -1196,9 +1299,7 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
                return false;
 | 
			
		||||
            } else if (parentNote.noteId === '_hidden') {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!parentNote.isHiddenCompletely()) {
 | 
			
		||||
            } else if (!parentNote.isHiddenCompletely()) {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -1272,10 +1373,10 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
     * @param {string} name - name of the attribute, not including the leading ~/#
 | 
			
		||||
     * @param {string} [value] - value of the attribute - text for labels, target note ID for relations; optional.
 | 
			
		||||
     * @param {boolean} [isInheritable=false]
 | 
			
		||||
     * @param {int} [position]
 | 
			
		||||
     * @param {int|null} [position]
 | 
			
		||||
     * @returns {BAttribute}
 | 
			
		||||
     */
 | 
			
		||||
    addAttribute(type, name, value = "", isInheritable = false, position = 1000) {
 | 
			
		||||
    addAttribute(type, name, value = "", isInheritable = false, position = null) {
 | 
			
		||||
        const BAttribute = require("./battribute");
 | 
			
		||||
 | 
			
		||||
        return new BAttribute({
 | 
			
		||||
@@ -1314,7 +1415,7 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Based on enabled, attribute is either set or removed.
 | 
			
		||||
     * Based on enabled, the attribute is either set or removed.
 | 
			
		||||
     *
 | 
			
		||||
     * @param {string} type - attribute type ('relation', 'label' etc.)
 | 
			
		||||
     * @param {boolean} enabled - toggle On or Off
 | 
			
		||||
@@ -1373,7 +1474,7 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
    removeLabel(name, value) { return this.removeAttribute(LABEL, name, value); }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Remove relation name-value pair, if it exists.
 | 
			
		||||
     * Remove the relation name-value pair, if it exists.
 | 
			
		||||
     *
 | 
			
		||||
     * @param {string} name - relation name
 | 
			
		||||
     * @param {string} [value] - relation value (noteId)
 | 
			
		||||
@@ -1392,7 +1493,7 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param parentNoteId
 | 
			
		||||
     * @returns {{success: boolean, message: string}}
 | 
			
		||||
     * @returns {{success: boolean, message: string, branchId: string, notePath: string}}
 | 
			
		||||
     */
 | 
			
		||||
    cloneTo(parentNoteId) {
 | 
			
		||||
        const cloningService = require("../../services/cloning");
 | 
			
		||||
@@ -1402,13 +1503,89 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
        return cloningService.cloneNoteToBranch(this.noteId, branch.branchId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    isEligibleForConversionToAttachment(opts = {autoConversion: false}) {
 | 
			
		||||
        if (this.type !== 'image' || !this.isContentAvailable() || this.hasChildren() || this.getParentBranches().length !== 1) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const targetRelations = this.getTargetRelations().filter(relation => relation.name === 'imageLink');
 | 
			
		||||
 | 
			
		||||
        if (opts.autoConversion && targetRelations.length === 0) {
 | 
			
		||||
            return false;
 | 
			
		||||
        } else if (targetRelations.length > 1) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const parentNote = this.getParentNotes()[0]; // at this point note can have only one parent
 | 
			
		||||
        const referencingNote = targetRelations[0]?.getNote();
 | 
			
		||||
 | 
			
		||||
        if (referencingNote && parentNote !== referencingNote) {
 | 
			
		||||
            return false;
 | 
			
		||||
        } else if (parentNote.type !== 'text' || !parentNote.isContentAvailable()) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Some notes are eligible for conversion into an attachment of its parent, note must have these properties:
 | 
			
		||||
     * - it has exactly one target relation
 | 
			
		||||
     * - it has a relation from its parent note
 | 
			
		||||
     * - it has no children
 | 
			
		||||
     * - it has no clones
 | 
			
		||||
     * - the parent is of type text
 | 
			
		||||
     * - both notes are either unprotected or user is in protected session
 | 
			
		||||
     *
 | 
			
		||||
     * Currently, works only for image notes.
 | 
			
		||||
     *
 | 
			
		||||
     * In the future, this functionality might get more generic and some of the requirements relaxed.
 | 
			
		||||
     *
 | 
			
		||||
     * @params {Object} [opts]
 | 
			
		||||
     * @params {bolean} [opts.autoConversion=false} if true, the action is not triggered by user, but e.g. by migration,
 | 
			
		||||
     *                                              and only perfect candidates will be migrated
 | 
			
		||||
     *
 | 
			
		||||
     * @returns {BAttachment|null} - null if note is not eligible for conversion
 | 
			
		||||
     */
 | 
			
		||||
    convertToParentAttachment(opts = {autoConversion: false}) {
 | 
			
		||||
        if (!this.isEligibleForConversionToAttachment(opts)) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const content = this.getContent();
 | 
			
		||||
 | 
			
		||||
        const parentNote = this.getParentNotes()[0];
 | 
			
		||||
        const attachment = parentNote.saveAttachment({
 | 
			
		||||
            role: 'image',
 | 
			
		||||
            mime: this.mime,
 | 
			
		||||
            title: this.title,
 | 
			
		||||
            content: content
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        let parentContent = parentNote.getContent();
 | 
			
		||||
 | 
			
		||||
        const oldNoteUrl = `api/images/${this.noteId}/`;
 | 
			
		||||
        const newAttachmentUrl = `api/attachments/${attachment.attachmentId}/image/`;
 | 
			
		||||
 | 
			
		||||
        const fixedContent = utils.replaceAll(parentContent, oldNoteUrl, newAttachmentUrl);
 | 
			
		||||
 | 
			
		||||
        parentNote.setContent(fixedContent);
 | 
			
		||||
 | 
			
		||||
        const noteService = require("../../services/notes");
 | 
			
		||||
        noteService.asyncPostProcessContent(parentNote, fixedContent); // to mark an unused attachment for deletion
 | 
			
		||||
 | 
			
		||||
        this.deleteNote();
 | 
			
		||||
 | 
			
		||||
        return attachment;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * (Soft) delete a note and all its descendants.
 | 
			
		||||
     *
 | 
			
		||||
     * @param {string} [deleteId] - optional delete identified
 | 
			
		||||
     * @param {string} [deleteId=null] - optional delete identified
 | 
			
		||||
     * @param {TaskContext} [taskContext]
 | 
			
		||||
     */
 | 
			
		||||
    deleteNote(deleteId, taskContext) {
 | 
			
		||||
    deleteNote(deleteId = null, taskContext = null) {
 | 
			
		||||
        if (this.isDeleted) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
@@ -1435,7 +1612,7 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
        if (this.isProtected && !this.isDecrypted && protectedSessionService.isProtectedSessionAvailable()) {
 | 
			
		||||
            try {
 | 
			
		||||
                this.title = protectedSessionService.decryptString(this.title);
 | 
			
		||||
                this.flatTextCache = null;
 | 
			
		||||
                this.__flatTextCache = null;
 | 
			
		||||
 | 
			
		||||
                this.isDecrypted = true;
 | 
			
		||||
            }
 | 
			
		||||
@@ -1454,42 +1631,90 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get isDeleted() {
 | 
			
		||||
        // isBeingDeleted is relevant only in the transition period when the deletion process has begun, but not yet
 | 
			
		||||
        // finished (note is still in becca)
 | 
			
		||||
        return !(this.noteId in this.becca.notes) || this.isBeingDeleted;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @returns {BNoteRevision|null}
 | 
			
		||||
     * @returns {BRevision|null}
 | 
			
		||||
     */
 | 
			
		||||
    saveNoteRevision() {
 | 
			
		||||
        const content = this.getContent();
 | 
			
		||||
    saveRevision() {
 | 
			
		||||
        return sql.transactional(() => {
 | 
			
		||||
            let noteContent = this.getContent();
 | 
			
		||||
 | 
			
		||||
        if (!content || (Buffer.isBuffer(content) && content.byteLength === 0)) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const contentMetadata = this.getContentMetadata();
 | 
			
		||||
 | 
			
		||||
        const noteRevision = new BNoteRevision({
 | 
			
		||||
            const revision = new BRevision({
 | 
			
		||||
                noteId: this.noteId,
 | 
			
		||||
                // title and text should be decrypted now
 | 
			
		||||
                title: this.title,
 | 
			
		||||
                type: this.type,
 | 
			
		||||
                mime: this.mime,
 | 
			
		||||
                isProtected: this.isProtected,
 | 
			
		||||
            utcDateLastEdited: this.utcDateModified > contentMetadata.utcDateModified
 | 
			
		||||
                ? this.utcDateModified
 | 
			
		||||
                : contentMetadata.utcDateModified,
 | 
			
		||||
                utcDateLastEdited: this.utcDateModified,
 | 
			
		||||
                utcDateCreated: dateUtils.utcNowDateTime(),
 | 
			
		||||
                utcDateModified: dateUtils.utcNowDateTime(),
 | 
			
		||||
            dateLastEdited: this.dateModified > contentMetadata.dateModified
 | 
			
		||||
                ? this.dateModified
 | 
			
		||||
                : contentMetadata.dateModified,
 | 
			
		||||
                dateLastEdited: this.dateModified,
 | 
			
		||||
                dateCreated: dateUtils.localNowDateTime()
 | 
			
		||||
        }, true).save();
 | 
			
		||||
            }, true);
 | 
			
		||||
 | 
			
		||||
        noteRevision.setContent(content);
 | 
			
		||||
            revision.save(); // to generate revisionId, which is then used to save attachments
 | 
			
		||||
 | 
			
		||||
        return noteRevision;
 | 
			
		||||
            for (const noteAttachment of this.getAttachments()) {
 | 
			
		||||
                const revisionAttachment = noteAttachment.copy();
 | 
			
		||||
                revisionAttachment.ownerId = revision.revisionId;
 | 
			
		||||
                revisionAttachment.setContent(noteAttachment.getContent(), {forceSave: true});
 | 
			
		||||
 | 
			
		||||
                if (this.type === 'text') {
 | 
			
		||||
                    // content is rewritten to point to the revision attachments
 | 
			
		||||
                    noteContent = noteContent.replaceAll(`attachments/${noteAttachment.attachmentId}`,
 | 
			
		||||
                        `attachments/${revisionAttachment.attachmentId}`);
 | 
			
		||||
 | 
			
		||||
                    noteContent = noteContent.replaceAll(new RegExp(`href="[^"]*attachmentId=${noteAttachment.attachmentId}[^"]*"`, 'gi'),
 | 
			
		||||
                        `href="api/attachments/${revisionAttachment.attachmentId}/download"`);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            revision.setContent(noteContent);
 | 
			
		||||
 | 
			
		||||
            return revision;
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param {string} matchBy - choose by which property we detect if to update an existing attachment.
 | 
			
		||||
 *                               Supported values are either 'attachmentId' (default) or 'title'
 | 
			
		||||
     * @returns {BAttachment}
 | 
			
		||||
     */
 | 
			
		||||
    saveAttachment({attachmentId, role, mime, title, content, position}, matchBy = 'attachmentId') {
 | 
			
		||||
        if (!['attachmentId', 'title'].includes(matchBy)) {
 | 
			
		||||
            throw new Error(`Unsupported value '${matchBy}' for matchBy param, has to be either 'attachmentId' or 'title'.`);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let attachment;
 | 
			
		||||
 | 
			
		||||
        if (matchBy === 'title') {
 | 
			
		||||
            attachment = this.getAttachmentByTitle(title);
 | 
			
		||||
        } else if (matchBy === 'attachmentId' && attachmentId) {
 | 
			
		||||
            attachment = this.becca.getAttachmentOrThrow(attachmentId);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        attachment = attachment || new BAttachment({
 | 
			
		||||
            ownerId: this.noteId,
 | 
			
		||||
            title,
 | 
			
		||||
            role,
 | 
			
		||||
            mime,
 | 
			
		||||
            isProtected: this.isProtected,
 | 
			
		||||
            position
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        content = content || "";
 | 
			
		||||
        attachment.setContent(content, {forceSave: true});
 | 
			
		||||
 | 
			
		||||
        return attachment;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    getFileName() {
 | 
			
		||||
        return utils.formatDownloadTitle(this.title, this.type, this.mime);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    beforeSaving() {
 | 
			
		||||
@@ -1508,6 +1733,7 @@ class BNote extends AbstractBeccaEntity {
 | 
			
		||||
            isProtected: this.isProtected,
 | 
			
		||||
            type: this.type,
 | 
			
		||||
            mime: this.mime,
 | 
			
		||||
            blobId: this.blobId,
 | 
			
		||||
            isDeleted: false,
 | 
			
		||||
            dateCreated: this.dateCreated,
 | 
			
		||||
            dateModified: this.dateModified,
 | 
			
		||||
@@ -1544,13 +1770,13 @@ module.exports = BNote;
 | 
			
		||||
</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="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="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
 | 
			
		||||
    <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.1</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,242 +0,0 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="utf-8">
 | 
			
		||||
    <title>JSDoc: Source: becca/entities/bnote_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/bnote_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');
 | 
			
		||||
const entityChangesService = require('../../services/entity_changes');
 | 
			
		||||
const AbstractBeccaEntity = require("./abstract_becca_entity");
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * NoteRevision represents snapshot of note's title and content at some point in the past.
 | 
			
		||||
 * It's used for seamless note versioning.
 | 
			
		||||
 *
 | 
			
		||||
 * @extends AbstractBeccaEntity
 | 
			
		||||
 */
 | 
			
		||||
class BNoteRevision extends AbstractBeccaEntity {
 | 
			
		||||
    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, titleDecrypted = false) {
 | 
			
		||||
        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 && !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) */
 | 
			
		||||
    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 its 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) {
 | 
			
		||||
        const pojo = {
 | 
			
		||||
            noteRevisionId: this.noteRevisionId,
 | 
			
		||||
            content: content,
 | 
			
		||||
            utcDateModified: dateUtils.utcNowDateTime()
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        if (this.isProtected) {
 | 
			
		||||
            if (protectedSessionService.isProtectedSessionAvailable()) {
 | 
			
		||||
                pojo.content = protectedSessionService.encrypt(pojo.content);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                throw new Error(`Cannot update content of noteRevisionId=${this.noteRevisionId} since we're out of protected session.`);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        sql.upsert("note_revision_contents", "noteRevisionId", pojo);
 | 
			
		||||
 | 
			
		||||
        const hash = utils.hash(`${this.noteRevisionId}|${pojo.content.toString()}`);
 | 
			
		||||
 | 
			
		||||
        entityChangesService.addEntityChange({
 | 
			
		||||
            entityName: 'note_revision_contents',
 | 
			
		||||
            entityId: this.noteRevisionId,
 | 
			
		||||
            hash: hash,
 | 
			
		||||
            isErased: false,
 | 
			
		||||
            utcDateChanged: this.getUtcDateChanged(),
 | 
			
		||||
            isSynced: true
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {{contentLength, dateModified, utcDateModified}} */
 | 
			
		||||
    getContentMetadata() {
 | 
			
		||||
        return sql.getRow(`
 | 
			
		||||
            SELECT 
 | 
			
		||||
                LENGTH(content) AS contentLength, 
 | 
			
		||||
                dateModified,
 | 
			
		||||
                utcDateModified 
 | 
			
		||||
            FROM note_revision_contents 
 | 
			
		||||
            WHERE noteRevisionId = ?`, [this.noteRevisionId]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    beforeSaving() {
 | 
			
		||||
        super.beforeSaving();
 | 
			
		||||
 | 
			
		||||
        this.utcDateModified = dateUtils.utcNowDateTime();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    getPojo() {
 | 
			
		||||
        return {
 | 
			
		||||
            noteRevisionId: this.noteRevisionId,
 | 
			
		||||
            noteId: this.noteId,
 | 
			
		||||
            type: this.type,
 | 
			
		||||
            mime: this.mime,
 | 
			
		||||
            isProtected: this.isProtected,
 | 
			
		||||
            title: this.title,
 | 
			
		||||
            dateLastEdited: this.dateLastEdited,
 | 
			
		||||
            dateCreated: this.dateCreated,
 | 
			
		||||
            utcDateLastEdited: this.utcDateLastEdited,
 | 
			
		||||
            utcDateCreated: this.utcDateCreated,
 | 
			
		||||
            utcDateModified: this.utcDateModified,
 | 
			
		||||
            contentLength: this.contentLength
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    getPojoToSave() {
 | 
			
		||||
        const pojo = this.getPojo();
 | 
			
		||||
        delete pojo.contentLength; // not getting persisted
 | 
			
		||||
 | 
			
		||||
        if (pojo.isProtected) {
 | 
			
		||||
            if (protectedSessionService.isProtectedSessionAvailable()) {
 | 
			
		||||
                pojo.title = protectedSessionService.encrypt(this.title);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                // updating protected note outside of protected session means we will keep original ciphertexts
 | 
			
		||||
                delete pojo.title;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return pojo;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = BNoteRevision;
 | 
			
		||||
</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="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="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
<script src="scripts/linenumber.js"> </script>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@@ -32,7 +32,7 @@ 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
 | 
			
		||||
 */
 | 
			
		||||
@@ -44,6 +44,11 @@ class BOption extends AbstractBeccaEntity {
 | 
			
		||||
    constructor(row) {
 | 
			
		||||
        super();
 | 
			
		||||
 | 
			
		||||
        this.updateFromRow(row);
 | 
			
		||||
        this.becca.options[this.name] = this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    updateFromRow(row) {
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.name = row.name;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
@@ -52,8 +57,6 @@ class BOption extends AbstractBeccaEntity {
 | 
			
		||||
        this.isSynced = !!row.isSynced;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.utcDateModified = row.utcDateModified;
 | 
			
		||||
 | 
			
		||||
        this.becca.options[this.name] = this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    beforeSaving() {
 | 
			
		||||
@@ -83,13 +86,13 @@ module.exports = BOption;
 | 
			
		||||
</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="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="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
 | 
			
		||||
    <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.1</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -71,13 +71,13 @@ module.exports = BRecentNote;
 | 
			
		||||
</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="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="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
 | 
			
		||||
    <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.1</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										265
									
								
								docs/backend_api/becca_entities_brevision.js.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										265
									
								
								docs/backend_api/becca_entities_brevision.js.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,265 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="utf-8">
 | 
			
		||||
    <title>JSDoc: Source: becca/entities/brevision.js</title>
 | 
			
		||||
 | 
			
		||||
    <script src="scripts/prettify/prettify.js"> </script>
 | 
			
		||||
    <script src="scripts/prettify/lang-css.js"> </script>
 | 
			
		||||
    <!--[if lt IE 9]>
 | 
			
		||||
      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
 | 
			
		||||
    <![endif]-->
 | 
			
		||||
    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
 | 
			
		||||
    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
 | 
			
		||||
</head>
 | 
			
		||||
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div id="main">
 | 
			
		||||
 | 
			
		||||
    <h1 class="page-title">Source: becca/entities/brevision.js</h1>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <section>
 | 
			
		||||
        <article>
 | 
			
		||||
            <pre class="prettyprint source linenums"><code>"use strict";
 | 
			
		||||
 | 
			
		||||
const protectedSessionService = require('../../services/protected_session');
 | 
			
		||||
const utils = require('../../services/utils');
 | 
			
		||||
const dateUtils = require('../../services/date_utils');
 | 
			
		||||
const becca = require('../becca');
 | 
			
		||||
const AbstractBeccaEntity = require("./abstract_becca_entity");
 | 
			
		||||
const sql = require("../../services/sql");
 | 
			
		||||
const BAttachment = require("./battachment");
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Revision represents a snapshot of note's title and content at some point in the past.
 | 
			
		||||
 * It's used for seamless note versioning.
 | 
			
		||||
 *
 | 
			
		||||
 * @extends AbstractBeccaEntity
 | 
			
		||||
 */
 | 
			
		||||
class BRevision extends AbstractBeccaEntity {
 | 
			
		||||
    static get entityName() { return "revisions"; }
 | 
			
		||||
    static get primaryKeyName() { return "revisionId"; }
 | 
			
		||||
    static get hashedProperties() { return ["revisionId", "noteId", "title", "isProtected", "dateLastEdited", "dateCreated",
 | 
			
		||||
                                            "utcDateLastEdited", "utcDateCreated", "utcDateModified", "blobId"]; }
 | 
			
		||||
 | 
			
		||||
    constructor(row, titleDecrypted = false) {
 | 
			
		||||
        super();
 | 
			
		||||
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.revisionId = row.revisionId;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.noteId = row.noteId;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.type = row.type;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.mime = row.mime;
 | 
			
		||||
        /** @type {boolean} */
 | 
			
		||||
        this.isProtected = !!row.isProtected;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.title = row.title;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.blobId = row.blobId;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.dateLastEdited = row.dateLastEdited;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.dateCreated = row.dateCreated;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.utcDateLastEdited = row.utcDateLastEdited;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.utcDateCreated = row.utcDateCreated;
 | 
			
		||||
        /** @type {string} */
 | 
			
		||||
        this.utcDateModified = row.utcDateModified;
 | 
			
		||||
        /** @type {int} */
 | 
			
		||||
        this.contentLength = row.contentLength;
 | 
			
		||||
 | 
			
		||||
        if (this.isProtected && !titleDecrypted) {
 | 
			
		||||
            this.title = protectedSessionService.isProtectedSessionAvailable()
 | 
			
		||||
                ? protectedSessionService.decryptString(this.title)
 | 
			
		||||
                : "[protected]";
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    getNote() {
 | 
			
		||||
        return becca.notes[this.noteId];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {boolean} true if the note has string content (not binary) */
 | 
			
		||||
    hasStringContent() {
 | 
			
		||||
        return utils.isStringNote(this.type, this.mime);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    isContentAvailable() {
 | 
			
		||||
        return !this.revisionId // new note which was not encrypted yet
 | 
			
		||||
            || !this.isProtected
 | 
			
		||||
            || protectedSessionService.isProtectedSessionAvailable()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * Note revision content has quite special handling - it's not a separate entity, but a lazily loaded
 | 
			
		||||
     * part of Revision entity with its own sync. The reason behind this hybrid design is that
 | 
			
		||||
     * content can be quite large, and it's not necessary to load it / fill memory for any note access even
 | 
			
		||||
     * if we don't need a content, especially for bulk operations like search.
 | 
			
		||||
     *
 | 
			
		||||
     * This is the same approach as is used for Note's content.
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    /** @returns {string|Buffer} */
 | 
			
		||||
    getContent() {
 | 
			
		||||
        return this._getContent();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @returns {*}
 | 
			
		||||
     * @throws Error in case of invalid JSON */
 | 
			
		||||
    getJsonContent() {
 | 
			
		||||
        const content = this.getContent();
 | 
			
		||||
 | 
			
		||||
        if (!content || !content.trim()) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return JSON.parse(content);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {*|null} valid object or null if the content cannot be parsed as JSON */
 | 
			
		||||
    getJsonContentSafely() {
 | 
			
		||||
        try {
 | 
			
		||||
            return this.getJsonContent();
 | 
			
		||||
        }
 | 
			
		||||
        catch (e) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param content
 | 
			
		||||
     * @param {object} [opts]
 | 
			
		||||
     * @param {object} [opts.forceSave=false] - will also save this BRevision entity
 | 
			
		||||
     */
 | 
			
		||||
    setContent(content, opts) {
 | 
			
		||||
        this._setContent(content, opts);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {BAttachment[]} */
 | 
			
		||||
    getAttachments() {
 | 
			
		||||
        return sql.getRows(`
 | 
			
		||||
                SELECT attachments.*
 | 
			
		||||
                FROM attachments 
 | 
			
		||||
                WHERE ownerId = ? 
 | 
			
		||||
                  AND isDeleted = 0`, [this.revisionId])
 | 
			
		||||
            .map(row => new BAttachment(row));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {BAttachment|null} */
 | 
			
		||||
    getAttachmentById(attachmentId, opts = {}) {
 | 
			
		||||
        opts.includeContentLength = !!opts.includeContentLength;
 | 
			
		||||
 | 
			
		||||
        const query = opts.includeContentLength
 | 
			
		||||
            ? `SELECT attachments.*, LENGTH(blobs.content) AS contentLength
 | 
			
		||||
               FROM attachments 
 | 
			
		||||
               JOIN blobs USING (blobId) 
 | 
			
		||||
               WHERE ownerId = ? AND attachmentId = ? AND isDeleted = 0`
 | 
			
		||||
            : `SELECT * FROM attachments WHERE ownerId = ? AND attachmentId = ? AND isDeleted = 0`;
 | 
			
		||||
 | 
			
		||||
        return sql.getRows(query, [this.revisionId, attachmentId])
 | 
			
		||||
            .map(row => new BAttachment(row))[0];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {BAttachment[]} */
 | 
			
		||||
    getAttachmentsByRole(role) {
 | 
			
		||||
        return sql.getRows(`
 | 
			
		||||
                SELECT attachments.*
 | 
			
		||||
                FROM attachments 
 | 
			
		||||
                WHERE ownerId = ? 
 | 
			
		||||
                  AND role = ?
 | 
			
		||||
                  AND isDeleted = 0
 | 
			
		||||
                ORDER BY position`, [this.revisionId, role])
 | 
			
		||||
            .map(row => new BAttachment(row));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {BAttachment} */
 | 
			
		||||
    getAttachmentByTitle(title) {
 | 
			
		||||
        return sql.getRows(`
 | 
			
		||||
                SELECT attachments.*
 | 
			
		||||
                FROM attachments 
 | 
			
		||||
                WHERE ownerId = ? 
 | 
			
		||||
                  AND title = ?
 | 
			
		||||
                  AND isDeleted = 0
 | 
			
		||||
                ORDER BY position`, [this.revisionId, title])
 | 
			
		||||
            .map(row => new BAttachment(row))[0];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    beforeSaving() {
 | 
			
		||||
        super.beforeSaving();
 | 
			
		||||
 | 
			
		||||
        this.utcDateModified = dateUtils.utcNowDateTime();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    getPojo() {
 | 
			
		||||
        return {
 | 
			
		||||
            revisionId: this.revisionId,
 | 
			
		||||
            noteId: this.noteId,
 | 
			
		||||
            type: this.type,
 | 
			
		||||
            mime: this.mime,
 | 
			
		||||
            isProtected: this.isProtected,
 | 
			
		||||
            title: this.title,
 | 
			
		||||
            blobId: this.blobId,
 | 
			
		||||
            dateLastEdited: this.dateLastEdited,
 | 
			
		||||
            dateCreated: this.dateCreated,
 | 
			
		||||
            utcDateLastEdited: this.utcDateLastEdited,
 | 
			
		||||
            utcDateCreated: this.utcDateCreated,
 | 
			
		||||
            utcDateModified: this.utcDateModified,
 | 
			
		||||
            content: this.content, // used when retrieving full note revision to frontend
 | 
			
		||||
            contentLength: this.contentLength
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    getPojoToSave() {
 | 
			
		||||
        const pojo = this.getPojo();
 | 
			
		||||
        delete pojo.content; // not getting persisted
 | 
			
		||||
        delete pojo.contentLength; // not getting persisted
 | 
			
		||||
 | 
			
		||||
        if (pojo.isProtected) {
 | 
			
		||||
            if (protectedSessionService.isProtectedSessionAvailable()) {
 | 
			
		||||
                pojo.title = protectedSessionService.encrypt(this.title);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                // updating protected note outside of protected session means we will keep original ciphertexts
 | 
			
		||||
                delete pojo.title;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return pojo;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = BRevision;
 | 
			
		||||
</code></pre>
 | 
			
		||||
        </article>
 | 
			
		||||
    </section>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul><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>
 | 
			
		||||
							
								
								
									
										657
									
								
								docs/backend_api/global.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										657
									
								
								docs/backend_api/global.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,657 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="utf-8">
 | 
			
		||||
    <title>JSDoc: Global</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">Global</h1>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<section>
 | 
			
		||||
 | 
			
		||||
<header>
 | 
			
		||||
    
 | 
			
		||||
        <h2></h2>
 | 
			
		||||
        
 | 
			
		||||
    
 | 
			
		||||
</header>
 | 
			
		||||
 | 
			
		||||
<article>
 | 
			
		||||
    <div class="container-overview">
 | 
			
		||||
    
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
    
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
        <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#line31">line 31</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
        <h3 class="subsection-title">Type Definitions</h3>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
                
 | 
			
		||||
<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">"label"</span>
 | 
			
		||||
|
 | 
			
		||||
 | 
			
		||||
<span class="param-type">"relation"</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        </li>
 | 
			
		||||
    </ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <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>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
                
 | 
			
		||||
<h4 class="name" id="NotePathRecord">NotePathRecord</h4>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <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>isArchived</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
            
 | 
			
		||||
                
 | 
			
		||||
<span class="param-type">boolean</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
            </td>
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="description last"></td>
 | 
			
		||||
        </tr>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>isInHoistedSubTree</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
            
 | 
			
		||||
                
 | 
			
		||||
<span class="param-type">boolean</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
            </td>
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="description last"></td>
 | 
			
		||||
        </tr>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>notePath</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
            
 | 
			
		||||
                
 | 
			
		||||
<span class="param-type">Array.<string></span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
            </td>
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="description last"></td>
 | 
			
		||||
        </tr>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>isHidden</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
            
 | 
			
		||||
                
 | 
			
		||||
<span class="param-type">boolean</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="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line27">line 27</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
                
 | 
			
		||||
<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">"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>
 | 
			
		||||
    </ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <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>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
                
 | 
			
		||||
<h4 class="name" id="int">int</h4>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<div class="description">
 | 
			
		||||
    A whole number
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <h5>Type:</h5>
 | 
			
		||||
    <ul>
 | 
			
		||||
        <li>
 | 
			
		||||
            
 | 
			
		||||
<span class="param-type">number</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#line26">line 26</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="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>
 | 
			
		||||
@@ -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="AbstractBeccaEntity.html">AbstractBeccaEntity</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="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
 | 
			
		||||
    <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.1</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -250,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#line364">line 364</a>
 | 
			
		||||
        <a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line377">line 377</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -430,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#line355">line 355</a>
 | 
			
		||||
        <a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line368">line 368</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -632,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#line345">line 345</a>
 | 
			
		||||
        <a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line358">line 358</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -834,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#line321">line 321</a>
 | 
			
		||||
        <a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line334">line 334</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1036,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#line332">line 332</a>
 | 
			
		||||
        <a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line345">line 345</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1238,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#line311">line 311</a>
 | 
			
		||||
        <a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line324">line 324</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -1294,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="AbstractBeccaEntity.html">AbstractBeccaEntity</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="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
 | 
			
		||||
    <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.1</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -47,6 +47,20 @@ const SpacedUpdate = require("./spaced_update");
 | 
			
		||||
const specialNotesService = require("./special_notes");
 | 
			
		||||
const branchService = require("./branches");
 | 
			
		||||
const exportService = require("./export/zip");
 | 
			
		||||
const syncMutex = require("./sync_mutex.js");
 | 
			
		||||
const optionsService = require("./options");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 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
 | 
			
		||||
@@ -55,11 +69,20 @@ const exportService = require("./export/zip");
 | 
			
		||||
 * @constructor
 | 
			
		||||
 */
 | 
			
		||||
function BackendScriptApi(currentNote, apiParams) {
 | 
			
		||||
    /** @property {BNote} note where script started executing */
 | 
			
		||||
    /**
 | 
			
		||||
     * Note where the script started executing
 | 
			
		||||
     * @type {BNote}
 | 
			
		||||
     */
 | 
			
		||||
    this.startNote = apiParams.startNote;
 | 
			
		||||
    /** @property {BNote} 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 {AbstractBeccaEntity} entity whose event triggered this executions */
 | 
			
		||||
    /**
 | 
			
		||||
     * Entity whose event triggered this execution
 | 
			
		||||
     * @type {AbstractBeccaEntity}
 | 
			
		||||
     */
 | 
			
		||||
    this.originEntity = apiParams.originEntity;
 | 
			
		||||
 | 
			
		||||
    for (const key in apiParams) {
 | 
			
		||||
@@ -67,13 +90,20 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @property {axios} Axios library for HTTP requests. See {@link 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 {@link 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 {@link 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;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -105,6 +135,53 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
			
		||||
     */
 | 
			
		||||
    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 {@link https://github.com/zadam/trilium/wiki/Search} for full documentation for all options
 | 
			
		||||
@@ -165,13 +242,13 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
			
		||||
    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 created 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;
 | 
			
		||||
 | 
			
		||||
@@ -192,7 +269,7 @@ 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 created 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;
 | 
			
		||||
@@ -234,16 +311,16 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
			
		||||
    /**
 | 
			
		||||
     * @method
 | 
			
		||||
     *
 | 
			
		||||
     * @property {object} params
 | 
			
		||||
     * @property {string} params.parentNoteId
 | 
			
		||||
     * @property {string} params.title
 | 
			
		||||
     * @property {string|buffer} params.content
 | 
			
		||||
     * @property {string} params.type - text, code, file, image, search, book, relationMap, canvas
 | 
			
		||||
     * @property {string} [params.mime] - value is derived from default mimes for type
 | 
			
		||||
     * @property {boolean} [params.isProtected=false]
 | 
			
		||||
     * @property {boolean} [params.isExpanded=false]
 | 
			
		||||
     * @property {string} [params.prefix='']
 | 
			
		||||
     * @property {int} [params.notePosition] - default is last existing notePosition in a parent + 10
 | 
			
		||||
     * @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;
 | 
			
		||||
@@ -256,14 +333,14 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
			
		||||
     * @param {string} title
 | 
			
		||||
     * @param {string} [content=""]
 | 
			
		||||
     * @param {object} [extraOptions={}]
 | 
			
		||||
     * @property {boolean} [extraOptions.json=false] - should the note be JSON
 | 
			
		||||
     * @property {boolean} [extraOptions.isProtected=false] - should the note be protected
 | 
			
		||||
     * @property {string} [extraOptions.type='text'] - note type
 | 
			
		||||
     * @property {string} [extraOptions.mime='text/html'] - MIME type of the note
 | 
			
		||||
     * @property {object[]} [extraOptions.attributes=[]] - attributes to be created for this note
 | 
			
		||||
     * @property {string} extraOptions.attributes.type - attribute type - label, relation etc.
 | 
			
		||||
     * @property {string} extraOptions.attributes.name - attribute name
 | 
			
		||||
     * @property {string} [extraOptions.attributes.value] - attribute value
 | 
			
		||||
     * @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= {}) => {
 | 
			
		||||
@@ -272,7 +349,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';
 | 
			
		||||
 | 
			
		||||
@@ -373,7 +450,7 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
			
		||||
    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
 | 
			
		||||
@@ -383,7 +460,7 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
			
		||||
    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
 | 
			
		||||
@@ -398,10 +475,10 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
			
		||||
     * @method
 | 
			
		||||
     * @param {string} parentNoteId - this note's child notes will be sorted
 | 
			
		||||
     * @param {object} [sortConfig]
 | 
			
		||||
     * @property {string} [sortConfig.sortBy=title] - 'title', 'dateCreated', 'dateModified' or a label name
 | 
			
		||||
     * @param {string} [sortConfig.sortBy=title] - 'title', 'dateCreated', 'dateModified' or a label name
 | 
			
		||||
     *                                See {@link https://github.com/zadam/trilium/wiki/Sorting} for details.
 | 
			
		||||
     * @property {boolean} [sortConfig.reverse=false]
 | 
			
		||||
     * @property {boolean} [sortConfig.foldersFirst=false]
 | 
			
		||||
     * @param {boolean} [sortConfig.reverse=false]
 | 
			
		||||
     * @param {boolean} [sortConfig.foldersFirst=false]
 | 
			
		||||
     * @returns {void}
 | 
			
		||||
     */
 | 
			
		||||
    this.sortNotes = (parentNoteId, sortConfig = {}) => treeService.sortNotes(
 | 
			
		||||
@@ -432,7 +509,7 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
			
		||||
     *
 | 
			
		||||
     * @method
 | 
			
		||||
     * @param {function} func
 | 
			
		||||
     * @returns {?} result of func callback
 | 
			
		||||
     * @returns {any} result of func callback
 | 
			
		||||
     */
 | 
			
		||||
    this.transactional = sql.transactional;
 | 
			
		||||
 | 
			
		||||
@@ -440,7 +517,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;
 | 
			
		||||
@@ -460,7 +537,8 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
			
		||||
    this.unescapeHtml = utils.unescapeHtml;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @property {module:sql} sql
 | 
			
		||||
     * sql
 | 
			
		||||
     * @type {module:sql}
 | 
			
		||||
     */
 | 
			
		||||
    this.sql = sql;
 | 
			
		||||
 | 
			
		||||
@@ -468,25 +546,25 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
			
		||||
     * @method
 | 
			
		||||
     * @returns {{syncVersion, appVersion, buildRevision, dbVersion, dataDirectory, buildDate}|*} - object representing basic info about running Trilium version
 | 
			
		||||
     */
 | 
			
		||||
    this.getAppInfo = () => appInfo
 | 
			
		||||
    this.getAppInfo = () => appInfo;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates a new launcher to the launchbar. If the launcher (id) already exists, it will be updated.
 | 
			
		||||
     *
 | 
			
		||||
     * @method
 | 
			
		||||
     * @param {object} opts
 | 
			
		||||
     * @property {string} opts.id - id of the launcher, only alphanumeric at least 6 characters long
 | 
			
		||||
     * @property {string} opts.type - one of
 | 
			
		||||
     * @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)
 | 
			
		||||
     * @property {string} opts.title
 | 
			
		||||
     * @property {boolean} [opts.isVisible=false] - if true, will be created in the "Visible launchers", otherwise in "Available launchers"
 | 
			
		||||
     * @property {string} [opts.icon] - name of the boxicon to be used (e.g. "bx-time")
 | 
			
		||||
     * @property {string} [opts.keyboardShortcut] - will activate the target note/script upon pressing, e.g. "ctrl+e"
 | 
			
		||||
     * @property {string} [opts.targetNoteId] - for type "note"
 | 
			
		||||
     * @property {string} [opts.scriptNoteId] - for type "script"
 | 
			
		||||
     * @property {string} [opts.widgetNoteId] - for type "customWidget"
 | 
			
		||||
     * @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.createOrUpdateLauncher = opts => {
 | 
			
		||||
@@ -499,11 +577,11 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
			
		||||
        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 parentNoteId = opts.isVisible ? '_lbVisibleLaunchers' : '_lbAvailableLaunchers';
 | 
			
		||||
        const noteId = 'al_' + opts.id;
 | 
			
		||||
 | 
			
		||||
        const launcherNote =
 | 
			
		||||
            becca.getNote(opts.id) ||
 | 
			
		||||
            becca.getNote(noteId) ||
 | 
			
		||||
            specialNotesService.createLauncher({
 | 
			
		||||
                noteId: noteId,
 | 
			
		||||
                parentNoteId: parentNoteId,
 | 
			
		||||
@@ -542,7 +620,7 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
			
		||||
        if (opts.icon) {
 | 
			
		||||
            launcherNote.setLabel('iconClass', `bx ${opts.icon}`);
 | 
			
		||||
        } else {
 | 
			
		||||
            launcherNote.removeLabel('keyboardShortcut');
 | 
			
		||||
            launcherNote.removeLabel('iconClass');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return {note: launcherNote};
 | 
			
		||||
@@ -557,6 +635,62 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
			
		||||
     */
 | 
			
		||||
    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;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This object contains "at your risk" and "no BC guarantees" objects for advanced use cases.
 | 
			
		||||
     *
 | 
			
		||||
@@ -578,13 +712,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="AbstractBeccaEntity.html">AbstractBeccaEntity</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="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
 | 
			
		||||
    <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.1</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -54,7 +54,7 @@ const LOG_ALL_QUERIES = false;
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
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}`);
 | 
			
		||||
        return;
 | 
			
		||||
@@ -81,7 +81,7 @@ 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}`);
 | 
			
		||||
        return;
 | 
			
		||||
@@ -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.`);
 | 
			
		||||
        }
 | 
			
		||||
@@ -309,7 +309,7 @@ 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);
 | 
			
		||||
}
 | 
			
		||||
@@ -323,6 +323,19 @@ async function copyDatabase(targetFilePath) {
 | 
			
		||||
    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,
 | 
			
		||||
@@ -395,7 +408,8 @@ module.exports = {
 | 
			
		||||
    transactional,
 | 
			
		||||
    upsert,
 | 
			
		||||
    fillParamList,
 | 
			
		||||
    copyDatabase
 | 
			
		||||
    copyDatabase,
 | 
			
		||||
    disableSlowQueryLogging
 | 
			
		||||
};
 | 
			
		||||
</code></pre>
 | 
			
		||||
        </article>
 | 
			
		||||
@@ -407,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="AbstractBeccaEntity.html">AbstractBeccaEntity</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="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul>
 | 
			
		||||
    <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.1</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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
											
										
									
								
							@@ -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="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line7">line 7</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="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line16">line 16</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="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line28">line 28</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="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line22">line 22</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="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line18">line 18</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,75 @@ 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>
 | 
			
		||||
    </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#line32">line 32</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
<h4 class="name" id="type"><span class="type-signature"></span>type<span class="type-signature"> :<a href="global.html#AttributeType">AttributeType</a></span></h4>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <h5>Type:</h5>
 | 
			
		||||
    <ul>
 | 
			
		||||
        <li>
 | 
			
		||||
            
 | 
			
		||||
<span class="param-type"><a href="global.html#AttributeType">AttributeType</a></span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        </li>
 | 
			
		||||
@@ -484,74 +620,6 @@ 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>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <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_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.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>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -602,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="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line24">line 24</a>
 | 
			
		||||
        <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line30">line 30</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -678,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="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line32">line 32</a>
 | 
			
		||||
        <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line38">line 38</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -780,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="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line37">line 37</a>
 | 
			
		||||
        <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line43">line 43</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -844,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>Classes</h3><ul><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="FNoteComplement.html">FNoteComplement</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</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 4.0.1</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -198,7 +198,75 @@ parents.</div>
 | 
			
		||||
    
 | 
			
		||||
    <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#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_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.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_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.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_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.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_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.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_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.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_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.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>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -682,7 +750,7 @@ parents.</div>
 | 
			
		||||
    
 | 
			
		||||
    <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#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>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -784,7 +852,7 @@ parents.</div>
 | 
			
		||||
    
 | 
			
		||||
    <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#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>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -886,7 +954,7 @@ parents.</div>
 | 
			
		||||
    
 | 
			
		||||
    <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#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>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -988,7 +1056,7 @@ parents.</div>
 | 
			
		||||
    
 | 
			
		||||
    <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#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="FAttribute.html">FAttribute</a></li><li><a href="FBranch.html">FBranch</a></li><li><a href="FNote.html">FNote</a></li><li><a href="FNoteComplement.html">FNoteComplement</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</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 4.0.1</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,790 +0,0 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="utf-8">
 | 
			
		||||
    <title>JSDoc: Class: FNoteComplement</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: FNoteComplement</h1>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<section>
 | 
			
		||||
 | 
			
		||||
<header>
 | 
			
		||||
    
 | 
			
		||||
        <h2><span class="attribs"><span class="type-signature"></span></span>FNoteComplement<span class="signature">()</span><span class="type-signature"></span></h2>
 | 
			
		||||
        
 | 
			
		||||
            <div class="class-description">Complements the FNote with the main note content and other extra attributes</div>
 | 
			
		||||
        
 | 
			
		||||
    
 | 
			
		||||
</header>
 | 
			
		||||
 | 
			
		||||
<article>
 | 
			
		||||
    <div class="container-overview">
 | 
			
		||||
    
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h2>Constructor</h2>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="FNoteComplement"><span class="type-signature"></span>new FNoteComplement<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_fnote_complement.js.html">entities/fnote_complement.js</a>, <a href="entities_fnote_complement.js.html#line4">line 4</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
        <h3 class="subsection-title">Members</h3>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
<h4 class="name" id="combinedDateModified"><span class="type-signature"></span>combinedDateModified<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_fnote_complement.js.html">entities/fnote_complement.js</a>, <a href="entities_fnote_complement.js.html#line33">line 33</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
<h4 class="name" id="combinedUtcDateModified"><span class="type-signature"></span>combinedUtcDateModified<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_fnote_complement.js.html">entities/fnote_complement.js</a>, <a href="entities_fnote_complement.js.html#line36">line 36</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
<h4 class="name" id="content"><span class="type-signature"></span>content<span class="type-signature"> :string</span></h4>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<div class="description">
 | 
			
		||||
    can either contain the whole content (in e.g. string notes), only part (large text notes) or nothing at all (binary notes, images)
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <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_fnote_complement.js.html">entities/fnote_complement.js</a>, <a href="entities_fnote_complement.js.html#line13">line 13</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
<h4 class="name" id="contentLength"><span class="type-signature"></span>contentLength<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_fnote_complement.js.html">entities/fnote_complement.js</a>, <a href="entities_fnote_complement.js.html#line16">line 16</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
<h4 class="name" id="dateCreated"><span class="type-signature"></span>dateCreated<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_fnote_complement.js.html">entities/fnote_complement.js</a>, <a href="entities_fnote_complement.js.html#line19">line 19</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
<h4 class="name" id="dateModified"><span class="type-signature"></span>dateModified<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_fnote_complement.js.html">entities/fnote_complement.js</a>, <a href="entities_fnote_complement.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_fnote_complement.js.html">entities/fnote_complement.js</a>, <a href="entities_fnote_complement.js.html#line7">line 7</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="entities_fnote_complement.js.html">entities/fnote_complement.js</a>, <a href="entities_fnote_complement.js.html#line25">line 25</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="entities_fnote_complement.js.html">entities/fnote_complement.js</a>, <a href="entities_fnote_complement.js.html#line28">line 28</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</article>
 | 
			
		||||
 | 
			
		||||
</section>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><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="FNoteComplement.html">FNoteComplement</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li></ul>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
<script src="scripts/linenumber.js"> </script>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user