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

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

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

 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Ukraine is currently suffering from Russian aggression, please consider donating to [one of these charities](https://old.reddit.com/r/ukraine/comments/s6g5un/want_to_support_ukraine_heres_a_list_of_charities/).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<img src="https://upload.wikimedia.org/wikipedia/commons/4/49/Flag_of_Ukraine.svg" alt="drawing" width="600"/>
 | 
				
			||||||
 | 
					<img src="https://signmyrocket.com//uploads/2b2a523cd0c0e76cdbba95a89a9636b2_1676971281.jpg" alt="Trilium Notes supports Ukraine!" width="600"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Возможности
 | 
					## Возможности
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Заметки можно расположить в виде дерева произвольной глубины. Отдельную заметку можно разместить в нескольких местах дерева (см. [клонирование](https://github.com/zadam/trilium/wiki/Cloning-notes))
 | 
					* Заметки можно расположить в виде дерева произвольной глубины. Отдельную заметку можно разместить в нескольких местах дерева (см. [клонирование](https://github.com/zadam/trilium/wiki/Cloning-notes))
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								TODO
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								TODO
									
									
									
									
									
								
							@@ -1,3 +0,0 @@
 | 
				
			|||||||
- new icon
 | 
					 | 
				
			||||||
- polish becca entities API
 | 
					 | 
				
			||||||
- separate private and public APIs in becca entities
 | 
					 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -5,18 +5,3 @@ echo "Packaging debian x64 distribution..."
 | 
				
			|||||||
VERSION=`jq -r ".version" package.json`
 | 
					VERSION=`jq -r ".version" package.json`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
./node_modules/.bin/electron-installer-debian --config bin/deb-options.json --options.version=${VERSION} --arch amd64
 | 
					./node_modules/.bin/electron-installer-debian --config bin/deb-options.json --options.version=${VERSION} --arch amd64
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# 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,8 +24,10 @@ mv "./dist/Trilium Notes-linux-x64" $BUILD_DIR
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
cp images/app-icons/png/128x128.png $BUILD_DIR/icon.png
 | 
					cp images/app-icons/png/128x128.png $BUILD_DIR/icon.png
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# removing software WebGL binaries because they are pretty huge and not necessary
 | 
					cp bin/tpl/anonymize-database.sql $BUILD_DIR/
 | 
				
			||||||
rm -r $BUILD_DIR/swiftshader
 | 
					
 | 
				
			||||||
 | 
					cp -r dump-db $BUILD_DIR/
 | 
				
			||||||
 | 
					rm -rf $BUILD_DIR/dump-db/node_modules
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cp bin/tpl/trilium-portable.sh $BUILD_DIR/
 | 
					cp bin/tpl/trilium-portable.sh $BUILD_DIR/
 | 
				
			||||||
chmod 755 $BUILD_DIR/trilium-portable.sh
 | 
					chmod 755 $BUILD_DIR/trilium-portable.sh
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,6 +23,11 @@ rm -rf $BUILD_DIR
 | 
				
			|||||||
# Mac build has by default useless directory level
 | 
					# Mac build has by default useless directory level
 | 
				
			||||||
mv "./dist/Trilium Notes-darwin-x64" $BUILD_DIR
 | 
					mv "./dist/Trilium Notes-darwin-x64" $BUILD_DIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cp bin/tpl/anonymize-database.sql $BUILD_DIR/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cp -r dump-db $BUILD_DIR/
 | 
				
			||||||
 | 
					rm -rf $BUILD_DIR/dump-db/node_modules
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo "Zipping mac x64 electron distribution..."
 | 
					echo "Zipping mac x64 electron distribution..."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VERSION=`jq -r ".version" package.json`
 | 
					VERSION=`jq -r ".version" package.json`
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
#!/usr/bin/env bash
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PKG_DIR=dist/trilium-linux-x64-server
 | 
					PKG_DIR=dist/trilium-linux-x64-server
 | 
				
			||||||
NODE_VERSION=16.13.1
 | 
					NODE_VERSION=18.18.2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ "$1" != "DONTCOPY" ]
 | 
					if [ "$1" != "DONTCOPY" ]
 | 
				
			||||||
then
 | 
					then
 | 
				
			||||||
@@ -20,12 +20,19 @@ rm -r $PKG_DIR/node/lib/node_modules/npm
 | 
				
			|||||||
rm -r $PKG_DIR/node/include/node
 | 
					rm -r $PKG_DIR/node/include/node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
rm -r $PKG_DIR/node_modules/electron*
 | 
					rm -r $PKG_DIR/node_modules/electron*
 | 
				
			||||||
 | 
					rm -r $PKG_DIR/webpack*
 | 
				
			||||||
 | 
					rm -r $PKG_DIR/electron.js
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cp -r bin/better-sqlite3/linux-server-better_sqlite3.node $PKG_DIR/node_modules/better-sqlite3/build/Release/better_sqlite3.node
 | 
					cp -r bin/better-sqlite3/linux-server-better_sqlite3.node $PKG_DIR/node_modules/better-sqlite3/build/Release/better_sqlite3.node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
printf "#!/bin/sh\n./node/bin/node src/www" > $PKG_DIR/trilium.sh
 | 
					printf "#!/bin/sh\n./node/bin/node src/www" > $PKG_DIR/trilium.sh
 | 
				
			||||||
chmod 755 $PKG_DIR/trilium.sh
 | 
					chmod 755 $PKG_DIR/trilium.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cp bin/tpl/anonymize-database.sql $PKG_DIR/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cp -r dump-db $PKG_DIR/
 | 
				
			||||||
 | 
					rm -rf $PKG_DIR/dump-db/node_modules
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VERSION=`jq -r ".version" package.json`
 | 
					VERSION=`jq -r ".version" package.json`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cd dist
 | 
					cd dist
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,12 +22,12 @@ rm -rf $BUILD_DIR
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
mv "./dist/Trilium Notes-win32-x64" $BUILD_DIR
 | 
					mv "./dist/Trilium Notes-win32-x64" $BUILD_DIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# removing software WebGL binaries because they are pretty huge and not necessary
 | 
					cp bin/tpl/anonymize-database.sql $BUILD_DIR/
 | 
				
			||||||
rm -r $BUILD_DIR/swiftshader
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
cp bin/tpl/trilium-portable.bat $BUILD_DIR/
 | 
					cp -r dump-db $BUILD_DIR/
 | 
				
			||||||
cp bin/tpl/trilium-no-cert-check.bat $BUILD_DIR/
 | 
					rm -rf $BUILD_DIR/dump-db/node_modules
 | 
				
			||||||
cp bin/tpl/trilium-safe-mode.bat $BUILD_DIR/
 | 
					
 | 
				
			||||||
 | 
					cp bin/tpl/trilium-{portable,no-cert-check,safe-mode}.bat $BUILD_DIR/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo "Zipping windows x64 electron distribution..."
 | 
					echo "Zipping windows x64 electron distribution..."
 | 
				
			||||||
VERSION=`jq -r ".version" package.json`
 | 
					VERSION=`jq -r ".version" package.json`
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@ if [[ $# -eq 0 ]] ; then
 | 
				
			|||||||
    exit 1
 | 
					    exit 1
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
n exec 16.13.1 npm run webpack
 | 
					n exec 18.18.2 npm run webpack
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DIR=$1
 | 
					DIR=$1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -27,7 +27,7 @@ cp -r electron.js $DIR/
 | 
				
			|||||||
cp webpack-* $DIR/
 | 
					cp webpack-* $DIR/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# run in subshell (so we return to original dir)
 | 
					# run in subshell (so we return to original dir)
 | 
				
			||||||
(cd $DIR && n exec 16.13.1 npm install --only=prod)
 | 
					(cd $DIR && n exec 18.18.2 npm install --only=prod)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# cleanup of useless files in dependencies
 | 
					# cleanup of useless files in dependencies
 | 
				
			||||||
rm -r $DIR/node_modules/image-q/demo
 | 
					rm -r $DIR/node_modules/image-q/demo
 | 
				
			||||||
@@ -44,8 +44,7 @@ find $DIR/node_modules -name demo -exec rm -rf {} \;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
find $DIR/libraries -name "*.map" -type f -delete
 | 
					find $DIR/libraries -name "*.map" -type f -delete
 | 
				
			||||||
 | 
					
 | 
				
			||||||
rm -rf $DIR/src/public/app
 | 
					cp $DIR/src/public/app/share.js $DIR/src/public/app-dist/
 | 
				
			||||||
 | 
					cp -r $DIR/src/public/app/doc_notes $DIR/src/public/app-dist/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sed -i -e 's/app\/desktop.js/app-dist\/desktop.js/g' $DIR/src/views/desktop.ejs
 | 
					rm -rf $DIR/src/public/app
 | 
				
			||||||
sed -i -e 's/app\/mobile.js/app-dist\/mobile.js/g' $DIR/src/views/mobile.ejs
 | 
					 | 
				
			||||||
sed -i -e 's/app\/setup.js/app-dist\/setup.js/g' $DIR/src/views/setup.ejs
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								bin/create-anonymization-script.js
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								bin/create-anonymization-script.js
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const anonymizationService = require('../src/services/anonymization');
 | 
				
			||||||
 | 
					const fs = require('fs');
 | 
				
			||||||
 | 
					const path = require('path');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fs.writeFileSync(path.resolve(__dirname, 'tpl', 'anonymize-database.sql'), anonymizationService.getFullAnonymizationScript());
 | 
				
			||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "src": "dist/trilium-linux-x64",
 | 
					  "src": "dist/trilium-linux-x64",
 | 
				
			||||||
  "dest": "dist/",
 | 
					  "dest": "dist/",
 | 
				
			||||||
 | 
					  "compression": "xz",
 | 
				
			||||||
  "name": "trilium",
 | 
					  "name": "trilium",
 | 
				
			||||||
  "productName": "Trilium Notes",
 | 
					  "productName": "Trilium Notes",
 | 
				
			||||||
  "genericName": "Note taker",
 | 
					  "genericName": "Note taker",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
SCHEMA_FILE_PATH=db/schema.sql
 | 
					SCHEMA_FILE_PATH=db/schema.sql
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sqlite3 ~/trilium-data/document.db .schema | grep -v "sqlite_sequence" > "$SCHEMA_FILE_PATH"
 | 
					sqlite3 ./data/document.db .schema | grep -v "sqlite_sequence" > "$SCHEMA_FILE_PATH"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo "DB schema exported to $SCHEMA_FILE_PATH"
 | 
					echo "DB schema exported to $SCHEMA_FILE_PATH"
 | 
				
			||||||
							
								
								
									
										57
									
								
								bin/release-flatpack.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										57
									
								
								bin/release-flatpack.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,57 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ $# -eq 0 ]] ; then
 | 
				
			||||||
 | 
					    echo "Missing argument of new version"
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					VERSION=$1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ! [[ ${VERSION} =~ ^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}(-.+)?$ ]] ;
 | 
				
			||||||
 | 
					then
 | 
				
			||||||
 | 
					    echo "Version ${VERSION} isn't in format X.Y.Z"
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					VERSION_DATE=$(git log -1 --format=%aI "v${VERSION}" | cut -c -10)
 | 
				
			||||||
 | 
					VERSION_COMMIT=$(git rev-list -n 1 "v${VERSION}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# expecting the directory at a specific path
 | 
				
			||||||
 | 
					cd ~/trilium-flathub || exit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ! git diff-index --quiet HEAD --; then
 | 
				
			||||||
 | 
					    echo "There are uncommitted changes"
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BASE_BRANCH=master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ "$VERSION" == *"beta"* ]]; then
 | 
				
			||||||
 | 
					    BASE_BRANCH=beta
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					git switch "${BASE_BRANCH}"
 | 
				
			||||||
 | 
					git pull
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BRANCH=b${VERSION}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					git branch "${BRANCH}"
 | 
				
			||||||
 | 
					git switch "${BRANCH}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Updating files with version ${VERSION}, date ${VERSION_DATE} and commit ${VERSION_COMMIT}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					flatpak-node-generator npm ../trilium/package-lock.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					xmlstarlet ed --inplace --update "/component/releases/release/@version" --value "${VERSION}" --update "/component/releases/release/@date" --value "${VERSION_DATE}" ./com.github.zadam.trilium.metainfo.xml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					yq --inplace "(.modules[0].sources[0].tag = \"v${VERSION}\") | (.modules[0].sources[0].commit = \"${VERSION_COMMIT}\")" ./com.github.zadam.trilium.yml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					git add ./generated-sources.json
 | 
				
			||||||
 | 
					git add ./com.github.zadam.trilium.metainfo.xml
 | 
				
			||||||
 | 
					git add ./com.github.zadam.trilium.yml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					git commit -m "release $VERSION"
 | 
				
			||||||
 | 
					git push --set-upstream origin "${BRANCH}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gh pr create --fill -B "${BASE_BRANCH}"
 | 
				
			||||||
 | 
					gh pr merge --auto --merge --delete-branch
 | 
				
			||||||
							
								
								
									
										50
									
								
								bin/tpl/anonymize-database.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								bin/tpl/anonymize-database.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					UPDATE etapi_tokens SET tokenHash = 'API token hash value';
 | 
				
			||||||
 | 
					UPDATE notes SET title = 'title'
 | 
				
			||||||
 | 
					             WHERE noteId NOT IN ('root', '_hidden', '_share')
 | 
				
			||||||
 | 
					               AND SUBSTR(noteId, 1, 8) != '_options'
 | 
				
			||||||
 | 
					               AND SUBSTR(noteId, 1, 3) != '_lb';
 | 
				
			||||||
 | 
					UPDATE blobs SET content = 'text' WHERE content IS NOT NULL;
 | 
				
			||||||
 | 
					UPDATE revisions SET title = 'title';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UPDATE attributes SET name  = 'name', value = 'value' WHERE type = 'label'
 | 
				
			||||||
 | 
					  AND name NOT IN
 | 
				
			||||||
 | 
					      ('inbox', 'disableVersioning', 'calendarRoot', 'archived', 'excludeFromExport', 'disableInclusion', 'appCss',
 | 
				
			||||||
 | 
					       'appTheme', 'hidePromotedAttributes', 'readOnly', 'autoReadOnlyDisabled', 'cssClass', 'iconClass',
 | 
				
			||||||
 | 
					       'keyboardShortcut', 'run', 'runOnInstance', 'runAtHour', 'customRequestHandler', 'customResourceProvider',
 | 
				
			||||||
 | 
					       'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'revisionsWidgetDisabled',
 | 
				
			||||||
 | 
					       'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass',
 | 
				
			||||||
 | 
					       'workspaceTabBackgroundColor', 'workspaceCalendarRoot', 'workspaceTemplate', 'searchHome', 'workspaceInbox',
 | 
				
			||||||
 | 
					       'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'pageSize', 'viewType', 'mapRootNoteId',
 | 
				
			||||||
 | 
					       'bookmarkFolder', 'sorted', 'sortDirection', 'sortFoldersFirst', 'sortNatural', 'sortLocale', 'top',
 | 
				
			||||||
 | 
					       'fullContentWidth', 'shareHiddenFromTree', 'shareExternalLink', 'shareOmitDefaultCss', 'shareRoot', 'shareDescription',
 | 
				
			||||||
 | 
					       'shareRaw', 'shareDisallowRobotIndexing', 'shareIndex', 'displayRelations', 'hideRelations', 'titleTemplate',
 | 
				
			||||||
 | 
					       'template', 'toc', 'color', 'keepCurrentHoisting', 'executeButton', 'executeDescription', 'newNotesOnTop',
 | 
				
			||||||
 | 
					       'clipperInbox', 'internalLink', 'imageLink', 'relationMapLink', 'includeMapLink', 'runOnNoteCreation',
 | 
				
			||||||
 | 
					       'runOnNoteTitleChange', 'runOnNoteChange', 'runOnNoteContentChange', 'runOnNoteDeletion', 'runOnBranchCreation', 'runOnBranchChange',
 | 
				
			||||||
 | 
					       'runOnBranchDeletion', 'runOnChildNoteCreation', 'runOnAttributeCreation', 'runOnAttributeChange', 'template',
 | 
				
			||||||
 | 
					       'inherit', 'widget', 'renderNote', 'shareCss', 'shareJs', 'shareTemplate', 'shareFavicon');
 | 
				
			||||||
 | 
					UPDATE attributes SET name = 'name' WHERE type = 'relation'
 | 
				
			||||||
 | 
					  AND name NOT IN
 | 
				
			||||||
 | 
					      ('inbox', 'disableVersioning', 'calendarRoot', 'archived', 'excludeFromExport', 'disableInclusion', 'appCss',
 | 
				
			||||||
 | 
					       'appTheme', 'hidePromotedAttributes', 'readOnly', 'autoReadOnlyDisabled', 'cssClass', 'iconClass',
 | 
				
			||||||
 | 
					       'keyboardShortcut', 'run', 'runOnInstance', 'runAtHour', 'customRequestHandler', 'customResourceProvider',
 | 
				
			||||||
 | 
					       'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'revisionsWidgetDisabled',
 | 
				
			||||||
 | 
					       'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass',
 | 
				
			||||||
 | 
					       'workspaceTabBackgroundColor', 'workspaceCalendarRoot', 'workspaceTemplate', 'searchHome', 'workspaceInbox',
 | 
				
			||||||
 | 
					       'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'pageSize', 'viewType', 'mapRootNoteId',
 | 
				
			||||||
 | 
					       'bookmarkFolder', 'sorted', 'sortDirection', 'sortFoldersFirst', 'sortNatural', 'sortLocale', 'top',
 | 
				
			||||||
 | 
					       'fullContentWidth', 'shareHiddenFromTree', 'shareExternalLink', 'shareOmitDefaultCss', 'shareRoot', 'shareDescription',
 | 
				
			||||||
 | 
					       'shareRaw', 'shareDisallowRobotIndexing', 'shareIndex', 'displayRelations', 'hideRelations', 'titleTemplate',
 | 
				
			||||||
 | 
					       'template', 'toc', 'color', 'keepCurrentHoisting', 'executeButton', 'executeDescription', 'newNotesOnTop',
 | 
				
			||||||
 | 
					       'clipperInbox', 'internalLink', 'imageLink', 'relationMapLink', 'includeMapLink', 'runOnNoteCreation',
 | 
				
			||||||
 | 
					       'runOnNoteTitleChange', 'runOnNoteChange', 'runOnNoteContentChange', 'runOnNoteDeletion', 'runOnBranchCreation', 'runOnBranchChange',
 | 
				
			||||||
 | 
					       'runOnBranchDeletion', 'runOnChildNoteCreation', 'runOnAttributeCreation', 'runOnAttributeChange', 'template',
 | 
				
			||||||
 | 
					       'inherit', 'widget', 'renderNote', 'shareCss', 'shareJs', 'shareTemplate', 'shareFavicon');
 | 
				
			||||||
 | 
					UPDATE branches SET prefix = 'prefix' WHERE prefix IS NOT NULL AND prefix != 'recovered';
 | 
				
			||||||
 | 
					UPDATE options SET value = 'anonymized' WHERE name IN
 | 
				
			||||||
 | 
					      ('documentId', 'documentSecret', 'encryptedDataKey',
 | 
				
			||||||
 | 
					       'passwordVerificationHash', 'passwordVerificationSalt',
 | 
				
			||||||
 | 
					       'passwordDerivedKeySalt', 'username', 'syncServerHost', 'syncProxy')
 | 
				
			||||||
 | 
					  AND value != '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					VACUUM;
 | 
				
			||||||
@@ -1,4 +1,23 @@
 | 
				
			|||||||
 | 
					@echo off
 | 
				
			||||||
 | 
					:: Try to get powershell to launch Trilium since it deals with UTF-8 characters in current path
 | 
				
			||||||
 | 
					:: If there's no powershell available, fallback to unicode enabled command interpreter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHERE powershell.exe > NUL 2>&1
 | 
				
			||||||
 | 
					IF %ERRORLEVEL% NEQ 0 GOTO BATCH ELSE GOTO POWERSHELL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:POWERSHELL
 | 
				
			||||||
 | 
					powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo "Set-Item -Path Env:NODE_TLS_REJECT_UNAUTHORIZED -Value 0; ./trilium.exe"
 | 
				
			||||||
 | 
					GOTO END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:BATCH
 | 
				
			||||||
 | 
					:: Make sure we support UTF-8 characters
 | 
				
			||||||
 | 
					chcp 65001
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:: Get Current Trilium executable directory and compute data directory
 | 
				
			||||||
SET DIR=%~dp0
 | 
					SET DIR=%~dp0
 | 
				
			||||||
set NODE_TLS_REJECT_UNAUTHORIZED=0
 | 
					set NODE_TLS_REJECT_UNAUTHORIZED=0
 | 
				
			||||||
cd %DIR%
 | 
					cd %DIR%
 | 
				
			||||||
start trilium.exe
 | 
					start trilium.exe
 | 
				
			||||||
 | 
					GOTO END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:END
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,23 @@
 | 
				
			|||||||
 | 
					@echo off
 | 
				
			||||||
 | 
					:: Try to get powershell to launch Trilium since it deals with UTF-8 characters in current path
 | 
				
			||||||
 | 
					:: If there's no powershell available, fallback to unicode enabled command interpreter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHERE powershell.exe > NUL 2>&1
 | 
				
			||||||
 | 
					IF %ERRORLEVEL% NEQ 0 GOTO BATCH ELSE GOTO POWERSHELL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:POWERSHELL
 | 
				
			||||||
 | 
					powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo "Set-Item -Path Env:TRILIUM_DATA_DIR -Value './trilium-data'; ./trilium.exe"
 | 
				
			||||||
 | 
					GOTO END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:BATCH
 | 
				
			||||||
 | 
					:: Make sure we support UTF-8 characters
 | 
				
			||||||
 | 
					chcp 65001
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:: Get Current Trilium executable directory and compute data directory
 | 
				
			||||||
SET DIR=%~dp0
 | 
					SET DIR=%~dp0
 | 
				
			||||||
SET TRILIUM_DATA_DIR=%DIR%\trilium-data
 | 
					SET TRILIUM_DATA_DIR=%DIR%\trilium-data
 | 
				
			||||||
cd %DIR%
 | 
					cd %DIR%
 | 
				
			||||||
start trilium.exe
 | 
					start trilium.exe
 | 
				
			||||||
 | 
					GOTO END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:END
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,23 @@
 | 
				
			|||||||
 | 
					@echo off
 | 
				
			||||||
 | 
					:: Try to get powershell to launch Trilium since it deals with UTF-8 characters in current path
 | 
				
			||||||
 | 
					:: If there's no powershell available, fallback to unicode enabled command interpreter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WHERE powershell.exe > NUL 2>&1
 | 
				
			||||||
 | 
					IF %ERRORLEVEL% NEQ 0 GOTO BATCH ELSE GOTO POWERSHELL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:POWERSHELL
 | 
				
			||||||
 | 
					powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo "Set-Item -Path Env:TRILIUM_SAFE_MODE -Value 1; ./trilium.exe --disable-gpu"
 | 
				
			||||||
 | 
					GOTO END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:BATCH
 | 
				
			||||||
 | 
					:: Make sure we support UTF-8 characters
 | 
				
			||||||
 | 
					chcp 65001
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:: Get Current Trilium executable directory and compute data directory
 | 
				
			||||||
SET DIR=%~dp0
 | 
					SET DIR=%~dp0
 | 
				
			||||||
SET TRILIUM_SAFE_MODE=1
 | 
					SET TRILIUM_SAFE_MODE=1
 | 
				
			||||||
cd %DIR%
 | 
					cd %DIR%
 | 
				
			||||||
start trilium.exe
 | 
					start trilium.exe --disable-gpu
 | 
				
			||||||
 | 
					GOTO END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:END
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,5 +3,5 @@
 | 
				
			|||||||
DIR=`dirname "$0"`
 | 
					DIR=`dirname "$0"`
 | 
				
			||||||
export TRILIUM_SAFE_MODE=1
 | 
					export TRILIUM_SAFE_MODE=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"$DIR/trilium"
 | 
					"$DIR/trilium" --disable-gpu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,8 +16,14 @@ noBackup=false
 | 
				
			|||||||
# host=0.0.0.0
 | 
					# host=0.0.0.0
 | 
				
			||||||
# port setting is relevant only for web deployments, desktop builds run on a fixed port (changeable with TRILIUM_PORT environment variable)
 | 
					# port setting is relevant only for web deployments, desktop builds run on a fixed port (changeable with TRILIUM_PORT environment variable)
 | 
				
			||||||
port=8080
 | 
					port=8080
 | 
				
			||||||
# true for TLS/SSL/HTTPS (secure), false for HTTP (unsecure).
 | 
					# true for TLS/SSL/HTTPS (secure), false for HTTP (insecure).
 | 
				
			||||||
https=false
 | 
					https=false
 | 
				
			||||||
# path to certificate (run "bash bin/generate-cert.sh" to generate self-signed certificate). Relevant only if https=true
 | 
					# path to certificate (run "bash bin/generate-cert.sh" to generate self-signed certificate). Relevant only if https=true
 | 
				
			||||||
certPath=
 | 
					certPath=
 | 
				
			||||||
keyPath=
 | 
					keyPath=
 | 
				
			||||||
 | 
					# setting to give trust to reverse proxies, a comma-separated list of trusted rev. proxy IPs can be specified (CIDR notation is permitted),
 | 
				
			||||||
 | 
					# alternatively 'true' will make use of the leftmost IP in X-Forwarded-For, ultimately an integer can be used to tell about the number of hops between
 | 
				
			||||||
 | 
					# Trilium (which is hop 0) and the first trusted rev. proxy. 
 | 
				
			||||||
 | 
					# once set, expressjs will use the X-Forwarded-For header set by the rev. proxy to determinate the real IPs of clients.
 | 
				
			||||||
 | 
					# expressjs shortcuts are supported: loopback(127.0.0.1/8, ::1/128), linklocal(169.254.0.0/16, fe80::/10), uniquelocal(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7)
 | 
				
			||||||
 | 
					trustedReverseProxy=false
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,11 +1,5 @@
 | 
				
			|||||||
- drop branches.utcDateCreated - not used for anything
 | 
					 | 
				
			||||||
- drop options.utcDateCreated - not used for anything
 | 
					 | 
				
			||||||
- isDeleted = 0 by default
 | 
					- isDeleted = 0 by default
 | 
				
			||||||
- rename openTabs to openNoteContexts
 | 
					 | 
				
			||||||
- migrate black theme to dark theme
 | 
					 | 
				
			||||||
- unify readOnly handling to a single attribute:
 | 
					- unify readOnly handling to a single attribute:
 | 
				
			||||||
  * readOnly - like now
 | 
					  * readOnly - like now
 | 
				
			||||||
  * readOnly=auto - like without readOnly (used to override inherited readOnly)
 | 
					  * readOnly=auto - like without readOnly (used to override inherited readOnly)
 | 
				
			||||||
  * readOnly=never - like autoReadOnlyDisabled
 | 
					  * readOnly=never - like autoReadOnlyDisabled
 | 
				
			||||||
- remove focusOnAttributesKeyboardShortcut
 | 
					 | 
				
			||||||
- rename white theme to "light" theme (it's not completely white and matches well to dark theme)
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								db/demo.zip
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								db/demo.zip
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -1 +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 @@
 | 
				
			|||||||
-- delete duplicates https://github.com/zadam/trilium/issues/2534
 | 
					 | 
				
			||||||
DELETE FROM entity_changes WHERE isErased = 0 AND id IN (
 | 
					 | 
				
			||||||
    SELECT id FROM entity_changes ec
 | 
					 | 
				
			||||||
    WHERE (
 | 
					 | 
				
			||||||
              SELECT COUNT(*) FROM entity_changes
 | 
					 | 
				
			||||||
              WHERE ec.entityName = entity_changes.entityName
 | 
					 | 
				
			||||||
                AND ec.entityId = entity_changes.entityId
 | 
					 | 
				
			||||||
          ) > 1
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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,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);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
							
								
								
									
										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';
 | 
				
			||||||
@@ -5,15 +5,18 @@ CREATE TABLE IF NOT EXISTS "entity_changes" (
 | 
				
			|||||||
                                                `hash`	TEXT NOT NULL,
 | 
					                                                `hash`	TEXT NOT NULL,
 | 
				
			||||||
                                                `isErased` INT NOT NULL,
 | 
					                                                `isErased` INT NOT NULL,
 | 
				
			||||||
                                                `changeId` TEXT NOT NULL,
 | 
					                                                `changeId` TEXT NOT NULL,
 | 
				
			||||||
                                                `sourceId` TEXT NOT NULL,
 | 
					                                                `componentId` TEXT NOT NULL,
 | 
				
			||||||
 | 
					                                                `instanceId` TEXT NOT NULL,
 | 
				
			||||||
                                                `isSynced` INTEGER NOT NULL,
 | 
					                                                `isSynced` INTEGER NOT NULL,
 | 
				
			||||||
                                                `utcDateChanged` TEXT NOT NULL
 | 
					                                                `utcDateChanged` TEXT NOT NULL
 | 
				
			||||||
                                                );
 | 
					                                                );
 | 
				
			||||||
CREATE TABLE IF NOT EXISTS "api_tokens"
 | 
					CREATE TABLE IF NOT EXISTS "etapi_tokens"
 | 
				
			||||||
(
 | 
					(
 | 
				
			||||||
    apiTokenId TEXT PRIMARY KEY NOT NULL,
 | 
					    etapiTokenId TEXT PRIMARY KEY NOT NULL,
 | 
				
			||||||
    token TEXT NOT NULL,
 | 
					    name TEXT NOT NULL,
 | 
				
			||||||
 | 
					    tokenHash TEXT NOT NULL,
 | 
				
			||||||
    utcDateCreated TEXT NOT NULL,
 | 
					    utcDateCreated TEXT NOT NULL,
 | 
				
			||||||
 | 
					    utcDateModified TEXT NOT NULL,
 | 
				
			||||||
    isDeleted INT NOT NULL DEFAULT 0);
 | 
					    isDeleted INT NOT NULL DEFAULT 0);
 | 
				
			||||||
CREATE TABLE IF NOT EXISTS "branches" (
 | 
					CREATE TABLE IF NOT EXISTS "branches" (
 | 
				
			||||||
                                          `branchId`	TEXT NOT NULL,
 | 
					                                          `branchId`	TEXT NOT NULL,
 | 
				
			||||||
@@ -32,6 +35,7 @@ CREATE TABLE IF NOT EXISTS "notes" (
 | 
				
			|||||||
                                       `isProtected`	INT NOT NULL DEFAULT 0,
 | 
					                                       `isProtected`	INT NOT NULL DEFAULT 0,
 | 
				
			||||||
                                       `type` TEXT NOT NULL DEFAULT 'text',
 | 
					                                       `type` TEXT NOT NULL DEFAULT 'text',
 | 
				
			||||||
                                       `mime` TEXT NOT NULL DEFAULT 'text/html',
 | 
					                                       `mime` TEXT NOT NULL DEFAULT 'text/html',
 | 
				
			||||||
 | 
					                                       blobId TEXT DEFAULT NULL,
 | 
				
			||||||
                                       `isDeleted`	INT NOT NULL DEFAULT 0,
 | 
					                                       `isDeleted`	INT NOT NULL DEFAULT 0,
 | 
				
			||||||
                                       `deleteId`   TEXT DEFAULT NULL,
 | 
					                                       `deleteId`   TEXT DEFAULT NULL,
 | 
				
			||||||
                                       `dateCreated`	TEXT NOT NULL,
 | 
					                                       `dateCreated`	TEXT NOT NULL,
 | 
				
			||||||
@@ -39,31 +43,22 @@ CREATE TABLE IF NOT EXISTS "notes" (
 | 
				
			|||||||
                                       `utcDateCreated`	TEXT NOT NULL,
 | 
					                                       `utcDateCreated`	TEXT NOT NULL,
 | 
				
			||||||
                                       `utcDateModified`	TEXT NOT NULL,
 | 
					                                       `utcDateModified`	TEXT NOT NULL,
 | 
				
			||||||
                                       PRIMARY KEY(`noteId`));
 | 
					                                       PRIMARY KEY(`noteId`));
 | 
				
			||||||
CREATE TABLE IF NOT EXISTS "note_contents" (
 | 
					CREATE TABLE IF NOT EXISTS "revisions" (`revisionId`	TEXT NOT NULL PRIMARY KEY,
 | 
				
			||||||
                                               `noteId`	TEXT NOT NULL,
 | 
					 | 
				
			||||||
                                               `content`	TEXT NULL DEFAULT NULL,
 | 
					 | 
				
			||||||
                                               `dateModified` TEXT NOT NULL,
 | 
					 | 
				
			||||||
                                               `utcDateModified` TEXT NOT NULL,
 | 
					 | 
				
			||||||
                                               PRIMARY KEY(`noteId`)
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
CREATE TABLE IF NOT EXISTS "note_revisions" (`noteRevisionId`	TEXT NOT NULL PRIMARY KEY,
 | 
					 | 
				
			||||||
                                             `noteId`	TEXT NOT NULL,
 | 
					                                             `noteId`	TEXT NOT NULL,
 | 
				
			||||||
                                             type TEXT DEFAULT '' NOT NULL,
 | 
					                                             type TEXT DEFAULT '' NOT NULL,
 | 
				
			||||||
                                             mime TEXT DEFAULT '' NOT NULL,
 | 
					                                             mime TEXT DEFAULT '' NOT NULL,
 | 
				
			||||||
                                             `title`	TEXT,
 | 
					                                             `title`	TEXT NOT NULL,
 | 
				
			||||||
                                             `isProtected`	INT NOT NULL DEFAULT 0,
 | 
					                                             `isProtected`	INT NOT NULL DEFAULT 0,
 | 
				
			||||||
 | 
					                                            blobId TEXT DEFAULT NULL,
 | 
				
			||||||
                                             `utcDateLastEdited` TEXT NOT NULL,
 | 
					                                             `utcDateLastEdited` TEXT NOT NULL,
 | 
				
			||||||
                                             `utcDateCreated` TEXT NOT NULL,
 | 
					                                             `utcDateCreated` TEXT NOT NULL,
 | 
				
			||||||
                                             `utcDateModified` TEXT NOT NULL,
 | 
					                                             `utcDateModified` TEXT NOT NULL,
 | 
				
			||||||
                                             `dateLastEdited` TEXT NOT NULL,
 | 
					                                             `dateLastEdited` TEXT NOT NULL,
 | 
				
			||||||
                                             `dateCreated` TEXT NOT NULL);
 | 
					                                             `dateCreated` TEXT NOT NULL);
 | 
				
			||||||
CREATE TABLE IF NOT EXISTS "note_revision_contents" (`noteRevisionId`	TEXT NOT NULL PRIMARY KEY,
 | 
					 | 
				
			||||||
                                                     `content`	TEXT,
 | 
					 | 
				
			||||||
                                                     `utcDateModified` TEXT NOT NULL);
 | 
					 | 
				
			||||||
CREATE TABLE IF NOT EXISTS "options"
 | 
					CREATE TABLE IF NOT EXISTS "options"
 | 
				
			||||||
(
 | 
					(
 | 
				
			||||||
    name TEXT not null PRIMARY KEY,
 | 
					    name TEXT not null PRIMARY KEY,
 | 
				
			||||||
    value TEXT,
 | 
					    value TEXT not null,
 | 
				
			||||||
    isSynced INTEGER default 0 not null,
 | 
					    isSynced INTEGER default 0 not null,
 | 
				
			||||||
    utcDateModified TEXT NOT NULL
 | 
					    utcDateModified TEXT NOT NULL
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
@@ -91,11 +86,12 @@ CREATE INDEX `IDX_notes_dateCreated` ON `notes` (`dateCreated`);
 | 
				
			|||||||
CREATE INDEX `IDX_notes_dateModified` ON `notes` (`dateModified`);
 | 
					CREATE INDEX `IDX_notes_dateModified` ON `notes` (`dateModified`);
 | 
				
			||||||
CREATE INDEX `IDX_notes_utcDateModified` ON `notes` (`utcDateModified`);
 | 
					CREATE INDEX `IDX_notes_utcDateModified` ON `notes` (`utcDateModified`);
 | 
				
			||||||
CREATE INDEX `IDX_notes_utcDateCreated` ON `notes` (`utcDateCreated`);
 | 
					CREATE INDEX `IDX_notes_utcDateCreated` ON `notes` (`utcDateCreated`);
 | 
				
			||||||
CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (`noteId`);
 | 
					CREATE INDEX `IDX_revisions_noteId` ON `revisions` (`noteId`);
 | 
				
			||||||
CREATE INDEX `IDX_note_revisions_utcDateCreated` ON `note_revisions` (`utcDateCreated`);
 | 
					CREATE INDEX `IDX_revisions_utcDateCreated` ON `revisions` (`utcDateCreated`);
 | 
				
			||||||
CREATE INDEX `IDX_note_revisions_utcDateLastEdited` ON `note_revisions` (`utcDateLastEdited`);
 | 
					CREATE INDEX `IDX_revisions_utcDateLastEdited` ON `revisions` (`utcDateLastEdited`);
 | 
				
			||||||
CREATE INDEX `IDX_note_revisions_dateCreated` ON `note_revisions` (`dateCreated`);
 | 
					CREATE INDEX `IDX_revisions_dateCreated` ON `revisions` (`dateCreated`);
 | 
				
			||||||
CREATE INDEX `IDX_note_revisions_dateLastEdited` ON `note_revisions` (`dateLastEdited`);
 | 
					CREATE INDEX `IDX_revisions_dateLastEdited` ON `revisions` (`dateLastEdited`);
 | 
				
			||||||
 | 
					CREATE INDEX `IDX_entity_changes_changeId` ON `entity_changes` (`changeId`);
 | 
				
			||||||
CREATE INDEX IDX_attributes_name_value
 | 
					CREATE INDEX IDX_attributes_name_value
 | 
				
			||||||
    on attributes (name, value);
 | 
					    on attributes (name, value);
 | 
				
			||||||
CREATE INDEX IDX_attributes_noteId_index
 | 
					CREATE INDEX IDX_attributes_noteId_index
 | 
				
			||||||
@@ -108,3 +104,31 @@ CREATE TABLE IF NOT EXISTS "recent_notes"
 | 
				
			|||||||
    notePath TEXT not null,
 | 
					    notePath TEXT not null,
 | 
				
			||||||
    utcDateCreated TEXT not null
 | 
					    utcDateCreated TEXT not null
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					CREATE TABLE IF NOT EXISTS "blobs" (
 | 
				
			||||||
 | 
					                                               `blobId`	TEXT NOT NULL,
 | 
				
			||||||
 | 
					                                               `content`	TEXT NULL DEFAULT NULL,
 | 
				
			||||||
 | 
					                                               `dateModified` TEXT NOT NULL,
 | 
				
			||||||
 | 
					                                               `utcDateModified` TEXT NOT NULL,
 | 
				
			||||||
 | 
					                                               PRIMARY KEY(`blobId`)
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					CREATE TABLE IF NOT EXISTS "attachments"
 | 
				
			||||||
 | 
					(
 | 
				
			||||||
 | 
					    attachmentId      TEXT not null primary key,
 | 
				
			||||||
 | 
					    ownerId       TEXT not null,
 | 
				
			||||||
 | 
					    role         TEXT not null,
 | 
				
			||||||
 | 
					    mime         TEXT not null,
 | 
				
			||||||
 | 
					    title         TEXT not null,
 | 
				
			||||||
 | 
					    isProtected    INT  not null DEFAULT 0,
 | 
				
			||||||
 | 
					    position     INT  default 0 not null,
 | 
				
			||||||
 | 
					    blobId    TEXT DEFAULT null,
 | 
				
			||||||
 | 
					    dateModified TEXT NOT NULL,
 | 
				
			||||||
 | 
					    utcDateModified TEXT not null,
 | 
				
			||||||
 | 
					    utcDateScheduledForErasureSince TEXT DEFAULT NULL,
 | 
				
			||||||
 | 
					    isDeleted    INT  not null,
 | 
				
			||||||
 | 
					    deleteId    TEXT DEFAULT NULL);
 | 
				
			||||||
 | 
					CREATE INDEX IDX_attachments_ownerId_role
 | 
				
			||||||
 | 
					    on attachments (ownerId, role);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CREATE INDEX IDX_notes_blobId on notes (blobId);
 | 
				
			||||||
 | 
					CREATE INDEX IDX_revisions_blobId on revisions (blobId);
 | 
				
			||||||
 | 
					CREATE INDEX IDX_attachments_blobId on attachments (blobId);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,17 +1,16 @@
 | 
				
			|||||||
 | 
					# Running `docker-compose up` will create/use the "trilium-data" directory in the user home
 | 
				
			||||||
 | 
					# Run `TRILIUM_DATA_DIR=/path/of/your/choice docker-compose up` to set a different directory
 | 
				
			||||||
version: '2.1'
 | 
					version: '2.1'
 | 
				
			||||||
services:
 | 
					services:
 | 
				
			||||||
  trilium:
 | 
					  trilium:
 | 
				
			||||||
    build:
 | 
					 | 
				
			||||||
      context: .
 | 
					 | 
				
			||||||
    image: zadam/trilium
 | 
					    image: zadam/trilium
 | 
				
			||||||
    restart: always
 | 
					    restart: always
 | 
				
			||||||
    environment:
 | 
					    environment:
 | 
				
			||||||
      - TRILIUM_DATA_DIR=/data
 | 
					      - TRILIUM_DATA_DIR=/home/node/trilium-data
 | 
				
			||||||
    ports:
 | 
					    ports:
 | 
				
			||||||
      - "8080:8080"
 | 
					      - "8080:8080"
 | 
				
			||||||
    volumes:
 | 
					    volumes:
 | 
				
			||||||
      - trilium:/data
 | 
					      - ${TRILIUM_DATA_DIR:-~/trilium-data}:/home/node/trilium-data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
volumes:
 | 
					volumes:
 | 
				
			||||||
  trilium:
 | 
					  trilium:
 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										42
									
								
								docker_healthcheck.js
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										42
									
								
								docker_healthcheck.js
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					const http = require("http");
 | 
				
			||||||
 | 
					const ini = require("ini");
 | 
				
			||||||
 | 
					const fs = require("fs");
 | 
				
			||||||
 | 
					const dataDir = require("./src/services/data_dir");
 | 
				
			||||||
 | 
					const config = ini.parse(fs.readFileSync(dataDir.CONFIG_INI_PATH, 'utf-8'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (config.Network.https) {
 | 
				
			||||||
 | 
					    // built-in TLS (terminated by trilium) is not supported yet, PRs are welcome
 | 
				
			||||||
 | 
					    // for reverse proxy terminated TLS this will works since config.https will be false
 | 
				
			||||||
 | 
					    process.exit(0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const port = require('./src/services/port');
 | 
				
			||||||
 | 
					const host = require('./src/services/host');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const options = { timeout: 2000 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const callback = res => {
 | 
				
			||||||
 | 
					    console.log(`STATUS: ${res.statusCode}`);
 | 
				
			||||||
 | 
					    if (res.statusCode === 200) {
 | 
				
			||||||
 | 
					        process.exit(0);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        process.exit(1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let request;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (port !== 0) { // TCP socket.
 | 
				
			||||||
 | 
					    const url = `http://${host}:${port}/api/health-check`;
 | 
				
			||||||
 | 
					    request = http.request(url, options, callback);
 | 
				
			||||||
 | 
					} else { // Unix socket.
 | 
				
			||||||
 | 
					    options.socketPath = host;
 | 
				
			||||||
 | 
					    options.path = '/api/health-check';
 | 
				
			||||||
 | 
					    request = http.request(options, callback);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					request.on("error", err => {
 | 
				
			||||||
 | 
					    console.log("ERROR");
 | 
				
			||||||
 | 
					    process.exit(1);
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					request.end();
 | 
				
			||||||
							
								
								
									
										1207
									
								
								docs/backend_api/AbstractBeccaEntity.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1207
									
								
								docs/backend_api/AbstractBeccaEntity.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,380 +0,0 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					 | 
				
			||||||
<html lang="en">
 | 
					 | 
				
			||||||
<head>
 | 
					 | 
				
			||||||
    <meta charset="utf-8">
 | 
					 | 
				
			||||||
    <title>JSDoc: Class: ApiToken</title>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <script src="scripts/prettify/prettify.js"> </script>
 | 
					 | 
				
			||||||
    <script src="scripts/prettify/lang-css.js"> </script>
 | 
					 | 
				
			||||||
    <!--[if lt IE 9]>
 | 
					 | 
				
			||||||
      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
 | 
					 | 
				
			||||||
    <![endif]-->
 | 
					 | 
				
			||||||
    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
 | 
					 | 
				
			||||||
    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
 | 
					 | 
				
			||||||
</head>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<body>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div id="main">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h1 class="page-title">Class: ApiToken</h1>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<section>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<header>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
        <h2><span class="attribs"><span class="type-signature"></span></span>ApiToken<span class="signature">()</span><span class="type-signature"></span></h2>
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            <div class="class-description">ApiToken is an entity representing token used to authenticate against Trilium API from client applications. Currently used only by Trilium Sender.</div>
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</header>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<article>
 | 
					 | 
				
			||||||
    <div class="container-overview">
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <h2>Constructor</h2>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <h4 class="name" id="ApiToken"><span class="type-signature"></span>new ApiToken<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_api_token.js.html">becca/entities/api_token.js</a>, <a href="becca_entities_api_token.js.html#line9">line 9</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
        <h3 class="subsection-title">Members</h3>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<h4 class="name" id="apiTokenId"><span class="type-signature"></span>apiTokenId<span class="type-signature"> :string</span></h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h5>Type:</h5>
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
        <li>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_api_token.js.html">becca/entities/api_token.js</a>, <a href="becca_entities_api_token.js.html#line18">line 18</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<h4 class="name" id="token"><span class="type-signature"></span>token<span class="type-signature"> :string</span></h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h5>Type:</h5>
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
        <li>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_api_token.js.html">becca/entities/api_token.js</a>, <a href="becca_entities_api_token.js.html#line20">line 20</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<h4 class="name" id="utcDateCreated"><span class="type-signature"></span>utcDateCreated<span class="type-signature"> :string</span></h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h5>Type:</h5>
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
        <li>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_api_token.js.html">becca/entities/api_token.js</a>, <a href="becca_entities_api_token.js.html#line22">line 22</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</article>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
</section>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<nav>
 | 
					 | 
				
			||||||
    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="sql%250A%250ATODO_%2520some%2520methods%2520(like%2520getValue())%2520could%2520use%2520raw%2520rowsmodule_.html">sql
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TODO: some methods (like getValue()) could use raw rows</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
					 | 
				
			||||||
</nav>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<br class="clear">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<footer>
 | 
					 | 
				
			||||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
 | 
					 | 
				
			||||||
</footer>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script> prettyPrint(); </script>
 | 
					 | 
				
			||||||
<script src="scripts/linenumber.js"> </script>
 | 
					 | 
				
			||||||
</body>
 | 
					 | 
				
			||||||
</html>
 | 
					 | 
				
			||||||
							
								
								
									
										2894
									
								
								docs/backend_api/BAttachment.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2894
									
								
								docs/backend_api/BAttachment.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2130
									
								
								docs/backend_api/BAttribute.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2130
									
								
								docs/backend_api/BAttribute.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2244
									
								
								docs/backend_api/BBranch.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2244
									
								
								docs/backend_api/BBranch.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1687
									
								
								docs/backend_api/BEtapiToken.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1687
									
								
								docs/backend_api/BEtapiToken.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1545
									
								
								docs/backend_api/BOption.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1545
									
								
								docs/backend_api/BOption.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1477
									
								
								docs/backend_api/BRecentNote.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1477
									
								
								docs/backend_api/BRecentNote.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3243
									
								
								docs/backend_api/BRevision.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3243
									
								
								docs/backend_api/BRevision.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,769 +0,0 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					 | 
				
			||||||
<html lang="en">
 | 
					 | 
				
			||||||
<head>
 | 
					 | 
				
			||||||
    <meta charset="utf-8">
 | 
					 | 
				
			||||||
    <title>JSDoc: Class: Branch</title>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <script src="scripts/prettify/prettify.js"> </script>
 | 
					 | 
				
			||||||
    <script src="scripts/prettify/lang-css.js"> </script>
 | 
					 | 
				
			||||||
    <!--[if lt IE 9]>
 | 
					 | 
				
			||||||
      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
 | 
					 | 
				
			||||||
    <![endif]-->
 | 
					 | 
				
			||||||
    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
 | 
					 | 
				
			||||||
    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
 | 
					 | 
				
			||||||
</head>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<body>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div id="main">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h1 class="page-title">Class: Branch</h1>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<section>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<header>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
        <h2><span class="attribs"><span class="type-signature"></span></span>Branch<span class="signature">()</span><span class="type-signature"></span></h2>
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            <div class="class-description">Branch represents a relationship between a child note and its parent note. Trilium allows a note to have multiple
 | 
					 | 
				
			||||||
parents.</div>
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</header>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<article>
 | 
					 | 
				
			||||||
    <div class="container-overview">
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <h2>Constructor</h2>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <h4 class="name" id="Branch"><span class="type-signature"></span>new Branch<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line12">line 12</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
        <h3 class="subsection-title">Members</h3>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<h4 class="name" id="branchId"><span class="type-signature"></span>branchId<span class="type-signature"> :string</span></h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h5>Type:</h5>
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
        <li>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line43">line 43</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<h4 class="name" id="childNote"><span class="type-signature"></span>childNote<span class="type-signature"></span></h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line88">line 88</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<h4 class="name" id="isExpanded"><span class="type-signature"></span>isExpanded<span class="type-signature"> :boolean</span></h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h5>Type:</h5>
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
        <li>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<span class="param-type">boolean</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line53">line 53</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<h4 class="name" id="noteId"><span class="type-signature"></span>noteId<span class="type-signature"> :string</span></h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h5>Type:</h5>
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
        <li>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line45">line 45</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<h4 class="name" id="notePosition"><span class="type-signature"></span>notePosition<span class="type-signature"> :int</span></h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h5>Type:</h5>
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
        <li>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<span class="param-type">int</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line51">line 51</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<h4 class="name" id="parentNote"><span class="type-signature"></span>parentNote<span class="type-signature"></span></h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line102">line 102</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<h4 class="name" id="parentNoteId"><span class="type-signature"></span>parentNoteId<span class="type-signature"> :string</span></h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h5>Type:</h5>
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
        <li>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line47">line 47</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<h4 class="name" id="prefix"><span class="type-signature"></span>prefix<span class="type-signature"> :string</span></h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h5>Type:</h5>
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
        <li>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line49">line 49</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<h4 class="name" id="utcDateModified"><span class="type-signature"></span>utcDateModified<span class="type-signature"> :string</span></h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h5>Type:</h5>
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
        <li>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_branch.js.html">becca/entities/branch.js</a>, <a href="becca_entities_branch.js.html#line55">line 55</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</article>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
</section>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<nav>
 | 
					 | 
				
			||||||
    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="sql%250A%250ATODO_%2520some%2520methods%2520(like%2520getValue())%2520could%2520use%2520raw%2520rowsmodule_.html">sql
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TODO: some methods (like getValue()) could use raw rows</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
					 | 
				
			||||||
</nav>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<br class="clear">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<footer>
 | 
					 | 
				
			||||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
 | 
					 | 
				
			||||||
</footer>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script> prettyPrint(); </script>
 | 
					 | 
				
			||||||
<script src="scripts/linenumber.js"> </script>
 | 
					 | 
				
			||||||
</body>
 | 
					 | 
				
			||||||
</html>
 | 
					 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,448 +0,0 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					 | 
				
			||||||
<html lang="en">
 | 
					 | 
				
			||||||
<head>
 | 
					 | 
				
			||||||
    <meta charset="utf-8">
 | 
					 | 
				
			||||||
    <title>JSDoc: Class: Option</title>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <script src="scripts/prettify/prettify.js"> </script>
 | 
					 | 
				
			||||||
    <script src="scripts/prettify/lang-css.js"> </script>
 | 
					 | 
				
			||||||
    <!--[if lt IE 9]>
 | 
					 | 
				
			||||||
      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
 | 
					 | 
				
			||||||
    <![endif]-->
 | 
					 | 
				
			||||||
    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
 | 
					 | 
				
			||||||
    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
 | 
					 | 
				
			||||||
</head>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<body>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div id="main">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h1 class="page-title">Class: Option</h1>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<section>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<header>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
        <h2><span class="attribs"><span class="type-signature"></span></span>Option<span class="signature">()</span><span class="type-signature"></span></h2>
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            <div class="class-description">Option represents name-value pair, either directly configurable by the user or some system property.</div>
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</header>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<article>
 | 
					 | 
				
			||||||
    <div class="container-overview">
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <h2>Constructor</h2>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <h4 class="name" id="Option"><span class="type-signature"></span>new Option<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_option.js.html">becca/entities/option.js</a>, <a href="becca_entities_option.js.html#line9">line 9</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
        <h3 class="subsection-title">Members</h3>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<h4 class="name" id="isSynced"><span class="type-signature"></span>isSynced<span class="type-signature"> :boolean</span></h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h5>Type:</h5>
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
        <li>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<span class="param-type">boolean</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_option.js.html">becca/entities/option.js</a>, <a href="becca_entities_option.js.html#line22">line 22</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<h4 class="name" id="name"><span class="type-signature"></span>name<span class="type-signature"> :string</span></h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h5>Type:</h5>
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
        <li>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_option.js.html">becca/entities/option.js</a>, <a href="becca_entities_option.js.html#line18">line 18</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<h4 class="name" id="utcDateModified"><span class="type-signature"></span>utcDateModified<span class="type-signature"> :string</span></h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h5>Type:</h5>
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
        <li>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_option.js.html">becca/entities/option.js</a>, <a href="becca_entities_option.js.html#line24">line 24</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<h4 class="name" id="value"><span class="type-signature"></span>value<span class="type-signature"> :string</span></h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h5>Type:</h5>
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
        <li>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_option.js.html">becca/entities/option.js</a>, <a href="becca_entities_option.js.html#line20">line 20</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</article>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
</section>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<nav>
 | 
					 | 
				
			||||||
    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="sql%250A%250ATODO_%2520some%2520methods%2520(like%2520getValue())%2520could%2520use%2520raw%2520rowsmodule_.html">sql
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TODO: some methods (like getValue()) could use raw rows</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
					 | 
				
			||||||
</nav>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<br class="clear">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<footer>
 | 
					 | 
				
			||||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
 | 
					 | 
				
			||||||
</footer>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script> prettyPrint(); </script>
 | 
					 | 
				
			||||||
<script src="scripts/linenumber.js"> </script>
 | 
					 | 
				
			||||||
</body>
 | 
					 | 
				
			||||||
</html>
 | 
					 | 
				
			||||||
@@ -1,380 +0,0 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					 | 
				
			||||||
<html lang="en">
 | 
					 | 
				
			||||||
<head>
 | 
					 | 
				
			||||||
    <meta charset="utf-8">
 | 
					 | 
				
			||||||
    <title>JSDoc: Class: RecentNote</title>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <script src="scripts/prettify/prettify.js"> </script>
 | 
					 | 
				
			||||||
    <script src="scripts/prettify/lang-css.js"> </script>
 | 
					 | 
				
			||||||
    <!--[if lt IE 9]>
 | 
					 | 
				
			||||||
      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
 | 
					 | 
				
			||||||
    <![endif]-->
 | 
					 | 
				
			||||||
    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
 | 
					 | 
				
			||||||
    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
 | 
					 | 
				
			||||||
</head>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<body>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div id="main">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h1 class="page-title">Class: RecentNote</h1>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<section>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<header>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
        <h2><span class="attribs"><span class="type-signature"></span></span>RecentNote<span class="signature">()</span><span class="type-signature"></span></h2>
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            <div class="class-description">RecentNote represents recently visited note.</div>
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</header>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<article>
 | 
					 | 
				
			||||||
    <div class="container-overview">
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <h2>Constructor</h2>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <h4 class="name" id="RecentNote"><span class="type-signature"></span>new RecentNote<span class="signature">()</span><span class="type-signature"></span></h4>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_recent_note.js.html">becca/entities/recent_note.js</a>, <a href="becca_entities_recent_note.js.html#line9">line 9</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
        <h3 class="subsection-title">Members</h3>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<h4 class="name" id="noteId"><span class="type-signature"></span>noteId<span class="type-signature"> :string</span></h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h5>Type:</h5>
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
        <li>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_recent_note.js.html">becca/entities/recent_note.js</a>, <a href="becca_entities_recent_note.js.html#line17">line 17</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<h4 class="name" id="notePath"><span class="type-signature"></span>notePath<span class="type-signature"> :string</span></h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h5>Type:</h5>
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
        <li>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_recent_note.js.html">becca/entities/recent_note.js</a>, <a href="becca_entities_recent_note.js.html#line19">line 19</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<h4 class="name" id="utcDateCreated"><span class="type-signature"></span>utcDateCreated<span class="type-signature"> :string</span></h4>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h5>Type:</h5>
 | 
					 | 
				
			||||||
    <ul>
 | 
					 | 
				
			||||||
        <li>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					 | 
				
			||||||
        <a href="becca_entities_recent_note.js.html">becca/entities/recent_note.js</a>, <a href="becca_entities_recent_note.js.html#line21">line 21</a>
 | 
					 | 
				
			||||||
    </li></ul></dd>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
</article>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
</section>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<nav>
 | 
					 | 
				
			||||||
    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="sql%250A%250ATODO_%2520some%2520methods%2520(like%2520getValue())%2520could%2520use%2520raw%2520rowsmodule_.html">sql
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TODO: some methods (like getValue()) could use raw rows</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
					 | 
				
			||||||
</nav>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<br class="clear">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<footer>
 | 
					 | 
				
			||||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
 | 
					 | 
				
			||||||
</footer>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script> prettyPrint(); </script>
 | 
					 | 
				
			||||||
<script src="scripts/linenumber.js"> </script>
 | 
					 | 
				
			||||||
</body>
 | 
					 | 
				
			||||||
</html>
 | 
					 | 
				
			||||||
							
								
								
									
										360
									
								
								docs/backend_api/becca_entities_abstract_becca_entity.js.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										360
									
								
								docs/backend_api/becca_entities_abstract_becca_entity.js.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,360 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html lang="en">
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					    <meta charset="utf-8">
 | 
				
			||||||
 | 
					    <title>JSDoc: Source: becca/entities/abstract_becca_entity.js</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <script src="scripts/prettify/prettify.js"> </script>
 | 
				
			||||||
 | 
					    <script src="scripts/prettify/lang-css.js"> </script>
 | 
				
			||||||
 | 
					    <!--[if lt IE 9]>
 | 
				
			||||||
 | 
					      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
 | 
				
			||||||
 | 
					    <![endif]-->
 | 
				
			||||||
 | 
					    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
 | 
				
			||||||
 | 
					    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div id="main">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <h1 class="page-title">Source: becca/entities/abstract_becca_entity.js</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <section>
 | 
				
			||||||
 | 
					        <article>
 | 
				
			||||||
 | 
					            <pre class="prettyprint source linenums"><code>"use strict";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const utils = require('../../services/utils');
 | 
				
			||||||
 | 
					const sql = require('../../services/sql');
 | 
				
			||||||
 | 
					const entityChangesService = require('../../services/entity_changes');
 | 
				
			||||||
 | 
					const eventService = require("../../services/events");
 | 
				
			||||||
 | 
					const dateUtils = require("../../services/date_utils");
 | 
				
			||||||
 | 
					const cls = require("../../services/cls");
 | 
				
			||||||
 | 
					const log = require("../../services/log");
 | 
				
			||||||
 | 
					const protectedSessionService = require("../../services/protected_session");
 | 
				
			||||||
 | 
					const blobService = require("../../services/blob");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let becca = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Base class for all backend entities.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class AbstractBeccaEntity {
 | 
				
			||||||
 | 
					    /** @protected */
 | 
				
			||||||
 | 
					    beforeSaving() {
 | 
				
			||||||
 | 
					        if (!this[this.constructor.primaryKeyName]) {
 | 
				
			||||||
 | 
					            this[this.constructor.primaryKeyName] = utils.newEntityId();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @protected */
 | 
				
			||||||
 | 
					    getUtcDateChanged() {
 | 
				
			||||||
 | 
					        return this.utcDateModified || this.utcDateCreated;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @protected
 | 
				
			||||||
 | 
					     * @returns {Becca}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    get becca() {
 | 
				
			||||||
 | 
					        if (!becca) {
 | 
				
			||||||
 | 
					            becca = require('../becca');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return becca;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @protected */
 | 
				
			||||||
 | 
					    putEntityChange(isDeleted) {
 | 
				
			||||||
 | 
					        entityChangesService.putEntityChange({
 | 
				
			||||||
 | 
					            entityName: this.constructor.entityName,
 | 
				
			||||||
 | 
					            entityId: this[this.constructor.primaryKeyName],
 | 
				
			||||||
 | 
					            hash: this.generateHash(isDeleted),
 | 
				
			||||||
 | 
					            isErased: false,
 | 
				
			||||||
 | 
					            utcDateChanged: this.getUtcDateChanged(),
 | 
				
			||||||
 | 
					            isSynced: this.constructor.entityName !== 'options' || !!this.isSynced
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @protected
 | 
				
			||||||
 | 
					     * @returns {string}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    generateHash(isDeleted) {
 | 
				
			||||||
 | 
					        let contentToHash = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (const propertyName of this.constructor.hashedProperties) {
 | 
				
			||||||
 | 
					            contentToHash += `|${this[propertyName]}`;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (isDeleted) {
 | 
				
			||||||
 | 
					            contentToHash += "|deleted";
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return utils.hash(contentToHash).substr(0, 10);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @protected */
 | 
				
			||||||
 | 
					    getPojoToSave() {
 | 
				
			||||||
 | 
					        return this.getPojo();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @protected
 | 
				
			||||||
 | 
					     * @abstract
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    getPojo() {
 | 
				
			||||||
 | 
					        throw new Error(`Unimplemented getPojo() for entity '${this.constructor.name}'`)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Saves entity - executes SQL, but doesn't commit the transaction on its own
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @returns {this}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    save(opts = {}) {
 | 
				
			||||||
 | 
					        const entityName = this.constructor.entityName;
 | 
				
			||||||
 | 
					        const primaryKeyName = this.constructor.primaryKeyName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const isNewEntity = !this[primaryKeyName];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.beforeSaving(opts);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const pojo = this.getPojoToSave();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        sql.transactional(() => {
 | 
				
			||||||
 | 
					            sql.upsert(entityName, primaryKeyName, pojo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (entityName === 'recent_notes') {
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            this.putEntityChange(!!this.isDeleted);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (!cls.isEntityEventsDisabled()) {
 | 
				
			||||||
 | 
					                const eventPayload = {
 | 
				
			||||||
 | 
					                    entityName,
 | 
				
			||||||
 | 
					                    entity: this
 | 
				
			||||||
 | 
					                };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (isNewEntity) {
 | 
				
			||||||
 | 
					                    eventService.emit(eventService.ENTITY_CREATED, eventPayload);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                eventService.emit(eventService.ENTITY_CHANGED, eventPayload);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return this;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @protected */
 | 
				
			||||||
 | 
					    _setContent(content, opts = {}) {
 | 
				
			||||||
 | 
					        // client code asks to save entity even if blobId didn't change (something else was changed)
 | 
				
			||||||
 | 
					        opts.forceSave = !!opts.forceSave;
 | 
				
			||||||
 | 
					        opts.forceFrontendReload = !!opts.forceFrontendReload;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (content === null || content === undefined) {
 | 
				
			||||||
 | 
					            throw new Error(`Cannot set null content to ${this.constructor.primaryKeyName} '${this[this.constructor.primaryKeyName]}'`);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (this.hasStringContent()) {
 | 
				
			||||||
 | 
					            content = content.toString();
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            content = Buffer.isBuffer(content) ? content : Buffer.from(content);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const unencryptedContentForHashCalculation = this.#getUnencryptedContentForHashCalculation(content);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (this.isProtected) {
 | 
				
			||||||
 | 
					            if (protectedSessionService.isProtectedSessionAvailable()) {
 | 
				
			||||||
 | 
					                content = protectedSessionService.encrypt(content);
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                throw new Error(`Cannot update content of blob since protected session is not available.`);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        sql.transactional(() => {
 | 
				
			||||||
 | 
					            const newBlobId = this.#saveBlob(content, unencryptedContentForHashCalculation, opts);
 | 
				
			||||||
 | 
					            const oldBlobId = this.blobId;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (newBlobId !== oldBlobId || opts.forceSave) {
 | 
				
			||||||
 | 
					                this.blobId = newBlobId;
 | 
				
			||||||
 | 
					                this.save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (newBlobId !== oldBlobId) {
 | 
				
			||||||
 | 
					                    this.#deleteBlobIfNotUsed(oldBlobId);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #deleteBlobIfNotUsed(oldBlobId) {
 | 
				
			||||||
 | 
					        if (sql.getValue("SELECT 1 FROM notes WHERE blobId = ? LIMIT 1", [oldBlobId])) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (sql.getValue("SELECT 1 FROM attachments WHERE blobId = ? LIMIT 1", [oldBlobId])) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (sql.getValue("SELECT 1 FROM revisions WHERE blobId = ? LIMIT 1", [oldBlobId])) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        sql.execute("DELETE FROM blobs WHERE blobId = ?", [oldBlobId]);
 | 
				
			||||||
 | 
					        // blobs are not marked as erased in entity_changes, they are just purged completely
 | 
				
			||||||
 | 
					        // this is because technically every keystroke can create a new blob, and there would be just too many
 | 
				
			||||||
 | 
					        sql.execute("DELETE FROM entity_changes WHERE entityName = 'blobs' AND entityId = ?", [oldBlobId]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #getUnencryptedContentForHashCalculation(unencryptedContent) {
 | 
				
			||||||
 | 
					        if (this.isProtected) {
 | 
				
			||||||
 | 
					            // a "random" prefix makes sure that the calculated hash/blobId is different for a decrypted/encrypted content
 | 
				
			||||||
 | 
					            const encryptedPrefixSuffix = "t$[nvQg7q)&_ENCRYPTED_?M:Bf&j3jr_";
 | 
				
			||||||
 | 
					            return Buffer.isBuffer(unencryptedContent)
 | 
				
			||||||
 | 
					                ? Buffer.concat([Buffer.from(encryptedPrefixSuffix), unencryptedContent])
 | 
				
			||||||
 | 
					                : `${encryptedPrefixSuffix}${unencryptedContent}`;
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            return unencryptedContent;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #saveBlob(content, unencryptedContentForHashCalculation, opts = {}) {
 | 
				
			||||||
 | 
					        /*
 | 
				
			||||||
 | 
					         * We're using the unencrypted blob for the hash calculation, because otherwise the random IV would
 | 
				
			||||||
 | 
					         * cause every content blob to be unique which would balloon the database size (esp. with revisioning).
 | 
				
			||||||
 | 
					         * This has minor security implications (it's easy to infer that given content is shared between different
 | 
				
			||||||
 | 
					         * notes/attachments), but the trade-off comes out clearly positive.
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        const newBlobId = utils.hashedBlobId(unencryptedContentForHashCalculation);
 | 
				
			||||||
 | 
					        const blobNeedsInsert = !sql.getValue('SELECT 1 FROM blobs WHERE blobId = ?', [newBlobId]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!blobNeedsInsert) {
 | 
				
			||||||
 | 
					            return newBlobId;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const pojo = {
 | 
				
			||||||
 | 
					            blobId: newBlobId,
 | 
				
			||||||
 | 
					            content: content,
 | 
				
			||||||
 | 
					            dateModified: dateUtils.localNowDateTime(),
 | 
				
			||||||
 | 
					            utcDateModified: dateUtils.utcNowDateTime()
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        sql.upsert("blobs", "blobId", pojo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // we can't reuse blobId as an entity_changes hash, because this one has to be calculatable without having
 | 
				
			||||||
 | 
					        // access to the decrypted content
 | 
				
			||||||
 | 
					        const hash = blobService.calculateContentHash(pojo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        entityChangesService.putEntityChange({
 | 
				
			||||||
 | 
					            entityName: 'blobs',
 | 
				
			||||||
 | 
					            entityId: newBlobId,
 | 
				
			||||||
 | 
					            hash: hash,
 | 
				
			||||||
 | 
					            isErased: false,
 | 
				
			||||||
 | 
					            utcDateChanged: pojo.utcDateModified,
 | 
				
			||||||
 | 
					            isSynced: true,
 | 
				
			||||||
 | 
					            // overriding componentId will cause the frontend to think the change is coming from a different component
 | 
				
			||||||
 | 
					            // and thus reload
 | 
				
			||||||
 | 
					            componentId: opts.forceFrontendReload ? utils.randomString(10) : null
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        eventService.emit(eventService.ENTITY_CHANGED, {
 | 
				
			||||||
 | 
					            entityName: 'blobs',
 | 
				
			||||||
 | 
					            entity: this
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return newBlobId;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @protected
 | 
				
			||||||
 | 
					     * @returns {string|Buffer}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    _getContent() {
 | 
				
			||||||
 | 
					        const row = sql.getRow(`SELECT content FROM blobs WHERE blobId = ?`, [this.blobId]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!row) {
 | 
				
			||||||
 | 
					            throw new Error(`Cannot find content for ${this.constructor.primaryKeyName} '${this[this.constructor.primaryKeyName]}', blobId '${this.blobId}'`);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return blobService.processContent(row.content, this.isProtected, this.hasStringContent());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Mark the entity as (soft) deleted. It will be completely erased later.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * This is a low-level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param [deleteId=null]
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    markAsDeleted(deleteId = null) {
 | 
				
			||||||
 | 
					        const entityId = this[this.constructor.primaryKeyName];
 | 
				
			||||||
 | 
					        const entityName = this.constructor.entityName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.utcDateModified = dateUtils.utcNowDateTime();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        sql.execute(`UPDATE ${entityName} SET isDeleted = 1, deleteId = ?, utcDateModified = ?
 | 
				
			||||||
 | 
					                           WHERE ${this.constructor.primaryKeyName} = ?`,
 | 
				
			||||||
 | 
					            [deleteId, this.utcDateModified, entityId]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (this.dateModified) {
 | 
				
			||||||
 | 
					            this.dateModified = dateUtils.localNowDateTime();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            sql.execute(`UPDATE ${entityName} SET dateModified = ? WHERE ${this.constructor.primaryKeyName} = ?`,
 | 
				
			||||||
 | 
					                [this.dateModified, entityId]);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        log.info(`Marking ${entityName} ${entityId} as deleted`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.putEntityChange(true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        eventService.emit(eventService.ENTITY_DELETED, { entityName, entityId, entity: this });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    markAsDeletedSimple() {
 | 
				
			||||||
 | 
					        const entityId = this[this.constructor.primaryKeyName];
 | 
				
			||||||
 | 
					        const entityName = this.constructor.entityName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.utcDateModified = dateUtils.utcNowDateTime();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        sql.execute(`UPDATE ${entityName} SET isDeleted = 1, utcDateModified = ?
 | 
				
			||||||
 | 
					                           WHERE ${this.constructor.primaryKeyName} = ?`,
 | 
				
			||||||
 | 
					            [this.utcDateModified, entityId]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        log.info(`Marking ${entityName} ${entityId} as deleted`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.putEntityChange(true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        eventService.emit(eventService.ENTITY_DELETED, { entityName, entityId, entity: this });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = AbstractBeccaEntity;
 | 
				
			||||||
 | 
					</code></pre>
 | 
				
			||||||
 | 
					        </article>
 | 
				
			||||||
 | 
					    </section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<nav>
 | 
				
			||||||
 | 
					    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul><h3>Global</h3><ul><li><a href="global.html#api">api</a></li></ul>
 | 
				
			||||||
 | 
					</nav>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<br class="clear">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<footer>
 | 
				
			||||||
 | 
					    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
				
			||||||
 | 
					</footer>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script> prettyPrint(); </script>
 | 
				
			||||||
 | 
					<script src="scripts/linenumber.js"> </script>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
@@ -1,87 +0,0 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					 | 
				
			||||||
<html lang="en">
 | 
					 | 
				
			||||||
<head>
 | 
					 | 
				
			||||||
    <meta charset="utf-8">
 | 
					 | 
				
			||||||
    <title>JSDoc: Source: becca/entities/api_token.js</title>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <script src="scripts/prettify/prettify.js"> </script>
 | 
					 | 
				
			||||||
    <script src="scripts/prettify/lang-css.js"> </script>
 | 
					 | 
				
			||||||
    <!--[if lt IE 9]>
 | 
					 | 
				
			||||||
      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
 | 
					 | 
				
			||||||
    <![endif]-->
 | 
					 | 
				
			||||||
    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
 | 
					 | 
				
			||||||
    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
 | 
					 | 
				
			||||||
</head>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<body>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div id="main">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h1 class="page-title">Source: becca/entities/api_token.js</h1>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <section>
 | 
					 | 
				
			||||||
        <article>
 | 
					 | 
				
			||||||
            <pre class="prettyprint source linenums"><code>"use strict";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const dateUtils = require('../../services/date_utils.js');
 | 
					 | 
				
			||||||
const AbstractEntity = require("./abstract_entity.js");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * ApiToken is an entity representing token used to authenticate against Trilium API from client applications. Currently used only by Trilium Sender.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
class ApiToken extends AbstractEntity {
 | 
					 | 
				
			||||||
    static get entityName() { return "api_tokens"; }
 | 
					 | 
				
			||||||
    static get primaryKeyName() { return "apiTokenId"; }
 | 
					 | 
				
			||||||
    static get hashedProperties() { return ["apiTokenId", "token", "utcDateCreated"]; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    constructor(row) {
 | 
					 | 
				
			||||||
        super();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /** @type {string} */
 | 
					 | 
				
			||||||
        this.apiTokenId = row.apiTokenId;
 | 
					 | 
				
			||||||
        /** @type {string} */
 | 
					 | 
				
			||||||
        this.token = row.token;
 | 
					 | 
				
			||||||
        /** @type {string} */
 | 
					 | 
				
			||||||
        this.utcDateCreated = row.utcDateCreated || dateUtils.utcNowDateTime();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    getPojo() {
 | 
					 | 
				
			||||||
        return {
 | 
					 | 
				
			||||||
            apiTokenId: this.apiTokenId,
 | 
					 | 
				
			||||||
            token: this.token,
 | 
					 | 
				
			||||||
            utcDateCreated: this.utcDateCreated
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = ApiToken;
 | 
					 | 
				
			||||||
</code></pre>
 | 
					 | 
				
			||||||
        </article>
 | 
					 | 
				
			||||||
    </section>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<nav>
 | 
					 | 
				
			||||||
    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="sql%250A%250ATODO_%2520some%2520methods%2520(like%2520getValue())%2520could%2520use%2520raw%2520rowsmodule_.html">sql
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TODO: some methods (like getValue()) could use raw rows</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
					 | 
				
			||||||
</nav>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<br class="clear">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<footer>
 | 
					 | 
				
			||||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
 | 
					 | 
				
			||||||
</footer>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script> prettyPrint(); </script>
 | 
					 | 
				
			||||||
<script src="scripts/linenumber.js"> </script>
 | 
					 | 
				
			||||||
</body>
 | 
					 | 
				
			||||||
</html>
 | 
					 | 
				
			||||||
							
								
								
									
										294
									
								
								docs/backend_api/becca_entities_battachment.js.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										294
									
								
								docs/backend_api/becca_entities_battachment.js.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,294 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html lang="en">
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					    <meta charset="utf-8">
 | 
				
			||||||
 | 
					    <title>JSDoc: Source: becca/entities/battachment.js</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <script src="scripts/prettify/prettify.js"> </script>
 | 
				
			||||||
 | 
					    <script src="scripts/prettify/lang-css.js"> </script>
 | 
				
			||||||
 | 
					    <!--[if lt IE 9]>
 | 
				
			||||||
 | 
					      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
 | 
				
			||||||
 | 
					    <![endif]-->
 | 
				
			||||||
 | 
					    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
 | 
				
			||||||
 | 
					    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div id="main">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <h1 class="page-title">Source: becca/entities/battachment.js</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <section>
 | 
				
			||||||
 | 
					        <article>
 | 
				
			||||||
 | 
					            <pre class="prettyprint source linenums"><code>"use strict";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const utils = require('../../services/utils');
 | 
				
			||||||
 | 
					const dateUtils = require('../../services/date_utils');
 | 
				
			||||||
 | 
					const AbstractBeccaEntity = require("./abstract_becca_entity");
 | 
				
			||||||
 | 
					const sql = require("../../services/sql");
 | 
				
			||||||
 | 
					const protectedSessionService = require("../../services/protected_session");
 | 
				
			||||||
 | 
					const log = require("../../services/log");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const attachmentRoleToNoteTypeMapping = {
 | 
				
			||||||
 | 
					    'image': 'image'
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Attachment represent data related/attached to the note. Conceptually similar to attributes, but intended for
 | 
				
			||||||
 | 
					 * larger amounts of data and generally not accessible to the user.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @extends AbstractBeccaEntity
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class BAttachment extends AbstractBeccaEntity {
 | 
				
			||||||
 | 
					    static get entityName() { return "attachments"; }
 | 
				
			||||||
 | 
					    static get primaryKeyName() { return "attachmentId"; }
 | 
				
			||||||
 | 
					    static get hashedProperties() { return ["attachmentId", "ownerId", "role", "mime", "title", "blobId", "utcDateScheduledForErasureSince"]; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor(row) {
 | 
				
			||||||
 | 
					        super();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!row.ownerId?.trim()) {
 | 
				
			||||||
 | 
					            throw new Error("'ownerId' must be given to initialize a Attachment entity");
 | 
				
			||||||
 | 
					        } else if (!row.role?.trim()) {
 | 
				
			||||||
 | 
					            throw new Error("'role' must be given to initialize a Attachment entity");
 | 
				
			||||||
 | 
					        } else if (!row.mime?.trim()) {
 | 
				
			||||||
 | 
					            throw new Error("'mime' must be given to initialize a Attachment entity");
 | 
				
			||||||
 | 
					        } else if (!row.title?.trim()) {
 | 
				
			||||||
 | 
					            throw new Error("'title' must be given to initialize a Attachment entity");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.attachmentId = row.attachmentId;
 | 
				
			||||||
 | 
					        /** 
 | 
				
			||||||
 | 
					         * either noteId or revisionId to which this attachment belongs
 | 
				
			||||||
 | 
					         * @type {string}
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        this.ownerId = row.ownerId;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.role = row.role;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.mime = row.mime;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.title = row.title;
 | 
				
			||||||
 | 
					        /** @type {int} */
 | 
				
			||||||
 | 
					        this.position = row.position;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.blobId = row.blobId;
 | 
				
			||||||
 | 
					        /** @type {boolean} */
 | 
				
			||||||
 | 
					        this.isProtected = !!row.isProtected;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.dateModified = row.dateModified;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.utcDateModified = row.utcDateModified;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.utcDateScheduledForErasureSince = row.utcDateScheduledForErasureSince;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * optionally added to the entity
 | 
				
			||||||
 | 
					         * @type {int}
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        this.contentLength = row.contentLength;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.decrypt();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @returns {BAttachment} */
 | 
				
			||||||
 | 
					    copy() {
 | 
				
			||||||
 | 
					        return new BAttachment({
 | 
				
			||||||
 | 
					            ownerId: this.ownerId,
 | 
				
			||||||
 | 
					            role: this.role,
 | 
				
			||||||
 | 
					            mime: this.mime,
 | 
				
			||||||
 | 
					            title: this.title,
 | 
				
			||||||
 | 
					            blobId: this.blobId,
 | 
				
			||||||
 | 
					            isProtected: this.isProtected
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @returns {BNote} */
 | 
				
			||||||
 | 
					    getNote() {
 | 
				
			||||||
 | 
					        return this.becca.notes[this.ownerId];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @returns {boolean} true if the note has string content (not binary) */
 | 
				
			||||||
 | 
					    hasStringContent() {
 | 
				
			||||||
 | 
					        return utils.isStringNote(this.type, this.mime);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    isContentAvailable() {
 | 
				
			||||||
 | 
					        return !this.attachmentId // new attachment which was not encrypted yet
 | 
				
			||||||
 | 
					            || !this.isProtected
 | 
				
			||||||
 | 
					            || protectedSessionService.isProtectedSessionAvailable()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getTitleOrProtected() {
 | 
				
			||||||
 | 
					        return this.isContentAvailable() ? this.title : '[protected]';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    decrypt() {
 | 
				
			||||||
 | 
					        if (!this.isProtected || !this.attachmentId) {
 | 
				
			||||||
 | 
					            this.isDecrypted = true;
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!this.isDecrypted && protectedSessionService.isProtectedSessionAvailable()) {
 | 
				
			||||||
 | 
					            try {
 | 
				
			||||||
 | 
					                this.title = protectedSessionService.decryptString(this.title);
 | 
				
			||||||
 | 
					                this.isDecrypted = true;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (e) {
 | 
				
			||||||
 | 
					                log.error(`Could not decrypt attachment ${this.attachmentId}: ${e.message} ${e.stack}`);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @returns {string|Buffer}  */
 | 
				
			||||||
 | 
					    getContent() {
 | 
				
			||||||
 | 
					        return this._getContent();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @param content
 | 
				
			||||||
 | 
					     * @param {object} [opts]
 | 
				
			||||||
 | 
					     * @param {object} [opts.forceSave=false] - will also save this BAttachment entity
 | 
				
			||||||
 | 
					     * @param {object} [opts.forceFrontendReload=false] - override frontend heuristics on when to reload, instruct to reload
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    setContent(content, opts) {
 | 
				
			||||||
 | 
					        this._setContent(content, opts);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @returns {{note: BNote, branch: BBranch}} */
 | 
				
			||||||
 | 
					    convertToNote() {
 | 
				
			||||||
 | 
					        if (this.type === 'search') {
 | 
				
			||||||
 | 
					            throw new Error(`Note of type search cannot have child notes`);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!this.getNote()) {
 | 
				
			||||||
 | 
					            throw new Error("Cannot find note of this attachment. It is possible that this is note revision's attachment. " +
 | 
				
			||||||
 | 
					                "Converting note revision's attachments to note is not (yet) supported.");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!(this.role in attachmentRoleToNoteTypeMapping)) {
 | 
				
			||||||
 | 
					            throw new Error(`Mapping from attachment role '${this.role}' to note's type is not defined`);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!this.isContentAvailable()) { // isProtected is the same for attachment
 | 
				
			||||||
 | 
					            throw new Error(`Cannot convert protected attachment outside of protected session`);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const noteService = require('../../services/notes');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const { note, branch } = noteService.createNewNote({
 | 
				
			||||||
 | 
					            parentNoteId: this.ownerId,
 | 
				
			||||||
 | 
					            title: this.title,
 | 
				
			||||||
 | 
					            type: attachmentRoleToNoteTypeMapping[this.role],
 | 
				
			||||||
 | 
					            mime: this.mime,
 | 
				
			||||||
 | 
					            content: this.getContent(),
 | 
				
			||||||
 | 
					            isProtected: this.isProtected
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.markAsDeleted();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const parentNote = this.getNote();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (this.role === 'image' && parentNote.type === 'text') {
 | 
				
			||||||
 | 
					            const origContent = parentNote.getContent();
 | 
				
			||||||
 | 
					            const oldAttachmentUrl = `api/attachments/${this.attachmentId}/image/`;
 | 
				
			||||||
 | 
					            const newNoteUrl = `api/images/${note.noteId}/`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            const fixedContent = utils.replaceAll(origContent, oldAttachmentUrl, newNoteUrl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (fixedContent !== origContent) {
 | 
				
			||||||
 | 
					                parentNote.setContent(fixedContent);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            noteService.asyncPostProcessContent(note, fixedContent);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return { note, branch };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getFileName() {
 | 
				
			||||||
 | 
					        const type = this.role === 'image' ? 'image' : 'file';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return utils.formatDownloadTitle(this.title, type, this.mime);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    beforeSaving() {
 | 
				
			||||||
 | 
					        super.beforeSaving();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (this.position === undefined || this.position === null) {
 | 
				
			||||||
 | 
					            this.position = 10 + sql.getValue(`SELECT COALESCE(MAX(position), 0)
 | 
				
			||||||
 | 
					                                              FROM attachments
 | 
				
			||||||
 | 
					                                              WHERE ownerId = ?`, [this.noteId]);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.dateModified = dateUtils.localNowDateTime();
 | 
				
			||||||
 | 
					        this.utcDateModified = dateUtils.utcNowDateTime();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getPojo() {
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					            attachmentId: this.attachmentId,
 | 
				
			||||||
 | 
					            ownerId: this.ownerId,
 | 
				
			||||||
 | 
					            role: this.role,
 | 
				
			||||||
 | 
					            mime: this.mime,
 | 
				
			||||||
 | 
					            title: this.title,
 | 
				
			||||||
 | 
					            position: this.position,
 | 
				
			||||||
 | 
					            blobId: this.blobId,
 | 
				
			||||||
 | 
					            isProtected: !!this.isProtected,
 | 
				
			||||||
 | 
					            isDeleted: false,
 | 
				
			||||||
 | 
					            dateModified: this.dateModified,
 | 
				
			||||||
 | 
					            utcDateModified: this.utcDateModified,
 | 
				
			||||||
 | 
					            utcDateScheduledForErasureSince: this.utcDateScheduledForErasureSince,
 | 
				
			||||||
 | 
					            contentLength: this.contentLength
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getPojoToSave() {
 | 
				
			||||||
 | 
					        const pojo = this.getPojo();
 | 
				
			||||||
 | 
					        delete pojo.contentLength;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (pojo.isProtected) {
 | 
				
			||||||
 | 
					            if (this.isDecrypted) {
 | 
				
			||||||
 | 
					                pojo.title = protectedSessionService.encrypt(pojo.title);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else {
 | 
				
			||||||
 | 
					                // updating protected note outside of protected session means we will keep original ciphertexts
 | 
				
			||||||
 | 
					                delete pojo.title;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return pojo;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = BAttachment;
 | 
				
			||||||
 | 
					</code></pre>
 | 
				
			||||||
 | 
					        </article>
 | 
				
			||||||
 | 
					    </section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<nav>
 | 
				
			||||||
 | 
					    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul><h3>Global</h3><ul><li><a href="global.html#api">api</a></li></ul>
 | 
				
			||||||
 | 
					</nav>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<br class="clear">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<footer>
 | 
				
			||||||
 | 
					    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
				
			||||||
 | 
					</footer>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script> prettyPrint(); </script>
 | 
				
			||||||
 | 
					<script src="scripts/linenumber.js"> </script>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
<html lang="en">
 | 
					<html lang="en">
 | 
				
			||||||
<head>
 | 
					<head>
 | 
				
			||||||
    <meta charset="utf-8">
 | 
					    <meta charset="utf-8">
 | 
				
			||||||
    <title>JSDoc: Source: becca/entities/attribute.js</title>
 | 
					    <title>JSDoc: Source: becca/entities/battribute.js</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <script src="scripts/prettify/prettify.js"> </script>
 | 
					    <script src="scripts/prettify/prettify.js"> </script>
 | 
				
			||||||
    <script src="scripts/prettify/lang-css.js"> </script>
 | 
					    <script src="scripts/prettify/lang-css.js"> </script>
 | 
				
			||||||
@@ -17,7 +17,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
<div id="main">
 | 
					<div id="main">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <h1 class="page-title">Source: becca/entities/attribute.js</h1>
 | 
					    <h1 class="page-title">Source: becca/entities/battribute.js</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28,17 +28,26 @@
 | 
				
			|||||||
        <article>
 | 
					        <article>
 | 
				
			||||||
            <pre class="prettyprint source linenums"><code>"use strict";
 | 
					            <pre class="prettyprint source linenums"><code>"use strict";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const Note = require('./note.js');
 | 
					const BNote = require('./bnote');
 | 
				
			||||||
const AbstractEntity = require("./abstract_entity.js");
 | 
					const AbstractBeccaEntity = require("./abstract_becca_entity");
 | 
				
			||||||
const sql = require("../../services/sql.js");
 | 
					const sql = require("../../services/sql");
 | 
				
			||||||
const dateUtils = require("../../services/date_utils.js");
 | 
					const dateUtils = require("../../services/date_utils");
 | 
				
			||||||
const promotedAttributeDefinitionParser = require("../../services/promoted_attribute_definition_parser");
 | 
					const promotedAttributeDefinitionParser = require("../../services/promoted_attribute_definition_parser");
 | 
				
			||||||
 | 
					const {sanitizeAttributeName} = require("../../services/sanitize_attribute_name");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 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)
 | 
					 * Attribute is an abstract concept which has two real uses - label (key - value pair)
 | 
				
			||||||
 * and relation (representing named relationship between source and target note)
 | 
					 * and relation (representing named relationship between source and target note)
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @extends AbstractBeccaEntity
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
class Attribute extends AbstractEntity {
 | 
					class BAttribute extends AbstractBeccaEntity {
 | 
				
			||||||
    static get entityName() { return "attributes"; }
 | 
					    static get entityName() { return "attributes"; }
 | 
				
			||||||
    static get primaryKeyName() { return "attributeId"; }
 | 
					    static get primaryKeyName() { return "attributeId"; }
 | 
				
			||||||
    static get hashedProperties() { return ["attributeId", "noteId", "type", "name", "value", "isInheritable"]; }
 | 
					    static get hashedProperties() { return ["attributeId", "noteId", "type", "name", "value", "isInheritable"]; }
 | 
				
			||||||
@@ -72,14 +81,14 @@ class Attribute extends AbstractEntity {
 | 
				
			|||||||
        this.attributeId = attributeId;
 | 
					        this.attributeId = attributeId;
 | 
				
			||||||
        /** @type {string} */
 | 
					        /** @type {string} */
 | 
				
			||||||
        this.noteId = noteId;
 | 
					        this.noteId = noteId;
 | 
				
			||||||
        /** @type {string} */
 | 
					        /** @type {AttributeType} */
 | 
				
			||||||
        this.type = type;
 | 
					        this.type = type;
 | 
				
			||||||
        /** @type {string} */
 | 
					        /** @type {string} */
 | 
				
			||||||
        this.name = name;
 | 
					        this.name = name;
 | 
				
			||||||
        /** @type {int} */
 | 
					        /** @type {int} */
 | 
				
			||||||
        this.position = position;
 | 
					        this.position = position;
 | 
				
			||||||
        /** @type {string} */
 | 
					        /** @type {string} */
 | 
				
			||||||
        this.value = value;
 | 
					        this.value = value || "";
 | 
				
			||||||
        /** @type {boolean} */
 | 
					        /** @type {boolean} */
 | 
				
			||||||
        this.isInheritable = !!isInheritable;
 | 
					        this.isInheritable = !!isInheritable;
 | 
				
			||||||
        /** @type {string} */
 | 
					        /** @type {string} */
 | 
				
			||||||
@@ -95,7 +104,7 @@ class Attribute extends AbstractEntity {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        if (!(this.noteId in this.becca.notes)) {
 | 
					        if (!(this.noteId in this.becca.notes)) {
 | 
				
			||||||
            // entities can come out of order in sync, create skeleton which will be filled later
 | 
					            // entities can come out of order in sync, create skeleton which will be filled later
 | 
				
			||||||
            this.becca.addNote(this.noteId, new Note({noteId: this.noteId}));
 | 
					            this.becca.addNote(this.noteId, new BNote({noteId: this.noteId}));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.becca.notes[this.noteId].ownedAttributes.push(this);
 | 
					        this.becca.notes[this.noteId].ownedAttributes.push(this);
 | 
				
			||||||
@@ -111,9 +120,23 @@ class Attribute extends AbstractEntity {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    validate() {
 | 
				
			||||||
 | 
					        if (!["label", "relation"].includes(this.type)) {
 | 
				
			||||||
 | 
					            throw new Error(`Invalid attribute type '${this.type}' in attribute '${this.attributeId}' of note '${this.noteId}'`);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!this.name?.trim()) {
 | 
				
			||||||
 | 
					            throw new Error(`Invalid empty name in attribute '${this.attributeId}' of note '${this.noteId}'`);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (this.type === 'relation' && !(this.value in this.becca.notes)) {
 | 
				
			||||||
 | 
					            throw new Error(`Cannot save relation '${this.name}' of note '${this.noteId}' since it targets not existing note '${this.value}'.`);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    get isAffectingSubtree() {
 | 
					    get isAffectingSubtree() {
 | 
				
			||||||
        return this.isInheritable
 | 
					        return this.isInheritable
 | 
				
			||||||
            || (this.type === 'relation' && this.name === 'template');
 | 
					            || (this.type === 'relation' && ['template', 'inherit'].includes(this.name));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    get targetNoteId() { // alias
 | 
					    get targetNoteId() { // alias
 | 
				
			||||||
@@ -135,18 +158,24 @@ class Attribute extends AbstractEntity {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @returns {Note|null}
 | 
					     * @returns {BNote|null}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    getNote() {
 | 
					    getNote() {
 | 
				
			||||||
        return this.becca.getNote(this.noteId);
 | 
					        const note = this.becca.getNote(this.noteId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!note) {
 | 
				
			||||||
 | 
					            throw new Error(`Note '${this.noteId}' of attribute '${this.attributeId}', type '${this.type}', name '${this.name}' does not exist.`);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return note;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @returns {Note|null}
 | 
					     * @returns {BNote|null}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    getTargetNote() {
 | 
					    getTargetNote() {
 | 
				
			||||||
        if (this.type !== 'relation') {
 | 
					        if (this.type !== 'relation') {
 | 
				
			||||||
            throw new Error(`Attribute ${this.attributeId} is not relation`);
 | 
					            throw new Error(`Attribute '${this.attributeId}' is not a relation.`);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!this.value) {
 | 
					        if (!this.value) {
 | 
				
			||||||
@@ -157,7 +186,7 @@ class Attribute extends AbstractEntity {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @return {boolean}
 | 
					     * @returns {boolean}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    isDefinition() {
 | 
					    isDefinition() {
 | 
				
			||||||
        return this.type === 'label' && (this.name.startsWith('label:') || this.name.startsWith('relation:'));
 | 
					        return this.type === 'label' && (this.name.startsWith('label:') || this.name.startsWith('relation:'));
 | 
				
			||||||
@@ -181,19 +210,23 @@ class Attribute extends AbstractEntity {
 | 
				
			|||||||
        return !(this.attributeId in this.becca.attributes);
 | 
					        return !(this.attributeId in this.becca.attributes);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    beforeSaving() {
 | 
					    beforeSaving(opts = {}) {
 | 
				
			||||||
        if (!this.value) {
 | 
					        if (!opts.skipValidation) {
 | 
				
			||||||
            if (this.type === 'relation') {
 | 
					            this.validate();
 | 
				
			||||||
                throw new Error(`Cannot save relation ${this.name} since it does not target any note.`);
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.name = sanitizeAttributeName(this.name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!this.value) {
 | 
				
			||||||
            // null value isn't allowed
 | 
					            // null value isn't allowed
 | 
				
			||||||
            this.value = "";
 | 
					            this.value = "";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (this.position === undefined) {
 | 
					        if (this.position === undefined || this.position === null) {
 | 
				
			||||||
            // TODO: can be calculated from becca
 | 
					            const maxExistingPosition = this.getNote().getAttributes()
 | 
				
			||||||
            this.position = 1 + sql.getValue(`SELECT COALESCE(MAX(position), 0) FROM attributes WHERE noteId = ?`, [this.noteId]);
 | 
					                .reduce((maxPosition, attr) => Math.max(maxPosition, attr.position || 0), 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            this.position = maxExistingPosition + 10;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!this.isInheritable) {
 | 
					        if (!this.isInheritable) {
 | 
				
			||||||
@@ -222,7 +255,7 @@ class Attribute extends AbstractEntity {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    createClone(type, name, value, isInheritable) {
 | 
					    createClone(type, name, value, isInheritable) {
 | 
				
			||||||
        return new Attribute({
 | 
					        return new BAttribute({
 | 
				
			||||||
            noteId: this.noteId,
 | 
					            noteId: this.noteId,
 | 
				
			||||||
            type: type,
 | 
					            type: type,
 | 
				
			||||||
            name: name,
 | 
					            name: name,
 | 
				
			||||||
@@ -234,7 +267,7 @@ class Attribute extends AbstractEntity {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = Attribute;
 | 
					module.exports = BAttribute;
 | 
				
			||||||
</code></pre>
 | 
					</code></pre>
 | 
				
			||||||
        </article>
 | 
					        </article>
 | 
				
			||||||
    </section>
 | 
					    </section>
 | 
				
			||||||
@@ -245,15 +278,13 @@ module.exports = Attribute;
 | 
				
			|||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<nav>
 | 
					<nav>
 | 
				
			||||||
    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="sql%250A%250ATODO_%2520some%2520methods%2520(like%2520getValue())%2520could%2520use%2520raw%2520rowsmodule_.html">sql
 | 
					    <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>
 | 
				
			||||||
 | 
					 | 
				
			||||||
TODO: some methods (like getValue()) could use raw rows</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
					 | 
				
			||||||
</nav>
 | 
					</nav>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<br class="clear">
 | 
					<br class="clear">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<footer>
 | 
					<footer>
 | 
				
			||||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
 | 
					    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
				
			||||||
</footer>
 | 
					</footer>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script> prettyPrint(); </script>
 | 
					<script> prettyPrint(); </script>
 | 
				
			||||||
							
								
								
									
										81
									
								
								docs/backend_api/becca_entities_bblob.js.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								docs/backend_api/becca_entities_bblob.js.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html lang="en">
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					    <meta charset="utf-8">
 | 
				
			||||||
 | 
					    <title>JSDoc: Source: becca/entities/bblob.js</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <script src="scripts/prettify/prettify.js"> </script>
 | 
				
			||||||
 | 
					    <script src="scripts/prettify/lang-css.js"> </script>
 | 
				
			||||||
 | 
					    <!--[if lt IE 9]>
 | 
				
			||||||
 | 
					      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
 | 
				
			||||||
 | 
					    <![endif]-->
 | 
				
			||||||
 | 
					    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
 | 
				
			||||||
 | 
					    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div id="main">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <h1 class="page-title">Source: becca/entities/bblob.js</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <section>
 | 
				
			||||||
 | 
					        <article>
 | 
				
			||||||
 | 
					            <pre class="prettyprint source linenums"><code>class BBlob {
 | 
				
			||||||
 | 
					    static get entityName() { return "blobs"; }
 | 
				
			||||||
 | 
					    static get primaryKeyName() { return "blobId"; }
 | 
				
			||||||
 | 
					    static get hashedProperties() { return ["blobId", "content"]; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor(row) {
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.blobId = row.blobId;
 | 
				
			||||||
 | 
					        /** @type {string|Buffer} */
 | 
				
			||||||
 | 
					        this.content = row.content;
 | 
				
			||||||
 | 
					        /** @type {int} */
 | 
				
			||||||
 | 
					        this.contentLength = row.contentLength;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.dateModified = row.dateModified;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.utcDateModified = row.utcDateModified;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getPojo() {
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					            blobId: this.blobId,
 | 
				
			||||||
 | 
					            content: this.content,
 | 
				
			||||||
 | 
					            contentLength: this.contentLength,
 | 
				
			||||||
 | 
					            dateModified: this.dateModified,
 | 
				
			||||||
 | 
					            utcDateModified: this.utcDateModified
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = BBlob;
 | 
				
			||||||
 | 
					</code></pre>
 | 
				
			||||||
 | 
					        </article>
 | 
				
			||||||
 | 
					    </section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<nav>
 | 
				
			||||||
 | 
					    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul><h3>Global</h3><ul><li><a href="global.html#api">api</a></li></ul>
 | 
				
			||||||
 | 
					</nav>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<br class="clear">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<footer>
 | 
				
			||||||
 | 
					    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
				
			||||||
 | 
					</footer>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script> prettyPrint(); </script>
 | 
				
			||||||
 | 
					<script src="scripts/linenumber.js"> </script>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										333
									
								
								docs/backend_api/becca_entities_bbranch.js.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										333
									
								
								docs/backend_api/becca_entities_bbranch.js.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,333 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html lang="en">
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					    <meta charset="utf-8">
 | 
				
			||||||
 | 
					    <title>JSDoc: Source: becca/entities/bbranch.js</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <script src="scripts/prettify/prettify.js"> </script>
 | 
				
			||||||
 | 
					    <script src="scripts/prettify/lang-css.js"> </script>
 | 
				
			||||||
 | 
					    <!--[if lt IE 9]>
 | 
				
			||||||
 | 
					      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
 | 
				
			||||||
 | 
					    <![endif]-->
 | 
				
			||||||
 | 
					    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
 | 
				
			||||||
 | 
					    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div id="main">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <h1 class="page-title">Source: becca/entities/bbranch.js</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <section>
 | 
				
			||||||
 | 
					        <article>
 | 
				
			||||||
 | 
					            <pre class="prettyprint source linenums"><code>"use strict";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const BNote = require('./bnote');
 | 
				
			||||||
 | 
					const AbstractBeccaEntity = require("./abstract_becca_entity");
 | 
				
			||||||
 | 
					const dateUtils = require("../../services/date_utils");
 | 
				
			||||||
 | 
					const utils = require("../../services/utils");
 | 
				
			||||||
 | 
					const TaskContext = require("../../services/task_context");
 | 
				
			||||||
 | 
					const cls = require("../../services/cls");
 | 
				
			||||||
 | 
					const log = require("../../services/log");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Branch represents a relationship between a child note and its parent note. Trilium allows a note to have multiple
 | 
				
			||||||
 | 
					 * parents.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Note that you should not rely on the branch's identity, since it can change easily with a note's move.
 | 
				
			||||||
 | 
					 * Always check noteId instead.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @extends AbstractBeccaEntity
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class BBranch extends AbstractBeccaEntity {
 | 
				
			||||||
 | 
					    static get entityName() { return "branches"; }
 | 
				
			||||||
 | 
					    static get primaryKeyName() { return "branchId"; }
 | 
				
			||||||
 | 
					    // notePosition is not part of hash because it would produce a lot of updates in case of reordering
 | 
				
			||||||
 | 
					    static get hashedProperties() { return ["branchId", "noteId", "parentNoteId", "prefix"]; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor(row) {
 | 
				
			||||||
 | 
					        super();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!row) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.updateFromRow(row);
 | 
				
			||||||
 | 
					        this.init();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    updateFromRow(row) {
 | 
				
			||||||
 | 
					        this.update([
 | 
				
			||||||
 | 
					            row.branchId,
 | 
				
			||||||
 | 
					            row.noteId,
 | 
				
			||||||
 | 
					            row.parentNoteId,
 | 
				
			||||||
 | 
					            row.prefix,
 | 
				
			||||||
 | 
					            row.notePosition,
 | 
				
			||||||
 | 
					            row.isExpanded,
 | 
				
			||||||
 | 
					            row.utcDateModified
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    update([branchId, noteId, parentNoteId, prefix, notePosition, isExpanded, utcDateModified]) {
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.branchId = branchId;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.noteId = noteId;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.parentNoteId = parentNoteId;
 | 
				
			||||||
 | 
					        /** @type {string|null} */
 | 
				
			||||||
 | 
					        this.prefix = prefix;
 | 
				
			||||||
 | 
					        /** @type {int} */
 | 
				
			||||||
 | 
					        this.notePosition = notePosition;
 | 
				
			||||||
 | 
					        /** @type {boolean} */
 | 
				
			||||||
 | 
					        this.isExpanded = !!isExpanded;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.utcDateModified = utcDateModified;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return this;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    init() {
 | 
				
			||||||
 | 
					        if (this.branchId) {
 | 
				
			||||||
 | 
					            this.becca.branches[this.branchId] = this;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.becca.childParentToBranch[`${this.noteId}-${this.parentNoteId}`] = this;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const childNote = this.childNote;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!childNote.parentBranches.includes(this)) {
 | 
				
			||||||
 | 
					            childNote.parentBranches.push(this);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (this.noteId === 'root') {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const parentNote = this.parentNote;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!childNote.parents.includes(parentNote)) {
 | 
				
			||||||
 | 
					            childNote.parents.push(parentNote);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!parentNote.children.includes(childNote)) {
 | 
				
			||||||
 | 
					            parentNote.children.push(childNote);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @returns {BNote} */
 | 
				
			||||||
 | 
					    get childNote() {
 | 
				
			||||||
 | 
					        if (!(this.noteId in this.becca.notes)) {
 | 
				
			||||||
 | 
					            // entities can come out of order in sync/import, create skeleton which will be filled later
 | 
				
			||||||
 | 
					            this.becca.addNote(this.noteId, new BNote({noteId: this.noteId}));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return this.becca.notes[this.noteId];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @returns {BNote} */
 | 
				
			||||||
 | 
					    getNote() {
 | 
				
			||||||
 | 
					        return this.childNote;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @returns {BNote|undefined} - root branch will have undefined parent, all other branches have to have a parent note */
 | 
				
			||||||
 | 
					    get parentNote() {
 | 
				
			||||||
 | 
					        if (!(this.parentNoteId in this.becca.notes) && this.parentNoteId !== 'none') {
 | 
				
			||||||
 | 
					            // entities can come out of order in sync/import, create skeleton which will be filled later
 | 
				
			||||||
 | 
					            this.becca.addNote(this.parentNoteId, new BNote({noteId: this.parentNoteId}));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return this.becca.notes[this.parentNoteId];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    get isDeleted() {
 | 
				
			||||||
 | 
					        return !(this.branchId in this.becca.branches);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Branch is weak when its existence should not hinder deletion of its note.
 | 
				
			||||||
 | 
					     * As a result, note with only weak branches should be immediately deleted.
 | 
				
			||||||
 | 
					     * An example is shared or bookmarked clones - they are created automatically and exist for technical reasons,
 | 
				
			||||||
 | 
					     * not as user-intended actions. From user perspective, they don't count as real clones and for the purpose
 | 
				
			||||||
 | 
					     * of deletion should not act as a clone.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @returns {boolean}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    get isWeak() {
 | 
				
			||||||
 | 
					        return ['_share', '_lbBookmarks'].includes(this.parentNoteId);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Delete a branch. If this is a last note's branch, delete the note as well.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param {string} [deleteId] - optional delete identified
 | 
				
			||||||
 | 
					     * @param {TaskContext} [taskContext]
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @returns {boolean} - true if note has been deleted, false otherwise
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    deleteBranch(deleteId, taskContext) {
 | 
				
			||||||
 | 
					        if (!deleteId) {
 | 
				
			||||||
 | 
					            deleteId = utils.randomString(10);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!taskContext) {
 | 
				
			||||||
 | 
					            taskContext = new TaskContext('no-progress-reporting');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        taskContext.increaseProgressCount();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const note = this.getNote();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!taskContext.noteDeletionHandlerTriggered) {
 | 
				
			||||||
 | 
					            const parentBranches = note.getParentBranches();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (parentBranches.length === 1 && parentBranches[0] === this) {
 | 
				
			||||||
 | 
					                // needs to be run before branches and attributes are deleted and thus attached relations disappear
 | 
				
			||||||
 | 
					                const handlers = require("../../services/handlers");
 | 
				
			||||||
 | 
					                handlers.runAttachedRelations(note, 'runOnNoteDeletion', note);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (this.noteId === 'root'
 | 
				
			||||||
 | 
					            || this.noteId === cls.getHoistedNoteId()) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            throw new Error("Can't delete root or hoisted branch/note");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.markAsDeleted(deleteId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const notDeletedBranches = note.getStrongParentBranches();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (notDeletedBranches.length === 0) {
 | 
				
			||||||
 | 
					            for (const weakBranch of note.getParentBranches()) {
 | 
				
			||||||
 | 
					                weakBranch.markAsDeleted(deleteId);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (const childBranch of note.getChildBranches()) {
 | 
				
			||||||
 | 
					                childBranch.deleteBranch(deleteId, taskContext);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // first delete children and then parent - this will show up better in recent changes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            log.info(`Deleting note '${note.noteId}'`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            this.becca.notes[note.noteId].isBeingDeleted = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (const attribute of note.getOwnedAttributes().slice()) {
 | 
				
			||||||
 | 
					                attribute.markAsDeleted(deleteId);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (const relation of note.getTargetRelations()) {
 | 
				
			||||||
 | 
					                relation.markAsDeleted(deleteId);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (const attachment of note.getAttachments()) {
 | 
				
			||||||
 | 
					                attachment.markAsDeleted(deleteId);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            note.markAsDeleted(deleteId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    beforeSaving() {
 | 
				
			||||||
 | 
					        if (!this.noteId || !this.parentNoteId) {
 | 
				
			||||||
 | 
					            throw new Error(`noteId and parentNoteId are mandatory properties for Branch`);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.branchId = `${this.parentNoteId}_${this.noteId}`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (this.notePosition === undefined || this.notePosition === null) {
 | 
				
			||||||
 | 
					            let maxNotePos = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (const childBranch of this.parentNote.getChildBranches()) {
 | 
				
			||||||
 | 
					                if (maxNotePos < childBranch.notePosition
 | 
				
			||||||
 | 
					                    && childBranch.noteId !== '_hidden' // hidden has a very large notePosition to always stay last
 | 
				
			||||||
 | 
					                ) {
 | 
				
			||||||
 | 
					                    maxNotePos = childBranch.notePosition;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            this.notePosition = maxNotePos + 10;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!this.isExpanded) {
 | 
				
			||||||
 | 
					            this.isExpanded = false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!this.prefix?.trim()) {
 | 
				
			||||||
 | 
					            this.prefix = null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.utcDateModified = dateUtils.utcNowDateTime();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        super.beforeSaving();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.becca.branches[this.branchId] = this;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getPojo() {
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					            branchId: this.branchId,
 | 
				
			||||||
 | 
					            noteId: this.noteId,
 | 
				
			||||||
 | 
					            parentNoteId: this.parentNoteId,
 | 
				
			||||||
 | 
					            prefix: this.prefix,
 | 
				
			||||||
 | 
					            notePosition: this.notePosition,
 | 
				
			||||||
 | 
					            isExpanded: this.isExpanded,
 | 
				
			||||||
 | 
					            isDeleted: false,
 | 
				
			||||||
 | 
					            utcDateModified: this.utcDateModified
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    createClone(parentNoteId, notePosition) {
 | 
				
			||||||
 | 
					        const existingBranch = this.becca.getBranchFromChildAndParent(this.noteId, parentNoteId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (existingBranch) {
 | 
				
			||||||
 | 
					            existingBranch.notePosition = notePosition;
 | 
				
			||||||
 | 
					            return existingBranch;
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            return new BBranch({
 | 
				
			||||||
 | 
					                noteId: this.noteId,
 | 
				
			||||||
 | 
					                parentNoteId: parentNoteId,
 | 
				
			||||||
 | 
					                notePosition: notePosition,
 | 
				
			||||||
 | 
					                prefix: this.prefix,
 | 
				
			||||||
 | 
					                isExpanded: this.isExpanded
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = BBranch;
 | 
				
			||||||
 | 
					</code></pre>
 | 
				
			||||||
 | 
					        </article>
 | 
				
			||||||
 | 
					    </section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<nav>
 | 
				
			||||||
 | 
					    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul><h3>Global</h3><ul><li><a href="global.html#api">api</a></li></ul>
 | 
				
			||||||
 | 
					</nav>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<br class="clear">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<footer>
 | 
				
			||||||
 | 
					    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
				
			||||||
 | 
					</footer>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script> prettyPrint(); </script>
 | 
				
			||||||
 | 
					<script src="scripts/linenumber.js"> </script>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										129
									
								
								docs/backend_api/becca_entities_betapi_token.js.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								docs/backend_api/becca_entities_betapi_token.js.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,129 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html lang="en">
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					    <meta charset="utf-8">
 | 
				
			||||||
 | 
					    <title>JSDoc: Source: becca/entities/betapi_token.js</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <script src="scripts/prettify/prettify.js"> </script>
 | 
				
			||||||
 | 
					    <script src="scripts/prettify/lang-css.js"> </script>
 | 
				
			||||||
 | 
					    <!--[if lt IE 9]>
 | 
				
			||||||
 | 
					      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
 | 
				
			||||||
 | 
					    <![endif]-->
 | 
				
			||||||
 | 
					    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
 | 
				
			||||||
 | 
					    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div id="main">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <h1 class="page-title">Source: becca/entities/betapi_token.js</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <section>
 | 
				
			||||||
 | 
					        <article>
 | 
				
			||||||
 | 
					            <pre class="prettyprint source linenums"><code>"use strict";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const dateUtils = require('../../services/date_utils');
 | 
				
			||||||
 | 
					const AbstractBeccaEntity = require("./abstract_becca_entity");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * EtapiToken is an entity representing token used to authenticate against Trilium REST API from client applications.
 | 
				
			||||||
 | 
					 * Used by:
 | 
				
			||||||
 | 
					 * - Trilium Sender
 | 
				
			||||||
 | 
					 * - ETAPI clients
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The format user is presented with is "<etapiTokenId>_<tokenHash>". This is also called "authToken" to distinguish it
 | 
				
			||||||
 | 
					 * from tokenHash and token.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @extends AbstractBeccaEntity
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class BEtapiToken extends AbstractBeccaEntity {
 | 
				
			||||||
 | 
					    static get entityName() { return "etapi_tokens"; }
 | 
				
			||||||
 | 
					    static get primaryKeyName() { return "etapiTokenId"; }
 | 
				
			||||||
 | 
					    static get hashedProperties() { return ["etapiTokenId", "name", "tokenHash", "utcDateCreated", "utcDateModified", "isDeleted"]; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor(row) {
 | 
				
			||||||
 | 
					        super();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!row) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.updateFromRow(row);
 | 
				
			||||||
 | 
					        this.init();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    updateFromRow(row) {
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.etapiTokenId = row.etapiTokenId;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.name = row.name;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.tokenHash = row.tokenHash;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.utcDateCreated = row.utcDateCreated || dateUtils.utcNowDateTime();
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.utcDateModified = row.utcDateModified || this.utcDateCreated;
 | 
				
			||||||
 | 
					        /** @type {boolean} */
 | 
				
			||||||
 | 
					        this.isDeleted = !!row.isDeleted;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (this.etapiTokenId) {
 | 
				
			||||||
 | 
					            this.becca.etapiTokens[this.etapiTokenId] = this;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    init() {
 | 
				
			||||||
 | 
					        if (this.etapiTokenId) {
 | 
				
			||||||
 | 
					            this.becca.etapiTokens[this.etapiTokenId] = this;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getPojo() {
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					            etapiTokenId: this.etapiTokenId,
 | 
				
			||||||
 | 
					            name: this.name,
 | 
				
			||||||
 | 
					            tokenHash: this.tokenHash,
 | 
				
			||||||
 | 
					            utcDateCreated: this.utcDateCreated,
 | 
				
			||||||
 | 
					            utcDateModified: this.utcDateModified,
 | 
				
			||||||
 | 
					            isDeleted: this.isDeleted
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    beforeSaving() {
 | 
				
			||||||
 | 
					        this.utcDateModified = dateUtils.utcNowDateTime();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        super.beforeSaving();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.becca.etapiTokens[this.etapiTokenId] = this;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = BEtapiToken;
 | 
				
			||||||
 | 
					</code></pre>
 | 
				
			||||||
 | 
					        </article>
 | 
				
			||||||
 | 
					    </section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<nav>
 | 
				
			||||||
 | 
					    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul><h3>Global</h3><ul><li><a href="global.html#api">api</a></li></ul>
 | 
				
			||||||
 | 
					</nav>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<br class="clear">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<footer>
 | 
				
			||||||
 | 
					    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
				
			||||||
 | 
					</footer>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script> prettyPrint(); </script>
 | 
				
			||||||
 | 
					<script src="scripts/linenumber.js"> </script>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										1779
									
								
								docs/backend_api/becca_entities_bnote.js.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1779
									
								
								docs/backend_api/becca_entities_bnote.js.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -2,7 +2,7 @@
 | 
				
			|||||||
<html lang="en">
 | 
					<html lang="en">
 | 
				
			||||||
<head>
 | 
					<head>
 | 
				
			||||||
    <meta charset="utf-8">
 | 
					    <meta charset="utf-8">
 | 
				
			||||||
    <title>JSDoc: Source: becca/entities/option.js</title>
 | 
					    <title>JSDoc: Source: becca/entities/boption.js</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <script src="scripts/prettify/prettify.js"> </script>
 | 
					    <script src="scripts/prettify/prettify.js"> </script>
 | 
				
			||||||
    <script src="scripts/prettify/lang-css.js"> </script>
 | 
					    <script src="scripts/prettify/lang-css.js"> </script>
 | 
				
			||||||
@@ -17,7 +17,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
<div id="main">
 | 
					<div id="main">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <h1 class="page-title">Source: becca/entities/option.js</h1>
 | 
					    <h1 class="page-title">Source: becca/entities/boption.js</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28,13 +28,15 @@
 | 
				
			|||||||
        <article>
 | 
					        <article>
 | 
				
			||||||
            <pre class="prettyprint source linenums"><code>"use strict";
 | 
					            <pre class="prettyprint source linenums"><code>"use strict";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const dateUtils = require('../../services/date_utils.js');
 | 
					const dateUtils = require('../../services/date_utils');
 | 
				
			||||||
const AbstractEntity = require("./abstract_entity.js");
 | 
					const AbstractBeccaEntity = require("./abstract_becca_entity");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Option represents name-value pair, either directly configurable by the user or some system property.
 | 
					 * Option represents a name-value pair, either directly configurable by the user or some system property.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @extends AbstractBeccaEntity
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
class Option extends AbstractEntity {
 | 
					class BOption extends AbstractBeccaEntity {
 | 
				
			||||||
    static get entityName() { return "options"; }
 | 
					    static get entityName() { return "options"; }
 | 
				
			||||||
    static get primaryKeyName() { return "name"; }
 | 
					    static get primaryKeyName() { return "name"; }
 | 
				
			||||||
    static get hashedProperties() { return ["name", "value"]; }
 | 
					    static get hashedProperties() { return ["name", "value"]; }
 | 
				
			||||||
@@ -42,6 +44,11 @@ class Option extends AbstractEntity {
 | 
				
			|||||||
    constructor(row) {
 | 
					    constructor(row) {
 | 
				
			||||||
        super();
 | 
					        super();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.updateFromRow(row);
 | 
				
			||||||
 | 
					        this.becca.options[this.name] = this;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    updateFromRow(row) {
 | 
				
			||||||
        /** @type {string} */
 | 
					        /** @type {string} */
 | 
				
			||||||
        this.name = row.name;
 | 
					        this.name = row.name;
 | 
				
			||||||
        /** @type {string} */
 | 
					        /** @type {string} */
 | 
				
			||||||
@@ -50,8 +57,6 @@ class Option extends AbstractEntity {
 | 
				
			|||||||
        this.isSynced = !!row.isSynced;
 | 
					        this.isSynced = !!row.isSynced;
 | 
				
			||||||
        /** @type {string} */
 | 
					        /** @type {string} */
 | 
				
			||||||
        this.utcDateModified = row.utcDateModified;
 | 
					        this.utcDateModified = row.utcDateModified;
 | 
				
			||||||
 | 
					 | 
				
			||||||
        this.becca.options[this.name] = this;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    beforeSaving() {
 | 
					    beforeSaving() {
 | 
				
			||||||
@@ -70,7 +75,7 @@ class Option extends AbstractEntity {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = Option;
 | 
					module.exports = BOption;
 | 
				
			||||||
</code></pre>
 | 
					</code></pre>
 | 
				
			||||||
        </article>
 | 
					        </article>
 | 
				
			||||||
    </section>
 | 
					    </section>
 | 
				
			||||||
@@ -81,15 +86,13 @@ module.exports = Option;
 | 
				
			|||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<nav>
 | 
					<nav>
 | 
				
			||||||
    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="sql%250A%250ATODO_%2520some%2520methods%2520(like%2520getValue())%2520could%2520use%2520raw%2520rowsmodule_.html">sql
 | 
					    <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>
 | 
				
			||||||
 | 
					 | 
				
			||||||
TODO: some methods (like getValue()) could use raw rows</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
					 | 
				
			||||||
</nav>
 | 
					</nav>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<br class="clear">
 | 
					<br class="clear">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<footer>
 | 
					<footer>
 | 
				
			||||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
 | 
					    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
				
			||||||
</footer>
 | 
					</footer>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script> prettyPrint(); </script>
 | 
					<script> prettyPrint(); </script>
 | 
				
			||||||
@@ -1,210 +0,0 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					 | 
				
			||||||
<html lang="en">
 | 
					 | 
				
			||||||
<head>
 | 
					 | 
				
			||||||
    <meta charset="utf-8">
 | 
					 | 
				
			||||||
    <title>JSDoc: Source: becca/entities/branch.js</title>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <script src="scripts/prettify/prettify.js"> </script>
 | 
					 | 
				
			||||||
    <script src="scripts/prettify/lang-css.js"> </script>
 | 
					 | 
				
			||||||
    <!--[if lt IE 9]>
 | 
					 | 
				
			||||||
      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
 | 
					 | 
				
			||||||
    <![endif]-->
 | 
					 | 
				
			||||||
    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
 | 
					 | 
				
			||||||
    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
 | 
					 | 
				
			||||||
</head>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<body>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div id="main">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h1 class="page-title">Source: becca/entities/branch.js</h1>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <section>
 | 
					 | 
				
			||||||
        <article>
 | 
					 | 
				
			||||||
            <pre class="prettyprint source linenums"><code>"use strict";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Note = require('./note.js');
 | 
					 | 
				
			||||||
const AbstractEntity = require("./abstract_entity.js");
 | 
					 | 
				
			||||||
const sql = require("../../services/sql.js");
 | 
					 | 
				
			||||||
const dateUtils = require("../../services/date_utils.js");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Branch represents a relationship between a child note and its parent note. Trilium allows a note to have multiple
 | 
					 | 
				
			||||||
 * parents.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
class Branch extends AbstractEntity {
 | 
					 | 
				
			||||||
    static get entityName() { return "branches"; }
 | 
					 | 
				
			||||||
    static get primaryKeyName() { return "branchId"; }
 | 
					 | 
				
			||||||
    // notePosition is not part of hash because it would produce a lot of updates in case of reordering
 | 
					 | 
				
			||||||
    static get hashedProperties() { return ["branchId", "noteId", "parentNoteId", "prefix"]; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    constructor(row) {
 | 
					 | 
				
			||||||
        super();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (!row) {
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        this.updateFromRow(row);
 | 
					 | 
				
			||||||
        this.init();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    updateFromRow(row) {
 | 
					 | 
				
			||||||
        this.update([
 | 
					 | 
				
			||||||
            row.branchId,
 | 
					 | 
				
			||||||
            row.noteId,
 | 
					 | 
				
			||||||
            row.parentNoteId,
 | 
					 | 
				
			||||||
            row.prefix,
 | 
					 | 
				
			||||||
            row.notePosition,
 | 
					 | 
				
			||||||
            row.isExpanded,
 | 
					 | 
				
			||||||
            row.utcDateModified
 | 
					 | 
				
			||||||
        ]);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    update([branchId, noteId, parentNoteId, prefix, notePosition, isExpanded, utcDateModified]) {
 | 
					 | 
				
			||||||
        /** @type {string} */
 | 
					 | 
				
			||||||
        this.branchId = branchId;
 | 
					 | 
				
			||||||
        /** @type {string} */
 | 
					 | 
				
			||||||
        this.noteId = noteId;
 | 
					 | 
				
			||||||
        /** @type {string} */
 | 
					 | 
				
			||||||
        this.parentNoteId = parentNoteId;
 | 
					 | 
				
			||||||
        /** @type {string} */
 | 
					 | 
				
			||||||
        this.prefix = prefix;
 | 
					 | 
				
			||||||
        /** @type {int} */
 | 
					 | 
				
			||||||
        this.notePosition = notePosition;
 | 
					 | 
				
			||||||
        /** @type {boolean} */
 | 
					 | 
				
			||||||
        this.isExpanded = !!isExpanded;
 | 
					 | 
				
			||||||
        /** @type {string} */
 | 
					 | 
				
			||||||
        this.utcDateModified = utcDateModified;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return this;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    init() {
 | 
					 | 
				
			||||||
        if (this.branchId) {
 | 
					 | 
				
			||||||
            this.becca.branches[this.branchId] = this;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        this.becca.childParentToBranch[`${this.noteId}-${this.parentNoteId}`] = this;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (this.branchId === 'root') {
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        const childNote = this.childNote;
 | 
					 | 
				
			||||||
        const parentNote = this.parentNote;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (!childNote.parents.includes(parentNote)) {
 | 
					 | 
				
			||||||
            childNote.parents.push(parentNote);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (!childNote.parentBranches.includes(this)) {
 | 
					 | 
				
			||||||
            childNote.parentBranches.push(this);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (!parentNote.children.includes(childNote)) {
 | 
					 | 
				
			||||||
            parentNote.children.push(childNote);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** @returns {Note} */
 | 
					 | 
				
			||||||
    get childNote() {
 | 
					 | 
				
			||||||
        if (!(this.noteId in this.becca.notes)) {
 | 
					 | 
				
			||||||
            // entities can come out of order in sync/import, create skeleton which will be filled later
 | 
					 | 
				
			||||||
            this.becca.addNote(this.noteId, new Note({noteId: this.noteId}));
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return this.becca.notes[this.noteId];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    getNote() {
 | 
					 | 
				
			||||||
        return this.childNote;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** @returns {Note} */
 | 
					 | 
				
			||||||
    get parentNote() {
 | 
					 | 
				
			||||||
        if (!(this.parentNoteId in this.becca.notes)) {
 | 
					 | 
				
			||||||
            // entities can come out of order in sync/import, create skeleton which will be filled later
 | 
					 | 
				
			||||||
            this.becca.addNote(this.parentNoteId, new Note({noteId: this.parentNoteId}));
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return this.becca.notes[this.parentNoteId];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    get isDeleted() {
 | 
					 | 
				
			||||||
        return !(this.branchId in this.becca.branches);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    beforeSaving() {
 | 
					 | 
				
			||||||
        if (this.notePosition === undefined || this.notePosition === null) {
 | 
					 | 
				
			||||||
            // TODO finding new position can be refactored into becca
 | 
					 | 
				
			||||||
            const maxNotePos = sql.getValue('SELECT MAX(notePosition) FROM branches WHERE parentNoteId = ? AND isDeleted = 0', [this.parentNoteId]);
 | 
					 | 
				
			||||||
            this.notePosition = maxNotePos === null ? 0 : maxNotePos + 10;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (!this.isExpanded) {
 | 
					 | 
				
			||||||
            this.isExpanded = false;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        this.utcDateModified = dateUtils.utcNowDateTime();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        super.beforeSaving();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        this.becca.branches[this.branchId] = this;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    getPojo() {
 | 
					 | 
				
			||||||
        return {
 | 
					 | 
				
			||||||
            branchId: this.branchId,
 | 
					 | 
				
			||||||
            noteId: this.noteId,
 | 
					 | 
				
			||||||
            parentNoteId: this.parentNoteId,
 | 
					 | 
				
			||||||
            prefix: this.prefix,
 | 
					 | 
				
			||||||
            notePosition: this.notePosition,
 | 
					 | 
				
			||||||
            isExpanded: this.isExpanded,
 | 
					 | 
				
			||||||
            isDeleted: false,
 | 
					 | 
				
			||||||
            utcDateModified: this.utcDateModified
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    createClone(parentNoteId, notePosition) {
 | 
					 | 
				
			||||||
        return new Branch({
 | 
					 | 
				
			||||||
            noteId: this.noteId,
 | 
					 | 
				
			||||||
            parentNoteId: parentNoteId,
 | 
					 | 
				
			||||||
            notePosition: notePosition,
 | 
					 | 
				
			||||||
            prefix: this.prefix,
 | 
					 | 
				
			||||||
            isExpanded: this.isExpanded
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = Branch;
 | 
					 | 
				
			||||||
</code></pre>
 | 
					 | 
				
			||||||
        </article>
 | 
					 | 
				
			||||||
    </section>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<nav>
 | 
					 | 
				
			||||||
    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="sql%250A%250ATODO_%2520some%2520methods%2520(like%2520getValue())%2520could%2520use%2520raw%2520rowsmodule_.html">sql
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TODO: some methods (like getValue()) could use raw rows</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
					 | 
				
			||||||
</nav>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<br class="clear">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<footer>
 | 
					 | 
				
			||||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
 | 
					 | 
				
			||||||
</footer>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script> prettyPrint(); </script>
 | 
					 | 
				
			||||||
<script src="scripts/linenumber.js"> </script>
 | 
					 | 
				
			||||||
</body>
 | 
					 | 
				
			||||||
</html>
 | 
					 | 
				
			||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
<html lang="en">
 | 
					<html lang="en">
 | 
				
			||||||
<head>
 | 
					<head>
 | 
				
			||||||
    <meta charset="utf-8">
 | 
					    <meta charset="utf-8">
 | 
				
			||||||
    <title>JSDoc: Source: becca/entities/recent_note.js</title>
 | 
					    <title>JSDoc: Source: becca/entities/brecent_note.js</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <script src="scripts/prettify/prettify.js"> </script>
 | 
					    <script src="scripts/prettify/prettify.js"> </script>
 | 
				
			||||||
    <script src="scripts/prettify/lang-css.js"> </script>
 | 
					    <script src="scripts/prettify/lang-css.js"> </script>
 | 
				
			||||||
@@ -17,7 +17,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
<div id="main">
 | 
					<div id="main">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <h1 class="page-title">Source: becca/entities/recent_note.js</h1>
 | 
					    <h1 class="page-title">Source: becca/entities/brecent_note.js</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28,13 +28,15 @@
 | 
				
			|||||||
        <article>
 | 
					        <article>
 | 
				
			||||||
            <pre class="prettyprint source linenums"><code>"use strict";
 | 
					            <pre class="prettyprint source linenums"><code>"use strict";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const dateUtils = require('../../services/date_utils.js');
 | 
					const dateUtils = require('../../services/date_utils');
 | 
				
			||||||
const AbstractEntity = require("./abstract_entity.js");
 | 
					const AbstractBeccaEntity = require("./abstract_becca_entity");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * RecentNote represents recently visited note.
 | 
					 * RecentNote represents recently visited note.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @extends AbstractBeccaEntity
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
class RecentNote extends AbstractEntity {
 | 
					class BRecentNote extends AbstractBeccaEntity {
 | 
				
			||||||
    static get entityName() { return "recent_notes"; }
 | 
					    static get entityName() { return "recent_notes"; }
 | 
				
			||||||
    static get primaryKeyName() { return "noteId"; }
 | 
					    static get primaryKeyName() { return "noteId"; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -58,7 +60,7 @@ class RecentNote extends AbstractEntity {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = RecentNote;
 | 
					module.exports = BRecentNote;
 | 
				
			||||||
</code></pre>
 | 
					</code></pre>
 | 
				
			||||||
        </article>
 | 
					        </article>
 | 
				
			||||||
    </section>
 | 
					    </section>
 | 
				
			||||||
@@ -69,15 +71,13 @@ module.exports = RecentNote;
 | 
				
			|||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<nav>
 | 
					<nav>
 | 
				
			||||||
    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="sql%250A%250ATODO_%2520some%2520methods%2520(like%2520getValue())%2520could%2520use%2520raw%2520rowsmodule_.html">sql
 | 
					    <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>
 | 
				
			||||||
 | 
					 | 
				
			||||||
TODO: some methods (like getValue()) could use raw rows</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
					 | 
				
			||||||
</nav>
 | 
					</nav>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<br class="clear">
 | 
					<br class="clear">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<footer>
 | 
					<footer>
 | 
				
			||||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
 | 
					    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
				
			||||||
</footer>
 | 
					</footer>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script> prettyPrint(); </script>
 | 
					<script> prettyPrint(); </script>
 | 
				
			||||||
							
								
								
									
										259
									
								
								docs/backend_api/becca_entities_brevision.js.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										259
									
								
								docs/backend_api/becca_entities_brevision.js.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,259 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html lang="en">
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					    <meta charset="utf-8">
 | 
				
			||||||
 | 
					    <title>JSDoc: Source: becca/entities/brevision.js</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <script src="scripts/prettify/prettify.js"> </script>
 | 
				
			||||||
 | 
					    <script src="scripts/prettify/lang-css.js"> </script>
 | 
				
			||||||
 | 
					    <!--[if lt IE 9]>
 | 
				
			||||||
 | 
					      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
 | 
				
			||||||
 | 
					    <![endif]-->
 | 
				
			||||||
 | 
					    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
 | 
				
			||||||
 | 
					    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div id="main">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <h1 class="page-title">Source: becca/entities/brevision.js</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <section>
 | 
				
			||||||
 | 
					        <article>
 | 
				
			||||||
 | 
					            <pre class="prettyprint source linenums"><code>"use strict";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const protectedSessionService = require('../../services/protected_session');
 | 
				
			||||||
 | 
					const utils = require('../../services/utils');
 | 
				
			||||||
 | 
					const dateUtils = require('../../services/date_utils');
 | 
				
			||||||
 | 
					const becca = require('../becca');
 | 
				
			||||||
 | 
					const AbstractBeccaEntity = require("./abstract_becca_entity");
 | 
				
			||||||
 | 
					const sql = require("../../services/sql");
 | 
				
			||||||
 | 
					const BAttachment = require("./battachment");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Revision represents a snapshot of note's title and content at some point in the past.
 | 
				
			||||||
 | 
					 * It's used for seamless note versioning.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @extends AbstractBeccaEntity
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class BRevision extends AbstractBeccaEntity {
 | 
				
			||||||
 | 
					    static get entityName() { return "revisions"; }
 | 
				
			||||||
 | 
					    static get primaryKeyName() { return "revisionId"; }
 | 
				
			||||||
 | 
					    static get hashedProperties() { return ["revisionId", "noteId", "title", "isProtected", "dateLastEdited", "dateCreated",
 | 
				
			||||||
 | 
					                                            "utcDateLastEdited", "utcDateCreated", "utcDateModified", "blobId"]; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor(row, titleDecrypted = false) {
 | 
				
			||||||
 | 
					        super();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.revisionId = row.revisionId;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.noteId = row.noteId;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.type = row.type;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.mime = row.mime;
 | 
				
			||||||
 | 
					        /** @type {boolean} */
 | 
				
			||||||
 | 
					        this.isProtected = !!row.isProtected;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.title = row.title;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.blobId = row.blobId;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.dateLastEdited = row.dateLastEdited;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.dateCreated = row.dateCreated;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.utcDateLastEdited = row.utcDateLastEdited;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.utcDateCreated = row.utcDateCreated;
 | 
				
			||||||
 | 
					        /** @type {string} */
 | 
				
			||||||
 | 
					        this.utcDateModified = row.utcDateModified;
 | 
				
			||||||
 | 
					        /** @type {int} */
 | 
				
			||||||
 | 
					        this.contentLength = row.contentLength;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (this.isProtected && !titleDecrypted) {
 | 
				
			||||||
 | 
					            this.title = protectedSessionService.isProtectedSessionAvailable()
 | 
				
			||||||
 | 
					                ? protectedSessionService.decryptString(this.title)
 | 
				
			||||||
 | 
					                : "[protected]";
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getNote() {
 | 
				
			||||||
 | 
					        return becca.notes[this.noteId];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @returns {boolean} true if the note has string content (not binary) */
 | 
				
			||||||
 | 
					    hasStringContent() {
 | 
				
			||||||
 | 
					        return utils.isStringNote(this.type, this.mime);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    isContentAvailable() {
 | 
				
			||||||
 | 
					        return !this.revisionId // new note which was not encrypted yet
 | 
				
			||||||
 | 
					            || !this.isProtected
 | 
				
			||||||
 | 
					            || protectedSessionService.isProtectedSessionAvailable()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					     * Note revision content has quite special handling - it's not a separate entity, but a lazily loaded
 | 
				
			||||||
 | 
					     * part of Revision entity with its own sync. The reason behind this hybrid design is that
 | 
				
			||||||
 | 
					     * content can be quite large, and it's not necessary to load it / fill memory for any note access even
 | 
				
			||||||
 | 
					     * if we don't need a content, especially for bulk operations like search.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * This is the same approach as is used for Note's content.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @returns {string|Buffer} */
 | 
				
			||||||
 | 
					    getContent() {
 | 
				
			||||||
 | 
					        return this._getContent();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @returns {*}
 | 
				
			||||||
 | 
					     * @throws Error in case of invalid JSON */
 | 
				
			||||||
 | 
					    getJsonContent() {
 | 
				
			||||||
 | 
					        const content = this.getContent();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!content || !content.trim()) {
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return JSON.parse(content);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @returns {*|null} valid object or null if the content cannot be parsed as JSON */
 | 
				
			||||||
 | 
					    getJsonContentSafely() {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            return this.getJsonContent();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        catch (e) {
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @param content
 | 
				
			||||||
 | 
					     * @param {object} [opts]
 | 
				
			||||||
 | 
					     * @param {object} [opts.forceSave=false] - will also save this BRevision entity
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    setContent(content, opts) {
 | 
				
			||||||
 | 
					        this._setContent(content, opts);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @returns {BAttachment[]} */
 | 
				
			||||||
 | 
					    getAttachments() {
 | 
				
			||||||
 | 
					        return sql.getRows(`
 | 
				
			||||||
 | 
					                SELECT attachments.*
 | 
				
			||||||
 | 
					                FROM attachments 
 | 
				
			||||||
 | 
					                WHERE ownerId = ? 
 | 
				
			||||||
 | 
					                  AND isDeleted = 0`, [this.revisionId])
 | 
				
			||||||
 | 
					            .map(row => new BAttachment(row));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @returns {BAttachment|null} */
 | 
				
			||||||
 | 
					    getAttachmentById(attachmentId, opts = {}) {
 | 
				
			||||||
 | 
					        opts.includeContentLength = !!opts.includeContentLength;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const query = opts.includeContentLength
 | 
				
			||||||
 | 
					            ? `SELECT attachments.*, LENGTH(blobs.content) AS contentLength
 | 
				
			||||||
 | 
					               FROM attachments 
 | 
				
			||||||
 | 
					               JOIN blobs USING (blobId) 
 | 
				
			||||||
 | 
					               WHERE ownerId = ? AND attachmentId = ? AND isDeleted = 0`
 | 
				
			||||||
 | 
					            : `SELECT * FROM attachments WHERE ownerId = ? AND attachmentId = ? AND isDeleted = 0`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return sql.getRows(query, [this.revisionId, attachmentId])
 | 
				
			||||||
 | 
					            .map(row => new BAttachment(row))[0];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @returns {BAttachment[]} */
 | 
				
			||||||
 | 
					    getAttachmentsByRole(role) {
 | 
				
			||||||
 | 
					        return sql.getRows(`
 | 
				
			||||||
 | 
					                SELECT attachments.*
 | 
				
			||||||
 | 
					                FROM attachments 
 | 
				
			||||||
 | 
					                WHERE ownerId = ? 
 | 
				
			||||||
 | 
					                  AND role = ?
 | 
				
			||||||
 | 
					                  AND isDeleted = 0
 | 
				
			||||||
 | 
					                ORDER BY position`, [this.revisionId, role])
 | 
				
			||||||
 | 
					            .map(row => new BAttachment(row));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @returns {BAttachment} */
 | 
				
			||||||
 | 
					    getAttachmentByTitle(title) {
 | 
				
			||||||
 | 
					        // cannot use SQL to filter by title since it can be encrypted
 | 
				
			||||||
 | 
					        return this.getAttachments().filter(attachment => attachment.title === title)[0];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    beforeSaving() {
 | 
				
			||||||
 | 
					        super.beforeSaving();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.utcDateModified = dateUtils.utcNowDateTime();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getPojo() {
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					            revisionId: this.revisionId,
 | 
				
			||||||
 | 
					            noteId: this.noteId,
 | 
				
			||||||
 | 
					            type: this.type,
 | 
				
			||||||
 | 
					            mime: this.mime,
 | 
				
			||||||
 | 
					            isProtected: this.isProtected,
 | 
				
			||||||
 | 
					            title: this.title,
 | 
				
			||||||
 | 
					            blobId: this.blobId,
 | 
				
			||||||
 | 
					            dateLastEdited: this.dateLastEdited,
 | 
				
			||||||
 | 
					            dateCreated: this.dateCreated,
 | 
				
			||||||
 | 
					            utcDateLastEdited: this.utcDateLastEdited,
 | 
				
			||||||
 | 
					            utcDateCreated: this.utcDateCreated,
 | 
				
			||||||
 | 
					            utcDateModified: this.utcDateModified,
 | 
				
			||||||
 | 
					            content: this.content, // used when retrieving full note revision to frontend
 | 
				
			||||||
 | 
					            contentLength: this.contentLength
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getPojoToSave() {
 | 
				
			||||||
 | 
					        const pojo = this.getPojo();
 | 
				
			||||||
 | 
					        delete pojo.content; // not getting persisted
 | 
				
			||||||
 | 
					        delete pojo.contentLength; // not getting persisted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (pojo.isProtected) {
 | 
				
			||||||
 | 
					            if (protectedSessionService.isProtectedSessionAvailable()) {
 | 
				
			||||||
 | 
					                pojo.title = protectedSessionService.encrypt(this.title);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else {
 | 
				
			||||||
 | 
					                // updating protected note outside of protected session means we will keep original ciphertexts
 | 
				
			||||||
 | 
					                delete pojo.title;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return pojo;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = BRevision;
 | 
				
			||||||
 | 
					</code></pre>
 | 
				
			||||||
 | 
					        </article>
 | 
				
			||||||
 | 
					    </section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<nav>
 | 
				
			||||||
 | 
					    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul><h3>Global</h3><ul><li><a href="global.html#api">api</a></li></ul>
 | 
				
			||||||
 | 
					</nav>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<br class="clear">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<footer>
 | 
				
			||||||
 | 
					    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
				
			||||||
 | 
					</footer>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script> prettyPrint(); </script>
 | 
				
			||||||
 | 
					<script src="scripts/linenumber.js"> </script>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,247 +0,0 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					 | 
				
			||||||
<html lang="en">
 | 
					 | 
				
			||||||
<head>
 | 
					 | 
				
			||||||
    <meta charset="utf-8">
 | 
					 | 
				
			||||||
    <title>JSDoc: Source: becca/entities/note_revision.js</title>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <script src="scripts/prettify/prettify.js"> </script>
 | 
					 | 
				
			||||||
    <script src="scripts/prettify/lang-css.js"> </script>
 | 
					 | 
				
			||||||
    <!--[if lt IE 9]>
 | 
					 | 
				
			||||||
      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
 | 
					 | 
				
			||||||
    <![endif]-->
 | 
					 | 
				
			||||||
    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
 | 
					 | 
				
			||||||
    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
 | 
					 | 
				
			||||||
</head>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<body>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<div id="main">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h1 class="page-title">Source: becca/entities/note_revision.js</h1>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <section>
 | 
					 | 
				
			||||||
        <article>
 | 
					 | 
				
			||||||
            <pre class="prettyprint source linenums"><code>"use strict";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const protectedSessionService = require('../../services/protected_session');
 | 
					 | 
				
			||||||
const utils = require('../../services/utils');
 | 
					 | 
				
			||||||
const sql = require('../../services/sql');
 | 
					 | 
				
			||||||
const dateUtils = require('../../services/date_utils');
 | 
					 | 
				
			||||||
const becca = require('../becca.js');
 | 
					 | 
				
			||||||
const entityChangesService = require('../../services/entity_changes');
 | 
					 | 
				
			||||||
const AbstractEntity = require("./abstract_entity.js");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * NoteRevision represents snapshot of note's title and content at some point in the past.
 | 
					 | 
				
			||||||
 * It's used for seamless note versioning.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
class NoteRevision extends AbstractEntity {
 | 
					 | 
				
			||||||
    static get entityName() { return "note_revisions"; }
 | 
					 | 
				
			||||||
    static get primaryKeyName() { return "noteRevisionId"; }
 | 
					 | 
				
			||||||
    static get hashedProperties() { return ["noteRevisionId", "noteId", "title", "isProtected", "dateLastEdited", "dateCreated", "utcDateLastEdited", "utcDateCreated", "utcDateModified"]; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    constructor(row) {
 | 
					 | 
				
			||||||
        super();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /** @type {string} */
 | 
					 | 
				
			||||||
        this.noteRevisionId = row.noteRevisionId;
 | 
					 | 
				
			||||||
        /** @type {string} */
 | 
					 | 
				
			||||||
        this.noteId = row.noteId;
 | 
					 | 
				
			||||||
        /** @type {string} */
 | 
					 | 
				
			||||||
        this.type = row.type;
 | 
					 | 
				
			||||||
        /** @type {string} */
 | 
					 | 
				
			||||||
        this.mime = row.mime;
 | 
					 | 
				
			||||||
        /** @type {boolean} */
 | 
					 | 
				
			||||||
        this.isProtected = !!row.isProtected;
 | 
					 | 
				
			||||||
        /** @type {string} */
 | 
					 | 
				
			||||||
        this.title = row.title;
 | 
					 | 
				
			||||||
        /** @type {string} */
 | 
					 | 
				
			||||||
        this.dateLastEdited = row.dateLastEdited;
 | 
					 | 
				
			||||||
        /** @type {string} */
 | 
					 | 
				
			||||||
        this.dateCreated = row.dateCreated;
 | 
					 | 
				
			||||||
        /** @type {string} */
 | 
					 | 
				
			||||||
        this.utcDateLastEdited = row.utcDateLastEdited;
 | 
					 | 
				
			||||||
        /** @type {string} */
 | 
					 | 
				
			||||||
        this.utcDateCreated = row.utcDateCreated;
 | 
					 | 
				
			||||||
        /** @type {string} */
 | 
					 | 
				
			||||||
        this.utcDateModified = row.utcDateModified;
 | 
					 | 
				
			||||||
        /** @type {number} */
 | 
					 | 
				
			||||||
        this.contentLength = row.contentLength;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (this.isProtected) {
 | 
					 | 
				
			||||||
            if (protectedSessionService.isProtectedSessionAvailable()) {
 | 
					 | 
				
			||||||
                this.title = protectedSessionService.decryptString(this.title);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else {
 | 
					 | 
				
			||||||
                this.title = "[protected]";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    getNote() {
 | 
					 | 
				
			||||||
        return becca.notes[this.noteId];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** @returns {boolean} true if the note has string content (not binary) */
 | 
					 | 
				
			||||||
    isStringNote() {
 | 
					 | 
				
			||||||
        return utils.isStringNote(this.type, this.mime);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /*
 | 
					 | 
				
			||||||
     * Note revision content has quite special handling - it's not a separate entity, but a lazily loaded
 | 
					 | 
				
			||||||
     * part of NoteRevision entity with it's own sync. Reason behind this hybrid design is that
 | 
					 | 
				
			||||||
     * content can be quite large and it's not necessary to load it / fill memory for any note access even
 | 
					 | 
				
			||||||
     * if we don't need a content, especially for bulk operations like search.
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * This is the same approach as is used for Note's content.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** @returns {*} */
 | 
					 | 
				
			||||||
    getContent(silentNotFoundError = false) {
 | 
					 | 
				
			||||||
        const res = sql.getRow(`SELECT content FROM note_revision_contents WHERE noteRevisionId = ?`, [this.noteRevisionId]);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (!res) {
 | 
					 | 
				
			||||||
            if (silentNotFoundError) {
 | 
					 | 
				
			||||||
                return undefined;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else {
 | 
					 | 
				
			||||||
                throw new Error("Cannot find note revision content for noteRevisionId=" + this.noteRevisionId);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        let content = res.content;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (this.isProtected) {
 | 
					 | 
				
			||||||
            if (protectedSessionService.isProtectedSessionAvailable()) {
 | 
					 | 
				
			||||||
                content = protectedSessionService.decrypt(content);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else {
 | 
					 | 
				
			||||||
                content = "";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (this.isStringNote()) {
 | 
					 | 
				
			||||||
            return content === null
 | 
					 | 
				
			||||||
                ? ""
 | 
					 | 
				
			||||||
                : content.toString("UTF-8");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else {
 | 
					 | 
				
			||||||
            return content;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    setContent(content, ignoreMissingProtectedSession = false) {
 | 
					 | 
				
			||||||
        const pojo = {
 | 
					 | 
				
			||||||
            noteRevisionId: this.noteRevisionId,
 | 
					 | 
				
			||||||
            content: content,
 | 
					 | 
				
			||||||
            utcDateModified: dateUtils.utcNowDateTime()
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (this.isProtected) {
 | 
					 | 
				
			||||||
            if (protectedSessionService.isProtectedSessionAvailable()) {
 | 
					 | 
				
			||||||
                pojo.content = protectedSessionService.encrypt(pojo.content);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (!ignoreMissingProtectedSession) {
 | 
					 | 
				
			||||||
                throw new Error(`Cannot update content of noteRevisionId=${this.noteRevisionId} since we're out of protected session.`);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        sql.upsert("note_revision_contents", "noteRevisionId", pojo);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        const hash = utils.hash(this.noteRevisionId + "|" + pojo.content.toString());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        entityChangesService.addEntityChange({
 | 
					 | 
				
			||||||
            entityName: 'note_revision_contents',
 | 
					 | 
				
			||||||
            entityId: this.noteRevisionId,
 | 
					 | 
				
			||||||
            hash: hash,
 | 
					 | 
				
			||||||
            isErased: false,
 | 
					 | 
				
			||||||
            utcDateChanged: this.getUtcDateChanged(),
 | 
					 | 
				
			||||||
            isSynced: true
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** @returns {{contentLength, dateModified, utcDateModified}} */
 | 
					 | 
				
			||||||
    getContentMetadata() {
 | 
					 | 
				
			||||||
        return sql.getRow(`
 | 
					 | 
				
			||||||
            SELECT 
 | 
					 | 
				
			||||||
                LENGTH(content) AS contentLength, 
 | 
					 | 
				
			||||||
                dateModified,
 | 
					 | 
				
			||||||
                utcDateModified 
 | 
					 | 
				
			||||||
            FROM note_revision_contents 
 | 
					 | 
				
			||||||
            WHERE noteRevisionId = ?`, [this.noteRevisionId]);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    beforeSaving() {
 | 
					 | 
				
			||||||
        super.beforeSaving();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        this.utcDateModified = dateUtils.utcNowDateTime();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    getPojo() {
 | 
					 | 
				
			||||||
        return {
 | 
					 | 
				
			||||||
            noteRevisionId: this.noteRevisionId,
 | 
					 | 
				
			||||||
            noteId: this.noteId,
 | 
					 | 
				
			||||||
            type: this.type,
 | 
					 | 
				
			||||||
            mime: this.mime,
 | 
					 | 
				
			||||||
            isProtected: this.isProtected,
 | 
					 | 
				
			||||||
            title: this.title,
 | 
					 | 
				
			||||||
            dateLastEdited: this.dateLastEdited,
 | 
					 | 
				
			||||||
            dateCreated: this.dateCreated,
 | 
					 | 
				
			||||||
            utcDateLastEdited: this.utcDateLastEdited,
 | 
					 | 
				
			||||||
            utcDateCreated: this.utcDateCreated,
 | 
					 | 
				
			||||||
            utcDateModified: this.utcDateModified,
 | 
					 | 
				
			||||||
            content: this.content,
 | 
					 | 
				
			||||||
            contentLength: this.contentLength
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    getPojoToSave() {
 | 
					 | 
				
			||||||
        const pojo = this.getPojo();
 | 
					 | 
				
			||||||
        delete pojo.content; // not getting persisted
 | 
					 | 
				
			||||||
        delete pojo.contentLength; // not getting persisted
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (pojo.isProtected) {
 | 
					 | 
				
			||||||
            if (protectedSessionService.isProtectedSessionAvailable()) {
 | 
					 | 
				
			||||||
                pojo.title = protectedSessionService.encrypt(this.title);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else {
 | 
					 | 
				
			||||||
                // updating protected note outside of protected session means we will keep original ciphertexts
 | 
					 | 
				
			||||||
                delete pojo.title;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return pojo;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = NoteRevision;
 | 
					 | 
				
			||||||
</code></pre>
 | 
					 | 
				
			||||||
        </article>
 | 
					 | 
				
			||||||
    </section>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<nav>
 | 
					 | 
				
			||||||
    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="sql%250A%250ATODO_%2520some%2520methods%2520(like%2520getValue())%2520could%2520use%2520raw%2520rowsmodule_.html">sql
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TODO: some methods (like getValue()) could use raw rows</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
					 | 
				
			||||||
</nav>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<br class="clear">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<footer>
 | 
					 | 
				
			||||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
 | 
					 | 
				
			||||||
</footer>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script> prettyPrint(); </script>
 | 
					 | 
				
			||||||
<script src="scripts/linenumber.js"> </script>
 | 
					 | 
				
			||||||
</body>
 | 
					 | 
				
			||||||
</html>
 | 
					 | 
				
			||||||
@@ -94,6 +94,82 @@
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					        <h3 class="subsection-title">Members</h3>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					<h4 class="name" id="api"><span class="type-signature"></span>api<span class="type-signature"> :<a href="BackendScriptApi.html">BackendScriptApi</a></span></h4>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div class="description">
 | 
				
			||||||
 | 
					    An instance of the frontend api available globally.
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <h5>Type:</h5>
 | 
				
			||||||
 | 
					    <ul>
 | 
				
			||||||
 | 
					        <li>
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					<span class="param-type"><a href="BackendScriptApi.html">BackendScriptApi</a></span>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </li>
 | 
				
			||||||
 | 
					    </ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<dl class="details">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <dt class="tag-source">Source:</dt>
 | 
				
			||||||
 | 
					    <dd class="tag-source"><ul class="dummy"><li>
 | 
				
			||||||
 | 
					        <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line32">line 32</a>
 | 
				
			||||||
 | 
					    </li></ul></dd>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</dl>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -102,262 +178,30 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
<h4 class="name" id="CreateNewNoteParams">CreateNewNoteParams</h4>
 | 
					<h4 class="name" id="AttributeType">AttributeType</h4>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div class="description">
 | 
				
			||||||
 | 
					    There are currently only two types of attributes, labels or relations.
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <h5>Type:</h5>
 | 
					    <h5>Type:</h5>
 | 
				
			||||||
    <ul>
 | 
					    <ul>
 | 
				
			||||||
        <li>
 | 
					        <li>
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
<span class="param-type">object</span>
 | 
					<span class="param-type">"label"</span>
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <h5 class="subsection-title">Properties:</h5>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<table class="props">
 | 
					 | 
				
			||||||
    <thead>
 | 
					 | 
				
			||||||
    <tr>
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        <th>Name</th>
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <th>Type</th>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <th class="last">Description</th>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
    </thead>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <tbody>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="name"><code>parentNoteId</code></td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="type">
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="description last">MANDATORY</td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="name"><code>title</code></td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="type">
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="description last">MANDATORY</td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="name"><code>content</code></td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="type">
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
|
 | 
					|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<span class="param-type">buffer</span>
 | 
					<span class="param-type">"relation"</span>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </li>
 | 
				
			||||||
 | 
					    </ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="description last">MANDATORY</td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="name"><code>type</code></td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="type">
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="description last">text, code, file, image, search, book, relation-map - MANDATORY</td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="name"><code>mime</code></td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="type">
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="description last">value is derived from default mimes for type</td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="name"><code>isProtected</code></td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="type">
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
<span class="param-type">boolean</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="description last">default is false</td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="name"><code>isExpanded</code></td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="type">
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
<span class="param-type">boolean</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="description last">default is false</td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="name"><code>prefix</code></td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="type">
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="description last">default is empty string</td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="name"><code>notePosition</code></td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="type">
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
<span class="param-type">int</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="description last">default is last existing notePosition in a parent + 10</td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    </tbody>
 | 
					 | 
				
			||||||
</table>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -391,7 +235,7 @@
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					    <dt class="tag-source">Source:</dt>
 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					    <dd class="tag-source"><ul class="dummy"><li>
 | 
				
			||||||
        <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line208">line 208</a>
 | 
					        <a href="becca_entities_battribute.js.html">becca/entities/battribute.js</a>, <a href="becca_entities_battribute.js.html#line11">line 11</a>
 | 
				
			||||||
    </li></ul></dd>
 | 
					    </li></ul></dd>
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -409,7 +253,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
<h4 class="name" id="CreateNoteAttribute">CreateNoteAttribute</h4>
 | 
					<h4 class="name" id="NotePathRecord">NotePathRecord</h4>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -420,7 +264,7 @@
 | 
				
			|||||||
    <ul>
 | 
					    <ul>
 | 
				
			||||||
        <li>
 | 
					        <li>
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
<span class="param-type">object</span>
 | 
					<span class="param-type">Object</span>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        </li>
 | 
					        </li>
 | 
				
			||||||
@@ -444,8 +288,6 @@
 | 
				
			|||||||
        <th>Type</th>
 | 
					        <th>Type</th>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        <th>Attributes</th>
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -458,20 +300,13 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        <tr>
 | 
					        <tr>
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
                <td class="name"><code>type</code></td>
 | 
					                <td class="name"><code>isArchived</code></td>
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <td class="type">
 | 
					            <td class="type">
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
<span class="param-type">string</span>
 | 
					<span class="param-type">boolean</span>
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="attributes">
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@@ -480,27 +315,21 @@
 | 
				
			|||||||
            
 | 
					            
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            <td class="description last">attribute type - label, relation etc.</td>
 | 
					
 | 
				
			||||||
 | 
					            <td class="description last"></td>
 | 
				
			||||||
        </tr>
 | 
					        </tr>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <tr>
 | 
					        <tr>
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
                <td class="name"><code>name</code></td>
 | 
					                <td class="name"><code>isInHoistedSubTree</code></td>
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <td class="type">
 | 
					            <td class="type">
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
<span class="param-type">string</span>
 | 
					<span class="param-type">boolean</span>
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="attributes">
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@@ -509,29 +338,21 @@
 | 
				
			|||||||
            
 | 
					            
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            <td class="description last">attribute name</td>
 | 
					
 | 
				
			||||||
 | 
					            <td class="description last"></td>
 | 
				
			||||||
        </tr>
 | 
					        </tr>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <tr>
 | 
					        <tr>
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
                <td class="name"><code>value</code></td>
 | 
					                <td class="name"><code>notePath</code></td>
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <td class="type">
 | 
					            <td class="type">
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
<span class="param-type">string</span>
 | 
					<span class="param-type">Array.<string></span>
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="attributes">
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                    <optional><br>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@@ -540,7 +361,31 @@
 | 
				
			|||||||
            
 | 
					            
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            <td class="description last">attribute value</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>
 | 
					        </tr>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@@ -579,7 +424,7 @@
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					    <dt class="tag-source">Source:</dt>
 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					    <dd class="tag-source"><ul class="dummy"><li>
 | 
				
			||||||
        <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line169">line 169</a>
 | 
					        <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line27">line 27</a>
 | 
				
			||||||
    </li></ul></dd>
 | 
					    </li></ul></dd>
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -597,18 +442,66 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
<h4 class="name" id="CreateNoteAttribute">CreateNoteAttribute</h4>
 | 
					<h4 class="name" id="NoteType">NoteType</h4>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div class="description">
 | 
				
			||||||
 | 
					    There are many different Note types, some of which are entirely opaque to the
 | 
				
			||||||
 | 
					end user. Those types should be used only for checking against, they are
 | 
				
			||||||
 | 
					not for direct use.
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <h5>Type:</h5>
 | 
					    <h5>Type:</h5>
 | 
				
			||||||
    <ul>
 | 
					    <ul>
 | 
				
			||||||
        <li>
 | 
					        <li>
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
<span class="param-type">object</span>
 | 
					<span class="param-type">"file"</span>
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<span class="param-type">"image"</span>
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<span class="param-type">"search"</span>
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<span class="param-type">"noteMap"</span>
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<span class="param-type">"launcher"</span>
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<span class="param-type">"doc"</span>
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<span class="param-type">"contentWidget"</span>
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<span class="param-type">"text"</span>
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<span class="param-type">"relationMap"</span>
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<span class="param-type">"render"</span>
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<span class="param-type">"canvas"</span>
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<span class="param-type">"mermaid"</span>
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<span class="param-type">"book"</span>
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<span class="param-type">"webView"</span>
 | 
				
			||||||
 | 
					|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<span class="param-type">"code"</span>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        </li>
 | 
					        </li>
 | 
				
			||||||
@@ -618,126 +511,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <h5 class="subsection-title">Properties:</h5>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<table class="props">
 | 
					 | 
				
			||||||
    <thead>
 | 
					 | 
				
			||||||
    <tr>
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        <th>Name</th>
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <th>Type</th>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        <th>Attributes</th>
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <th class="last">Description</th>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
    </thead>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <tbody>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="name"><code>type</code></td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="type">
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="attributes">
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="description last">attribute type - label, relation etc.</td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="name"><code>name</code></td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="type">
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="attributes">
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="description last">attribute name</td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="name"><code>value</code></td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="type">
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="attributes">
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                    <optional><br>
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="description last">attribute value</td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    </tbody>
 | 
					 | 
				
			||||||
</table>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					<dl class="details">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@@ -767,7 +540,7 @@
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					    <dt class="tag-source">Source:</dt>
 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					    <dd class="tag-source"><ul class="dummy"><li>
 | 
				
			||||||
        <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line229">line 229</a>
 | 
					        <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line20">line 20</a>
 | 
				
			||||||
    </li></ul></dd>
 | 
					    </li></ul></dd>
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -785,18 +558,22 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
<h4 class="name" id="CreateNoteExtraOptions">CreateNoteExtraOptions</h4>
 | 
					<h4 class="name" id="int">int</h4>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div class="description">
 | 
				
			||||||
 | 
					    A whole number
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <h5>Type:</h5>
 | 
					    <h5>Type:</h5>
 | 
				
			||||||
    <ul>
 | 
					    <ul>
 | 
				
			||||||
        <li>
 | 
					        <li>
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
<span class="param-type">object</span>
 | 
					<span class="param-type">number</span>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        </li>
 | 
					        </li>
 | 
				
			||||||
@@ -806,224 +583,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <h5 class="subsection-title">Properties:</h5>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<table class="props">
 | 
					 | 
				
			||||||
    <thead>
 | 
					 | 
				
			||||||
    <tr>
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        <th>Name</th>
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <th>Type</th>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        <th>Attributes</th>
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        <th>Default</th>
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <th class="last">Description</th>
 | 
					 | 
				
			||||||
    </tr>
 | 
					 | 
				
			||||||
    </thead>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <tbody>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="name"><code>json</code></td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="type">
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
<span class="param-type">boolean</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="attributes">
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                    <optional><br>
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="default">
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                    false
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="description last">should the note be JSON</td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="name"><code>isProtected</code></td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="type">
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
<span class="param-type">boolean</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="attributes">
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                    <optional><br>
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="default">
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                    false
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="description last">should the note be protected</td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="name"><code>type</code></td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="type">
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="attributes">
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                    <optional><br>
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="default">
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                    'text'
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="description last">note type</td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="name"><code>mime</code></td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="type">
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
<span class="param-type">string</span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="attributes">
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                    <optional><br>
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="default">
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                    'text/html'
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="description last">MIME type of the note</td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <tr>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="name"><code>attributes</code></td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="type">
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
<span class="param-type">Array.<<a href="global.html#CreateNoteAttribute">CreateNoteAttribute</a>></span>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </td>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="attributes">
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                    <optional><br>
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <td class="default">
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                    []
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                </td>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <td class="description last">attributes to be created for this note</td>
 | 
					 | 
				
			||||||
        </tr>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    </tbody>
 | 
					 | 
				
			||||||
</table>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="details">
 | 
					<dl class="details">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@@ -1053,7 +612,7 @@
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    <dt class="tag-source">Source:</dt>
 | 
					    <dt class="tag-source">Source:</dt>
 | 
				
			||||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
					    <dd class="tag-source"><ul class="dummy"><li>
 | 
				
			||||||
        <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line236">line 236</a>
 | 
					        <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line27">line 27</a>
 | 
				
			||||||
    </li></ul></dd>
 | 
					    </li></ul></dd>
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1083,15 +642,13 @@
 | 
				
			|||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<nav>
 | 
					<nav>
 | 
				
			||||||
    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="sql%250A%250ATODO_%2520some%2520methods%2520(like%2520getValue())%2520could%2520use%2520raw%2520rowsmodule_.html">sql
 | 
					    <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>
 | 
				
			||||||
 | 
					 | 
				
			||||||
TODO: some methods (like getValue()) could use raw rows</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
					 | 
				
			||||||
</nav>
 | 
					</nav>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<br class="clear">
 | 
					<br class="clear">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<footer>
 | 
					<footer>
 | 
				
			||||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
 | 
					    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
				
			||||||
</footer>
 | 
					</footer>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script> prettyPrint(); </script>
 | 
					<script> prettyPrint(); </script>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,15 +50,13 @@
 | 
				
			|||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<nav>
 | 
					<nav>
 | 
				
			||||||
    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="sql%250A%250ATODO_%2520some%2520methods%2520(like%2520getValue())%2520could%2520use%2520raw%2520rowsmodule_.html">sql
 | 
					    <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>
 | 
				
			||||||
 | 
					 | 
				
			||||||
TODO: some methods (like getValue()) could use raw rows</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
					 | 
				
			||||||
</nav>
 | 
					</nav>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<br class="clear">
 | 
					<br class="clear">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<footer>
 | 
					<footer>
 | 
				
			||||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
 | 
					    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
				
			||||||
</footer>
 | 
					</footer>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script> prettyPrint(); </script>
 | 
					<script> prettyPrint(); </script>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1309
									
								
								docs/backend_api/module-sql.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1309
									
								
								docs/backend_api/module-sql.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -42,37 +42,71 @@ const appInfo = require('./app_info');
 | 
				
			|||||||
const searchService = require('./search/services/search');
 | 
					const searchService = require('./search/services/search');
 | 
				
			||||||
const SearchContext = require("./search/search_context");
 | 
					const SearchContext = require("./search/search_context");
 | 
				
			||||||
const becca = require("../becca/becca");
 | 
					const becca = require("../becca/becca");
 | 
				
			||||||
 | 
					const ws = require("./ws");
 | 
				
			||||||
 | 
					const SpacedUpdate = require("./spaced_update");
 | 
				
			||||||
 | 
					const specialNotesService = require("./special_notes");
 | 
				
			||||||
 | 
					const branchService = require("./branches");
 | 
				
			||||||
 | 
					const exportService = require("./export/zip");
 | 
				
			||||||
 | 
					const syncMutex = require("./sync_mutex");
 | 
				
			||||||
 | 
					const backupService = require("./backup");
 | 
				
			||||||
 | 
					const optionsService = require("./options");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * This is the main backend API interface for scripts. It's published in the local "api" object.
 | 
					 * A whole number
 | 
				
			||||||
 | 
					 * @typedef {number} int
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * An instance of the frontend api available globally.
 | 
				
			||||||
 | 
					 * @global
 | 
				
			||||||
 | 
					 * @var {BackendScriptApi} api
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * <p>This is the main backend API interface for scripts. All the properties and methods are published in the "api" object
 | 
				
			||||||
 | 
					 * available in the JS backend notes. You can use e.g. <code>api.log(api.startNote.title);</code></p>
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @constructor
 | 
					 * @constructor
 | 
				
			||||||
 * @hideconstructor
 | 
					 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
function BackendScriptApi(currentNote, apiParams) {
 | 
					function BackendScriptApi(currentNote, apiParams) {
 | 
				
			||||||
    /** @property {Note} note where script started executing */
 | 
					    /**
 | 
				
			||||||
 | 
					     * Note where the script started executing
 | 
				
			||||||
 | 
					     * @type {BNote}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    this.startNote = apiParams.startNote;
 | 
					    this.startNote = apiParams.startNote;
 | 
				
			||||||
    /** @property {Note} note where script is currently executing. Don't mix this up with concept of active note */
 | 
					    /**
 | 
				
			||||||
 | 
					     * Note where the script is currently executing. Don't mix this up with the concept of active note
 | 
				
			||||||
 | 
					     * @type {BNote}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    this.currentNote = currentNote;
 | 
					    this.currentNote = currentNote;
 | 
				
			||||||
    /** @property {Entity} entity whose event triggered this executions */
 | 
					    /**
 | 
				
			||||||
 | 
					     * Entity whose event triggered this execution
 | 
				
			||||||
 | 
					     * @type {AbstractBeccaEntity}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    this.originEntity = apiParams.originEntity;
 | 
					    this.originEntity = apiParams.originEntity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (const key in apiParams) {
 | 
					    for (const key in apiParams) {
 | 
				
			||||||
        this[key] = apiParams[key];
 | 
					        this[key] = apiParams[key];
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /** @property {axios} Axios library for HTTP requests. See https://axios-http.com/ for documentation */
 | 
					    /**
 | 
				
			||||||
 | 
					     * Axios library for HTTP requests. See {@link https://axios-http.com} for documentation
 | 
				
			||||||
 | 
					     * @type {axios}
 | 
				
			||||||
 | 
					     * @deprecated use native (browser compatible) fetch() instead
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    this.axios = axios;
 | 
					    this.axios = axios;
 | 
				
			||||||
    /** @property {dayjs} day.js library for date manipulation. See https://day.js.org/ for documentation */
 | 
					    /**
 | 
				
			||||||
 | 
					     * day.js library for date manipulation. See {@link https://day.js.org} for documentation
 | 
				
			||||||
 | 
					     * @type {dayjs}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    this.dayjs = dayjs;
 | 
					    this.dayjs = dayjs;
 | 
				
			||||||
    /** @property {axios} xml2js library for XML parsing. See https://github.com/Leonidas-from-XIV/node-xml2js for documentation */
 | 
					    /**
 | 
				
			||||||
 | 
					     * xml2js library for XML parsing. See {@link https://github.com/Leonidas-from-XIV/node-xml2js} for documentation
 | 
				
			||||||
 | 
					     * @type {xml2js}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    this.xml2js = xml2js;
 | 
					    this.xml2js = xml2js;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // DEPRECATED - use direct api.unescapeHtml
 | 
					 | 
				
			||||||
    this.utils = {
 | 
					 | 
				
			||||||
        unescapeHtml: utils.unescapeHtml
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Instance name identifies particular Trilium instance. It can be useful for scripts
 | 
					     * Instance name identifies particular Trilium instance. It can be useful for scripts
 | 
				
			||||||
     * if some action needs to happen on only one specific instance.
 | 
					     * if some action needs to happen on only one specific instance.
 | 
				
			||||||
@@ -84,32 +118,79 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @method
 | 
					     * @method
 | 
				
			||||||
     * @param {string} noteId
 | 
					     * @param {string} noteId
 | 
				
			||||||
     * @returns {Note|null}
 | 
					     * @returns {BNote|null}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.getNote = noteId => becca.getNote(noteId);
 | 
					    this.getNote = noteId => becca.getNote(noteId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @method
 | 
					     * @method
 | 
				
			||||||
     * @param {string} branchId
 | 
					     * @param {string} branchId
 | 
				
			||||||
     * @returns {Branch|null}
 | 
					     * @returns {BBranch|null}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.getBranch = branchId => becca.getBranch(branchId);
 | 
					    this.getBranch = branchId => becca.getBranch(branchId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @method
 | 
					     * @method
 | 
				
			||||||
     * @param {string} attributeId
 | 
					     * @param {string} attributeId
 | 
				
			||||||
     * @returns {Attribute|null}
 | 
					     * @returns {BAttribute|null}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    this.getAttribute = attributeId => becca.getAttribute(attributeId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @method
 | 
				
			||||||
 | 
					     * @param {string} attachmentId
 | 
				
			||||||
 | 
					     * @returns {BAttachment|null}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    this.getAttachment = attachmentId => becca.getAttachment(attachmentId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @method
 | 
				
			||||||
 | 
					     * @param {string} revisionId
 | 
				
			||||||
 | 
					     * @returns {BRevision|null}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    this.getRevision = revisionId => becca.getRevision(revisionId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @method
 | 
				
			||||||
 | 
					     * @param {string} etapiTokenId
 | 
				
			||||||
 | 
					     * @returns {BEtapiToken|null}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    this.getEtapiToken = etapiTokenId => becca.getEtapiToken(etapiTokenId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @method
 | 
				
			||||||
 | 
					     * @returns {BEtapiToken[]}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    this.getEtapiTokens = () => becca.getEtapiTokens();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @method
 | 
				
			||||||
 | 
					     * @param {string} optionName
 | 
				
			||||||
 | 
					     * @returns {BOption|null}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    this.getOption = optionName => becca.getOption(optionName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @method
 | 
				
			||||||
 | 
					     * @returns {BOption[]}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    this.getOptions = () => optionsService.getOptions();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @method
 | 
				
			||||||
 | 
					     * @param {string} attributeId
 | 
				
			||||||
 | 
					     * @returns {BAttribute|null}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.getAttribute = attributeId => becca.getAttribute(attributeId);
 | 
					    this.getAttribute = attributeId => becca.getAttribute(attributeId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * This is a powerful search method - you can search by attributes and their values, e.g.:
 | 
					     * This is a powerful search method - you can search by attributes and their values, e.g.:
 | 
				
			||||||
     * "#dateModified =* MONTH AND #log". See full documentation for all options at: https://github.com/zadam/trilium/wiki/Search
 | 
					     * "#dateModified =* MONTH AND #log". See {@link https://github.com/zadam/trilium/wiki/Search} for full documentation for all options
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @method
 | 
					     * @method
 | 
				
			||||||
     * @param {string} query
 | 
					     * @param {string} query
 | 
				
			||||||
     * @param {Object} [searchParams]
 | 
					     * @param {Object} [searchParams]
 | 
				
			||||||
     * @returns {Note[]}
 | 
					     * @returns {BNote[]}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.searchForNotes = (query, searchParams = {}) => {
 | 
					    this.searchForNotes = (query, searchParams = {}) => {
 | 
				
			||||||
        if (searchParams.includeArchivedNotes === undefined) {
 | 
					        if (searchParams.includeArchivedNotes === undefined) {
 | 
				
			||||||
@@ -128,12 +209,12 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * This is a powerful search method - you can search by attributes and their values, e.g.:
 | 
					     * This is a powerful search method - you can search by attributes and their values, e.g.:
 | 
				
			||||||
     * "#dateModified =* MONTH AND #log". See full documentation for all options at: https://github.com/zadam/trilium/wiki/Search
 | 
					     * "#dateModified =* MONTH AND #log". See {@link https://github.com/zadam/trilium/wiki/Search} for full documentation for all options
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @method
 | 
					     * @method
 | 
				
			||||||
     * @param {string} query
 | 
					     * @param {string} query
 | 
				
			||||||
     * @param {Object} [searchParams]
 | 
					     * @param {Object} [searchParams]
 | 
				
			||||||
     * @returns {Note|null}
 | 
					     * @returns {BNote|null}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.searchForNote = (query, searchParams = {}) => {
 | 
					    this.searchForNote = (query, searchParams = {}) => {
 | 
				
			||||||
        const notes = this.searchForNotes(query, searchParams);
 | 
					        const notes = this.searchForNotes(query, searchParams);
 | 
				
			||||||
@@ -147,7 +228,7 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
				
			|||||||
     * @method
 | 
					     * @method
 | 
				
			||||||
     * @param {string} name - attribute name
 | 
					     * @param {string} name - attribute name
 | 
				
			||||||
     * @param {string} [value] - attribute value
 | 
					     * @param {string} [value] - attribute value
 | 
				
			||||||
     * @returns {Note[]}
 | 
					     * @returns {BNote[]}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.getNotesWithLabel = attributeService.getNotesWithLabel;
 | 
					    this.getNotesWithLabel = attributeService.getNotesWithLabel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -157,23 +238,23 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
				
			|||||||
     * @method
 | 
					     * @method
 | 
				
			||||||
     * @param {string} name - attribute name
 | 
					     * @param {string} name - attribute name
 | 
				
			||||||
     * @param {string} [value] - attribute value
 | 
					     * @param {string} [value] - attribute value
 | 
				
			||||||
     * @returns {Note|null}
 | 
					     * @returns {BNote|null}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.getNoteWithLabel = attributeService.getNoteWithLabel;
 | 
					    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
 | 
					     * @method
 | 
				
			||||||
     * @param {string} noteId
 | 
					     * @param {string} noteId
 | 
				
			||||||
     * @param {string} parentNoteId
 | 
					     * @param {string} parentNoteId
 | 
				
			||||||
     * @param {string} prefix - if branch will be create between note and parent note, set this prefix
 | 
					     * @param {string} prefix - if branch is created between note and parent note, set this prefix
 | 
				
			||||||
     * @returns {void}
 | 
					     * @returns {{branch: BBranch|null}}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.ensureNoteIsPresentInParent = cloningService.ensureNoteIsPresentInParent;
 | 
					    this.ensureNoteIsPresentInParent = cloningService.ensureNoteIsPresentInParent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * If there's a branch between note and parent note, remove it. Otherwise do nothing.
 | 
					     * If there's a branch between note and parent note, remove it. Otherwise, do nothing.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @method
 | 
					     * @method
 | 
				
			||||||
     * @param {string} noteId
 | 
					     * @param {string} noteId
 | 
				
			||||||
@@ -189,25 +270,19 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
				
			|||||||
     * @param {boolean} present - true if we want the branch to exist, false if we want it gone
 | 
					     * @param {boolean} present - true if we want the branch to exist, false if we want it gone
 | 
				
			||||||
     * @param {string} noteId
 | 
					     * @param {string} noteId
 | 
				
			||||||
     * @param {string} parentNoteId
 | 
					     * @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}
 | 
					     * @returns {void}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.toggleNoteInParent = cloningService.toggleNoteInParent;
 | 
					    this.toggleNoteInParent = cloningService.toggleNoteInParent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * @typedef {object} CreateNoteAttribute
 | 
					 | 
				
			||||||
     * @property {string} type - attribute type - label, relation etc.
 | 
					 | 
				
			||||||
     * @property {string} name - attribute name
 | 
					 | 
				
			||||||
     * @property {string} [value] - attribute value
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Create text note. See also createNewNote() for more options.
 | 
					     * Create text note. See also createNewNote() for more options.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 | 
					     * @method
 | 
				
			||||||
     * @param {string} parentNoteId
 | 
					     * @param {string} parentNoteId
 | 
				
			||||||
     * @param {string} title
 | 
					     * @param {string} title
 | 
				
			||||||
     * @param {string} content
 | 
					     * @param {string} content
 | 
				
			||||||
     * @return {{note: Note, branch: Branch}} - object having "note" and "branch" keys representing respective objects
 | 
					     * @returns {{note: BNote, branch: BBranch}} - object having "note" and "branch" keys representing respective objects
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.createTextNote = (parentNoteId, title, content = '') => noteService.createNewNote({
 | 
					    this.createTextNote = (parentNoteId, title, content = '') => noteService.createNewNote({
 | 
				
			||||||
        parentNoteId,
 | 
					        parentNoteId,
 | 
				
			||||||
@@ -220,10 +295,11 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
				
			|||||||
     * Create data note - data in this context means object serializable to JSON. Created note will be of type 'code' and
 | 
					     * Create data note - data in this context means object serializable to JSON. Created note will be of type 'code' and
 | 
				
			||||||
     * JSON MIME type. See also createNewNote() for more options.
 | 
					     * JSON MIME type. See also createNewNote() for more options.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 | 
					     * @method
 | 
				
			||||||
     * @param {string} parentNoteId
 | 
					     * @param {string} parentNoteId
 | 
				
			||||||
     * @param {string} title
 | 
					     * @param {string} title
 | 
				
			||||||
     * @param {object} content
 | 
					     * @param {object} content
 | 
				
			||||||
     * @return {{note: Note, branch: Branch}} object having "note" and "branch" keys representing respective objects
 | 
					     * @returns {{note: BNote, branch: BBranch}} object having "note" and "branch" keys representing respective objects
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.createDataNote = (parentNoteId, title, content = {}) => noteService.createNewNote({
 | 
					    this.createDataNote = (parentNoteId, title, content = {}) => noteService.createNewNote({
 | 
				
			||||||
        parentNoteId,
 | 
					        parentNoteId,
 | 
				
			||||||
@@ -233,43 +309,23 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
				
			|||||||
        mime: 'application/json'
 | 
					        mime: 'application/json'
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * @typedef {object} CreateNewNoteParams
 | 
					 | 
				
			||||||
     * @property {string} parentNoteId - MANDATORY
 | 
					 | 
				
			||||||
     * @property {string} title - MANDATORY
 | 
					 | 
				
			||||||
     * @property {string|buffer} content - MANDATORY
 | 
					 | 
				
			||||||
     * @property {string} type - text, code, file, image, search, book, relation-map - MANDATORY
 | 
					 | 
				
			||||||
     * @property {string} mime - value is derived from default mimes for type
 | 
					 | 
				
			||||||
     * @property {boolean} isProtected - default is false
 | 
					 | 
				
			||||||
     * @property {boolean} isExpanded - default is false
 | 
					 | 
				
			||||||
     * @property {string} prefix - default is empty string
 | 
					 | 
				
			||||||
     * @property {int} notePosition - default is last existing notePosition in a parent + 10
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @method
 | 
					     * @method
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param {CreateNewNoteParams} [params]
 | 
					     * @param {object} params
 | 
				
			||||||
     * @returns {{note: Note, branch: Branch}} object contains newly created entities note and branch
 | 
					     * @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;
 | 
					    this.createNewNote = noteService.createNewNote;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * @typedef {object} CreateNoteAttribute
 | 
					 | 
				
			||||||
     * @property {string} type - attribute type - label, relation etc.
 | 
					 | 
				
			||||||
     * @property {string} name - attribute name
 | 
					 | 
				
			||||||
     * @property {string} [value] - attribute value
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * @typedef {object} CreateNoteExtraOptions
 | 
					 | 
				
			||||||
     * @property {boolean} [json=false] - should the note be JSON
 | 
					 | 
				
			||||||
     * @property {boolean} [isProtected=false] - should the note be protected
 | 
					 | 
				
			||||||
     * @property {string} [type='text'] - note type
 | 
					 | 
				
			||||||
     * @property {string} [mime='text/html'] - MIME type of the note
 | 
					 | 
				
			||||||
     * @property {CreateNoteAttribute[]} [attributes=[]] - attributes to be created for this note
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @method
 | 
					     * @method
 | 
				
			||||||
     * @deprecated please use createTextNote() with similar API for simpler use cases or createNewNote() for more complex needs
 | 
					     * @deprecated please use createTextNote() with similar API for simpler use cases or createNewNote() for more complex needs
 | 
				
			||||||
@@ -277,8 +333,16 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
				
			|||||||
     * @param {string} parentNoteId - create new note under this parent
 | 
					     * @param {string} parentNoteId - create new note under this parent
 | 
				
			||||||
     * @param {string} title
 | 
					     * @param {string} title
 | 
				
			||||||
     * @param {string} [content=""]
 | 
					     * @param {string} [content=""]
 | 
				
			||||||
     * @param {CreateNoteExtraOptions} [extraOptions={}]
 | 
					     * @param {object} [extraOptions={}]
 | 
				
			||||||
     * @returns {{note: Note, branch: Branch}} object contains newly created entities note and branch
 | 
					     * @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= {}) => {
 | 
					    this.createNote = (parentNoteId, title, content = "", extraOptions= {}) => {
 | 
				
			||||||
        extraOptions.parentNoteId = parentNoteId;
 | 
					        extraOptions.parentNoteId = parentNoteId;
 | 
				
			||||||
@@ -286,7 +350,7 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        const parentNote = becca.getNote(parentNoteId);
 | 
					        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.type = parentNote.type === 'code' ? 'code' : 'text';
 | 
				
			||||||
        extraOptions.mime = parentNote.type === 'code' ? parentNote.mime : 'text/html';
 | 
					        extraOptions.mime = parentNote.type === 'code' ? parentNote.mime : 'text/html';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -316,18 +380,42 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
				
			|||||||
        });
 | 
					        });
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.logMessages = {};
 | 
				
			||||||
 | 
					    this.logSpacedUpdates = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Log given message to trilium logs.
 | 
					     * Log given message to trilium logs and log pane in UI
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 | 
					     * @method
 | 
				
			||||||
     * @param message
 | 
					     * @param message
 | 
				
			||||||
 | 
					     * @returns {void}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.log = message => log.info(`Script "${currentNote.title}" (${currentNote.noteId}): ${message}`);
 | 
					    this.log = message => {
 | 
				
			||||||
 | 
					        log.info(message);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const {noteId} = this.startNote;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.logMessages[noteId] = this.logMessages[noteId] || [];
 | 
				
			||||||
 | 
					        this.logSpacedUpdates[noteId] = this.logSpacedUpdates[noteId] || new SpacedUpdate(() => {
 | 
				
			||||||
 | 
					            const messages = this.logMessages[noteId];
 | 
				
			||||||
 | 
					            this.logMessages[noteId] = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ws.sendMessageToAllClients({
 | 
				
			||||||
 | 
					                type: 'api-log-messages',
 | 
				
			||||||
 | 
					                noteId,
 | 
				
			||||||
 | 
					                messages
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }, 100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.logMessages[noteId].push(message);
 | 
				
			||||||
 | 
					        this.logSpacedUpdates[noteId].scheduleUpdate();
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Returns root note of the calendar.
 | 
					     * Returns root note of the calendar.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @method
 | 
					     * @method
 | 
				
			||||||
     * @returns {Note|null}
 | 
					     * @returns {BNote|null}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.getRootCalendarNote = dateNoteService.getRootCalendarNote;
 | 
					    this.getRootCalendarNote = dateNoteService.getRootCalendarNote;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -336,15 +424,17 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
				
			|||||||
     *
 | 
					     *
 | 
				
			||||||
     * @method
 | 
					     * @method
 | 
				
			||||||
     * @param {string} date in YYYY-MM-DD format
 | 
					     * @param {string} date in YYYY-MM-DD format
 | 
				
			||||||
     * @returns {Note|null}
 | 
					     * @param {BNote} [rootNote] - specify calendar root note, normally leave empty to use the default calendar
 | 
				
			||||||
 | 
					     * @returns {BNote|null}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.getDateNote = dateNoteService.getDateNote;
 | 
					    this.getDayNote = dateNoteService.getDayNote;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Returns today's day note. If such note doesn't exist, it is created.
 | 
					     * Returns today's day note. If such note doesn't exist, it is created.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @method
 | 
					     * @method
 | 
				
			||||||
     * @returns {Note|null}
 | 
					     * @param {BNote} [rootNote] - specify calendar root note, normally leave empty to use the default calendar
 | 
				
			||||||
 | 
					     * @returns {BNote|null}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.getTodayNote = dateNoteService.getTodayNote;
 | 
					    this.getTodayNote = dateNoteService.getTodayNote;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -353,34 +443,51 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
				
			|||||||
     *
 | 
					     *
 | 
				
			||||||
     * @method
 | 
					     * @method
 | 
				
			||||||
     * @param {string} date in YYYY-MM-DD format
 | 
					     * @param {string} date in YYYY-MM-DD format
 | 
				
			||||||
     * @param {object} options - "startOfTheWeek" - either "monday" (default) or "sunday"
 | 
					     * @param {object} [options]
 | 
				
			||||||
     * @returns {Note|null}
 | 
					     * @param {string} [options.startOfTheWeek=monday] - either "monday" (default) or "sunday"
 | 
				
			||||||
 | 
					     * @param {BNote} [rootNote] - specify calendar root note, normally leave empty to use the default calendar
 | 
				
			||||||
 | 
					     * @returns {BNote|null}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.getWeekNote = dateNoteService.getWeekNote;
 | 
					    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
 | 
					     * @method
 | 
				
			||||||
     * @param {string} date in YYYY-MM format
 | 
					     * @param {string} date in YYYY-MM format
 | 
				
			||||||
     * @returns {Note|null}
 | 
					     * @param {BNote} [rootNote] - specify calendar root note, normally leave empty to use the default calendar
 | 
				
			||||||
 | 
					     * @returns {BNote|null}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.getMonthNote = dateNoteService.getMonthNote;
 | 
					    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
 | 
					     * @method
 | 
				
			||||||
     * @param {string} year in YYYY format
 | 
					     * @param {string} year in YYYY format
 | 
				
			||||||
     * @returns {Note|null}
 | 
					     * @param {BNote} [rootNote] - specify calendar root note, normally leave empty to use the default calendar
 | 
				
			||||||
 | 
					     * @returns {BNote|null}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.getYearNote = dateNoteService.getYearNote;
 | 
					    this.getYearNote = dateNoteService.getYearNote;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 | 
					     * Sort child notes of a given note.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
     * @method
 | 
					     * @method
 | 
				
			||||||
     * @param {string} parentNoteId - this note's child notes will be sorted
 | 
					     * @param {string} parentNoteId - this note's child notes will be sorted
 | 
				
			||||||
 | 
					     * @param {object} [sortConfig]
 | 
				
			||||||
 | 
					     * @param {string} [sortConfig.sortBy=title] - 'title', 'dateCreated', 'dateModified' or a label name
 | 
				
			||||||
 | 
					     *                                See {@link https://github.com/zadam/trilium/wiki/Sorting} for details.
 | 
				
			||||||
 | 
					     * @param {boolean} [sortConfig.reverse=false]
 | 
				
			||||||
 | 
					     * @param {boolean} [sortConfig.foldersFirst=false]
 | 
				
			||||||
 | 
					     * @returns {void}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.sortNotesByTitle = parentNoteId => treeService.sortNotes(parentNoteId);
 | 
					    this.sortNotes = (parentNoteId, sortConfig = {}) => treeService.sortNotes(
 | 
				
			||||||
 | 
					        parentNoteId,
 | 
				
			||||||
 | 
					        sortConfig.sortBy || "title",
 | 
				
			||||||
 | 
					        !!sortConfig.reverse,
 | 
				
			||||||
 | 
					        !!sortConfig.foldersFirst
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * This method finds note by its noteId and prefix and either sets it to the given parentNoteId
 | 
					     * This method finds note by its noteId and prefix and either sets it to the given parentNoteId
 | 
				
			||||||
@@ -389,10 +496,11 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
				
			|||||||
     * This method looks similar to toggleNoteInParent() but differs because we're looking up branch by prefix.
 | 
					     * This method looks similar to toggleNoteInParent() but differs because we're looking up branch by prefix.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @method
 | 
					     * @method
 | 
				
			||||||
     * @deprecated - this method is pretty confusing and serves specialized purpose only
 | 
					     * @deprecated this method is pretty confusing and serves specialized purpose only
 | 
				
			||||||
     * @param {string} noteId
 | 
					     * @param {string} noteId
 | 
				
			||||||
     * @param {string} prefix
 | 
					     * @param {string} prefix
 | 
				
			||||||
     * @param {string|null} parentNoteId
 | 
					     * @param {string|null} parentNoteId
 | 
				
			||||||
 | 
					     * @returns {void}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.setNoteToParent = treeService.setNoteToParent;
 | 
					    this.setNoteToParent = treeService.setNoteToParent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -402,7 +510,7 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
				
			|||||||
     *
 | 
					     *
 | 
				
			||||||
     * @method
 | 
					     * @method
 | 
				
			||||||
     * @param {function} func
 | 
					     * @param {function} func
 | 
				
			||||||
     * @returns {?} result of func callback
 | 
					     * @returns {any} result of func callback
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.transactional = sql.transactional;
 | 
					    this.transactional = sql.transactional;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -410,7 +518,7 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
				
			|||||||
     * Return randomly generated string of given length. This random string generation is NOT cryptographically secure.
 | 
					     * Return randomly generated string of given length. This random string generation is NOT cryptographically secure.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @method
 | 
					     * @method
 | 
				
			||||||
     * @param {number} length of the string
 | 
					     * @param {int} length of the string
 | 
				
			||||||
     * @returns {string} random string
 | 
					     * @returns {string} random string
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.randomString = utils.randomString;
 | 
					    this.randomString = utils.randomString;
 | 
				
			||||||
@@ -430,20 +538,175 @@ function BackendScriptApi(currentNote, apiParams) {
 | 
				
			|||||||
    this.unescapeHtml = utils.unescapeHtml;
 | 
					    this.unescapeHtml = utils.unescapeHtml;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @property {module:sql} sql
 | 
					     * sql
 | 
				
			||||||
 | 
					     * @type {module:sql}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.sql = sql;
 | 
					    this.sql = sql;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @method
 | 
					     * @method
 | 
				
			||||||
     * @deprecated - this is now no-op since all the changes should be gracefully handled per widget
 | 
					     * @returns {{syncVersion, appVersion, buildRevision, dbVersion, dataDirectory, buildDate}|*} - object representing basic info about running Trilium version
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.refreshTree = () => {};
 | 
					    this.getAppInfo = () => appInfo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @return {{syncVersion, appVersion, buildRevision, dbVersion, dataDirectory, buildDate}|*} - object representing basic info about running Trilium version
 | 
					     * Creates a new launcher to the launchbar. If the launcher (id) already exists, it will be updated.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @method
 | 
				
			||||||
 | 
					     * @param {object} opts
 | 
				
			||||||
 | 
					     * @param {string} opts.id - id of the launcher, only alphanumeric at least 6 characters long
 | 
				
			||||||
 | 
					     * @param {"note" | "script" | "customWidget"} opts.type - one of
 | 
				
			||||||
 | 
					     *                          * "note" - activating the launcher will navigate to the target note (specified in targetNoteId param)
 | 
				
			||||||
 | 
					     *                          * "script" -  activating the launcher will execute the script (specified in scriptNoteId param)
 | 
				
			||||||
 | 
					     *                          * "customWidget" - the launcher will be rendered with a custom widget (specified in widgetNoteId param)
 | 
				
			||||||
 | 
					     * @param {string} opts.title
 | 
				
			||||||
 | 
					     * @param {boolean} [opts.isVisible=false] - if true, will be created in the "Visible launchers", otherwise in "Available launchers"
 | 
				
			||||||
 | 
					     * @param {string} [opts.icon] - name of the boxicon to be used (e.g. "bx-time")
 | 
				
			||||||
 | 
					     * @param {string} [opts.keyboardShortcut] - will activate the target note/script upon pressing, e.g. "ctrl+e"
 | 
				
			||||||
 | 
					     * @param {string} [opts.targetNoteId] - for type "note"
 | 
				
			||||||
 | 
					     * @param {string} [opts.scriptNoteId] - for type "script"
 | 
				
			||||||
 | 
					     * @param {string} [opts.widgetNoteId] - for type "customWidget"
 | 
				
			||||||
 | 
					     * @returns {{note: BNote}}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this.getAppInfo = () => appInfo
 | 
					    this.createOrUpdateLauncher = opts => {
 | 
				
			||||||
 | 
					        if (!opts.id) { throw new Error("ID is a mandatory parameter for api.createOrUpdateLauncher(opts)"); }
 | 
				
			||||||
 | 
					        if (!opts.id.match(/[a-z0-9]{6,1000}/i)) { throw new Error(`ID must be an alphanumeric string at least 6 characters long.`); }
 | 
				
			||||||
 | 
					        if (!opts.type) { throw new Error("Launcher Type is a mandatory parameter for api.createOrUpdateLauncher(opts)"); }
 | 
				
			||||||
 | 
					        if (!["note", "script", "customWidget"].includes(opts.type)) { throw new Error(`Given launcher type '${opts.type}'`); }
 | 
				
			||||||
 | 
					        if (!opts.title?.trim()) { throw new Error("Title is a mandatory parameter for api.createOrUpdateLauncher(opts)"); }
 | 
				
			||||||
 | 
					        if (opts.type === 'note' && !opts.targetNoteId) { throw new Error("targetNoteId is mandatory for launchers of type 'note'"); }
 | 
				
			||||||
 | 
					        if (opts.type === 'script' && !opts.scriptNoteId) { throw new Error("scriptNoteId is mandatory for launchers of type 'script'"); }
 | 
				
			||||||
 | 
					        if (opts.type === 'customWidget' && !opts.widgetNoteId) { throw new Error("widgetNoteId is mandatory for launchers of type 'customWidget'"); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const parentNoteId = opts.isVisible ? '_lbVisibleLaunchers' : '_lbAvailableLaunchers';
 | 
				
			||||||
 | 
					        const noteId = 'al_' + opts.id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const launcherNote =
 | 
				
			||||||
 | 
					            becca.getNote(noteId) ||
 | 
				
			||||||
 | 
					            specialNotesService.createLauncher({
 | 
				
			||||||
 | 
					                noteId: noteId,
 | 
				
			||||||
 | 
					                parentNoteId: parentNoteId,
 | 
				
			||||||
 | 
					                launcherType: opts.type,
 | 
				
			||||||
 | 
					            }).note;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (launcherNote.title !== opts.title) {
 | 
				
			||||||
 | 
					            launcherNote.title = opts.title;
 | 
				
			||||||
 | 
					            launcherNote.save();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (launcherNote.getParentBranches().length === 1) {
 | 
				
			||||||
 | 
					            const branch = launcherNote.getParentBranches()[0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (branch.parentNoteId !== parentNoteId) {
 | 
				
			||||||
 | 
					                branchService.moveBranchToNote(branch, parentNoteId);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (opts.type === 'note') {
 | 
				
			||||||
 | 
					            launcherNote.setRelation('target', opts.targetNoteId);
 | 
				
			||||||
 | 
					        } else if (opts.type === 'script') {
 | 
				
			||||||
 | 
					            launcherNote.setRelation('script', opts.scriptNoteId);
 | 
				
			||||||
 | 
					        } else if (opts.type === 'customWidget') {
 | 
				
			||||||
 | 
					            launcherNote.setRelation('widget', opts.widgetNoteId);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            throw new Error(`Unrecognized launcher type '${opts.type}'`);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (opts.keyboardShortcut) {
 | 
				
			||||||
 | 
					            launcherNote.setLabel('keyboardShortcut', opts.keyboardShortcut);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            launcherNote.removeLabel('keyboardShortcut');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (opts.icon) {
 | 
				
			||||||
 | 
					            launcherNote.setLabel('iconClass', `bx ${opts.icon}`);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            launcherNote.removeLabel('iconClass');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return {note: launcherNote};
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @method
 | 
				
			||||||
 | 
					     * @param {string} noteId
 | 
				
			||||||
 | 
					     * @param {string} format - either 'html' or 'markdown'
 | 
				
			||||||
 | 
					     * @param {string} zipFilePath
 | 
				
			||||||
 | 
					     * @returns {Promise<void>}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    this.exportSubtreeToZipFile = async (noteId, format, zipFilePath) => await exportService.exportToZipFile(noteId, format, zipFilePath);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Executes given anonymous function on the frontend(s).
 | 
				
			||||||
 | 
					     * Internally, this serializes the anonymous function into string and sends it to frontend(s) via WebSocket.
 | 
				
			||||||
 | 
					     * Note that there can be multiple connected frontend instances (e.g. in different tabs). In such case, all
 | 
				
			||||||
 | 
					     * instances execute the given function.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @method
 | 
				
			||||||
 | 
					     * @param {string} script - script to be executed on the frontend
 | 
				
			||||||
 | 
					     * @param {Array.<?>} params - list of parameters to the anonymous function to be sent to frontend
 | 
				
			||||||
 | 
					     * @returns {undefined} - no return value is provided.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    this.runOnFrontend = async (script, params = []) => {
 | 
				
			||||||
 | 
					        if (typeof script === "function") {
 | 
				
			||||||
 | 
					            script = script.toString();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ws.sendMessageToAllClients({
 | 
				
			||||||
 | 
					            type: 'execute-script',
 | 
				
			||||||
 | 
					            script: script,
 | 
				
			||||||
 | 
					            params: prepareParams(params),
 | 
				
			||||||
 | 
					            startNoteId: this.startNote.noteId,
 | 
				
			||||||
 | 
					            currentNoteId: this.currentNote.noteId,
 | 
				
			||||||
 | 
					            originEntityName: "notes", // currently there's no other entity on the frontend which can trigger event
 | 
				
			||||||
 | 
					            originEntityId: this.originEntity?.noteId || null
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        function prepareParams(params) {
 | 
				
			||||||
 | 
					            if (!params) {
 | 
				
			||||||
 | 
					                return params;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return params.map(p => {
 | 
				
			||||||
 | 
					                if (typeof p === "function") {
 | 
				
			||||||
 | 
					                    return `!@#Function: ${p.toString()}`;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else {
 | 
				
			||||||
 | 
					                    return p;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Sync process can make data intermittently inconsistent. Scripts which require strong data consistency
 | 
				
			||||||
 | 
					     * can use this function to wait for a possible sync process to finish and prevent new sync process from starting
 | 
				
			||||||
 | 
					     * while it is running.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Because this is an async process, the inner callback doesn't have automatic transaction handling, so in case
 | 
				
			||||||
 | 
					     * you need to make some DB changes, you need to surround your call with api.transactional(...)
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @method
 | 
				
			||||||
 | 
					     * @param {function} callback - function to be executed while sync process is not running
 | 
				
			||||||
 | 
					     * @returns {Promise} - resolves once the callback is finished (callback is awaited)
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    this.runOutsideOfSync = syncMutex.doExclusively;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @method
 | 
				
			||||||
 | 
					     * @param {string} backupName - If the backupName is e.g. "now", then the backup will be written to "backup-now.db" file
 | 
				
			||||||
 | 
					     * @returns {Promise} - resolves once the backup is finished
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    this.backupNow = backupService.backupNow;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * This object contains "at your risk" and "no BC guarantees" objects for advanced use cases.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @property {Becca} becca - provides access to the backend in-memory object graph, see {@link https://github.com/zadam/trilium/blob/master/src/becca/becca.js}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    this.__private = {
 | 
				
			||||||
 | 
					        becca
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = BackendScriptApi;
 | 
					module.exports = BackendScriptApi;
 | 
				
			||||||
@@ -457,15 +720,13 @@ module.exports = BackendScriptApi;
 | 
				
			|||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<nav>
 | 
					<nav>
 | 
				
			||||||
    <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="sql%250A%250ATODO_%2520some%2520methods%2520(like%2520getValue())%2520could%2520use%2520raw%2520rowsmodule_.html">sql
 | 
					    <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>
 | 
				
			||||||
 | 
					 | 
				
			||||||
TODO: some methods (like getValue()) could use raw rows</a></li></ul><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
					 | 
				
			||||||
</nav>
 | 
					</nav>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<br class="clear">
 | 
					<br class="clear">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<footer>
 | 
					<footer>
 | 
				
			||||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a>
 | 
					    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a>
 | 
				
			||||||
</footer>
 | 
					</footer>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script> prettyPrint(); </script>
 | 
					<script> prettyPrint(); </script>
 | 
				
			||||||
 
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user