mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-03 03:46:37 +01:00 
			
		
		
		
	Compare commits
	
		
			862 Commits
		
	
	
		
			v0.28.0-be
			...
			v0.37.0-be
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					95c37cfdd1 | ||
| 
						 | 
					c0eb30472e | ||
| 
						 | 
					8b320bb85f | ||
| 
						 | 
					d93b9b8a23 | ||
| 
						 | 
					69b53fdfb3 | ||
| 
						 | 
					920d71a5a6 | ||
| 
						 | 
					d4a277321c | ||
| 
						 | 
					4068691078 | ||
| 
						 | 
					86d7e139a4 | ||
| 
						 | 
					44add751b2 | ||
| 
						 | 
					c49c69f824 | ||
| 
						 | 
					7bd1d8feb4 | ||
| 
						 | 
					4ba7e74b58 | ||
| 
						 | 
					4cda661c1b | ||
| 
						 | 
					5b4a2bd71c | ||
| 
						 | 
					a808e12d31 | ||
| 
						 | 
					1f3f9a4037 | ||
| 
						 | 
					77ac8df1e6 | ||
| 
						 | 
					b53e2a3570 | ||
| 
						 | 
					7539e6a616 | ||
| 
						 | 
					b5a0cadcf4 | ||
| 
						 | 
					b8db842788 | ||
| 
						 | 
					dea5195223 | ||
| 
						 | 
					c3ea2ae1b3 | ||
| 
						 | 
					1fddd6f318 | ||
| 
						 | 
					466a4802b6 | ||
| 
						 | 
					8f2d2b189c | ||
| 
						 | 
					0837cabb41 | ||
| 
						 | 
					5646218be8 | ||
| 
						 | 
					169551c6a8 | ||
| 
						 | 
					3a1c80c189 | ||
| 
						 | 
					31bcc037f1 | ||
| 
						 | 
					179d530ea9 | ||
| 
						 | 
					da92809299 | ||
| 
						 | 
					c2ebd4b308 | ||
| 
						 | 
					9b24ae0600 | ||
| 
						 | 
					7cd75cebfc | ||
| 
						 | 
					664485ccd5 | ||
| 
						 | 
					60ac1a04f4 | ||
| 
						 | 
					7c7beb5502 | ||
| 
						 | 
					5aa5ec3af1 | ||
| 
						 | 
					58a857cf79 | ||
| 
						 | 
					712f67e983 | ||
| 
						 | 
					3149dff880 | ||
| 
						 | 
					d58e98e361 | ||
| 
						 | 
					744855d4f5 | ||
| 
						 | 
					8a9f2ff1d8 | ||
| 
						 | 
					f539aedd25 | ||
| 
						 | 
					05547845cb | ||
| 
						 | 
					9b905563c3 | ||
| 
						 | 
					894c888d87 | ||
| 
						 | 
					34d4274032 | ||
| 
						 | 
					b685d7ffb5 | ||
| 
						 | 
					d87c469fbb | ||
| 
						 | 
					d8730f1722 | ||
| 
						 | 
					72fda89360 | ||
| 
						 | 
					7075842954 | ||
| 
						 | 
					a2c78e2c5c | ||
| 
						 | 
					9c9ef1c7b4 | ||
| 
						 | 
					df40accdd4 | ||
| 
						 | 
					b67aa99b86 | ||
| 
						 | 
					5ecb881cec | ||
| 
						 | 
					fcb6a06d68 | ||
| 
						 | 
					5b5ab0b044 | ||
| 
						 | 
					ab04bde5fb | ||
| 
						 | 
					c9e4261930 | ||
| 
						 | 
					9ea8209d4e | ||
| 
						 | 
					56e50cc850 | ||
| 
						 | 
					fc87bcf10c | ||
| 
						 | 
					b471d51cb4 | ||
| 
						 | 
					b7b583ff04 | ||
| 
						 | 
					475fddeec1 | ||
| 
						 | 
					2af86927b0 | ||
| 
						 | 
					2e58e32112 | ||
| 
						 | 
					5c05963bd9 | ||
| 
						 | 
					4e5e3e4675 | ||
| 
						 | 
					f7c59700a5 | ||
| 
						 | 
					f1a7fce277 | ||
| 
						 | 
					cf53cbf1dd | ||
| 
						 | 
					1a182d1b58 | ||
| 
						 | 
					8bd52f349a | ||
| 
						 | 
					68faa47c6f | ||
| 
						 | 
					2f2a14d4b8 | ||
| 
						 | 
					a2a53deb94 | ||
| 
						 | 
					d50e072ea4 | ||
| 
						 | 
					904eb25f64 | ||
| 
						 | 
					205081c804 | ||
| 
						 | 
					c4d5060a0b | ||
| 
						 | 
					5bba18191f | ||
| 
						 | 
					5e3538669d | ||
| 
						 | 
					23c449ca0c | ||
| 
						 | 
					b7344329f4 | ||
| 
						 | 
					e04845335b | ||
| 
						 | 
					86a330c8c3 | ||
| 
						 | 
					f82e99b5ed | ||
| 
						 | 
					bdf42749f3 | ||
| 
						 | 
					7ccbf45569 | ||
| 
						 | 
					c0b30e603a | ||
| 
						 | 
					d3c957768f | ||
| 
						 | 
					ed9ecf2a57 | ||
| 
						 | 
					22d48b0586 | ||
| 
						 | 
					edc23940d0 | ||
| 
						 | 
					c72ea2ed60 | ||
| 
						 | 
					4570319517 | ||
| 
						 | 
					69d739400c | ||
| 
						 | 
					ec7c0f0723 | ||
| 
						 | 
					3de124748d | ||
| 
						 | 
					41d47c5d33 | ||
| 
						 | 
					132360b46b | ||
| 
						 | 
					f0496cb42c | ||
| 
						 | 
					1522297700 | ||
| 
						 | 
					2a5ab3a5e1 | ||
| 
						 | 
					358fd13c8d | ||
| 
						 | 
					2305ad7405 | ||
| 
						 | 
					78f5b7b288 | ||
| 
						 | 
					1903c59163 | ||
| 
						 | 
					b16c2d19b6 | ||
| 
						 | 
					00bb1236ce | ||
| 
						 | 
					82bbf4173b | ||
| 
						 | 
					9f4ca279aa | ||
| 
						 | 
					b890859025 | ||
| 
						 | 
					56e4f4f5ac | ||
| 
						 | 
					157bd3816d | ||
| 
						 | 
					21588829c7 | ||
| 
						 | 
					9689029c4b | ||
| 
						 | 
					992d174b23 | ||
| 
						 | 
					8886e95847 | ||
| 
						 | 
					6d5762fac8 | ||
| 
						 | 
					e9ab044e46 | ||
| 
						 | 
					fda219d070 | ||
| 
						 | 
					2be1aca2f3 | ||
| 
						 | 
					1b318d6a30 | ||
| 
						 | 
					22c4859d42 | ||
| 
						 | 
					80a6361cf1 | ||
| 
						 | 
					8439effeeb | ||
| 
						 | 
					fafab95a07 | ||
| 
						 | 
					24c8e8fc2b | ||
| 
						 | 
					1923bf7dda | ||
| 
						 | 
					2ee94a3a69 | ||
| 
						 | 
					2fb3a3eff9 | ||
| 
						 | 
					bcbbf4dc3e | ||
| 
						 | 
					7dc793920f | ||
| 
						 | 
					0b43eceb2d | ||
| 
						 | 
					85f736139b | ||
| 
						 | 
					98a6670cb4 | ||
| 
						 | 
					a15be82f00 | ||
| 
						 | 
					6c3809e1db | ||
| 
						 | 
					33a2cd21a3 | ||
| 
						 | 
					3eebce22e7 | ||
| 
						 | 
					adae0625b9 | ||
| 
						 | 
					5063cfb979 | ||
| 
						 | 
					0835930a8a | ||
| 
						 | 
					c9432990b7 | ||
| 
						 | 
					9ad521822d | ||
| 
						 | 
					824fb08511 | ||
| 
						 | 
					cc4c15daf0 | ||
| 
						 | 
					7718778013 | ||
| 
						 | 
					a25260353d | ||
| 
						 | 
					c1e8a4b384 | ||
| 
						 | 
					3f2229d9e1 | ||
| 
						 | 
					8561227622 | ||
| 
						 | 
					8859e2ac40 | ||
| 
						 | 
					7423b2f4fd | ||
| 
						 | 
					d23e9f1bc4 | ||
| 
						 | 
					516277a478 | ||
| 
						 | 
					cbc7710d81 | ||
| 
						 | 
					ea71e96f72 | ||
| 
						 | 
					59d1cb1833 | ||
| 
						 | 
					7c54ba63ce | ||
| 
						 | 
					5892b5b851 | ||
| 
						 | 
					02eb737b9d | ||
| 
						 | 
					144e75da9e | ||
| 
						 | 
					8d14a0d687 | ||
| 
						 | 
					dec2c218f7 | ||
| 
						 | 
					dd147a7209 | ||
| 
						 | 
					c3fabcb666 | ||
| 
						 | 
					35e825b376 | ||
| 
						 | 
					334a38c493 | ||
| 
						 | 
					8ec01c73cd | ||
| 
						 | 
					0ef6634d41 | ||
| 
						 | 
					f6fc24d11d | ||
| 
						 | 
					ed24e32305 | ||
| 
						 | 
					86df60bb74 | ||
| 
						 | 
					42cf02e9a4 | ||
| 
						 | 
					3add997b49 | ||
| 
						 | 
					649862b01c | ||
| 
						 | 
					f5228f87f0 | ||
| 
						 | 
					76f3e87790 | ||
| 
						 | 
					30c56cd8af | ||
| 
						 | 
					16be0c1014 | ||
| 
						 | 
					c82de8b6b2 | ||
| 
						 | 
					d3f2b71803 | ||
| 
						 | 
					f3955bcbdc | ||
| 
						 | 
					90afb2a1ee | ||
| 
						 | 
					2dae9b9621 | ||
| 
						 | 
					521a9b0b2c | ||
| 
						 | 
					2cfe9b3c03 | ||
| 
						 | 
					45ee959c11 | ||
| 
						 | 
					3bf8546d51 | ||
| 
						 | 
					ca8b603bd9 | ||
| 
						 | 
					faae11f070 | ||
| 
						 | 
					b069436039 | ||
| 
						 | 
					e828ef370d | ||
| 
						 | 
					50a0400616 | ||
| 
						 | 
					0226b1e9a8 | ||
| 
						 | 
					135102d2b5 | ||
| 
						 | 
					a17b8a053e | ||
| 
						 | 
					fdc86bab50 | ||
| 
						 | 
					f885388bf7 | ||
| 
						 | 
					aa96b33bc2 | ||
| 
						 | 
					e36d636f93 | ||
| 
						 | 
					2e05cb1764 | ||
| 
						 | 
					9404e27cba | ||
| 
						 | 
					494ec0b051 | ||
| 
						 | 
					36b575c286 | ||
| 
						 | 
					d1992b061c | ||
| 
						 | 
					a79aec85b5 | ||
| 
						 | 
					76dce5197f | ||
| 
						 | 
					5d80df398b | ||
| 
						 | 
					a6f57d7761 | ||
| 
						 | 
					a981df6282 | ||
| 
						 | 
					ae8a2bfb1b | ||
| 
						 | 
					15a2fe2570 | ||
| 
						 | 
					8dadc7e518 | ||
| 
						 | 
					c614bc3263 | ||
| 
						 | 
					1e50d88166 | ||
| 
						 | 
					c9cc2cb4f3 | ||
| 
						 | 
					c8a5c71ec2 | ||
| 
						 | 
					55356963dd | ||
| 
						 | 
					0e867a995f | ||
| 
						 | 
					3ca37b2f42 | ||
| 
						 | 
					0c78fda531 | ||
| 
						 | 
					7c60080772 | ||
| 
						 | 
					bf5a31dcdb | ||
| 
						 | 
					a5e38165ef | ||
| 
						 | 
					fe6f19e611 | ||
| 
						 | 
					576a07bcb7 | ||
| 
						 | 
					4be7ac7ae1 | ||
| 
						 | 
					a81b00e130 | ||
| 
						 | 
					d4e27c1b76 | ||
| 
						 | 
					be477f178b | ||
| 
						 | 
					de95b92f90 | ||
| 
						 | 
					89ed9027da | ||
| 
						 | 
					1c0b55e422 | ||
| 
						 | 
					10d089240a | ||
| 
						 | 
					84b1f1f24e | ||
| 
						 | 
					c8f59ea547 | ||
| 
						 | 
					9d958e1860 | ||
| 
						 | 
					ec06b940f4 | ||
| 
						 | 
					f331172c7d | ||
| 
						 | 
					650d9e0b27 | ||
| 
						 | 
					ff1d312a43 | ||
| 
						 | 
					a4acbf3aea | ||
| 
						 | 
					242bea236f | ||
| 
						 | 
					ca2f14a2d0 | ||
| 
						 | 
					48a654630f | ||
| 
						 | 
					cf5c1c1be1 | ||
| 
						 | 
					0558c30b56 | ||
| 
						 | 
					36c87b7fa0 | ||
| 
						 | 
					d039a5f24e | ||
| 
						 | 
					3e3d111d76 | ||
| 
						 | 
					ecb485c8bc | ||
| 
						 | 
					02ab59c9e0 | ||
| 
						 | 
					8e4e0bd543 | ||
| 
						 | 
					bbe0e9e425 | ||
| 
						 | 
					24a3f814ed | ||
| 
						 | 
					233a50dbb7 | ||
| 
						 | 
					6d8f11d533 | ||
| 
						 | 
					4e4beb26c6 | ||
| 
						 | 
					1f092c2656 | ||
| 
						 | 
					9622b046e0 | ||
| 
						 | 
					f9abea83f3 | ||
| 
						 | 
					b84542064c | ||
| 
						 | 
					8ab2c924c4 | ||
| 
						 | 
					4b9415a619 | ||
| 
						 | 
					c11479de58 | ||
| 
						 | 
					dddb02a286 | ||
| 
						 | 
					fab4c59f9b | ||
| 
						 | 
					b818f020a7 | ||
| 
						 | 
					9888850c22 | ||
| 
						 | 
					04209182c1 | ||
| 
						 | 
					02c9dabcff | ||
| 
						 | 
					c9d0b8cc40 | ||
| 
						 | 
					3cb421143f | ||
| 
						 | 
					fd9b79e115 | ||
| 
						 | 
					53c4bb8a94 | ||
| 
						 | 
					723fc42d88 | ||
| 
						 | 
					1882b089ab | ||
| 
						 | 
					ad7a6c4d79 | ||
| 
						 | 
					48e0e797da | ||
| 
						 | 
					fbb77d3e55 | ||
| 
						 | 
					d1d8e54d20 | ||
| 
						 | 
					f259c60b54 | ||
| 
						 | 
					aa981d3cd4 | ||
| 
						 | 
					f8118444f9 | ||
| 
						 | 
					59da25ef55 | ||
| 
						 | 
					61520bc3b3 | ||
| 
						 | 
					5406b09f3a | ||
| 
						 | 
					90f1bfb3e4 | ||
| 
						 | 
					f30eec7737 | ||
| 
						 | 
					493cd1a7e0 | ||
| 
						 | 
					dfa1ab65c6 | ||
| 
						 | 
					963ed32ce4 | ||
| 
						 | 
					de4733e848 | ||
| 
						 | 
					bfbc124e78 | ||
| 
						 | 
					fcd87b3e2d | ||
| 
						 | 
					7bee93bb73 | ||
| 
						 | 
					c0c36d10e5 | ||
| 
						 | 
					6e260ee563 | ||
| 
						 | 
					b1075d956f | ||
| 
						 | 
					4dd6352aec | ||
| 
						 | 
					6fe8bde720 | ||
| 
						 | 
					0556ab5e66 | ||
| 
						 | 
					7060700225 | ||
| 
						 | 
					385b79ad34 | ||
| 
						 | 
					b8509c487d | ||
| 
						 | 
					083dee9bdd | ||
| 
						 | 
					0c2dd6aa35 | ||
| 
						 | 
					743c15aacc | ||
| 
						 | 
					263bff903c | ||
| 
						 | 
					741dfaf2de | ||
| 
						 | 
					e4e4f73638 | ||
| 
						 | 
					85e4bd817b | ||
| 
						 | 
					78ffac8232 | ||
| 
						 | 
					b488adc330 | ||
| 
						 | 
					a06bd877c9 | ||
| 
						 | 
					b3834324f6 | ||
| 
						 | 
					d351134b75 | ||
| 
						 | 
					ea0835561c | ||
| 
						 | 
					b0c0c5f56b | ||
| 
						 | 
					849fad0421 | ||
| 
						 | 
					eb28a3b0c9 | ||
| 
						 | 
					5283b489dc | ||
| 
						 | 
					d54f848572 | ||
| 
						 | 
					1ac0c4f874 | ||
| 
						 | 
					3850f52401 | ||
| 
						 | 
					6d5f8e0562 | ||
| 
						 | 
					04633bdf3a | ||
| 
						 | 
					97219aa12e | ||
| 
						 | 
					e825abf893 | ||
| 
						 | 
					63b655cff4 | ||
| 
						 | 
					0524942d11 | ||
| 
						 | 
					b5d75f183a | ||
| 
						 | 
					706fc647ff | ||
| 
						 | 
					13e9f9f9e7 | ||
| 
						 | 
					a76dcb44ae | ||
| 
						 | 
					b9373806cf | ||
| 
						 | 
					9de2927304 | ||
| 
						 | 
					c3e1126489 | ||
| 
						 | 
					3413c9ed64 | ||
| 
						 | 
					dcebcb0e73 | ||
| 
						 | 
					3d7a5f20e7 | ||
| 
						 | 
					6a99af64a8 | ||
| 
						 | 
					7d57961ab2 | ||
| 
						 | 
					95a773e5c9 | ||
| 
						 | 
					a912b2f23d | ||
| 
						 | 
					36b581489c | ||
| 
						 | 
					976684a3a8 | ||
| 
						 | 
					093dfb4a39 | ||
| 
						 | 
					ddf381f92d | ||
| 
						 | 
					2b44f3bc76 | ||
| 
						 | 
					7b1fdfabf8 | ||
| 
						 | 
					070e8d9647 | ||
| 
						 | 
					bf3360572a | ||
| 
						 | 
					e5036318af | ||
| 
						 | 
					6d2394a9da | ||
| 
						 | 
					427a266c57 | ||
| 
						 | 
					196264b8c2 | ||
| 
						 | 
					afe24866f0 | ||
| 
						 | 
					d18a20cc06 | ||
| 
						 | 
					e94669de03 | ||
| 
						 | 
					9c91b0459e | ||
| 
						 | 
					b161db064e | ||
| 
						 | 
					ec4abe0d81 | ||
| 
						 | 
					af21dd4463 | ||
| 
						 | 
					ef46727870 | ||
| 
						 | 
					1ea0d283de | ||
| 
						 | 
					ed380e09c9 | ||
| 
						 | 
					b5daa83d69 | ||
| 
						 | 
					c4b957427d | ||
| 
						 | 
					2f3b256272 | ||
| 
						 | 
					6e3d8472e1 | ||
| 
						 | 
					2a9f36a027 | ||
| 
						 | 
					cf3726289c | ||
| 
						 | 
					c8e4a5c9e7 | ||
| 
						 | 
					3851bedb57 | ||
| 
						 | 
					a3951f1cce | ||
| 
						 | 
					7c77ae758b | ||
| 
						 | 
					20d3d61cec | ||
| 
						 | 
					1b831f94a9 | ||
| 
						 | 
					3f241553aa | ||
| 
						 | 
					8624c83108 | ||
| 
						 | 
					d49cae9cea | ||
| 
						 | 
					174128447b | ||
| 
						 | 
					5d213eea7e | ||
| 
						 | 
					f45e25172b | ||
| 
						 | 
					ec87856ef4 | ||
| 
						 | 
					6feb7ad1d5 | ||
| 
						 | 
					6833e84d55 | ||
| 
						 | 
					154a575701 | ||
| 
						 | 
					504b2e2c4a | ||
| 
						 | 
					2c5292222f | ||
| 
						 | 
					989da8877b | ||
| 
						 | 
					70591eadd5 | ||
| 
						 | 
					fead3cd7ad | ||
| 
						 | 
					a7cf3cdf05 | ||
| 
						 | 
					5372f71faa | ||
| 
						 | 
					3b76939f17 | ||
| 
						 | 
					c827d38f39 | ||
| 
						 | 
					1e7586fae4 | ||
| 
						 | 
					ee89111bfb | ||
| 
						 | 
					288b3077b2 | ||
| 
						 | 
					5c1922ac9f | ||
| 
						 | 
					93f1d46104 | ||
| 
						 | 
					c5daaf541a | ||
| 
						 | 
					12b17b1e9e | ||
| 
						 | 
					ad46ba7d0f | ||
| 
						 | 
					44f592c6cb | ||
| 
						 | 
					943b35fb7d | ||
| 
						 | 
					f1967fd466 | ||
| 
						 | 
					ce2404b18a | ||
| 
						 | 
					cdd53a39f1 | ||
| 
						 | 
					c646019536 | ||
| 
						 | 
					c8049f0efe | ||
| 
						 | 
					f2c497049b | ||
| 
						 | 
					d713274ae2 | ||
| 
						 | 
					a72eeb9a98 | ||
| 
						 | 
					41cdd5c640 | ||
| 
						 | 
					4cde65d171 | ||
| 
						 | 
					27659805f6 | ||
| 
						 | 
					8ab081a3fd | ||
| 
						 | 
					ccbb2e2e12 | ||
| 
						 | 
					2bf2ec5a6c | ||
| 
						 | 
					4329675c60 | ||
| 
						 | 
					412b0377e9 | ||
| 
						 | 
					69e48ff4d7 | ||
| 
						 | 
					4cacd1dfa2 | ||
| 
						 | 
					0c8ad1b46e | ||
| 
						 | 
					d3ac7b0939 | ||
| 
						 | 
					e0306d4ad7 | ||
| 
						 | 
					1f3d726048 | ||
| 
						 | 
					f3ed7e936d | ||
| 
						 | 
					547ad7221d | ||
| 
						 | 
					97a258c0c6 | ||
| 
						 | 
					19a154c2f4 | ||
| 
						 | 
					b389ec5ea3 | ||
| 
						 | 
					412375e92f | ||
| 
						 | 
					4b96ada781 | ||
| 
						 | 
					87b16f3325 | ||
| 
						 | 
					0a0663be69 | ||
| 
						 | 
					7eed076674 | ||
| 
						 | 
					b5143c152b | ||
| 
						 | 
					6ef8a4c018 | ||
| 
						 | 
					ebd26f85bd | ||
| 
						 | 
					fbfb7b3b30 | ||
| 
						 | 
					cfb313b60e | ||
| 
						 | 
					54e37dea20 | ||
| 
						 | 
					5b14358620 | ||
| 
						 | 
					c4669cbaa3 | ||
| 
						 | 
					74b41c9911 | ||
| 
						 | 
					d08a36174d | ||
| 
						 | 
					e845b80e10 | ||
| 
						 | 
					b0303ef529 | ||
| 
						 | 
					68f67ec6ee | ||
| 
						 | 
					20ae67f510 | ||
| 
						 | 
					237749e4af | ||
| 
						 | 
					15f4782947 | ||
| 
						 | 
					d48efd1925 | ||
| 
						 | 
					883d726622 | ||
| 
						 | 
					0a0cac5f41 | ||
| 
						 | 
					012a18be00 | ||
| 
						 | 
					890c00d4ba | ||
| 
						 | 
					bb43014230 | ||
| 
						 | 
					53a995fecb | ||
| 
						 | 
					8d3262d232 | ||
| 
						 | 
					373ec4ac50 | ||
| 
						 | 
					3fdecee95f | ||
| 
						 | 
					86b9f5a8b0 | ||
| 
						 | 
					873b60b00d | ||
| 
						 | 
					fc58086f6e | ||
| 
						 | 
					40cec31099 | ||
| 
						 | 
					33733d3ab7 | ||
| 
						 | 
					f08bf0be15 | ||
| 
						 | 
					296cb7236f | ||
| 
						 | 
					d614967d62 | ||
| 
						 | 
					35648b9f37 | ||
| 
						 | 
					494a980ecb | ||
| 
						 | 
					810aa8c2fb | ||
| 
						 | 
					027b3eaed8 | ||
| 
						 | 
					dedc1e708f | ||
| 
						 | 
					79956b5676 | ||
| 
						 | 
					48b1aece4d | ||
| 
						 | 
					eee75bd2e8 | ||
| 
						 | 
					29828f8e8f | ||
| 
						 | 
					ced02b42b5 | ||
| 
						 | 
					3fe9218ea8 | ||
| 
						 | 
					ff5ea8b311 | ||
| 
						 | 
					32fae5e9e8 | ||
| 
						 | 
					48b4488a58 | ||
| 
						 | 
					aead6a44de | ||
| 
						 | 
					f59f08fa0e | ||
| 
						 | 
					119d7367da | ||
| 
						 | 
					ddb99a0917 | ||
| 
						 | 
					ecfba95841 | ||
| 
						 | 
					597eb5a300 | ||
| 
						 | 
					f3e7e6bbe7 | ||
| 
						 | 
					722380e7b8 | ||
| 
						 | 
					8c46e96397 | ||
| 
						 | 
					f22cc37df7 | ||
| 
						 | 
					dd1fc23fe8 | ||
| 
						 | 
					f9f4148e8c | ||
| 
						 | 
					2178f82324 | ||
| 
						 | 
					79d779dee8 | ||
| 
						 | 
					93c0469aa0 | ||
| 
						 | 
					81d10fa605 | ||
| 
						 | 
					75ef766649 | ||
| 
						 | 
					fab8b77794 | ||
| 
						 | 
					8b030a2323 | ||
| 
						 | 
					14c420b782 | ||
| 
						 | 
					637547a3fa | ||
| 
						 | 
					c39c1baa4d | ||
| 
						 | 
					b9edd0ecc7 | ||
| 
						 | 
					2dec8f1ad6 | ||
| 
						 | 
					bd97df5ee9 | ||
| 
						 | 
					8a501521e8 | ||
| 
						 | 
					be68391c37 | ||
| 
						 | 
					89d4be504d | ||
| 
						 | 
					0a2acbe4be | ||
| 
						 | 
					a7a42ff4af | ||
| 
						 | 
					bacf163c96 | ||
| 
						 | 
					db7e083a21 | ||
| 
						 | 
					8eaf44735a | ||
| 
						 | 
					bfc61f8b36 | ||
| 
						 | 
					4ea27e604f | ||
| 
						 | 
					aef0e552a0 | ||
| 
						 | 
					d36bff2a97 | ||
| 
						 | 
					61696f0287 | ||
| 
						 | 
					9a97fe09ee | ||
| 
						 | 
					b1d0cef33b | ||
| 
						 | 
					7f0c92c56b | ||
| 
						 | 
					b21568806a | ||
| 
						 | 
					80fb89b794 | ||
| 
						 | 
					47d28b4eef | ||
| 
						 | 
					a9762c5139 | ||
| 
						 | 
					32439ed006 | ||
| 
						 | 
					ff41904d72 | ||
| 
						 | 
					39093cbc4c | ||
| 
						 | 
					c7b5784123 | ||
| 
						 | 
					3e22804a76 | ||
| 
						 | 
					7ce98b0b28 | ||
| 
						 | 
					0d11cadc18 | ||
| 
						 | 
					63ab82a076 | ||
| 
						 | 
					7e03f14e01 | ||
| 
						 | 
					c9183f8bd4 | ||
| 
						 | 
					bc2d1f1ef9 | ||
| 
						 | 
					e7c053d273 | ||
| 
						 | 
					3ccf553fda | ||
| 
						 | 
					6d2eb7b187 | ||
| 
						 | 
					7234324112 | ||
| 
						 | 
					8205cdc288 | ||
| 
						 | 
					29931bbddf | ||
| 
						 | 
					68cd4c9a31 | ||
| 
						 | 
					f4b986e1c1 | ||
| 
						 | 
					c0496ebef3 | ||
| 
						 | 
					6aa30a4c74 | ||
| 
						 | 
					3035a948b9 | ||
| 
						 | 
					7880cf62fe | ||
| 
						 | 
					ff76ba7d1b | ||
| 
						 | 
					06be593fe4 | ||
| 
						 | 
					91e3eb8ae7 | ||
| 
						 | 
					f7dd3558a7 | ||
| 
						 | 
					eac5ec6e26 | ||
| 
						 | 
					f273b4334e | ||
| 
						 | 
					15eaf67189 | ||
| 
						 | 
					983d9c4319 | ||
| 
						 | 
					a88a00b60e | ||
| 
						 | 
					a44f43b133 | ||
| 
						 | 
					69677b15fe | ||
| 
						 | 
					2573c3b8a6 | ||
| 
						 | 
					0b0e9f2953 | ||
| 
						 | 
					1990c9399e | ||
| 
						 | 
					151641b659 | ||
| 
						 | 
					36c6376220 | ||
| 
						 | 
					f0e22b70f6 | ||
| 
						 | 
					225e893461 | ||
| 
						 | 
					064a11d872 | ||
| 
						 | 
					3760835608 | ||
| 
						 | 
					e7ac2ec4ed | ||
| 
						 | 
					8da8dfc543 | ||
| 
						 | 
					6b3c8b4bac | ||
| 
						 | 
					25fe78012f | ||
| 
						 | 
					147d79c65c | ||
| 
						 | 
					6fddd2bd62 | ||
| 
						 | 
					77c9b64dc7 | ||
| 
						 | 
					47cb7c7f5e | ||
| 
						 | 
					1bd769827d | ||
| 
						 | 
					288ec88c2f | ||
| 
						 | 
					71916b5e28 | ||
| 
						 | 
					b2d4330692 | ||
| 
						 | 
					253a6ef081 | ||
| 
						 | 
					e1e020c1a4 | ||
| 
						 | 
					2b4413a1bd | ||
| 
						 | 
					dae674a7cd | ||
| 
						 | 
					751bf94758 | ||
| 
						 | 
					4b934a4a81 | ||
| 
						 | 
					7e374e795b | ||
| 
						 | 
					be378f71b0 | ||
| 
						 | 
					27f74489fd | ||
| 
						 | 
					ae8f4ffbbe | ||
| 
						 | 
					896776516b | ||
| 
						 | 
					a27525af9e | ||
| 
						 | 
					83b4382787 | ||
| 
						 | 
					ef1b32d586 | ||
| 
						 | 
					fe3a0bc756 | ||
| 
						 | 
					2259e1d44d | ||
| 
						 | 
					9ca4a016eb | ||
| 
						 | 
					2978a262f7 | ||
| 
						 | 
					f47f3461e6 | ||
| 
						 | 
					06202c31e4 | ||
| 
						 | 
					925dc258a6 | ||
| 
						 | 
					3670800a51 | ||
| 
						 | 
					90a331b989 | ||
| 
						 | 
					a4c8bdeda2 | ||
| 
						 | 
					5bda254184 | ||
| 
						 | 
					26621c0318 | ||
| 
						 | 
					c6806256fd | ||
| 
						 | 
					f00e1235f9 | ||
| 
						 | 
					51bede6541 | ||
| 
						 | 
					75dbaa4b77 | ||
| 
						 | 
					bec6576620 | ||
| 
						 | 
					44551e0e8c | ||
| 
						 | 
					67553cb40e | ||
| 
						 | 
					7cafbda7cd | ||
| 
						 | 
					9a5a085103 | ||
| 
						 | 
					cdb17ae937 | ||
| 
						 | 
					c240fb9896 | ||
| 
						 | 
					4b41eddf44 | ||
| 
						 | 
					b51ac112a2 | ||
| 
						 | 
					a1ac609b34 | ||
| 
						 | 
					66e2a12f3d | ||
| 
						 | 
					9f69294f7f | ||
| 
						 | 
					a5fc8d5329 | ||
| 
						 | 
					7bbf797caf | ||
| 
						 | 
					f479c0e10e | ||
| 
						 | 
					0f32154b91 | ||
| 
						 | 
					f2019ee5f9 | ||
| 
						 | 
					89b8e2bb08 | ||
| 
						 | 
					8fb6edad67 | ||
| 
						 | 
					c2e3a3fe04 | ||
| 
						 | 
					b2052a6ccd | ||
| 
						 | 
					a07479cd5a | ||
| 
						 | 
					3820384f51 | ||
| 
						 | 
					0610576e5a | ||
| 
						 | 
					efac7701eb | ||
| 
						 | 
					905eb303bc | ||
| 
						 | 
					27cee1cf33 | ||
| 
						 | 
					3c56d29fca | ||
| 
						 | 
					946dae72d9 | ||
| 
						 | 
					58f71c7300 | ||
| 
						 | 
					07e9013152 | ||
| 
						 | 
					29c60581a6 | ||
| 
						 | 
					4bdcf32475 | ||
| 
						 | 
					44c742e839 | ||
| 
						 | 
					001bd1d004 | ||
| 
						 | 
					6c7e2f0aa1 | ||
| 
						 | 
					9fc5d328b4 | ||
| 
						 | 
					f6413d095c | ||
| 
						 | 
					d66ad4319e | ||
| 
						 | 
					251fcaeb48 | ||
| 
						 | 
					3311c6336c | ||
| 
						 | 
					fc13e1fa6a | ||
| 
						 | 
					9ca680f842 | ||
| 
						 | 
					616829464f | ||
| 
						 | 
					0267468cd5 | ||
| 
						 | 
					ca0d17d93a | ||
| 
						 | 
					3f656ea76f | ||
| 
						 | 
					1faf2c6ecd | ||
| 
						 | 
					33f2aaa650 | ||
| 
						 | 
					177caec011 | ||
| 
						 | 
					62650a4545 | ||
| 
						 | 
					81dc907afc | ||
| 
						 | 
					3ee33e1024 | ||
| 
						 | 
					2326eb85f1 | ||
| 
						 | 
					0885e60b80 | ||
| 
						 | 
					ef40c66344 | ||
| 
						 | 
					0d0464549f | ||
| 
						 | 
					b68b0fe783 | ||
| 
						 | 
					b4c6d9f800 | ||
| 
						 | 
					24c8b39d8e | ||
| 
						 | 
					0144dc12df | ||
| 
						 | 
					65684550a8 | ||
| 
						 | 
					6d09931a39 | ||
| 
						 | 
					1c41d459f0 | ||
| 
						 | 
					f65fefe7b1 | ||
| 
						 | 
					0a906b5663 | ||
| 
						 | 
					dd9b7bbbb5 | ||
| 
						 | 
					d25a1e3ed9 | ||
| 
						 | 
					05374becfd | ||
| 
						 | 
					37d2a7939c | ||
| 
						 | 
					a432ad7483 | ||
| 
						 | 
					ae17e4dc60 | ||
| 
						 | 
					02eddc347a | ||
| 
						 | 
					ee58bf3d5c | ||
| 
						 | 
					ecbaffa5f3 | ||
| 
						 | 
					fe86c09f22 | ||
| 
						 | 
					c8e01d6cce | ||
| 
						 | 
					fd0bd5dd00 | ||
| 
						 | 
					cd6d4fb527 | ||
| 
						 | 
					8ed6851e85 | ||
| 
						 | 
					a6fd3bfb00 | ||
| 
						 | 
					610dd8a783 | ||
| 
						 | 
					7c404f03db | ||
| 
						 | 
					ed1cf6aad5 | ||
| 
						 | 
					9703fd61e2 | ||
| 
						 | 
					16790e388b | ||
| 
						 | 
					b48474998b | ||
| 
						 | 
					95d8f07458 | ||
| 
						 | 
					e628c30c89 | ||
| 
						 | 
					52a8aae74f | ||
| 
						 | 
					54b5898582 | ||
| 
						 | 
					64974d75d5 | ||
| 
						 | 
					bd118027fb | ||
| 
						 | 
					36de217835 | ||
| 
						 | 
					b5283d58bb | ||
| 
						 | 
					8414d97ffa | ||
| 
						 | 
					9f30d4e673 | ||
| 
						 | 
					8e0d1fa0df | ||
| 
						 | 
					5b251b9977 | ||
| 
						 | 
					8b3e721028 | ||
| 
						 | 
					7e2a2baa5d | ||
| 
						 | 
					003eed368b | ||
| 
						 | 
					4b1cf05c0e | ||
| 
						 | 
					d9429c4f4b | ||
| 
						 | 
					b7bd94b6b0 | ||
| 
						 | 
					51bbc10744 | ||
| 
						 | 
					fb5df33ee7 | ||
| 
						 | 
					d8ba0ccd7d | ||
| 
						 | 
					886ea6c68c | ||
| 
						 | 
					ec384fafce | ||
| 
						 | 
					936f85c09e | ||
| 
						 | 
					b25deea21d | ||
| 
						 | 
					cf5ec44303 | ||
| 
						 | 
					6f956c2415 | ||
| 
						 | 
					3533160bef | ||
| 
						 | 
					60cbfdcabd | ||
| 
						 | 
					604f036a54 | ||
| 
						 | 
					dd4f3ec264 | ||
| 
						 | 
					ff67b8a0ba | ||
| 
						 | 
					1d5fb0b646 | ||
| 
						 | 
					80931a318f | ||
| 
						 | 
					16f16cb36a | ||
| 
						 | 
					899f24cde5 | ||
| 
						 | 
					9f29521ab8 | ||
| 
						 | 
					c1ce0c6b22 | ||
| 
						 | 
					a7fce33750 | ||
| 
						 | 
					6fd8e73150 | ||
| 
						 | 
					1359dd86c2 | ||
| 
						 | 
					a1b610fc50 | ||
| 
						 | 
					c849d719e9 | ||
| 
						 | 
					96de2e7008 | ||
| 
						 | 
					f140b77e7c | ||
| 
						 | 
					22228de63b | ||
| 
						 | 
					b0596c9eb2 | ||
| 
						 | 
					2a2319d434 | ||
| 
						 | 
					dad47d115f | ||
| 
						 | 
					502026359c | ||
| 
						 | 
					47b0e4e4d3 | ||
| 
						 | 
					6c927d9159 | ||
| 
						 | 
					ddc79b2517 | ||
| 
						 | 
					4c2e12d2cb | ||
| 
						 | 
					14f7a8b7b9 | ||
| 
						 | 
					caa7dd9619 | ||
| 
						 | 
					8aa7e2d0a0 | ||
| 
						 | 
					6be8a3f343 | ||
| 
						 | 
					a097cefba7 | ||
| 
						 | 
					e4c78f3887 | ||
| 
						 | 
					5baa251944 | ||
| 
						 | 
					cde68abec9 | ||
| 
						 | 
					51175e3676 | ||
| 
						 | 
					45ddfef30a | ||
| 
						 | 
					1e1d78999e | ||
| 
						 | 
					92fcd7b345 | ||
| 
						 | 
					e04f1cd574 | ||
| 
						 | 
					176c3a5d51 | ||
| 
						 | 
					c09570cf39 | ||
| 
						 | 
					4a093000be | ||
| 
						 | 
					6952b643ae | ||
| 
						 | 
					c487a95bc7 | ||
| 
						 | 
					8884177d9f | ||
| 
						 | 
					8b250ed523 | ||
| 
						 | 
					d8b78d8025 | ||
| 
						 | 
					42112b8053 | ||
| 
						 | 
					6cc0dd5a80 | ||
| 
						 | 
					afd5f4823f | ||
| 
						 | 
					b0cf82c91b | ||
| 
						 | 
					6a67cdd5af | ||
| 
						 | 
					bad7b84993 | ||
| 
						 | 
					d3ca6b5ae6 | ||
| 
						 | 
					da5009f089 | ||
| 
						 | 
					c08524c977 | ||
| 
						 | 
					f89537037e | ||
| 
						 | 
					c153793766 | ||
| 
						 | 
					0aec5927d5 | ||
| 
						 | 
					8aea9a1801 | ||
| 
						 | 
					73247e3220 | ||
| 
						 | 
					89344a6eda | ||
| 
						 | 
					40d2e6ea83 | ||
| 
						 | 
					910cfe9a17 | ||
| 
						 | 
					e58a80fc00 | ||
| 
						 | 
					4a2319cb33 | ||
| 
						 | 
					5619088c41 | ||
| 
						 | 
					60271993eb | ||
| 
						 | 
					6695e8b011 | ||
| 
						 | 
					707df18b93 | ||
| 
						 | 
					90895f1288 | ||
| 
						 | 
					ba1ca506af | ||
| 
						 | 
					f90ed99a40 | ||
| 
						 | 
					67630b1a22 | ||
| 
						 | 
					2c1580ea65 | ||
| 
						 | 
					840a0b5f64 | ||
| 
						 | 
					b39f6ef7ad | ||
| 
						 | 
					fb27088fcd | ||
| 
						 | 
					76fbff68ba | ||
| 
						 | 
					54de4d236d | ||
| 
						 | 
					e211dd65ad | ||
| 
						 | 
					a87f4d8653 | ||
| 
						 | 
					b59c175c2e | ||
| 
						 | 
					580104c4c5 | ||
| 
						 | 
					0fc3053b0a | ||
| 
						 | 
					929e0f69c2 | ||
| 
						 | 
					e70af1300a | ||
| 
						 | 
					4d0e46021b | ||
| 
						 | 
					1a9a49b739 | ||
| 
						 | 
					2ac560c56e | ||
| 
						 | 
					c23387c0fb | ||
| 
						 | 
					0ff250fe15 | ||
| 
						 | 
					52b1e58b26 | ||
| 
						 | 
					484715e440 | ||
| 
						 | 
					9d42c3d802 | ||
| 
						 | 
					c654172d33 | ||
| 
						 | 
					e17b26c883 | ||
| 
						 | 
					24d02d9cf5 | ||
| 
						 | 
					7208a311ac | ||
| 
						 | 
					ad7355372b | ||
| 
						 | 
					f18b5babad | ||
| 
						 | 
					9831ec0ca9 | ||
| 
						 | 
					596544eca3 | ||
| 
						 | 
					1f853024ee | ||
| 
						 | 
					0308b13460 | ||
| 
						 | 
					06b8a82f70 | ||
| 
						 | 
					91ca07929d | ||
| 
						 | 
					afabaa5fdb | ||
| 
						 | 
					a6fd3fa77c | ||
| 
						 | 
					58a2c08dcd | ||
| 
						 | 
					299bbff2f4 | ||
| 
						 | 
					19d8947123 | ||
| 
						 | 
					35edce7523 | ||
| 
						 | 
					bc4cec69a5 | ||
| 
						 | 
					cce8c1b674 | ||
| 
						 | 
					aa58788769 | ||
| 
						 | 
					6c62ab7a52 | ||
| 
						 | 
					d6ab638b30 | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -7,3 +7,4 @@ yarn-error.log
 | 
			
		||||
config.ini
 | 
			
		||||
cert.key
 | 
			
		||||
cert.crt
 | 
			
		||||
server-package.json
 | 
			
		||||
							
								
								
									
										15
									
								
								.gitpod.dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								.gitpod.dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
FROM gitpod/workspace-full
 | 
			
		||||
 | 
			
		||||
RUN sudo apt-get update \
 | 
			
		||||
    && sudo apt-get install -yq --no-install-recommends \
 | 
			
		||||
        libpng16-16 \
 | 
			
		||||
        libpng-dev \
 | 
			
		||||
        pkg-config \
 | 
			
		||||
        autoconf \
 | 
			
		||||
        libtool \
 | 
			
		||||
        build-essential \
 | 
			
		||||
        nasm \
 | 
			
		||||
        libx11-dev \
 | 
			
		||||
        libxkbfile-dev \
 | 
			
		||||
    && sudo rm -rf /var/lib/apt/lists/*
 | 
			
		||||
 | 
			
		||||
@@ -1,7 +1,11 @@
 | 
			
		||||
image:
 | 
			
		||||
  file: .gitpod.dockerfile
 | 
			
		||||
 | 
			
		||||
tasks:
 | 
			
		||||
    - before: nvm install 10 && nvm use 10
 | 
			
		||||
      init: npm install
 | 
			
		||||
      command: npm run start
 | 
			
		||||
      command: npm run start-server
 | 
			
		||||
 | 
			
		||||
ports:
 | 
			
		||||
    - port: 8080
 | 
			
		||||
      onOpen: open-preview
 | 
			
		||||
							
								
								
									
										5
									
								
								.idea/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.idea/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
# Default ignored files
 | 
			
		||||
/workspace.xml
 | 
			
		||||
 | 
			
		||||
# Datasource local storage ignored files
 | 
			
		||||
/dataSources.local.xml
 | 
			
		||||
							
								
								
									
										3
									
								
								.idea/codeStyles/Project.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										3
									
								
								.idea/codeStyles/Project.xml
									
									
									
										generated
									
									
									
								
							@@ -6,5 +6,8 @@
 | 
			
		||||
        <option name="TAB_SIZE" value="2" />
 | 
			
		||||
      </value>
 | 
			
		||||
    </option>
 | 
			
		||||
    <JSCodeStyleSettings version="0">
 | 
			
		||||
      <option name="USE_EXPLICIT_JS_EXTENSION" value="TRUE" />
 | 
			
		||||
    </JSCodeStyleSettings>
 | 
			
		||||
  </code_scheme>
 | 
			
		||||
</component>
 | 
			
		||||
@@ -1,12 +1,11 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<dataSource name="document.db">
 | 
			
		||||
  <database-model serializer="dbm" dbms="SQLITE" family-id="SQLITE" format-version="4.14">
 | 
			
		||||
  <database-model serializer="dbm" dbms="SQLITE" family-id="SQLITE" format-version="4.16">
 | 
			
		||||
    <root id="1">
 | 
			
		||||
      <ServerVersion>3.16.1</ServerVersion>
 | 
			
		||||
      <ServerVersion>3.25.1</ServerVersion>
 | 
			
		||||
    </root>
 | 
			
		||||
    <schema id="2" parent="1" name="main">
 | 
			
		||||
      <Current>1</Current>
 | 
			
		||||
      <Visible>1</Visible>
 | 
			
		||||
    </schema>
 | 
			
		||||
    <collation id="3" parent="1" name="BINARY"/>
 | 
			
		||||
    <collation id="4" parent="1" name="NOCASE"/>
 | 
			
		||||
@@ -14,8 +13,8 @@
 | 
			
		||||
    <table id="6" parent="2" name="api_tokens"/>
 | 
			
		||||
    <table id="7" parent="2" name="attributes"/>
 | 
			
		||||
    <table id="8" parent="2" name="branches"/>
 | 
			
		||||
    <table id="9" parent="2" name="event_log"/>
 | 
			
		||||
    <table id="10" parent="2" name="links"/>
 | 
			
		||||
    <table id="9" parent="2" name="note_contents"/>
 | 
			
		||||
    <table id="10" parent="2" name="note_revision_contents"/>
 | 
			
		||||
    <table id="11" parent="2" name="note_revisions"/>
 | 
			
		||||
    <table id="12" parent="2" name="notes"/>
 | 
			
		||||
    <table id="13" parent="2" name="options"/>
 | 
			
		||||
@@ -38,7 +37,7 @@
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="21" parent="6" name="dateCreated">
 | 
			
		||||
    <column id="21" parent="6" name="utcDateCreated">
 | 
			
		||||
      <Position>3</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
@@ -58,7 +57,6 @@
 | 
			
		||||
    <index id="24" parent="6" name="sqlite_autoindex_api_tokens_1">
 | 
			
		||||
      <NameSurrogate>1</NameSurrogate>
 | 
			
		||||
      <ColNames>apiTokenId</ColNames>
 | 
			
		||||
      <ColumnCollations></ColumnCollations>
 | 
			
		||||
      <Unique>1</Unique>
 | 
			
		||||
    </index>
 | 
			
		||||
    <key id="25" parent="6">
 | 
			
		||||
@@ -98,12 +96,12 @@
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>0</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="32" parent="7" name="dateCreated">
 | 
			
		||||
    <column id="32" parent="7" name="utcDateCreated">
 | 
			
		||||
      <Position>7</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="33" parent="7" name="dateModified">
 | 
			
		||||
    <column id="33" parent="7" name="utcDateModified">
 | 
			
		||||
      <Position>8</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
@@ -127,170 +125,158 @@
 | 
			
		||||
    <index id="37" parent="7" name="sqlite_autoindex_attributes_1">
 | 
			
		||||
      <NameSurrogate>1</NameSurrogate>
 | 
			
		||||
      <ColNames>attributeId</ColNames>
 | 
			
		||||
      <ColumnCollations></ColumnCollations>
 | 
			
		||||
      <Unique>1</Unique>
 | 
			
		||||
    </index>
 | 
			
		||||
    <key id="38" parent="7">
 | 
			
		||||
    <index id="38" parent="7" name="IDX_attributes_noteId_index">
 | 
			
		||||
      <ColNames>noteId</ColNames>
 | 
			
		||||
    </index>
 | 
			
		||||
    <index id="39" parent="7" name="IDX_attributes_name_value">
 | 
			
		||||
      <ColNames>name
 | 
			
		||||
value</ColNames>
 | 
			
		||||
    </index>
 | 
			
		||||
    <index id="40" parent="7" name="IDX_attributes_name_index">
 | 
			
		||||
      <ColNames>name</ColNames>
 | 
			
		||||
    </index>
 | 
			
		||||
    <index id="41" parent="7" name="IDX_attributes_value_index">
 | 
			
		||||
      <ColNames>value</ColNames>
 | 
			
		||||
    </index>
 | 
			
		||||
    <key id="42" parent="7">
 | 
			
		||||
      <ColNames>attributeId</ColNames>
 | 
			
		||||
      <Primary>1</Primary>
 | 
			
		||||
      <UnderlyingIndexName>sqlite_autoindex_attributes_1</UnderlyingIndexName>
 | 
			
		||||
    </key>
 | 
			
		||||
    <column id="39" parent="8" name="branchId">
 | 
			
		||||
    <column id="43" parent="8" name="branchId">
 | 
			
		||||
      <Position>1</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="40" parent="8" name="noteId">
 | 
			
		||||
    <column id="44" parent="8" name="noteId">
 | 
			
		||||
      <Position>2</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="41" parent="8" name="parentNoteId">
 | 
			
		||||
    <column id="45" parent="8" name="parentNoteId">
 | 
			
		||||
      <Position>3</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="42" parent="8" name="notePosition">
 | 
			
		||||
    <column id="46" parent="8" name="notePosition">
 | 
			
		||||
      <Position>4</Position>
 | 
			
		||||
      <DataType>INTEGER|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="43" parent="8" name="prefix">
 | 
			
		||||
    <column id="47" parent="8" name="prefix">
 | 
			
		||||
      <Position>5</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="44" parent="8" name="isExpanded">
 | 
			
		||||
    <column id="48" parent="8" name="isExpanded">
 | 
			
		||||
      <Position>6</Position>
 | 
			
		||||
      <DataType>BOOLEAN|0s</DataType>
 | 
			
		||||
      <DataType>INTEGER|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>0</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="45" parent="8" name="isDeleted">
 | 
			
		||||
    <column id="49" parent="8" name="isDeleted">
 | 
			
		||||
      <Position>7</Position>
 | 
			
		||||
      <DataType>INTEGER|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>0</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="46" parent="8" name="dateModified">
 | 
			
		||||
    <column id="50" parent="8" name="utcDateModified">
 | 
			
		||||
      <Position>8</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="47" parent="8" name="hash">
 | 
			
		||||
    <column id="51" parent="8" name="utcDateCreated">
 | 
			
		||||
      <Position>9</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="52" parent="8" name="hash">
 | 
			
		||||
      <Position>10</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>""</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="48" parent="8" name="dateCreated">
 | 
			
		||||
      <Position>10</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>'1970-01-01T00:00:00.000Z'</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <index id="49" parent="8" name="sqlite_autoindex_branches_1">
 | 
			
		||||
    <index id="53" parent="8" name="sqlite_autoindex_branches_1">
 | 
			
		||||
      <NameSurrogate>1</NameSurrogate>
 | 
			
		||||
      <ColNames>branchId</ColNames>
 | 
			
		||||
      <ColumnCollations></ColumnCollations>
 | 
			
		||||
      <Unique>1</Unique>
 | 
			
		||||
    </index>
 | 
			
		||||
    <index id="50" parent="8" name="IDX_branches_noteId_parentNoteId">
 | 
			
		||||
    <index id="54" parent="8" name="IDX_branches_noteId_parentNoteId">
 | 
			
		||||
      <ColNames>noteId
 | 
			
		||||
parentNoteId</ColNames>
 | 
			
		||||
      <ColumnCollations></ColumnCollations>
 | 
			
		||||
    </index>
 | 
			
		||||
    <index id="51" parent="8" name="IDX_branches_noteId">
 | 
			
		||||
    <index id="55" parent="8" name="IDX_branches_noteId">
 | 
			
		||||
      <ColNames>noteId</ColNames>
 | 
			
		||||
      <ColumnCollations></ColumnCollations>
 | 
			
		||||
    </index>
 | 
			
		||||
    <index id="52" parent="8" name="IDX_branches_parentNoteId">
 | 
			
		||||
    <index id="56" parent="8" name="IDX_branches_parentNoteId">
 | 
			
		||||
      <ColNames>parentNoteId</ColNames>
 | 
			
		||||
      <ColumnCollations></ColumnCollations>
 | 
			
		||||
    </index>
 | 
			
		||||
    <key id="53" parent="8">
 | 
			
		||||
    <key id="57" parent="8">
 | 
			
		||||
      <ColNames>branchId</ColNames>
 | 
			
		||||
      <Primary>1</Primary>
 | 
			
		||||
      <UnderlyingIndexName>sqlite_autoindex_branches_1</UnderlyingIndexName>
 | 
			
		||||
    </key>
 | 
			
		||||
    <column id="54" parent="9" name="eventId">
 | 
			
		||||
    <column id="58" parent="9" name="noteId">
 | 
			
		||||
      <Position>1</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="55" parent="9" name="noteId">
 | 
			
		||||
    <column id="59" parent="9" name="content">
 | 
			
		||||
      <Position>2</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <DefaultExpression>NULL</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="56" parent="9" name="comment">
 | 
			
		||||
    <column id="60" parent="9" name="hash">
 | 
			
		||||
      <Position>3</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="57" parent="9" name="dateCreated">
 | 
			
		||||
      <Position>4</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <index id="58" parent="9" name="sqlite_autoindex_event_log_1">
 | 
			
		||||
      <NameSurrogate>1</NameSurrogate>
 | 
			
		||||
      <ColNames>eventId</ColNames>
 | 
			
		||||
      <ColumnCollations></ColumnCollations>
 | 
			
		||||
      <Unique>1</Unique>
 | 
			
		||||
    </index>
 | 
			
		||||
    <key id="59" parent="9">
 | 
			
		||||
      <ColNames>eventId</ColNames>
 | 
			
		||||
      <Primary>1</Primary>
 | 
			
		||||
      <UnderlyingIndexName>sqlite_autoindex_event_log_1</UnderlyingIndexName>
 | 
			
		||||
    </key>
 | 
			
		||||
    <column id="60" parent="10" name="linkId">
 | 
			
		||||
      <Position>1</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="61" parent="10" name="noteId">
 | 
			
		||||
      <Position>2</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="62" parent="10" name="targetNoteId">
 | 
			
		||||
      <Position>3</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="63" parent="10" name="type">
 | 
			
		||||
      <Position>4</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="64" parent="10" name="isDeleted">
 | 
			
		||||
      <Position>5</Position>
 | 
			
		||||
      <DataType>INTEGER|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>0</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="65" parent="10" name="dateCreated">
 | 
			
		||||
      <Position>6</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="66" parent="10" name="dateModified">
 | 
			
		||||
      <Position>7</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="67" parent="10" name="hash">
 | 
			
		||||
      <Position>8</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>""</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <index id="68" parent="10" name="sqlite_autoindex_links_1">
 | 
			
		||||
    <column id="61" parent="9" name="utcDateModified">
 | 
			
		||||
      <Position>4</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <index id="62" parent="9" name="sqlite_autoindex_note_contents_1">
 | 
			
		||||
      <NameSurrogate>1</NameSurrogate>
 | 
			
		||||
      <ColNames>linkId</ColNames>
 | 
			
		||||
      <ColumnCollations></ColumnCollations>
 | 
			
		||||
      <ColNames>noteId</ColNames>
 | 
			
		||||
      <Unique>1</Unique>
 | 
			
		||||
    </index>
 | 
			
		||||
    <key id="63" parent="9">
 | 
			
		||||
      <ColNames>noteId</ColNames>
 | 
			
		||||
      <Primary>1</Primary>
 | 
			
		||||
      <UnderlyingIndexName>sqlite_autoindex_note_contents_1</UnderlyingIndexName>
 | 
			
		||||
    </key>
 | 
			
		||||
    <column id="64" parent="10" name="noteRevisionId">
 | 
			
		||||
      <Position>1</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="65" parent="10" name="content">
 | 
			
		||||
      <Position>2</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="66" parent="10" name="hash">
 | 
			
		||||
      <Position>3</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>''</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="67" parent="10" name="utcDateModified">
 | 
			
		||||
      <Position>4</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <index id="68" parent="10" name="sqlite_autoindex_note_revision_contents_1">
 | 
			
		||||
      <NameSurrogate>1</NameSurrogate>
 | 
			
		||||
      <ColNames>noteRevisionId</ColNames>
 | 
			
		||||
      <Unique>1</Unique>
 | 
			
		||||
    </index>
 | 
			
		||||
    <key id="69" parent="10">
 | 
			
		||||
      <ColNames>linkId</ColNames>
 | 
			
		||||
      <ColNames>noteRevisionId</ColNames>
 | 
			
		||||
      <Primary>1</Primary>
 | 
			
		||||
      <UnderlyingIndexName>sqlite_autoindex_links_1</UnderlyingIndexName>
 | 
			
		||||
      <UnderlyingIndexName>sqlite_autoindex_note_revision_contents_1</UnderlyingIndexName>
 | 
			
		||||
    </key>
 | 
			
		||||
    <column id="70" parent="11" name="noteRevisionId">
 | 
			
		||||
      <Position>1</Position>
 | 
			
		||||
@@ -306,296 +292,351 @@ parentNoteId</ColNames>
 | 
			
		||||
      <Position>3</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="73" parent="11" name="content">
 | 
			
		||||
    <column id="73" parent="11" name="contentLength">
 | 
			
		||||
      <Position>4</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <DataType>INT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="74" parent="11" name="isProtected">
 | 
			
		||||
    <column id="74" parent="11" name="isErased">
 | 
			
		||||
      <Position>5</Position>
 | 
			
		||||
      <DataType>INT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>0</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="75" parent="11" name="dateModifiedFrom">
 | 
			
		||||
    <column id="75" parent="11" name="isProtected">
 | 
			
		||||
      <Position>6</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <DataType>INT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>0</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="76" parent="11" name="dateModifiedTo">
 | 
			
		||||
    <column id="76" parent="11" name="utcDateLastEdited">
 | 
			
		||||
      <Position>7</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="77" parent="11" name="type">
 | 
			
		||||
    <column id="77" parent="11" name="utcDateCreated">
 | 
			
		||||
      <Position>8</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>''</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="78" parent="11" name="mime">
 | 
			
		||||
    <column id="78" parent="11" name="utcDateModified">
 | 
			
		||||
      <Position>9</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>''</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="79" parent="11" name="hash">
 | 
			
		||||
    <column id="79" parent="11" name="dateLastEdited">
 | 
			
		||||
      <Position>10</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>""</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <index id="80" parent="11" name="sqlite_autoindex_note_revisions_1">
 | 
			
		||||
    <column id="80" parent="11" name="dateCreated">
 | 
			
		||||
      <Position>11</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="81" parent="11" name="type">
 | 
			
		||||
      <Position>12</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>''</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="82" parent="11" name="mime">
 | 
			
		||||
      <Position>13</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>''</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="83" parent="11" name="hash">
 | 
			
		||||
      <Position>14</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>''</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <index id="84" parent="11" name="sqlite_autoindex_note_revisions_1">
 | 
			
		||||
      <NameSurrogate>1</NameSurrogate>
 | 
			
		||||
      <ColNames>noteRevisionId</ColNames>
 | 
			
		||||
      <ColumnCollations></ColumnCollations>
 | 
			
		||||
      <Unique>1</Unique>
 | 
			
		||||
    </index>
 | 
			
		||||
    <index id="81" parent="11" name="IDX_note_revisions_noteId">
 | 
			
		||||
    <index id="85" parent="11" name="IDX_note_revisions_noteId">
 | 
			
		||||
      <ColNames>noteId</ColNames>
 | 
			
		||||
      <ColumnCollations></ColumnCollations>
 | 
			
		||||
    </index>
 | 
			
		||||
    <index id="82" parent="11" name="IDX_note_revisions_dateModifiedFrom">
 | 
			
		||||
      <ColNames>dateModifiedFrom</ColNames>
 | 
			
		||||
      <ColumnCollations></ColumnCollations>
 | 
			
		||||
    <index id="86" parent="11" name="IDX_note_revisions_utcDateLastEdited">
 | 
			
		||||
      <ColNames>utcDateLastEdited</ColNames>
 | 
			
		||||
    </index>
 | 
			
		||||
    <index id="83" parent="11" name="IDX_note_revisions_dateModifiedTo">
 | 
			
		||||
      <ColNames>dateModifiedTo</ColNames>
 | 
			
		||||
      <ColumnCollations></ColumnCollations>
 | 
			
		||||
    <index id="87" parent="11" name="IDX_note_revisions_utcDateCreated">
 | 
			
		||||
      <ColNames>utcDateCreated</ColNames>
 | 
			
		||||
    </index>
 | 
			
		||||
    <key id="84" parent="11">
 | 
			
		||||
    <index id="88" parent="11" name="IDX_note_revisions_dateLastEdited">
 | 
			
		||||
      <ColNames>dateLastEdited</ColNames>
 | 
			
		||||
    </index>
 | 
			
		||||
    <index id="89" parent="11" name="IDX_note_revisions_dateCreated">
 | 
			
		||||
      <ColNames>dateCreated</ColNames>
 | 
			
		||||
    </index>
 | 
			
		||||
    <key id="90" parent="11">
 | 
			
		||||
      <ColNames>noteRevisionId</ColNames>
 | 
			
		||||
      <Primary>1</Primary>
 | 
			
		||||
      <UnderlyingIndexName>sqlite_autoindex_note_revisions_1</UnderlyingIndexName>
 | 
			
		||||
    </key>
 | 
			
		||||
    <column id="85" parent="12" name="noteId">
 | 
			
		||||
    <column id="91" parent="12" name="noteId">
 | 
			
		||||
      <Position>1</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="86" parent="12" name="title">
 | 
			
		||||
    <column id="92" parent="12" name="title">
 | 
			
		||||
      <Position>2</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>"note"</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="87" parent="12" name="content">
 | 
			
		||||
    <column id="93" parent="12" name="contentLength">
 | 
			
		||||
      <Position>3</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <DefaultExpression>NULL</DefaultExpression>
 | 
			
		||||
      <DataType>INT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="88" parent="12" name="isProtected">
 | 
			
		||||
    <column id="94" parent="12" name="isProtected">
 | 
			
		||||
      <Position>4</Position>
 | 
			
		||||
      <DataType>INT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>0</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="89" parent="12" name="type">
 | 
			
		||||
    <column id="95" parent="12" name="type">
 | 
			
		||||
      <Position>5</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>'text'</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="90" parent="12" name="mime">
 | 
			
		||||
    <column id="96" parent="12" name="mime">
 | 
			
		||||
      <Position>6</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>'text/html'</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="91" parent="12" name="hash">
 | 
			
		||||
    <column id="97" parent="12" name="hash">
 | 
			
		||||
      <Position>7</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>""</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="92" parent="12" name="isDeleted">
 | 
			
		||||
    <column id="98" parent="12" name="isDeleted">
 | 
			
		||||
      <Position>8</Position>
 | 
			
		||||
      <DataType>INT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>0</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="93" parent="12" name="dateCreated">
 | 
			
		||||
    <column id="99" parent="12" name="isErased">
 | 
			
		||||
      <Position>9</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <DataType>INT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>0</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="94" parent="12" name="dateModified">
 | 
			
		||||
    <column id="100" parent="12" name="dateCreated">
 | 
			
		||||
      <Position>10</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <index id="95" parent="12" name="sqlite_autoindex_notes_1">
 | 
			
		||||
    <column id="101" parent="12" name="dateModified">
 | 
			
		||||
      <Position>11</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="102" parent="12" name="utcDateCreated">
 | 
			
		||||
      <Position>12</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="103" parent="12" name="utcDateModified">
 | 
			
		||||
      <Position>13</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <index id="104" parent="12" name="sqlite_autoindex_notes_1">
 | 
			
		||||
      <NameSurrogate>1</NameSurrogate>
 | 
			
		||||
      <ColNames>noteId</ColNames>
 | 
			
		||||
      <ColumnCollations></ColumnCollations>
 | 
			
		||||
      <Unique>1</Unique>
 | 
			
		||||
    </index>
 | 
			
		||||
    <key id="96" parent="12">
 | 
			
		||||
    <index id="105" parent="12" name="IDX_notes_title">
 | 
			
		||||
      <ColNames>title</ColNames>
 | 
			
		||||
    </index>
 | 
			
		||||
    <index id="106" parent="12" name="IDX_notes_type">
 | 
			
		||||
      <ColNames>type</ColNames>
 | 
			
		||||
    </index>
 | 
			
		||||
    <index id="107" parent="12" name="IDX_notes_isDeleted">
 | 
			
		||||
      <ColNames>isDeleted</ColNames>
 | 
			
		||||
    </index>
 | 
			
		||||
    <index id="108" parent="12" name="IDX_notes_dateCreated">
 | 
			
		||||
      <ColNames>dateCreated</ColNames>
 | 
			
		||||
    </index>
 | 
			
		||||
    <index id="109" parent="12" name="IDX_notes_dateModified">
 | 
			
		||||
      <ColNames>dateModified</ColNames>
 | 
			
		||||
    </index>
 | 
			
		||||
    <index id="110" parent="12" name="IDX_notes_utcDateCreated">
 | 
			
		||||
      <ColNames>utcDateCreated</ColNames>
 | 
			
		||||
    </index>
 | 
			
		||||
    <index id="111" parent="12" name="IDX_notes_utcDateModified">
 | 
			
		||||
      <ColNames>utcDateModified</ColNames>
 | 
			
		||||
    </index>
 | 
			
		||||
    <key id="112" parent="12">
 | 
			
		||||
      <ColNames>noteId</ColNames>
 | 
			
		||||
      <Primary>1</Primary>
 | 
			
		||||
      <UnderlyingIndexName>sqlite_autoindex_notes_1</UnderlyingIndexName>
 | 
			
		||||
    </key>
 | 
			
		||||
    <column id="97" parent="13" name="name">
 | 
			
		||||
    <column id="113" parent="13" name="name">
 | 
			
		||||
      <Position>1</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="98" parent="13" name="value">
 | 
			
		||||
    <column id="114" parent="13" name="value">
 | 
			
		||||
      <Position>2</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="99" parent="13" name="dateModified">
 | 
			
		||||
    <column id="115" parent="13" name="isSynced">
 | 
			
		||||
      <Position>3</Position>
 | 
			
		||||
      <DataType>INT|0s</DataType>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="100" parent="13" name="isSynced">
 | 
			
		||||
      <Position>4</Position>
 | 
			
		||||
      <DataType>INTEGER|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>0</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="101" parent="13" name="hash">
 | 
			
		||||
      <Position>5</Position>
 | 
			
		||||
    <column id="116" parent="13" name="hash">
 | 
			
		||||
      <Position>4</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>""</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="102" parent="13" name="dateCreated">
 | 
			
		||||
    <column id="117" parent="13" name="utcDateCreated">
 | 
			
		||||
      <Position>5</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="118" parent="13" name="utcDateModified">
 | 
			
		||||
      <Position>6</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>'1970-01-01T00:00:00.000Z'</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <index id="103" parent="13" name="sqlite_autoindex_options_1">
 | 
			
		||||
    <index id="119" parent="13" name="sqlite_autoindex_options_1">
 | 
			
		||||
      <NameSurrogate>1</NameSurrogate>
 | 
			
		||||
      <ColNames>name</ColNames>
 | 
			
		||||
      <ColumnCollations></ColumnCollations>
 | 
			
		||||
      <Unique>1</Unique>
 | 
			
		||||
    </index>
 | 
			
		||||
    <key id="104" parent="13">
 | 
			
		||||
    <key id="120" parent="13">
 | 
			
		||||
      <ColNames>name</ColNames>
 | 
			
		||||
      <Primary>1</Primary>
 | 
			
		||||
      <UnderlyingIndexName>sqlite_autoindex_options_1</UnderlyingIndexName>
 | 
			
		||||
    </key>
 | 
			
		||||
    <column id="105" parent="14" name="branchId">
 | 
			
		||||
    <column id="121" parent="14" name="noteId">
 | 
			
		||||
      <Position>1</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="106" parent="14" name="notePath">
 | 
			
		||||
    <column id="122" parent="14" name="notePath">
 | 
			
		||||
      <Position>2</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="107" parent="14" name="hash">
 | 
			
		||||
    <column id="123" parent="14" name="hash">
 | 
			
		||||
      <Position>3</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <DefaultExpression>""</DefaultExpression>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="108" parent="14" name="dateCreated">
 | 
			
		||||
    <column id="124" parent="14" name="utcDateCreated">
 | 
			
		||||
      <Position>4</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="109" parent="14" name="isDeleted">
 | 
			
		||||
    <column id="125" parent="14" name="isDeleted">
 | 
			
		||||
      <Position>5</Position>
 | 
			
		||||
      <DataType>INT|0s</DataType>
 | 
			
		||||
    </column>
 | 
			
		||||
    <index id="110" parent="14" name="sqlite_autoindex_recent_notes_1">
 | 
			
		||||
    <index id="126" parent="14" name="sqlite_autoindex_recent_notes_1">
 | 
			
		||||
      <NameSurrogate>1</NameSurrogate>
 | 
			
		||||
      <ColNames>branchId</ColNames>
 | 
			
		||||
      <ColumnCollations></ColumnCollations>
 | 
			
		||||
      <ColNames>noteId</ColNames>
 | 
			
		||||
      <Unique>1</Unique>
 | 
			
		||||
    </index>
 | 
			
		||||
    <key id="111" parent="14">
 | 
			
		||||
      <ColNames>branchId</ColNames>
 | 
			
		||||
    <key id="127" parent="14">
 | 
			
		||||
      <ColNames>noteId</ColNames>
 | 
			
		||||
      <Primary>1</Primary>
 | 
			
		||||
      <UnderlyingIndexName>sqlite_autoindex_recent_notes_1</UnderlyingIndexName>
 | 
			
		||||
    </key>
 | 
			
		||||
    <column id="112" parent="15" name="sourceId">
 | 
			
		||||
    <column id="128" parent="15" name="sourceId">
 | 
			
		||||
      <Position>1</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="113" parent="15" name="dateCreated">
 | 
			
		||||
    <column id="129" parent="15" name="utcDateCreated">
 | 
			
		||||
      <Position>2</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <index id="114" parent="15" name="sqlite_autoindex_source_ids_1">
 | 
			
		||||
    <index id="130" parent="15" name="sqlite_autoindex_source_ids_1">
 | 
			
		||||
      <NameSurrogate>1</NameSurrogate>
 | 
			
		||||
      <ColNames>sourceId</ColNames>
 | 
			
		||||
      <ColumnCollations></ColumnCollations>
 | 
			
		||||
      <Unique>1</Unique>
 | 
			
		||||
    </index>
 | 
			
		||||
    <key id="115" parent="15">
 | 
			
		||||
    <key id="131" parent="15">
 | 
			
		||||
      <ColNames>sourceId</ColNames>
 | 
			
		||||
      <Primary>1</Primary>
 | 
			
		||||
      <UnderlyingIndexName>sqlite_autoindex_source_ids_1</UnderlyingIndexName>
 | 
			
		||||
    </key>
 | 
			
		||||
    <column id="116" parent="16" name="type">
 | 
			
		||||
    <column id="132" parent="16" name="type">
 | 
			
		||||
      <Position>1</Position>
 | 
			
		||||
      <DataType>text|0s</DataType>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="117" parent="16" name="name">
 | 
			
		||||
    <column id="133" parent="16" name="name">
 | 
			
		||||
      <Position>2</Position>
 | 
			
		||||
      <DataType>text|0s</DataType>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="118" parent="16" name="tbl_name">
 | 
			
		||||
    <column id="134" parent="16" name="tbl_name">
 | 
			
		||||
      <Position>3</Position>
 | 
			
		||||
      <DataType>text|0s</DataType>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="119" parent="16" name="rootpage">
 | 
			
		||||
    <column id="135" parent="16" name="rootpage">
 | 
			
		||||
      <Position>4</Position>
 | 
			
		||||
      <DataType>integer|0s</DataType>
 | 
			
		||||
      <DataType>int|0s</DataType>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="120" parent="16" name="sql">
 | 
			
		||||
    <column id="136" parent="16" name="sql">
 | 
			
		||||
      <Position>5</Position>
 | 
			
		||||
      <DataType>text|0s</DataType>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="121" parent="17" name="name">
 | 
			
		||||
    <column id="137" parent="17" name="name">
 | 
			
		||||
      <Position>1</Position>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="122" parent="17" name="seq">
 | 
			
		||||
    <column id="138" parent="17" name="seq">
 | 
			
		||||
      <Position>2</Position>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="123" parent="18" name="id">
 | 
			
		||||
    <column id="139" parent="18" name="id">
 | 
			
		||||
      <Position>1</Position>
 | 
			
		||||
      <DataType>INTEGER|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
      <SequenceIdentity>1</SequenceIdentity>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="124" parent="18" name="entityName">
 | 
			
		||||
    <column id="140" parent="18" name="entityName">
 | 
			
		||||
      <Position>2</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="125" parent="18" name="entityId">
 | 
			
		||||
    <column id="141" parent="18" name="entityId">
 | 
			
		||||
      <Position>3</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="126" parent="18" name="sourceId">
 | 
			
		||||
    <column id="142" parent="18" name="sourceId">
 | 
			
		||||
      <Position>4</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <column id="127" parent="18" name="syncDate">
 | 
			
		||||
    <column id="143" parent="18" name="utcSyncDate">
 | 
			
		||||
      <Position>5</Position>
 | 
			
		||||
      <DataType>TEXT|0s</DataType>
 | 
			
		||||
      <NotNull>1</NotNull>
 | 
			
		||||
    </column>
 | 
			
		||||
    <index id="128" parent="18" name="IDX_sync_entityName_entityId">
 | 
			
		||||
    <index id="144" parent="18" name="IDX_sync_entityName_entityId">
 | 
			
		||||
      <ColNames>entityName
 | 
			
		||||
entityId</ColNames>
 | 
			
		||||
      <ColumnCollations></ColumnCollations>
 | 
			
		||||
      <Unique>1</Unique>
 | 
			
		||||
    </index>
 | 
			
		||||
    <index id="129" parent="18" name="IDX_sync_syncDate">
 | 
			
		||||
      <ColNames>syncDate</ColNames>
 | 
			
		||||
      <ColumnCollations></ColumnCollations>
 | 
			
		||||
    <index id="145" parent="18" name="IDX_sync_utcSyncDate">
 | 
			
		||||
      <ColNames>utcSyncDate</ColNames>
 | 
			
		||||
    </index>
 | 
			
		||||
    <key id="130" parent="18">
 | 
			
		||||
    <key id="146" parent="18">
 | 
			
		||||
      <ColNames>id</ColNames>
 | 
			
		||||
      <Primary>1</Primary>
 | 
			
		||||
    </key>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								.idea/jsLibraryMappings.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.idea/jsLibraryMappings.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project version="4">
 | 
			
		||||
  <component name="JavaScriptLibraryMappings">
 | 
			
		||||
    <file url="PROJECT" libraries="{@types/jquery}" />
 | 
			
		||||
  </component>
 | 
			
		||||
</project>
 | 
			
		||||
@@ -1,11 +1,9 @@
 | 
			
		||||
FROM node:10.15.0-alpine
 | 
			
		||||
FROM node:12.13.0-alpine
 | 
			
		||||
 | 
			
		||||
# Create app directory
 | 
			
		||||
WORKDIR /usr/src/app
 | 
			
		||||
 | 
			
		||||
# Copy both package.json and package-lock.json
 | 
			
		||||
# where available (npm@5+)
 | 
			
		||||
COPY package.json package-lock.json ./
 | 
			
		||||
COPY server-package.json package.json
 | 
			
		||||
 | 
			
		||||
# Install app dependencies
 | 
			
		||||
RUN set -x \
 | 
			
		||||
@@ -18,6 +16,7 @@ RUN set -x \
 | 
			
		||||
        make \
 | 
			
		||||
        nasm \
 | 
			
		||||
        libpng-dev \
 | 
			
		||||
        python \
 | 
			
		||||
    && npm install --production \
 | 
			
		||||
    && apk del .build-dependencies
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								README.md
									
									
									
									
									
								
							@@ -15,16 +15,17 @@ Trilium Notes is a hierarchical note taking application with focus on building l
 | 
			
		||||
* 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
 | 
			
		||||
* Strong [note encryption](https://github.com/zadam/trilium/wiki/Protected-notes) with per-note granularity
 | 
			
		||||
* [Relation maps](https://github.com/zadam/trilium/wiki/Relation-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)
 | 
			
		||||
* Scales well in both usability and performance upwards of 100 000 notes
 | 
			
		||||
* Touch optimized [mobile frontend](https://github.com/zadam/trilium/wiki/Mobile-frontend) for smartphones and tablets
 | 
			
		||||
* [Night theme](https://github.com/zadam/trilium/wiki/Themes)
 | 
			
		||||
* [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import) and [Markdown import & export](https://github.com/zadam/trilium/wiki/Markdown)
 | 
			
		||||
* [Web Clipper](https://github.com/zadam/trilium/wiki/Web-clipper) for easy saving of web content
 | 
			
		||||
 | 
			
		||||
## Builds
 | 
			
		||||
 | 
			
		||||
Trilium is provided as either desktop application (Linux, Windows, Mac) or web application hosted on your server (Linux).
 | 
			
		||||
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).
 | 
			
		||||
 | 
			
		||||
* If you want to use Trilium on the desktop, download binary release for your platform from [latest release](https://github.com/zadam/trilium/releases/latest), unzip the package and run ```trilium``` executable.
 | 
			
		||||
* If you want to install Trilium on server, follow [this page](https://github.com/zadam/trilium/wiki/Server-installation).
 | 
			
		||||
@@ -45,5 +46,12 @@ Use a browser based dev environment
 | 
			
		||||
Or clone locally and run
 | 
			
		||||
```
 | 
			
		||||
npm install
 | 
			
		||||
npm run start
 | 
			
		||||
npm run start-server
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Shoutouts
 | 
			
		||||
 | 
			
		||||
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - best WYSIWYG editor on the market, very interactive and listening team
 | 
			
		||||
* [FancyTree](https://github.com/mar10/fancytree) - very feature rich tree library without real competition. Trilium Notes would not be the same without it.
 | 
			
		||||
* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with support for huge amount of languages
 | 
			
		||||
* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library without competition. Used in [relation maps](https://github.com/zadam/trilium/wiki/Relation-map) and [link maps](https://github.com/zadam/trilium/wiki/Link-map)
 | 
			
		||||
							
								
								
									
										7
									
								
								bin/build-debian.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								bin/build-debian.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
echo "Packaging debian x64 distribution..."
 | 
			
		||||
 | 
			
		||||
VERSION=`jq -r ".version" package.json`
 | 
			
		||||
 | 
			
		||||
./node_modules/.bin/electron-installer-debian --config bin/deb-options.json --options.version=${VERSION} --arch amd64
 | 
			
		||||
@@ -1,5 +1,12 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
VERSION=`jq -r ".version" package.json`
 | 
			
		||||
SERIES=${VERSION:0:4}-latest
 | 
			
		||||
 | 
			
		||||
sudo docker build -t zadam/trilium:latest -t zadam/trilium:$VERSION .
 | 
			
		||||
cat package.json | grep -v electron > server-package.json
 | 
			
		||||
 | 
			
		||||
sudo docker build -t zadam/trilium:$VERSION -t zadam/trilium:$SERIES .
 | 
			
		||||
 | 
			
		||||
if [[ $VERSION != *"beta"* ]]; then
 | 
			
		||||
  sudo docker tag zadam/trilium:$VERSION zadam/trilium:latest
 | 
			
		||||
fi
 | 
			
		||||
 
 | 
			
		||||
@@ -1,20 +1,41 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
SRC_DIR=./dist/trilium-linux-x64-src
 | 
			
		||||
 | 
			
		||||
if [ "$1" != "DONTCOPY" ]
 | 
			
		||||
then
 | 
			
		||||
    ./bin/copy-trilium.sh $SRC_DIR
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo "Copying required linux-x64 binaries"
 | 
			
		||||
 | 
			
		||||
rm -r $SRC_DIR/node_modules/sqlite3/lib/binding/*
 | 
			
		||||
rm -r $SRC_DIR/node_modules/pngquant-bin/vendor/*
 | 
			
		||||
rm -r $SRC_DIR/node_modules/@felixrieseberg/spellchecker/build/Release/*
 | 
			
		||||
 | 
			
		||||
cp -r bin/deps/linux-x64/sqlite/* $SRC_DIR/node_modules/sqlite3/lib/binding/
 | 
			
		||||
cp bin/deps/linux-x64/image/pngquant $SRC_DIR/node_modules/pngquant-bin/vendor/
 | 
			
		||||
cp bin/deps/linux-x64/spellchecker/* $SRC_DIR/node_modules/@felixrieseberg/spellchecker/build/Release/
 | 
			
		||||
 | 
			
		||||
./node_modules/.bin/electron-packager $SRC_DIR --asar --out=dist --executable-name=trilium --platform=linux --arch=x64 --overwrite
 | 
			
		||||
 | 
			
		||||
BUILD_DIR=./dist/trilium-linux-x64
 | 
			
		||||
rm -rf $BUILD_DIR
 | 
			
		||||
 | 
			
		||||
rm -r node_modules/sqlite3/lib/binding/*
 | 
			
		||||
 | 
			
		||||
cp -r bin/deps/linux-x64/sqlite/* node_modules/sqlite3/lib/binding/
 | 
			
		||||
 | 
			
		||||
./node_modules/.bin/electron-packager . --asar --out=dist --executable-name=trilium --platform=linux --arch=x64 --overwrite
 | 
			
		||||
 | 
			
		||||
mv "./dist/Trilium Notes-linux-x64" $BUILD_DIR
 | 
			
		||||
 | 
			
		||||
cp images/app-icons/png/128x128.png $BUILD_DIR/icon.png
 | 
			
		||||
 | 
			
		||||
# removing software WebGL binaries because they are pretty huge and not necessary
 | 
			
		||||
rm -r $BUILD_DIR/swiftshader
 | 
			
		||||
 | 
			
		||||
echo "Packaging linux x64 electron distribution..."
 | 
			
		||||
VERSION=`jq -r ".version" package.json`
 | 
			
		||||
 | 
			
		||||
tar cJf $BUILD_DIR-${VERSION}.tar.xz $BUILD_DIR
 | 
			
		||||
cd dist
 | 
			
		||||
 | 
			
		||||
tar cJf trilium-linux-x64-${VERSION}.tar.xz trilium-linux-x64
 | 
			
		||||
 | 
			
		||||
cd ..
 | 
			
		||||
 | 
			
		||||
bin/build-debian.sh
 | 
			
		||||
@@ -1,27 +1,36 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
SRC_DIR=./dist/trilium-mac-x64-src
 | 
			
		||||
 | 
			
		||||
if [ "$1" != "DONTCOPY" ]
 | 
			
		||||
then
 | 
			
		||||
    ./bin/copy-trilium.sh $SRC_DIR
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo "Copying required mac binaries"
 | 
			
		||||
 | 
			
		||||
rm -r $SRC_DIR/node_modules/sqlite3/lib/binding/*
 | 
			
		||||
rm -r $SRC_DIR/node_modules/mozjpeg/vendor/*
 | 
			
		||||
rm -r $SRC_DIR/node_modules/pngquant-bin/vendor/*
 | 
			
		||||
rm -r $SRC_DIR/node_modules/giflossy/vendor/*
 | 
			
		||||
rm -r $SRC_DIR/node_modules/@felixrieseberg/spellchecker/build/Release/*
 | 
			
		||||
rm -r $SRC_DIR/node_modules/keyboard-layout/build/Release/*
 | 
			
		||||
 | 
			
		||||
cp -r bin/deps/mac-x64/sqlite/* $SRC_DIR/node_modules/sqlite3/lib/binding/
 | 
			
		||||
cp bin/deps/mac-x64/image/cjpeg $SRC_DIR/node_modules/mozjpeg/vendor/
 | 
			
		||||
cp bin/deps/mac-x64/image/pngquant $SRC_DIR/node_modules/pngquant-bin/vendor/
 | 
			
		||||
cp bin/deps/mac-x64/image/gifsicle $SRC_DIR/node_modules/giflossy/vendor/
 | 
			
		||||
cp bin/deps/mac-x64/spellchecker/* $SRC_DIR/node_modules/@felixrieseberg/spellchecker/build/Release/
 | 
			
		||||
cp bin/deps/mac-x64/keyboard-layout-manager.node $SRC_DIR/node_modules/keyboard-layout/build/Release/
 | 
			
		||||
 | 
			
		||||
./node_modules/.bin/electron-packager $SRC_DIR --asar --out=dist --executable-name=trilium --platform=darwin --arch=x64 --overwrite --icon=images/app-icons/mac/icon.icns
 | 
			
		||||
 | 
			
		||||
BUILD_DIR=./dist/trilium-mac-x64
 | 
			
		||||
rm -rf $BUILD_DIR
 | 
			
		||||
 | 
			
		||||
echo "Copying required mac binaries"
 | 
			
		||||
 | 
			
		||||
rm -r node_modules/sqlite3/lib/binding/*
 | 
			
		||||
rm -r node_modules/mozjpeg/vendor/*
 | 
			
		||||
rm -r node_modules/pngquant-bin/vendor/*
 | 
			
		||||
rm -r node_modules/giflossy/vendor/*
 | 
			
		||||
 | 
			
		||||
cp -r bin/deps/mac-x64/sqlite/* node_modules/sqlite3/lib/binding/
 | 
			
		||||
cp bin/deps/mac-x64/image/cjpeg node_modules/mozjpeg/vendor/
 | 
			
		||||
cp bin/deps/mac-x64/image/pngquant node_modules/pngquant-bin/vendor/
 | 
			
		||||
cp bin/deps/mac-x64/image/gifsicle node_modules/giflossy/vendor/
 | 
			
		||||
 | 
			
		||||
./node_modules/.bin/electron-packager . --asar --out=dist --executable-name=trilium --platform=darwin --arch=x64 --overwrite --icon=src/public/images/app-icons/mac/icon.icns
 | 
			
		||||
 | 
			
		||||
# Mac build has by default useless directory level
 | 
			
		||||
mv "./dist/Trilium Notes-darwin-x64" $BUILD_DIR
 | 
			
		||||
 | 
			
		||||
./reset-local.sh
 | 
			
		||||
 | 
			
		||||
echo "Zipping mac x64 electron distribution..."
 | 
			
		||||
 | 
			
		||||
VERSION=`jq -r ".version" package.json`
 | 
			
		||||
 
 | 
			
		||||
@@ -1,38 +1,32 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
PKG_DIR=dist/trilium-linux-x64-server
 | 
			
		||||
NODE_VERSION=10.15.0
 | 
			
		||||
NODE_VERSION=12.13.0
 | 
			
		||||
 | 
			
		||||
rm -r $PKG_DIR
 | 
			
		||||
mkdir $PKG_DIR
 | 
			
		||||
cd $PKG_DIR
 | 
			
		||||
if [ "$1" != "DONTCOPY" ]
 | 
			
		||||
then
 | 
			
		||||
    ./bin/copy-trilium.sh $PKG_DIR
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
cd dist
 | 
			
		||||
wget https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.xz
 | 
			
		||||
tar xvfJ node-v${NODE_VERSION}-linux-x64.tar.xz
 | 
			
		||||
rm node-v${NODE_VERSION}-linux-x64.tar.xz
 | 
			
		||||
 | 
			
		||||
mv node-v${NODE_VERSION}-linux-x64 node
 | 
			
		||||
 | 
			
		||||
cp -r ../../node_modules/ ./
 | 
			
		||||
cp -r ../../src/ ./
 | 
			
		||||
cp -r ../../db/ ./
 | 
			
		||||
cp -r ../../package.json ./
 | 
			
		||||
cp -r ../../package-lock.json ./
 | 
			
		||||
cp -r ../../README.md ./
 | 
			
		||||
cp -r ../../LICENSE ./
 | 
			
		||||
cp -r ../../config-sample.ini ./
 | 
			
		||||
 | 
			
		||||
rm -r ./node_modules/electron*
 | 
			
		||||
 | 
			
		||||
rm -r ./node_modules/sqlite3/lib/binding/*
 | 
			
		||||
 | 
			
		||||
cp -r ../../bin/deps/linux-x64/sqlite/node* ./node_modules/sqlite3/lib/binding/
 | 
			
		||||
 | 
			
		||||
printf "#/bin/sh\n./node/bin/node src/www" > trilium.sh
 | 
			
		||||
chmod 755 trilium.sh
 | 
			
		||||
 | 
			
		||||
cd ..
 | 
			
		||||
 | 
			
		||||
VERSION=`jq -r ".version" ../package.json`
 | 
			
		||||
mv dist/node-v${NODE_VERSION}-linux-x64 $PKG_DIR/node
 | 
			
		||||
 | 
			
		||||
tar cJf trilium-linux-x64-server-${VERSION}.tar.gz trilium-linux-x64-server
 | 
			
		||||
rm -r $PKG_DIR/node_modules/electron*
 | 
			
		||||
 | 
			
		||||
rm -r $PKG_DIR/node_modules/sqlite3/lib/binding/*
 | 
			
		||||
 | 
			
		||||
cp -r ./bin/deps/linux-x64/sqlite/node* $PKG_DIR/node_modules/sqlite3/lib/binding/
 | 
			
		||||
 | 
			
		||||
printf "#!/bin/sh\n./node/bin/node src/www" > $PKG_DIR/trilium.sh
 | 
			
		||||
chmod 755 $PKG_DIR/trilium.sh
 | 
			
		||||
 | 
			
		||||
VERSION=`jq -r ".version" package.json`
 | 
			
		||||
 | 
			
		||||
cd dist
 | 
			
		||||
 | 
			
		||||
tar cJf trilium-linux-x64-server-${VERSION}.tar.xz trilium-linux-x64-server
 | 
			
		||||
 
 | 
			
		||||
@@ -1,29 +1,39 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
BUILD_DIR=./dist/trilium-windows-x64
 | 
			
		||||
rm -rf $BUILD_DIR
 | 
			
		||||
SRC_DIR=./dist/trilium-windows-x64-src
 | 
			
		||||
 | 
			
		||||
if [ "$1" != "DONTCOPY" ]
 | 
			
		||||
then
 | 
			
		||||
    ./bin/copy-trilium.sh $SRC_DIR
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo "Copying required windows binaries"
 | 
			
		||||
 | 
			
		||||
rm -r node_modules/sqlite3/lib/binding/*
 | 
			
		||||
rm -r node_modules/mozjpeg/vendor/*
 | 
			
		||||
rm -r node_modules/pngquant-bin/vendor/*
 | 
			
		||||
rm -r node_modules/giflossy/vendor/*
 | 
			
		||||
rm -r $SRC_DIR/node_modules/sqlite3/lib/binding/*
 | 
			
		||||
rm -r $SRC_DIR/node_modules/mozjpeg/vendor/*
 | 
			
		||||
rm -r $SRC_DIR/node_modules/pngquant-bin/vendor/*
 | 
			
		||||
rm -r $SRC_DIR/node_modules/giflossy/vendor/*
 | 
			
		||||
rm -r $SRC_DIR/node_modules/@felixrieseberg/spellchecker/build/Release/*
 | 
			
		||||
rm -r $SRC_DIR/node_modules/keyboard-layout/build/Release/*
 | 
			
		||||
rm -r $SRC_DIR/node_modules/cld/build/Release/*
 | 
			
		||||
 | 
			
		||||
cp -r bin/deps/win-x64/sqlite/* node_modules/sqlite3/lib/binding/
 | 
			
		||||
cp bin/deps/win-x64/image/cjpeg.exe node_modules/mozjpeg/vendor/
 | 
			
		||||
cp bin/deps/win-x64/image/pngquant.exe node_modules/pngquant-bin/vendor/
 | 
			
		||||
cp bin/deps/win-x64/image/gifsicle.exe node_modules/giflossy/vendor/
 | 
			
		||||
cp -r bin/deps/win-x64/sqlite/* $SRC_DIR/node_modules/sqlite3/lib/binding/
 | 
			
		||||
cp bin/deps/win-x64/image/cjpeg.exe $SRC_DIR/node_modules/mozjpeg/vendor/
 | 
			
		||||
cp bin/deps/win-x64/image/pngquant.exe $SRC_DIR/node_modules/pngquant-bin/vendor/
 | 
			
		||||
cp bin/deps/win-x64/image/gifsicle.exe $SRC_DIR/node_modules/giflossy/vendor/
 | 
			
		||||
cp bin/deps/win-x64/spellchecker/* $SRC_DIR/node_modules/@felixrieseberg/spellchecker/build/Release/
 | 
			
		||||
cp bin/deps/win-x64/keyboard-layout-manager.node $SRC_DIR/node_modules/keyboard-layout/build/Release/
 | 
			
		||||
 | 
			
		||||
./node_modules/.bin/electron-packager . --asar --out=dist --executable-name=trilium --platform=win32  --arch=x64 --overwrite --icon=src/public/images/app-icons/win/icon.ico
 | 
			
		||||
./node_modules/.bin/electron-packager $SRC_DIR --asar --out=dist --executable-name=trilium --platform=win32  --arch=x64 --overwrite --icon=images/app-icons/win/icon.ico
 | 
			
		||||
 | 
			
		||||
BUILD_DIR=./dist/trilium-windows-x64
 | 
			
		||||
rm -rf $BUILD_DIR
 | 
			
		||||
 | 
			
		||||
mv "./dist/Trilium Notes-win32-x64" $BUILD_DIR
 | 
			
		||||
 | 
			
		||||
# removing software WebGL binaries because they are pretty huge and not necessary
 | 
			
		||||
rm -r $BUILD_DIR/swiftshader
 | 
			
		||||
 | 
			
		||||
./reset-local.sh
 | 
			
		||||
 | 
			
		||||
echo "Zipping windows x64 electron distribution..."
 | 
			
		||||
VERSION=`jq -r ".version" package.json`
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										25
									
								
								bin/build.sh
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								bin/build.sh
									
									
									
									
									
								
							@@ -1,18 +1,23 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
rm -r node_modules
 | 
			
		||||
 | 
			
		||||
npm install
 | 
			
		||||
 | 
			
		||||
echo "Deleting existing builds"
 | 
			
		||||
 | 
			
		||||
rm -r dist/*
 | 
			
		||||
rm -rf dist/*
 | 
			
		||||
 | 
			
		||||
bin/build-win-x64.sh
 | 
			
		||||
SRC_DIR=dist/trilium-src
 | 
			
		||||
 | 
			
		||||
bin/build-mac-x64.sh
 | 
			
		||||
bin/copy-trilium.sh $SRC_DIR
 | 
			
		||||
 | 
			
		||||
# building X64 linux as the last so electron-rebuild will prepare X64 binaries for local development
 | 
			
		||||
bin/build-linux-x64.sh
 | 
			
		||||
# we'll just copy the same SRC dir to all the builds so we don't have to do npm install in each separately
 | 
			
		||||
cp -r $SRC_DIR ./dist/trilium-linux-x64-src
 | 
			
		||||
cp -r $SRC_DIR ./dist/trilium-linux-x64-server
 | 
			
		||||
cp -r $SRC_DIR ./dist/trilium-windows-x64-src
 | 
			
		||||
cp -r $SRC_DIR ./dist/trilium-mac-x64-src
 | 
			
		||||
 | 
			
		||||
bin/build-server.sh
 | 
			
		||||
bin/build-win-x64.sh DONTCOPY
 | 
			
		||||
 | 
			
		||||
bin/build-mac-x64.sh DONTCOPY
 | 
			
		||||
 | 
			
		||||
bin/build-linux-x64.sh DONTCOPY
 | 
			
		||||
 | 
			
		||||
bin/build-server.sh DONTCOPY
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										32
									
								
								bin/copy-trilium.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										32
									
								
								bin/copy-trilium.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
if [[ $# -eq 0 ]] ; then
 | 
			
		||||
    echo "Missing argument of target directory"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
DIR=$1
 | 
			
		||||
 | 
			
		||||
rm -rf $DIR
 | 
			
		||||
mkdir $DIR
 | 
			
		||||
 | 
			
		||||
echo "Copying Trilium to build directory $DIR"
 | 
			
		||||
 | 
			
		||||
cp -r images $DIR/
 | 
			
		||||
cp -r libraries $DIR/
 | 
			
		||||
cp -r src $DIR/
 | 
			
		||||
cp -r db $DIR/
 | 
			
		||||
cp -r package.json $DIR/
 | 
			
		||||
cp -r package-lock.json $DIR/
 | 
			
		||||
cp -r README.md $DIR/
 | 
			
		||||
cp -r LICENSE $DIR/
 | 
			
		||||
cp -r config-sample.ini $DIR/
 | 
			
		||||
cp -r electron.js $DIR/
 | 
			
		||||
 | 
			
		||||
# run in subshell (so we return to original dir)
 | 
			
		||||
(cd $DIR && npm install --only=prod)
 | 
			
		||||
 | 
			
		||||
rm -r $DIR/node_modules/cld/deps
 | 
			
		||||
 | 
			
		||||
find $DIR/libraries -name "*.map" -type f -delete
 | 
			
		||||
find $DIR/libraries -name "hunspell.lib" -type f -delete
 | 
			
		||||
							
								
								
									
										14
									
								
								bin/deb-options.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								bin/deb-options.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
{
 | 
			
		||||
  "src": "dist/trilium-linux-x64",
 | 
			
		||||
  "dest": "dist/",
 | 
			
		||||
  "name": "trilium",
 | 
			
		||||
  "productName": "Trilium Notes",
 | 
			
		||||
  "genericName": "Note taker",
 | 
			
		||||
  "description": "Trilium Notes is a hierarchical note taking application with focus on building large personal knowledge bases.",
 | 
			
		||||
  "sections": "misc",
 | 
			
		||||
  "maintainer": "zadam.apps@gmail.com",
 | 
			
		||||
  "homepage": "https://github.com/zadam/trilium",
 | 
			
		||||
  "bin": "trilium",
 | 
			
		||||
  "icon": "dist/trilium-linux-x64/icon.png",
 | 
			
		||||
  "categories": [ "Office" ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								bin/deps/linux-x64/image/pngquant
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/deps/linux-x64/image/pngquant
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								bin/deps/linux-x64/spellchecker/hunspell.a
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/deps/linux-x64/spellchecker/hunspell.a
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								bin/deps/linux-x64/spellchecker/spellchecker.node
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/deps/linux-x64/spellchecker/spellchecker.node
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								bin/deps/linux-x64/sqlite/electron-v6.0-linux-x64/node_sqlite3.node
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/deps/linux-x64/sqlite/electron-v6.0-linux-x64/node_sqlite3.node
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								bin/deps/linux-x64/sqlite/node-v72-linux-x64/node_sqlite3.node
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/deps/linux-x64/sqlite/node-v72-linux-x64/node_sqlite3.node
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										0
									
								
								bin/deps/mac-x64/image/cjpeg
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										0
									
								
								bin/deps/mac-x64/image/cjpeg
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
								
								
									
										0
									
								
								bin/deps/mac-x64/image/pngquant
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										0
									
								
								bin/deps/mac-x64/image/pngquant
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
								
								
									
										
											BIN
										
									
								
								bin/deps/mac-x64/keyboard-layout-manager.node
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/deps/mac-x64/keyboard-layout-manager.node
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								bin/deps/mac-x64/spellchecker/hunspell.a
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/deps/mac-x64/spellchecker/hunspell.a
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								bin/deps/mac-x64/spellchecker/spellchecker.node
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/deps/mac-x64/spellchecker/spellchecker.node
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								bin/deps/mac-x64/sqlite/electron-v6.0-darwin-x64/node_sqlite3.node
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/deps/mac-x64/sqlite/electron-v6.0-darwin-x64/node_sqlite3.node
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										0
									
								
								bin/deps/win-x64/image/cjpeg.exe
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										0
									
								
								bin/deps/win-x64/image/cjpeg.exe
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
								
								
									
										
											BIN
										
									
								
								bin/deps/win-x64/keyboard-layout-manager.node
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/deps/win-x64/keyboard-layout-manager.node
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								bin/deps/win-x64/spellchecker/hunspell.lib
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/deps/win-x64/spellchecker/hunspell.lib
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								bin/deps/win-x64/spellchecker/spellchecker.lib
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/deps/win-x64/spellchecker/spellchecker.lib
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								bin/deps/win-x64/spellchecker/spellchecker.node
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bin/deps/win-x64/spellchecker/spellchecker.node
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -5,5 +5,12 @@ if [[ $# -eq 0 ]] ; then
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
VERSION=$1
 | 
			
		||||
SERIES=${VERSION:0:4}-latest
 | 
			
		||||
 | 
			
		||||
sudo docker push zadam/trilium:$VERSION
 | 
			
		||||
sudo docker push zadam/trilium:$SERIES
 | 
			
		||||
 | 
			
		||||
if [[ $1 != *"beta"* ]]; then
 | 
			
		||||
  sudo docker push zadam/trilium:latest
 | 
			
		||||
sudo docker push zadam/trilium:$1
 | 
			
		||||
fi
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,7 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
export GITHUB_REPO=trilium
 | 
			
		||||
 | 
			
		||||
if [[ $# -eq 0 ]] ; then
 | 
			
		||||
    echo "Missing argument of new version"
 | 
			
		||||
    exit 1
 | 
			
		||||
@@ -42,10 +44,11 @@ git push origin $TAG
 | 
			
		||||
 | 
			
		||||
bin/build.sh
 | 
			
		||||
 | 
			
		||||
LINUX_X64_BUILD=trilium-linux-x64-$VERSION.tar.gz
 | 
			
		||||
LINUX_X64_BUILD=trilium-linux-x64-$VERSION.tar.xz
 | 
			
		||||
DEBIAN_X64_BUILD=trilium_${VERSION}_amd64.deb
 | 
			
		||||
WINDOWS_X64_BUILD=trilium-windows-x64-$VERSION.zip
 | 
			
		||||
MAC_X64_BUILD=trilium-mac-x64-$VERSION.zip
 | 
			
		||||
SERVER_BUILD=trilium-linux-x64-server-$VERSION.tar.gz
 | 
			
		||||
SERVER_BUILD=trilium-linux-x64-server-$VERSION.tar.xz
 | 
			
		||||
 | 
			
		||||
echo "Creating release in GitHub"
 | 
			
		||||
 | 
			
		||||
@@ -59,6 +62,13 @@ github-release release \
 | 
			
		||||
    --tag $TAG \
 | 
			
		||||
    --name "$TAG release" $EXTRA
 | 
			
		||||
 | 
			
		||||
echo "Uploading debian x64 package"
 | 
			
		||||
 | 
			
		||||
github-release upload \
 | 
			
		||||
    --tag $TAG \
 | 
			
		||||
    --name "$DEBIAN_X64_BUILD" \
 | 
			
		||||
    --file "dist/$DEBIAN_X64_BUILD"
 | 
			
		||||
 | 
			
		||||
echo "Uploading linux x64 build"
 | 
			
		||||
 | 
			
		||||
github-release upload \
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
./node_modules/.bin/electron-rebuild --arch=x64
 | 
			
		||||
@@ -3,6 +3,8 @@
 | 
			
		||||
instanceName=
 | 
			
		||||
 | 
			
		||||
[Network]
 | 
			
		||||
# host setting is relevant only for web deployments - set the host on which the server will listen
 | 
			
		||||
# host=0.0.0.0
 | 
			
		||||
# port setting is relevant only for web deployments, desktop builds run on random free port
 | 
			
		||||
port=8080
 | 
			
		||||
# true for TLS/SSL/HTTPS (secure), false for HTTP (unsecure).
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								db/demo.tar
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								db/demo.tar
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										11
									
								
								db/migrations/0124__readd_font_sizes.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								db/migrations/0124__readd_font_sizes.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
INSERT INTO options (name, value, dateCreated, dateModified, isSynced)
 | 
			
		||||
  SELECT 'mainFontSize', '100', '2019-01-13T18:31:00.874Z', '2019-01-13T18:31:00.874Z', 0
 | 
			
		||||
    WHERE NOT EXISTS (SELECT 1 FROM options WHERE name = 'mainFontSize');
 | 
			
		||||
 | 
			
		||||
INSERT INTO options (name, value, dateCreated, dateModified, isSynced)
 | 
			
		||||
  SELECT 'treeFontSize', '100', '2019-01-13T18:31:00.874Z', '2019-01-13T18:31:00.874Z', 0
 | 
			
		||||
    WHERE NOT EXISTS (SELECT 1 FROM options WHERE name = 'treeFontSize');
 | 
			
		||||
 | 
			
		||||
INSERT INTO options (name, value, dateCreated, dateModified, isSynced)
 | 
			
		||||
  SELECT 'detailFontSize', '110', '2019-01-13T18:31:00.874Z', '2019-01-13T18:31:00.874Z', 0
 | 
			
		||||
    WHERE NOT EXISTS (SELECT 1 FROM options WHERE name = 'detailFontSize');
 | 
			
		||||
							
								
								
									
										35
									
								
								db/migrations/0125__create_note_content_table.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								db/migrations/0125__create_note_content_table.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "note_contents" (
 | 
			
		||||
  `noteContentId`	TEXT NOT NULL,
 | 
			
		||||
  `noteId`	TEXT NOT NULL,
 | 
			
		||||
  `isProtected`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
  `content`	TEXT NULL DEFAULT NULL,
 | 
			
		||||
  `hash` TEXT DEFAULT "" NOT NULL,
 | 
			
		||||
  `dateCreated`	TEXT NOT NULL,
 | 
			
		||||
  `dateModified` TEXT NOT NULL,
 | 
			
		||||
  PRIMARY KEY(`noteContentId`)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
CREATE UNIQUE INDEX `IDX_note_contents_noteId` ON `note_contents` (`noteId`);
 | 
			
		||||
 | 
			
		||||
INSERT INTO note_contents (noteContentId, noteId, isProtected, content, dateCreated, dateModified)
 | 
			
		||||
  SELECT 'C' || SUBSTR(noteId, 2), noteId, isProtected, content, dateCreated, dateModified FROM notes;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "notes_mig" (
 | 
			
		||||
  `noteId`	TEXT NOT NULL,
 | 
			
		||||
  `title`	TEXT NOT NULL DEFAULT "note",
 | 
			
		||||
  `isProtected`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
  `type` TEXT NOT NULL DEFAULT 'text',
 | 
			
		||||
  `mime` TEXT NOT NULL DEFAULT 'text/html',
 | 
			
		||||
  `hash` TEXT DEFAULT "" NOT NULL,
 | 
			
		||||
  `isDeleted`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
  `dateCreated`	TEXT NOT NULL,
 | 
			
		||||
  `dateModified`	TEXT NOT NULL,
 | 
			
		||||
  PRIMARY KEY(`noteId`)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
INSERT INTO notes_mig (noteId, title, isProtected, isDeleted, dateCreated, dateModified, type, mime, hash)
 | 
			
		||||
SELECT noteId, title, isProtected, isDeleted, dateCreated, dateModified, type, mime, hash FROM notes;
 | 
			
		||||
 | 
			
		||||
DROP TABLE notes;
 | 
			
		||||
 | 
			
		||||
ALTER TABLE notes_mig RENAME TO notes;
 | 
			
		||||
							
								
								
									
										2
									
								
								db/migrations/0126__fill_sync_for_note_contents.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								db/migrations/0126__fill_sync_for_note_contents.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
INSERT OR REPLACE INTO sync (entityName, entityId, sourceId, syncDate)
 | 
			
		||||
SELECT 'note_contents', noteContentId, '', '2019-03-02T18:07:29.182Z' FROM note_contents;
 | 
			
		||||
							
								
								
									
										6
									
								
								db/migrations/0127__fix_inconsistent_isProtected.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								db/migrations/0127__fix_inconsistent_isProtected.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
UPDATE notes SET title = 'Recovered protected note', isProtected = 0 WHERE noteId IN (
 | 
			
		||||
    SELECT noteId FROM notes JOIN note_contents USING(noteId)
 | 
			
		||||
    WHERE notes.isProtected = 1
 | 
			
		||||
      AND note_contents.isProtected = 0
 | 
			
		||||
      AND notes.isDeleted = 0
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										0
									
								
								db/migrations/0128__add_note_fulltext.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								db/migrations/0128__add_note_fulltext.sql
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										1
									
								
								db/migrations/0129__fill_note_fulltext.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								db/migrations/0129__fill_note_fulltext.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
module.exports = async () => {};
 | 
			
		||||
							
								
								
									
										236
									
								
								db/migrations/0130__rename_dates_to_utc.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										236
									
								
								db/migrations/0130__rename_dates_to_utc.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,236 @@
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "sync_mig" (
 | 
			
		||||
                                    `id`	INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
 | 
			
		||||
                                    `entityName`	TEXT NOT NULL,
 | 
			
		||||
                                    `entityId`	TEXT NOT NULL,
 | 
			
		||||
                                    `sourceId` TEXT NOT NULL,
 | 
			
		||||
                                    `utcSyncDate`	TEXT NOT NULL);
 | 
			
		||||
 | 
			
		||||
INSERT INTO sync_mig (id, entityName, entityId, sourceId, utcSyncDate)
 | 
			
		||||
  SELECT id, entityName, entityId, sourceId, REPLACE(syncDate, 'T', ' ') FROM sync;
 | 
			
		||||
 | 
			
		||||
DROP TABLE sync;
 | 
			
		||||
ALTER TABLE sync_mig RENAME TO sync;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "source_ids_mig" (
 | 
			
		||||
                                          `sourceId`	TEXT NOT NULL,
 | 
			
		||||
                                          `utcDateCreated`	TEXT NOT NULL,
 | 
			
		||||
                                          PRIMARY KEY(`sourceId`)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
INSERT INTO source_ids_mig (sourceId, utcDateCreated)
 | 
			
		||||
  SELECT sourceId, REPLACE(dateCreated, 'T', ' ') FROM source_ids;
 | 
			
		||||
 | 
			
		||||
DROP TABLE source_ids;
 | 
			
		||||
ALTER TABLE source_ids_mig RENAME TO source_ids;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "note_revisions_mig" (
 | 
			
		||||
                                              `noteRevisionId`	TEXT NOT NULL PRIMARY KEY,
 | 
			
		||||
                                              `noteId`	TEXT NOT NULL,
 | 
			
		||||
                                              `title`	TEXT,
 | 
			
		||||
                                              `content`	TEXT,
 | 
			
		||||
                                              `isProtected`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
                                              `utcDateModifiedFrom` TEXT NOT NULL,
 | 
			
		||||
                                              `utcDateModifiedTo` TEXT NOT NULL,
 | 
			
		||||
                                              `dateModifiedFrom` TEXT NOT NULL,
 | 
			
		||||
                                              `dateModifiedTo` TEXT NOT NULL,
 | 
			
		||||
                                              type TEXT DEFAULT '' NOT NULL,
 | 
			
		||||
                                              mime TEXT DEFAULT '' NOT NULL,
 | 
			
		||||
                                              hash TEXT DEFAULT "" NOT NULL);
 | 
			
		||||
 | 
			
		||||
INSERT INTO note_revisions_mig (noteRevisionId, noteId, title, content, isProtected, utcDateModifiedFrom, utcDateModifiedTo, dateModifiedFrom, dateModifiedTo, type, mime, hash)
 | 
			
		||||
SELECT noteRevisionId, noteId, title, content, isProtected, REPLACE(dateModifiedFrom, 'T', ' '), REPLACE(dateModifiedTo, 'T', ' '), REPLACE(REPLACE(dateModifiedFrom, 'T', ' '), 'Z', '+0000'), REPLACE(REPLACE(dateModifiedTo, 'T', ' '), 'Z', '+0000'), type, mime, hash FROM note_revisions;
 | 
			
		||||
 | 
			
		||||
DROP TABLE note_revisions;
 | 
			
		||||
ALTER TABLE note_revisions_mig RENAME TO note_revisions;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "api_tokens_mig"
 | 
			
		||||
(
 | 
			
		||||
  apiTokenId TEXT PRIMARY KEY NOT NULL,
 | 
			
		||||
  token TEXT NOT NULL,
 | 
			
		||||
  utcDateCreated TEXT NOT NULL,
 | 
			
		||||
  isDeleted INT NOT NULL DEFAULT 0,
 | 
			
		||||
  hash TEXT DEFAULT "" NOT NULL);
 | 
			
		||||
 | 
			
		||||
INSERT INTO api_tokens_mig (apiTokenId, token, utcDateCreated, isDeleted, hash)
 | 
			
		||||
  SELECT apiTokenId, token, REPLACE(dateCreated, 'T', ' '), isDeleted, hash FROM api_tokens;
 | 
			
		||||
 | 
			
		||||
DROP TABLE api_tokens;
 | 
			
		||||
ALTER TABLE api_tokens_mig RENAME TO api_tokens;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "branches_mig" (
 | 
			
		||||
                                        `branchId`	TEXT NOT NULL,
 | 
			
		||||
                                        `noteId`	TEXT NOT NULL,
 | 
			
		||||
                                        `parentNoteId`	TEXT NOT NULL,
 | 
			
		||||
                                        `notePosition`	INTEGER NOT NULL,
 | 
			
		||||
                                        `prefix`	TEXT,
 | 
			
		||||
                                        `isExpanded`	BOOLEAN,
 | 
			
		||||
                                        `isDeleted`	INTEGER NOT NULL DEFAULT 0,
 | 
			
		||||
                                        `utcDateModified`	TEXT NOT NULL,
 | 
			
		||||
                                        utcDateCreated TEXT NOT NULL,
 | 
			
		||||
                                        hash TEXT DEFAULT "" NOT NULL,
 | 
			
		||||
                                        PRIMARY KEY(`branchId`)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
INSERT INTO branches_mig (branchId, noteId, parentNoteId, notePosition, prefix, isExpanded, isDeleted, utcDateModified, utcDateCreated, hash)
 | 
			
		||||
  SELECT branchId, noteId, parentNoteId, notePosition, prefix, isExpanded, isDeleted, REPLACE(dateModified, 'T', ' '), REPLACE(dateCreated, 'T', ' '), hash FROM branches;
 | 
			
		||||
 | 
			
		||||
DROP TABLE branches;
 | 
			
		||||
ALTER TABLE branches_mig RENAME TO branches;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "recent_notes_mig" (
 | 
			
		||||
                                            `branchId` TEXT NOT NULL PRIMARY KEY,
 | 
			
		||||
                                            `notePath` TEXT NOT NULL,
 | 
			
		||||
                                            hash TEXT DEFAULT "" NOT NULL,
 | 
			
		||||
                                            `utcDateCreated` TEXT NOT NULL,
 | 
			
		||||
                                            isDeleted INT
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
INSERT INTO recent_notes_mig (branchId, notePath, hash, utcDateCreated, isDeleted)
 | 
			
		||||
  SELECT branchId, notePath, hash, REPLACE(dateCreated, 'T', ' '), isDeleted FROM recent_notes;
 | 
			
		||||
 | 
			
		||||
DROP TABLE recent_notes;
 | 
			
		||||
ALTER TABLE recent_notes_mig RENAME TO recent_notes;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "event_log_mig" (
 | 
			
		||||
                                         `eventId`	TEXT NOT NULL PRIMARY KEY,
 | 
			
		||||
                                         `noteId`	TEXT,
 | 
			
		||||
                                         `comment`	TEXT,
 | 
			
		||||
                                         `utcDateCreated`	TEXT NOT NULL
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
INSERT INTO event_log_mig (eventId, noteId, comment, utcDateCreated)
 | 
			
		||||
  SELECT eventId, noteId, comment, REPLACE(dateCreated, 'T', ' ') FROM event_log;
 | 
			
		||||
 | 
			
		||||
DROP TABLE event_log;
 | 
			
		||||
ALTER TABLE event_log_mig RENAME TO event_log;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "options_mig"
 | 
			
		||||
(
 | 
			
		||||
  name TEXT not null PRIMARY KEY,
 | 
			
		||||
  value TEXT,
 | 
			
		||||
  isSynced INTEGER default 0 not null,
 | 
			
		||||
  hash TEXT default "" not null,
 | 
			
		||||
  utcDateCreated TEXT not null,
 | 
			
		||||
  utcDateModified TEXT NOT NULL
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
INSERT INTO options_mig (name, value, isSynced, hash, utcDateCreated, utcDateModified)
 | 
			
		||||
  SELECT name, value, isSynced, hash, REPLACE(dateCreated, 'T', ' '), REPLACE(dateModified, 'T', ' ') FROM options;
 | 
			
		||||
 | 
			
		||||
DROP TABLE options;
 | 
			
		||||
ALTER TABLE options_mig RENAME TO options;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE attributes_mig
 | 
			
		||||
(
 | 
			
		||||
  attributeId      TEXT not null primary key,
 | 
			
		||||
  noteId       TEXT not null,
 | 
			
		||||
  type         TEXT not null,
 | 
			
		||||
  name         TEXT not null,
 | 
			
		||||
  value        TEXT default '' not null,
 | 
			
		||||
  position     INT  default 0 not null,
 | 
			
		||||
  utcDateCreated  TEXT not null,
 | 
			
		||||
  utcDateModified TEXT not null,
 | 
			
		||||
  isDeleted    INT  not null,
 | 
			
		||||
  hash         TEXT default "" not null,
 | 
			
		||||
  isInheritable int DEFAULT 0 NULL);
 | 
			
		||||
 | 
			
		||||
INSERT INTO attributes_mig (attributeId, noteId, type, name, value, position, utcDateCreated, utcDateModified, isDeleted, hash, isInheritable)
 | 
			
		||||
  SELECT attributeId, noteId, type, name, value, position, REPLACE(dateCreated, 'T', ' '), REPLACE(dateModified, 'T', ' '), isDeleted, hash, isInheritable FROM attributes;
 | 
			
		||||
 | 
			
		||||
DROP TABLE attributes;
 | 
			
		||||
ALTER TABLE attributes_mig RENAME TO attributes;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "links_mig" (
 | 
			
		||||
                                     `linkId`	TEXT NOT NULL,
 | 
			
		||||
                                     `noteId`	TEXT NOT NULL,
 | 
			
		||||
                                     `targetNoteId`	TEXT NOT NULL,
 | 
			
		||||
                                     `type` TEXT NOT NULL,
 | 
			
		||||
                                     `hash` TEXT DEFAULT "" NOT NULL,
 | 
			
		||||
                                     `isDeleted`	INTEGER NOT NULL DEFAULT 0,
 | 
			
		||||
                                     `utcDateCreated`	TEXT NOT NULL,
 | 
			
		||||
                                     `utcDateModified`	TEXT NOT NULL,
 | 
			
		||||
                                     PRIMARY KEY(`linkId`)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
INSERT INTO links_mig (linkId, noteId, targetNoteId, type, hash, isDeleted, utcDateCreated, utcDateModified)
 | 
			
		||||
  SELECT linkId, noteId, targetNoteId, type, hash, isDeleted, REPLACE(dateCreated, 'T', ' '), REPLACE(dateModified, 'T', ' ') FROM links;
 | 
			
		||||
 | 
			
		||||
DROP TABLE links;
 | 
			
		||||
ALTER TABLE links_mig RENAME TO links;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "note_contents_mig" (
 | 
			
		||||
                                             `noteContentId`	TEXT NOT NULL,
 | 
			
		||||
                                             `noteId`	TEXT NOT NULL,
 | 
			
		||||
                                             `isProtected`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
                                             `content`	TEXT NULL DEFAULT NULL,
 | 
			
		||||
                                             `hash` TEXT DEFAULT "" NOT NULL,
 | 
			
		||||
                                             `utcDateCreated`	TEXT NOT NULL,
 | 
			
		||||
                                             `utcDateModified` TEXT NOT NULL,
 | 
			
		||||
                                             PRIMARY KEY(`noteContentId`)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
INSERT INTO note_contents_mig (noteContentId, noteId, isProtected, content, hash, utcDateCreated, utcDateModified)
 | 
			
		||||
  SELECT noteContentId, noteId, isProtected, content, hash, REPLACE(dateCreated, 'T', ' '), REPLACE(dateModified, 'T', ' ') FROM note_contents;
 | 
			
		||||
 | 
			
		||||
DROP TABLE note_contents;
 | 
			
		||||
ALTER TABLE note_contents_mig RENAME TO note_contents;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "notes_mig" (
 | 
			
		||||
                                     `noteId`	TEXT NOT NULL,
 | 
			
		||||
                                     `title`	TEXT NOT NULL DEFAULT "note",
 | 
			
		||||
                                     `isProtected`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
                                     `type` TEXT NOT NULL DEFAULT 'text',
 | 
			
		||||
                                     `mime` TEXT NOT NULL DEFAULT 'text/html',
 | 
			
		||||
                                     `hash` TEXT DEFAULT "" NOT NULL,
 | 
			
		||||
                                     `isDeleted`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
                                     `dateCreated`	TEXT NOT NULL,
 | 
			
		||||
                                     `dateModified`	TEXT NOT NULL,
 | 
			
		||||
                                     `utcDateCreated`	TEXT NOT NULL,
 | 
			
		||||
                                     `utcDateModified`	TEXT NOT NULL,
 | 
			
		||||
                                     PRIMARY KEY(`noteId`)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
INSERT INTO notes_mig (noteId, title, isProtected, type, mime, hash, isDeleted, dateCreated, dateModified, utcDateCreated, utcDateModified)
 | 
			
		||||
  SELECT noteId, title, isProtected, type, mime, hash, isDeleted, REPLACE(REPLACE(dateCreated, 'T', ' '), 'Z', '+0000'), REPLACE(REPLACE(dateModified, 'T', ' '), 'Z', '+0000'), REPLACE(dateCreated, 'T', ' '), REPLACE(dateModified, 'T', ' ') FROM notes;
 | 
			
		||||
 | 
			
		||||
DROP TABLE notes;
 | 
			
		||||
ALTER TABLE notes_mig RENAME TO notes;
 | 
			
		||||
 | 
			
		||||
CREATE UNIQUE INDEX `IDX_sync_entityName_entityId` ON `sync` (
 | 
			
		||||
                                                              `entityName`,
 | 
			
		||||
                                                              `entityId`
 | 
			
		||||
  );
 | 
			
		||||
CREATE INDEX `IDX_sync_utcSyncDate` ON `sync` (
 | 
			
		||||
                                            `utcSyncDate`
 | 
			
		||||
  );
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (
 | 
			
		||||
                                                              `noteId`
 | 
			
		||||
  );
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_dateModifiedFrom` ON `note_revisions` (
 | 
			
		||||
                                                                        `utcDateModifiedFrom`
 | 
			
		||||
  );
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_dateModifiedTo` ON `note_revisions` (
 | 
			
		||||
                                                                      `utcDateModifiedTo`
 | 
			
		||||
  );
 | 
			
		||||
CREATE INDEX `IDX_branches_noteId` ON `branches` (
 | 
			
		||||
                                                  `noteId`
 | 
			
		||||
  );
 | 
			
		||||
CREATE INDEX `IDX_branches_noteId_parentNoteId` ON `branches` (
 | 
			
		||||
                                                               `noteId`,
 | 
			
		||||
                                                               `parentNoteId`
 | 
			
		||||
  );
 | 
			
		||||
CREATE INDEX IDX_branches_parentNoteId ON branches (parentNoteId);
 | 
			
		||||
CREATE INDEX IDX_attributes_name_value
 | 
			
		||||
  on attributes (name, value);
 | 
			
		||||
CREATE INDEX IDX_links_noteId_index
 | 
			
		||||
  on links (noteId);
 | 
			
		||||
CREATE INDEX IDX_links_targetNoteId_index
 | 
			
		||||
  on links (targetNoteId);
 | 
			
		||||
CREATE INDEX IDX_attributes_name_index
 | 
			
		||||
  on attributes (name);
 | 
			
		||||
CREATE INDEX IDX_attributes_noteId_index
 | 
			
		||||
  on attributes (noteId);
 | 
			
		||||
CREATE INDEX IDX_attributes_value_index
 | 
			
		||||
  on attributes (value);
 | 
			
		||||
CREATE UNIQUE INDEX `IDX_note_contents_noteId` ON `note_contents` (`noteId`);
 | 
			
		||||
							
								
								
									
										13
									
								
								db/migrations/0131__cleanup_note_contents.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								db/migrations/0131__cleanup_note_contents.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "note_contents_mig" (
 | 
			
		||||
                                                   `noteId`	TEXT NOT NULL,
 | 
			
		||||
                                                   `content`	TEXT NULL DEFAULT NULL,
 | 
			
		||||
                                                   `hash` TEXT DEFAULT "" NOT NULL,
 | 
			
		||||
                                                   `utcDateModified` TEXT NOT NULL,
 | 
			
		||||
                                                   PRIMARY KEY(`noteId`)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
INSERT INTO note_contents_mig (noteId, content, hash, utcDateModified)
 | 
			
		||||
SELECT noteId, content, hash, utcDateModified FROM note_contents;
 | 
			
		||||
 | 
			
		||||
DROP TABLE note_contents;
 | 
			
		||||
ALTER TABLE note_contents_mig RENAME TO note_contents;
 | 
			
		||||
							
								
								
									
										5
									
								
								db/migrations/0132__fill_sync.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								db/migrations/0132__fill_sync.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
const syncTableService = require('../../src/services/sync_table');
 | 
			
		||||
 | 
			
		||||
module.exports = async () => {
 | 
			
		||||
    await syncTableService.fillAllSyncRows();
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										1
									
								
								db/migrations/0133__drop_note_fulltext.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								db/migrations/0133__drop_note_fulltext.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
DROP TABLE IF EXISTS note_fulltext;
 | 
			
		||||
							
								
								
									
										4
									
								
								db/migrations/0134__create_openTabs_option.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								db/migrations/0134__create_openTabs_option.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
 | 
			
		||||
    SELECT 'openTabs', '[{"notePath":"' || value || '","active": true,"tabId":"1111"}]', '2019-05-01T18:31:00.874Z', '2019-05-01T18:31:00.874Z', 0 FROM options WHERE name = 'startNotePath';
 | 
			
		||||
 | 
			
		||||
DELETE FROM options WHERE name = 'startNotePath';
 | 
			
		||||
							
								
								
									
										2
									
								
								db/migrations/0135__add_hideTabRowForOneTab_option.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								db/migrations/0135__add_hideTabRowForOneTab_option.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
 | 
			
		||||
    VALUES ('hideTabRowForOneTab', 'false', '2019-05-01T18:31:00.874Z', '2019-05-01T18:31:00.874Z', 0);
 | 
			
		||||
							
								
								
									
										12
									
								
								db/migrations/0136__update_recent_notes.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								db/migrations/0136__update_recent_notes.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
drop table recent_notes;
 | 
			
		||||
 | 
			
		||||
create table recent_notes
 | 
			
		||||
(
 | 
			
		||||
    noteId TEXT not null primary key,
 | 
			
		||||
    notePath TEXT not null,
 | 
			
		||||
    hash TEXT default "" not null,
 | 
			
		||||
    utcDateCreated TEXT not null,
 | 
			
		||||
    isDeleted INT
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
delete from sync where entityName = 'recent_notes';
 | 
			
		||||
							
								
								
									
										10
									
								
								db/migrations/0137__links_to_attributes.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								db/migrations/0137__links_to_attributes.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
UPDATE links SET type = 'internal-link' WHERE type = 'hyper';
 | 
			
		||||
UPDATE links SET type = 'image-link' WHERE type = 'image';
 | 
			
		||||
UPDATE links SET type = 'relation-map-link' WHERE type = 'relation-map';
 | 
			
		||||
 | 
			
		||||
INSERT INTO attributes (attributeId, noteId, type, name, value, position, utcDateCreated, utcDateModified, isDeleted, hash, isInheritable)
 | 
			
		||||
SELECT linkId, noteId, 'relation', type, targetNoteId, 0, utcDateCreated, utcDateModified, isDeleted, hash, 0 FROM links;
 | 
			
		||||
 | 
			
		||||
UPDATE sync SET entityName = 'attributes' WHERE entityName = 'links';
 | 
			
		||||
 | 
			
		||||
DROP TABLE links;
 | 
			
		||||
							
								
								
									
										5
									
								
								db/migrations/0138__sidebar_sizing.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								db/migrations/0138__sidebar_sizing.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
 | 
			
		||||
VALUES ('sidebarMinWidth', '350', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
 | 
			
		||||
 | 
			
		||||
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
 | 
			
		||||
VALUES ('sidebarWidthPercent', '25', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
 | 
			
		||||
							
								
								
									
										2
									
								
								db/migrations/0139__show_sidebar_in_new_tab.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								db/migrations/0139__show_sidebar_in_new_tab.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
 | 
			
		||||
VALUES ('showSidebarInNewTab', 'true', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
 | 
			
		||||
							
								
								
									
										14
									
								
								db/migrations/0140__widget_config.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								db/migrations/0140__widget_config.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
 | 
			
		||||
VALUES ('noteInfoWidget', '{"enabled":true,"expanded":true,"position":100}', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
 | 
			
		||||
 | 
			
		||||
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
 | 
			
		||||
VALUES ('attributesWidget', '{"enabled":true,"expanded":true,"position":200}', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
 | 
			
		||||
 | 
			
		||||
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
 | 
			
		||||
VALUES ('linkMapWidget', '{"enabled":true,"expanded":true,"position":300}', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
 | 
			
		||||
 | 
			
		||||
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
 | 
			
		||||
VALUES ('noteRevisionsWidget', '{"enabled":true,"expanded":true,"position":400}', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
 | 
			
		||||
 | 
			
		||||
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
 | 
			
		||||
VALUES ('whatLinksHereWidget', '{"enabled":false,"expanded":true,"position":500}', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
 | 
			
		||||
							
								
								
									
										5
									
								
								db/migrations/0141__add_code_note_mime_types.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								db/migrations/0141__add_code_note_mime_types.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
 | 
			
		||||
VALUES ('codeNotesMimeTypes', '["text/x-csrc","text/x-c++src","text/x-csharp","text/css","text/x-go","text/x-groovy","text/x-haskell","text/html","message/http","text/x-java","application/javascript;env=frontend","application/javascript;env=backend","application/json","text/x-kotlin","text/x-markdown","text/x-perl","text/x-php","text/x-python","text/x-ruby",null,"text/x-sql","text/x-swift","text/xml","text/x-yaml"]', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 1);
 | 
			
		||||
 | 
			
		||||
INSERT INTO sync (entityName, entityId, sourceId, utcSyncDate)
 | 
			
		||||
VALUES ('options' ,'codeNotesMimeTypes', 'SYNC_FILL', '2018-01-01T00:00:00.000Z');
 | 
			
		||||
							
								
								
									
										2
									
								
								db/migrations/0142__similar_notes_widget.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								db/migrations/0142__similar_notes_widget.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
 | 
			
		||||
VALUES ('similarNotesWidget', '{"enabled":true,"expanded":true,"position":600}', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
 | 
			
		||||
							
								
								
									
										1
									
								
								db/migrations/0143__drop_event_log.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								db/migrations/0143__drop_event_log.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
DROP TABLE event_log;
 | 
			
		||||
							
								
								
									
										2
									
								
								db/migrations/0144__edited_notes_widget.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								db/migrations/0144__edited_notes_widget.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
 | 
			
		||||
VALUES ('editedNotesWidget', '{"enabled":true,"expanded":true,"position":50}', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
 | 
			
		||||
							
								
								
									
										2
									
								
								db/migrations/0145__calendar_widget.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								db/migrations/0145__calendar_widget.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
 | 
			
		||||
VALUES ('calendarWidget', '{"enabled":true,"expanded":true,"position":20}', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
 | 
			
		||||
							
								
								
									
										5
									
								
								db/migrations/0146__add_spell_check_options.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								db/migrations/0146__add_spell_check_options.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
 | 
			
		||||
VALUES ('spellCheckEnabled', 'true', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
 | 
			
		||||
 | 
			
		||||
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
 | 
			
		||||
VALUES ('spellCheckLanguageCode', 'en-US', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
 | 
			
		||||
@@ -0,0 +1,3 @@
 | 
			
		||||
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
 | 
			
		||||
SELECT 'hideTabRowForOneTab', 'false', '2019-05-01T18:31:00.874Z', '2019-05-01T18:31:00.874Z', 0
 | 
			
		||||
WHERE NOT EXISTS(SELECT 1 FROM options WHERE name = 'hideTabRowForOneTab');
 | 
			
		||||
							
								
								
									
										22
									
								
								db/migrations/0148__make_isExpanded_not_null.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								db/migrations/0148__make_isExpanded_not_null.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "mig_branches" (
 | 
			
		||||
                                          `branchId`	TEXT NOT NULL,
 | 
			
		||||
                                          `noteId`	TEXT NOT NULL,
 | 
			
		||||
                                          `parentNoteId`	TEXT NOT NULL,
 | 
			
		||||
                                          `notePosition`	INTEGER NOT NULL,
 | 
			
		||||
                                          `prefix`	TEXT,
 | 
			
		||||
                                          `isExpanded`	INTEGER NOT NULL DEFAULT 0,
 | 
			
		||||
                                          `isDeleted`	INTEGER NOT NULL DEFAULT 0,
 | 
			
		||||
                                          `utcDateModified`	TEXT NOT NULL,
 | 
			
		||||
                                          utcDateCreated TEXT NOT NULL,
 | 
			
		||||
                                          hash TEXT DEFAULT "" NOT NULL,
 | 
			
		||||
                                          PRIMARY KEY(`branchId`));
 | 
			
		||||
 | 
			
		||||
INSERT INTO mig_branches (branchId, noteId, parentNoteId, notePosition, prefix, isExpanded, isDeleted, utcDateModified, utcDateCreated, hash)
 | 
			
		||||
SELECT branchId, noteId, parentNoteId, notePosition, prefix, COALESCE(isExpanded, 0), isDeleted, utcDateModified, utcDateCreated, hash FROM branches;
 | 
			
		||||
 | 
			
		||||
DROP TABLE branches;
 | 
			
		||||
ALTER TABLE mig_branches RENAME TO branches;
 | 
			
		||||
 | 
			
		||||
CREATE INDEX `IDX_branches_noteId` ON `branches` (`noteId`);
 | 
			
		||||
CREATE INDEX `IDX_branches_noteId_parentNoteId` ON `branches` (`noteId`,`parentNoteId`);
 | 
			
		||||
CREATE INDEX IDX_branches_parentNoteId ON branches (parentNoteId);
 | 
			
		||||
							
								
								
									
										2
									
								
								db/migrations/0149__space_out_positions.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								db/migrations/0149__space_out_positions.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
UPDATE branches SET notePosition = notePosition * 10;
 | 
			
		||||
UPDATE attributes SET position = position * 10;
 | 
			
		||||
							
								
								
									
										36
									
								
								db/migrations/0150__note_revision_contents.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								db/migrations/0150__note_revision_contents.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "note_revisions_mig" (`noteRevisionId`	TEXT NOT NULL PRIMARY KEY,
 | 
			
		||||
                                                `noteId`	TEXT NOT NULL,
 | 
			
		||||
                                                `title`	TEXT,
 | 
			
		||||
                                                `contentLength`	INT NOT NULL,
 | 
			
		||||
                                                `isProtected`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
                                                `utcDateLastEdited` TEXT NOT NULL,
 | 
			
		||||
                                                `utcDateCreated` TEXT NOT NULL,
 | 
			
		||||
                                                `utcDateModified` TEXT NOT NULL,
 | 
			
		||||
                                                `dateLastEdited` TEXT NOT NULL,
 | 
			
		||||
                                                `dateCreated` TEXT NOT NULL,
 | 
			
		||||
                                                type TEXT DEFAULT '' NOT NULL,
 | 
			
		||||
                                                mime TEXT DEFAULT '' NOT NULL,
 | 
			
		||||
                                                hash TEXT DEFAULT '' NOT NULL);
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "note_revision_contents" (`noteRevisionId`	TEXT NOT NULL PRIMARY KEY,
 | 
			
		||||
                                                 `content`	TEXT,
 | 
			
		||||
                                                 hash TEXT DEFAULT '' NOT NULL,
 | 
			
		||||
                                                 `utcDateModified` TEXT NOT NULL);
 | 
			
		||||
 | 
			
		||||
INSERT INTO note_revision_contents (noteRevisionId, content, hash, utcDateModified)
 | 
			
		||||
SELECT noteRevisionId, content, hash, utcDateModifiedTo FROM note_revisions;
 | 
			
		||||
 | 
			
		||||
INSERT INTO note_revisions_mig (noteRevisionId, noteId, title, contentLength, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, type, mime, hash)
 | 
			
		||||
SELECT noteRevisionId, noteId, title, COALESCE(LENGTH(content), 0), isProtected, utcDateModifiedFrom, utcDateModifiedTo, utcDateModifiedTo, dateModifiedFrom, dateModifiedTo, type, mime, hash FROM note_revisions;
 | 
			
		||||
 | 
			
		||||
DROP TABLE note_revisions;
 | 
			
		||||
ALTER TABLE note_revisions_mig RENAME TO note_revisions;
 | 
			
		||||
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (`noteId`);
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_utcDateCreated` ON `note_revisions` (`utcDateCreated`);
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_utcDateLastEdited` ON `note_revisions` (`utcDateLastEdited`);
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_dateCreated` ON `note_revisions` (`dateCreated`);
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_dateLastEdited` ON `note_revisions` (`dateLastEdited`);
 | 
			
		||||
 | 
			
		||||
INSERT INTO sync (entityName, entityId, sourceId, utcSyncDate)
 | 
			
		||||
SELECT 'note_revision_contents', entityId, sourceId, utcSyncDate FROM sync WHERE entityName = 'note_revisions';
 | 
			
		||||
							
								
								
									
										31
									
								
								db/migrations/0151__add_isErased_to_note.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								db/migrations/0151__add_isErased_to_note.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "notes_mig" (
 | 
			
		||||
                                       `noteId`	TEXT NOT NULL,
 | 
			
		||||
                                       `title`	TEXT NOT NULL DEFAULT "note",
 | 
			
		||||
                                       `isProtected`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
                                       `type` TEXT NOT NULL DEFAULT 'text',
 | 
			
		||||
                                       `mime` TEXT NOT NULL DEFAULT 'text/html',
 | 
			
		||||
                                       `hash` TEXT DEFAULT "" NOT NULL,
 | 
			
		||||
                                       `isDeleted`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
                                       `isErased`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
                                       `dateCreated`	TEXT NOT NULL,
 | 
			
		||||
                                       `dateModified`	TEXT NOT NULL,
 | 
			
		||||
                                       `utcDateCreated`	TEXT NOT NULL,
 | 
			
		||||
                                       `utcDateModified`	TEXT NOT NULL,
 | 
			
		||||
                                       PRIMARY KEY(`noteId`));
 | 
			
		||||
 | 
			
		||||
INSERT INTO notes_mig (noteId, title, isProtected, type, mime, hash, isDeleted, isErased, dateCreated, dateModified, utcDateCreated, utcDateModified)
 | 
			
		||||
SELECT noteId, title, isProtected, type, mime, hash, isDeleted, 0, dateCreated, dateModified, utcDateCreated, utcDateModified FROM notes;
 | 
			
		||||
 | 
			
		||||
DROP TABLE notes;
 | 
			
		||||
ALTER TABLE notes_mig RENAME TO notes;
 | 
			
		||||
 | 
			
		||||
UPDATE notes SET isErased = 1 WHERE isDeleted = 1
 | 
			
		||||
AND 1=(SELECT CASE WHEN content IS NULL THEN 1 ELSE 0 END FROM note_contents WHERE note_contents.noteId = notes.noteId);
 | 
			
		||||
 | 
			
		||||
CREATE INDEX `IDX_notes_isDeleted` ON `notes` (`isDeleted`);
 | 
			
		||||
CREATE INDEX `IDX_notes_title` ON `notes` (`title`);
 | 
			
		||||
CREATE INDEX `IDX_notes_type` ON `notes` (`type`);
 | 
			
		||||
CREATE INDEX `IDX_notes_dateCreated` ON `notes` (`dateCreated`);
 | 
			
		||||
CREATE INDEX `IDX_notes_dateModified` ON `notes` (`dateModified`);
 | 
			
		||||
CREATE INDEX `IDX_notes_utcDateModified` ON `notes` (`utcDateModified`);
 | 
			
		||||
CREATE INDEX `IDX_notes_utcDateCreated` ON `notes` (`utcDateCreated`);
 | 
			
		||||
							
								
								
									
										34
									
								
								db/migrations/0152__add_contentLength_to_note.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								db/migrations/0152__add_contentLength_to_note.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "notes_mig" (
 | 
			
		||||
                                           `noteId`	TEXT NOT NULL,
 | 
			
		||||
                                           `title`	TEXT NOT NULL DEFAULT "note",
 | 
			
		||||
                                           `contentLength`	INT NOT NULL,
 | 
			
		||||
                                           `isProtected`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
                                           `type` TEXT NOT NULL DEFAULT 'text',
 | 
			
		||||
                                           `mime` TEXT NOT NULL DEFAULT 'text/html',
 | 
			
		||||
                                           `hash` TEXT DEFAULT "" NOT NULL,
 | 
			
		||||
                                           `isDeleted`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
                                           `isErased`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
                                           `dateCreated`	TEXT NOT NULL,
 | 
			
		||||
                                           `dateModified`	TEXT NOT NULL,
 | 
			
		||||
                                           `utcDateCreated`	TEXT NOT NULL,
 | 
			
		||||
                                           `utcDateModified`	TEXT NOT NULL,
 | 
			
		||||
                                           PRIMARY KEY(`noteId`));
 | 
			
		||||
 | 
			
		||||
INSERT INTO notes_mig (noteId, title, contentLength, isProtected, type, mime, hash, isDeleted, isErased, dateCreated, dateModified, utcDateCreated, utcDateModified)
 | 
			
		||||
SELECT noteId, title, -1, isProtected, type, mime, hash, isDeleted, isErased, dateCreated, dateModified, utcDateCreated, utcDateModified FROM notes;
 | 
			
		||||
 | 
			
		||||
DROP TABLE notes;
 | 
			
		||||
ALTER TABLE notes_mig RENAME TO notes;
 | 
			
		||||
 | 
			
		||||
UPDATE notes SET contentLength = (SELECT COALESCE(LENGTH(content), 0) FROM note_contents WHERE note_contents.noteId = notes.noteId);
 | 
			
		||||
 | 
			
		||||
CREATE INDEX `IDX_notes_isDeleted` ON `notes` (`isDeleted`);
 | 
			
		||||
CREATE INDEX `IDX_notes_title` ON `notes` (`title`);
 | 
			
		||||
CREATE INDEX `IDX_notes_type` ON `notes` (`type`);
 | 
			
		||||
CREATE INDEX `IDX_notes_dateCreated` ON `notes` (`dateCreated`);
 | 
			
		||||
CREATE INDEX `IDX_notes_dateModified` ON `notes` (`dateModified`);
 | 
			
		||||
CREATE INDEX `IDX_notes_utcDateModified` ON `notes` (`utcDateModified`);
 | 
			
		||||
CREATE INDEX `IDX_notes_utcDateCreated` ON `notes` (`utcDateCreated`);
 | 
			
		||||
 | 
			
		||||
-- should be OK since sync protocol changes so all instances must upgrade
 | 
			
		||||
UPDATE attributes SET isDeleted = 1 WHERE name = 'fileSize';
 | 
			
		||||
							
								
								
									
										28
									
								
								db/migrations/0153__add_isErased_to_note_revision.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								db/migrations/0153__add_isErased_to_note_revision.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "note_revisions_mig" (`noteRevisionId`	TEXT NOT NULL PRIMARY KEY,
 | 
			
		||||
                                                 `noteId`	TEXT NOT NULL,
 | 
			
		||||
                                                 `title`	TEXT,
 | 
			
		||||
                                                 `contentLength`	INT NOT NULL,
 | 
			
		||||
                                                 `isErased`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
                                                 `isProtected`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
                                                 `utcDateLastEdited` TEXT NOT NULL,
 | 
			
		||||
                                                 `utcDateCreated` TEXT NOT NULL,
 | 
			
		||||
                                                 `utcDateModified` TEXT NOT NULL,
 | 
			
		||||
                                                 `dateLastEdited` TEXT NOT NULL,
 | 
			
		||||
                                                 `dateCreated` TEXT NOT NULL,
 | 
			
		||||
                                                 type TEXT DEFAULT '' NOT NULL,
 | 
			
		||||
                                                 mime TEXT DEFAULT '' NOT NULL,
 | 
			
		||||
                                                 hash TEXT DEFAULT '' NOT NULL);
 | 
			
		||||
 | 
			
		||||
INSERT INTO note_revisions_mig (noteRevisionId, noteId, title, contentLength, isErased, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, type, mime, hash)
 | 
			
		||||
SELECT noteRevisionId, noteId, title, contentLength, 0, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, type, mime, hash FROM note_revisions;
 | 
			
		||||
 | 
			
		||||
DROP TABLE note_revisions;
 | 
			
		||||
ALTER TABLE note_revisions_mig RENAME TO note_revisions;
 | 
			
		||||
 | 
			
		||||
UPDATE note_revisions SET isErased = (SELECT isErased FROM notes WHERE notes.noteId = note_revisions.noteId);
 | 
			
		||||
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (`noteId`);
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_utcDateCreated` ON `note_revisions` (`utcDateCreated`);
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_utcDateLastEdited` ON `note_revisions` (`utcDateLastEdited`);
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_dateCreated` ON `note_revisions` (`dateCreated`);
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_dateLastEdited` ON `note_revisions` (`dateLastEdited`);
 | 
			
		||||
							
								
								
									
										190
									
								
								db/schema.sql
									
									
									
									
									
								
							
							
						
						
									
										190
									
								
								db/schema.sql
									
									
									
									
									
								
							@@ -3,86 +3,29 @@ CREATE TABLE IF NOT EXISTS "sync" (
 | 
			
		||||
                                    `entityName`	TEXT NOT NULL,
 | 
			
		||||
                                    `entityId`	TEXT NOT NULL,
 | 
			
		||||
                                    `sourceId` TEXT NOT NULL,
 | 
			
		||||
  `syncDate`	TEXT NOT NULL);
 | 
			
		||||
CREATE UNIQUE INDEX `IDX_sync_entityName_entityId` ON `sync` (
 | 
			
		||||
  `entityName`,
 | 
			
		||||
  `entityId`
 | 
			
		||||
);
 | 
			
		||||
CREATE INDEX `IDX_sync_syncDate` ON `sync` (
 | 
			
		||||
  `syncDate`
 | 
			
		||||
);
 | 
			
		||||
                                    `utcSyncDate`	TEXT NOT NULL);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "source_ids" (
 | 
			
		||||
                                          `sourceId`	TEXT NOT NULL,
 | 
			
		||||
  `dateCreated`	TEXT NOT NULL,
 | 
			
		||||
                                          `utcDateCreated`	TEXT NOT NULL,
 | 
			
		||||
                                          PRIMARY KEY(`sourceId`)
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "note_revisions" (
 | 
			
		||||
  `noteRevisionId`	TEXT NOT NULL PRIMARY KEY,
 | 
			
		||||
  `noteId`	TEXT NOT NULL,
 | 
			
		||||
  `title`	TEXT,
 | 
			
		||||
  `content`	TEXT,
 | 
			
		||||
  `isProtected`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
  `dateModifiedFrom` TEXT NOT NULL,
 | 
			
		||||
  `dateModifiedTo` TEXT NOT NULL
 | 
			
		||||
, type TEXT DEFAULT '' NOT NULL, mime TEXT DEFAULT '' NOT NULL, hash TEXT DEFAULT "" NOT NULL);
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (
 | 
			
		||||
  `noteId`
 | 
			
		||||
);
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_dateModifiedFrom` ON `note_revisions` (
 | 
			
		||||
  `dateModifiedFrom`
 | 
			
		||||
);
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_dateModifiedTo` ON `note_revisions` (
 | 
			
		||||
  `dateModifiedTo`
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "api_tokens"
 | 
			
		||||
(
 | 
			
		||||
  apiTokenId TEXT PRIMARY KEY NOT NULL,
 | 
			
		||||
  token TEXT NOT NULL,
 | 
			
		||||
  dateCreated TEXT NOT NULL,
 | 
			
		||||
  isDeleted INT NOT NULL DEFAULT 0
 | 
			
		||||
, hash TEXT DEFAULT "" NOT NULL);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "branches" (
 | 
			
		||||
  `branchId`	TEXT NOT NULL,
 | 
			
		||||
  `noteId`	TEXT NOT NULL,
 | 
			
		||||
  `parentNoteId`	TEXT NOT NULL,
 | 
			
		||||
  `notePosition`	INTEGER NOT NULL,
 | 
			
		||||
  `prefix`	TEXT,
 | 
			
		||||
  `isExpanded`	BOOLEAN,
 | 
			
		||||
  `isDeleted`	INTEGER NOT NULL DEFAULT 0,
 | 
			
		||||
  `dateModified`	TEXT NOT NULL, hash TEXT DEFAULT "" NOT NULL, dateCreated TEXT NOT NULL DEFAULT '1970-01-01T00:00:00.000Z',
 | 
			
		||||
  PRIMARY KEY(`branchId`)
 | 
			
		||||
);
 | 
			
		||||
CREATE INDEX `IDX_branches_noteId` ON `branches` (
 | 
			
		||||
  `noteId`
 | 
			
		||||
);
 | 
			
		||||
CREATE INDEX `IDX_branches_noteId_parentNoteId` ON `branches` (
 | 
			
		||||
  `noteId`,
 | 
			
		||||
  `parentNoteId`
 | 
			
		||||
);
 | 
			
		||||
CREATE INDEX IDX_branches_parentNoteId ON branches (parentNoteId);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "recent_notes" (
 | 
			
		||||
  `branchId` TEXT NOT NULL PRIMARY KEY,
 | 
			
		||||
  `notePath` TEXT NOT NULL,
 | 
			
		||||
  hash TEXT DEFAULT "" NOT NULL,
 | 
			
		||||
  `dateCreated` TEXT NOT NULL,
 | 
			
		||||
  isDeleted INT
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "event_log" (
 | 
			
		||||
  `eventId`	TEXT NOT NULL PRIMARY KEY,
 | 
			
		||||
  `noteId`	TEXT,
 | 
			
		||||
  `comment`	TEXT,
 | 
			
		||||
  `dateCreated`	TEXT NOT NULL
 | 
			
		||||
);
 | 
			
		||||
  utcDateCreated TEXT NOT NULL,
 | 
			
		||||
  isDeleted INT NOT NULL DEFAULT 0,
 | 
			
		||||
  hash TEXT DEFAULT "" NOT NULL);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "options"
 | 
			
		||||
(
 | 
			
		||||
  name TEXT not null PRIMARY KEY,
 | 
			
		||||
  value TEXT,
 | 
			
		||||
  dateModified INT,
 | 
			
		||||
  isSynced INTEGER default 0 not null,
 | 
			
		||||
  hash TEXT default "" not null,
 | 
			
		||||
  dateCreated TEXT default '1970-01-01T00:00:00.000Z' not null
 | 
			
		||||
  utcDateCreated TEXT not null,
 | 
			
		||||
  utcDateModified TEXT NOT NULL
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE attributes
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "attributes"
 | 
			
		||||
(
 | 
			
		||||
  attributeId      TEXT not null primary key,
 | 
			
		||||
  noteId       TEXT not null,
 | 
			
		||||
@@ -90,43 +33,98 @@ CREATE TABLE attributes
 | 
			
		||||
  name         TEXT not null,
 | 
			
		||||
  value        TEXT default '' not null,
 | 
			
		||||
  position     INT  default 0 not null,
 | 
			
		||||
  dateCreated  TEXT not null,
 | 
			
		||||
  dateModified TEXT not null,
 | 
			
		||||
  utcDateCreated  TEXT not null,
 | 
			
		||||
  utcDateModified TEXT not null,
 | 
			
		||||
  isDeleted    INT  not null,
 | 
			
		||||
  hash         TEXT default "" not null, isInheritable int DEFAULT 0 NULL);
 | 
			
		||||
  hash         TEXT default "" not null,
 | 
			
		||||
  isInheritable int DEFAULT 0 NULL);
 | 
			
		||||
CREATE UNIQUE INDEX `IDX_sync_entityName_entityId` ON `sync` (
 | 
			
		||||
                                                              `entityName`,
 | 
			
		||||
                                                              `entityId`
 | 
			
		||||
  );
 | 
			
		||||
CREATE INDEX `IDX_sync_utcSyncDate` ON `sync` (
 | 
			
		||||
                                            `utcSyncDate`
 | 
			
		||||
  );
 | 
			
		||||
CREATE INDEX IDX_attributes_name_value
 | 
			
		||||
  on attributes (name, value);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "notes" (
 | 
			
		||||
  `noteId`	TEXT NOT NULL,
 | 
			
		||||
  `title`	TEXT NOT NULL DEFAULT "note",
 | 
			
		||||
  `content`	TEXT NULL DEFAULT NULL,
 | 
			
		||||
  `isProtected`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
  `type` TEXT NOT NULL DEFAULT 'text',
 | 
			
		||||
  `mime` TEXT NOT NULL DEFAULT 'text/html',
 | 
			
		||||
  `hash` TEXT DEFAULT "" NOT NULL,
 | 
			
		||||
  `isDeleted`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
  `dateCreated`	TEXT NOT NULL,
 | 
			
		||||
  `dateModified`	TEXT NOT NULL,
 | 
			
		||||
  PRIMARY KEY(`noteId`)
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "links" (
 | 
			
		||||
  `linkId`	TEXT NOT NULL,
 | 
			
		||||
  `noteId`	TEXT NOT NULL,
 | 
			
		||||
  `targetNoteId`	TEXT NOT NULL,
 | 
			
		||||
  `type` TEXT NOT NULL,
 | 
			
		||||
  `hash` TEXT DEFAULT "" NOT NULL,
 | 
			
		||||
  `isDeleted`	INTEGER NOT NULL DEFAULT 0,
 | 
			
		||||
  `dateCreated`	TEXT NOT NULL,
 | 
			
		||||
  `dateModified`	TEXT NOT NULL,
 | 
			
		||||
  PRIMARY KEY(`linkId`)
 | 
			
		||||
);
 | 
			
		||||
CREATE INDEX IDX_links_noteId_index
 | 
			
		||||
  on links (noteId);
 | 
			
		||||
CREATE INDEX IDX_links_targetNoteId_index
 | 
			
		||||
  on links (targetNoteId);
 | 
			
		||||
CREATE INDEX IDX_attributes_name_index
 | 
			
		||||
  on attributes (name);
 | 
			
		||||
CREATE INDEX IDX_attributes_noteId_index
 | 
			
		||||
  on attributes (noteId);
 | 
			
		||||
CREATE INDEX IDX_attributes_value_index
 | 
			
		||||
  on attributes (value);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "note_contents" (
 | 
			
		||||
                                                   `noteId`	TEXT NOT NULL,
 | 
			
		||||
                                                   `content`	TEXT NULL DEFAULT NULL,
 | 
			
		||||
                                                   `hash` TEXT DEFAULT "" NOT NULL,
 | 
			
		||||
                                                   `utcDateModified` TEXT NOT NULL,
 | 
			
		||||
                                                   PRIMARY KEY(`noteId`)
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE recent_notes
 | 
			
		||||
(
 | 
			
		||||
    noteId TEXT not null primary key,
 | 
			
		||||
    notePath TEXT not null,
 | 
			
		||||
    hash TEXT default "" not null,
 | 
			
		||||
    utcDateCreated TEXT not null,
 | 
			
		||||
    isDeleted INT
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "branches" (
 | 
			
		||||
                                          `branchId`	TEXT NOT NULL,
 | 
			
		||||
                                          `noteId`	TEXT NOT NULL,
 | 
			
		||||
                                          `parentNoteId`	TEXT NOT NULL,
 | 
			
		||||
                                          `notePosition`	INTEGER NOT NULL,
 | 
			
		||||
                                          `prefix`	TEXT,
 | 
			
		||||
                                          `isExpanded`	INTEGER NOT NULL DEFAULT 0,
 | 
			
		||||
                                          `isDeleted`	INTEGER NOT NULL DEFAULT 0,
 | 
			
		||||
                                          `utcDateModified`	TEXT NOT NULL,
 | 
			
		||||
                                          utcDateCreated TEXT NOT NULL,
 | 
			
		||||
                                          hash TEXT DEFAULT "" NOT NULL,
 | 
			
		||||
                                          PRIMARY KEY(`branchId`));
 | 
			
		||||
CREATE INDEX `IDX_branches_noteId` ON `branches` (`noteId`);
 | 
			
		||||
CREATE INDEX `IDX_branches_noteId_parentNoteId` ON `branches` (`noteId`,`parentNoteId`);
 | 
			
		||||
CREATE INDEX IDX_branches_parentNoteId ON branches (parentNoteId);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "note_revision_contents" (`noteRevisionId`	TEXT NOT NULL PRIMARY KEY,
 | 
			
		||||
                                                 `content`	TEXT,
 | 
			
		||||
                                                 hash TEXT DEFAULT '' NOT NULL,
 | 
			
		||||
                                                 `utcDateModified` TEXT NOT NULL);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "notes" (
 | 
			
		||||
                                           `noteId`	TEXT NOT NULL,
 | 
			
		||||
                                           `title`	TEXT NOT NULL DEFAULT "note",
 | 
			
		||||
                                           `contentLength`	INT NOT NULL,
 | 
			
		||||
                                           `isProtected`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
                                           `type` TEXT NOT NULL DEFAULT 'text',
 | 
			
		||||
                                           `mime` TEXT NOT NULL DEFAULT 'text/html',
 | 
			
		||||
                                           `hash` TEXT DEFAULT "" NOT NULL,
 | 
			
		||||
                                           `isDeleted`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
                                           `isErased`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
                                           `dateCreated`	TEXT NOT NULL,
 | 
			
		||||
                                           `dateModified`	TEXT NOT NULL,
 | 
			
		||||
                                           `utcDateCreated`	TEXT NOT NULL,
 | 
			
		||||
                                           `utcDateModified`	TEXT NOT NULL,
 | 
			
		||||
                                           PRIMARY KEY(`noteId`));
 | 
			
		||||
CREATE INDEX `IDX_notes_isDeleted` ON `notes` (`isDeleted`);
 | 
			
		||||
CREATE INDEX `IDX_notes_title` ON `notes` (`title`);
 | 
			
		||||
CREATE INDEX `IDX_notes_type` ON `notes` (`type`);
 | 
			
		||||
CREATE INDEX `IDX_notes_dateCreated` ON `notes` (`dateCreated`);
 | 
			
		||||
CREATE INDEX `IDX_notes_dateModified` ON `notes` (`dateModified`);
 | 
			
		||||
CREATE INDEX `IDX_notes_utcDateModified` ON `notes` (`utcDateModified`);
 | 
			
		||||
CREATE INDEX `IDX_notes_utcDateCreated` ON `notes` (`utcDateCreated`);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "note_revisions" (`noteRevisionId`	TEXT NOT NULL PRIMARY KEY,
 | 
			
		||||
                                                 `noteId`	TEXT NOT NULL,
 | 
			
		||||
                                                 `title`	TEXT,
 | 
			
		||||
                                                 `contentLength`	INT NOT NULL,
 | 
			
		||||
                                                 `isErased`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
                                                 `isProtected`	INT NOT NULL DEFAULT 0,
 | 
			
		||||
                                                 `utcDateLastEdited` TEXT NOT NULL,
 | 
			
		||||
                                                 `utcDateCreated` TEXT NOT NULL,
 | 
			
		||||
                                                 `utcDateModified` TEXT NOT NULL,
 | 
			
		||||
                                                 `dateLastEdited` TEXT NOT NULL,
 | 
			
		||||
                                                 `dateCreated` TEXT NOT NULL,
 | 
			
		||||
                                                 type TEXT DEFAULT '' NOT NULL,
 | 
			
		||||
                                                 mime TEXT DEFAULT '' NOT NULL,
 | 
			
		||||
                                                 hash TEXT DEFAULT '' NOT NULL);
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (`noteId`);
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_utcDateCreated` ON `note_revisions` (`utcDateCreated`);
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_utcDateLastEdited` ON `note_revisions` (`utcDateLastEdited`);
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_dateCreated` ON `note_revisions` (`dateCreated`);
 | 
			
		||||
CREATE INDEX `IDX_note_revisions_dateLastEdited` ON `note_revisions` (`dateLastEdited`);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
version: '2.1'
 | 
			
		||||
services:
 | 
			
		||||
  trilium:
 | 
			
		||||
    build:
 | 
			
		||||
      context: .
 | 
			
		||||
    image: zadam/trilium
 | 
			
		||||
    restart: always
 | 
			
		||||
    environment:
 | 
			
		||||
      - TRILIUM_DATA_DIR=/data
 | 
			
		||||
    ports:
 | 
			
		||||
      - "8080:8080"
 | 
			
		||||
    volumes:
 | 
			
		||||
      - trilium:/data
 | 
			
		||||
 | 
			
		||||
volumes:
 | 
			
		||||
  trilium:
 | 
			
		||||
 | 
			
		||||
@@ -28,7 +28,7 @@
 | 
			
		||||
 | 
			
		||||
<header>
 | 
			
		||||
    
 | 
			
		||||
        <h2><span class="attribs"><span class="type-signature"></span></span>ApiToken<span class="signature">(apiTokenId, token, isDeleted, dateCreated)</span><span class="type-signature"></span></h2>
 | 
			
		||||
        <h2><span class="attribs"><span class="type-signature"></span></span>ApiToken<span class="signature">(apiTokenId, token, isDeleted, utcDateCreated)</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>
 | 
			
		||||
        
 | 
			
		||||
@@ -45,7 +45,7 @@
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="ApiToken"><span class="type-signature"></span>new ApiToken<span class="signature">(apiTokenId, token, isDeleted, dateCreated)</span><span class="type-signature"></span></h4>
 | 
			
		||||
    <h4 class="name" id="ApiToken"><span class="type-signature"></span>new ApiToken<span class="signature">(apiTokenId, token, isDeleted, utcDateCreated)</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -154,7 +154,7 @@
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>dateCreated</code></td>
 | 
			
		||||
                <td class="name"><code>utcDateCreated</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
@@ -239,6 +239,8 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
@@ -282,13 +284,13 @@
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@
 | 
			
		||||
 | 
			
		||||
<header>
 | 
			
		||||
    
 | 
			
		||||
        <h2><span class="attribs"><span class="type-signature"></span></span>Attribute<span class="signature">(attributeId, noteId, type, name, value, position, isInheritable, isDeleted, dateCreated, dateModified)</span><span class="type-signature"></span></h2>
 | 
			
		||||
        <h2><span class="attribs"><span class="type-signature"></span></span>Attribute<span class="signature">(attributeId, noteId, type, name, value, position, isInheritable, isDeleted, utcDateCreated, utcDateModified)</span><span class="type-signature"></span></h2>
 | 
			
		||||
        
 | 
			
		||||
            <div class="class-description">Attribute is key value pair owned by a note.</div>
 | 
			
		||||
        
 | 
			
		||||
@@ -45,7 +45,7 @@
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="Attribute"><span class="type-signature"></span>new Attribute<span class="signature">(attributeId, noteId, type, name, value, position, isInheritable, isDeleted, dateCreated, dateModified)</span><span class="type-signature"></span></h4>
 | 
			
		||||
    <h4 class="name" id="Attribute"><span class="type-signature"></span>new Attribute<span class="signature">(attributeId, noteId, type, name, value, position, isInheritable, isDeleted, utcDateCreated, utcDateModified)</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -269,7 +269,7 @@
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>dateCreated</code></td>
 | 
			
		||||
                <td class="name"><code>utcDateCreated</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
@@ -292,7 +292,7 @@
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>dateModified</code></td>
 | 
			
		||||
                <td class="name"><code>utcDateModified</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
@@ -349,7 +349,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="entities_attribute.js.html">entities/attribute.js</a>, <a href="entities_attribute.js.html#line24">line 24</a>
 | 
			
		||||
        <a href="entities_attribute.js.html">entities/attribute.js</a>, <a href="entities_attribute.js.html#line29">line 29</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -377,6 +377,8 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
@@ -485,6 +487,8 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
@@ -585,6 +589,8 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
@@ -685,6 +691,8 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
@@ -724,13 +732,13 @@
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -28,7 +28,7 @@
 | 
			
		||||
 | 
			
		||||
<header>
 | 
			
		||||
    
 | 
			
		||||
        <h2><span class="attribs"><span class="type-signature"></span></span>Branch<span class="signature">(branchId, noteId, parentNoteId, notePosition, prefix, isExpanded, isDeleted, dateModified, dateCreated)</span><span class="type-signature"></span></h2>
 | 
			
		||||
        <h2><span class="attribs"><span class="type-signature"></span></span>Branch<span class="signature">(branchId, noteId, parentNoteId, notePosition, prefix, isExpanded, isDeleted, utcDateModified, utcDateCreated)</span><span class="type-signature"></span></h2>
 | 
			
		||||
        
 | 
			
		||||
            <div class="class-description">Branch represents note's placement in the tree - it's essentially pair of noteId and parentNoteId.
 | 
			
		||||
Each note can have multiple (at least one) branches, meaning it can be placed into multiple places in the tree.</div>
 | 
			
		||||
@@ -46,7 +46,7 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="Branch"><span class="type-signature"></span>new Branch<span class="signature">(branchId, noteId, parentNoteId, notePosition, prefix, isExpanded, isDeleted, dateModified, dateCreated)</span><span class="type-signature"></span></h4>
 | 
			
		||||
    <h4 class="name" id="Branch"><span class="type-signature"></span>new Branch<span class="signature">(branchId, noteId, parentNoteId, notePosition, prefix, isExpanded, isDeleted, utcDateModified, utcDateCreated)</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -247,7 +247,7 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>dateModified</code></td>
 | 
			
		||||
                <td class="name"><code>utcDateModified</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
@@ -270,7 +270,7 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>dateCreated</code></td>
 | 
			
		||||
                <td class="name"><code>utcDateCreated</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
@@ -327,7 +327,7 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line24">line 24</a>
 | 
			
		||||
        <a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line30">line 30</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -355,6 +355,8 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
@@ -463,6 +465,8 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
@@ -505,13 +509,13 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -178,6 +178,8 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
@@ -210,13 +212,13 @@
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@
 | 
			
		||||
 | 
			
		||||
<header>
 | 
			
		||||
    
 | 
			
		||||
        <h2><span class="attribs"><span class="type-signature"></span></span>Link<span class="signature">(linkId, noteId, targetNoteId, type, isDeleted, dateModified, dateCreated)</span><span class="type-signature"></span></h2>
 | 
			
		||||
        <h2><span class="attribs"><span class="type-signature"></span></span>Link<span class="signature">(linkId, noteId, targetNoteId, type, isDeleted, utcDateModified, utcDateCreated)</span><span class="type-signature"></span></h2>
 | 
			
		||||
        
 | 
			
		||||
            <div class="class-description">This class represents link from one note to another in the form of hyperlink or image reference. Note that
 | 
			
		||||
this is different concept than attribute/relation.</div>
 | 
			
		||||
@@ -46,7 +46,7 @@ this is different concept than attribute/relation.</div>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="Link"><span class="type-signature"></span>new Link<span class="signature">(linkId, noteId, targetNoteId, type, isDeleted, dateModified, dateCreated)</span><span class="type-signature"></span></h4>
 | 
			
		||||
    <h4 class="name" id="Link"><span class="type-signature"></span>new Link<span class="signature">(linkId, noteId, targetNoteId, type, isDeleted, utcDateModified, utcDateCreated)</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -201,7 +201,7 @@ this is different concept than attribute/relation.</div>
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>dateModified</code></td>
 | 
			
		||||
                <td class="name"><code>utcDateModified</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
@@ -224,7 +224,7 @@ this is different concept than attribute/relation.</div>
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>dateCreated</code></td>
 | 
			
		||||
                <td class="name"><code>utcDateCreated</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -28,7 +28,7 @@
 | 
			
		||||
 | 
			
		||||
<header>
 | 
			
		||||
    
 | 
			
		||||
        <h2><span class="attribs"><span class="type-signature"></span></span>NoteRevision<span class="signature">(noteRevisionId, noteId, type, mime, title, content, isProtected, dateModifiedFrom, dateModifiedTo)</span><span class="type-signature"></span></h2>
 | 
			
		||||
        <h2><span class="attribs"><span class="type-signature"></span></span>NoteRevision<span class="signature">(noteRevisionId, noteId, type, mime, title, isProtected, dateLastEdited, dateCreated, utcDateLastEdited, utcDateCreated, utcDateModified)</span><span class="type-signature"></span></h2>
 | 
			
		||||
        
 | 
			
		||||
            <div class="class-description">NoteRevision represents snapshot of note's title and content at some point in the past. It's used for seamless note versioning.</div>
 | 
			
		||||
        
 | 
			
		||||
@@ -45,7 +45,7 @@
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="NoteRevision"><span class="type-signature"></span>new NoteRevision<span class="signature">(noteRevisionId, noteId, type, mime, title, content, isProtected, dateModifiedFrom, dateModifiedTo)</span><span class="type-signature"></span></h4>
 | 
			
		||||
    <h4 class="name" id="NoteRevision"><span class="type-signature"></span>new NoteRevision<span class="signature">(noteRevisionId, noteId, type, mime, title, isProtected, dateLastEdited, dateCreated, utcDateLastEdited, utcDateCreated, utcDateModified)</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -193,29 +193,6 @@
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="description last"></td>
 | 
			
		||||
        </tr>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>content</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
            
 | 
			
		||||
                
 | 
			
		||||
<span class="param-type">string</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
            </td>
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="description last"></td>
 | 
			
		||||
        </tr>
 | 
			
		||||
 | 
			
		||||
@@ -246,7 +223,7 @@
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>dateModifiedFrom</code></td>
 | 
			
		||||
                <td class="name"><code>dateLastEdited</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
@@ -269,7 +246,76 @@
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>dateModifiedTo</code></td>
 | 
			
		||||
                <td class="name"><code>dateCreated</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
            
 | 
			
		||||
                
 | 
			
		||||
<span class="param-type">string</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
            </td>
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="description last"></td>
 | 
			
		||||
        </tr>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>utcDateLastEdited</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
            
 | 
			
		||||
                
 | 
			
		||||
<span class="param-type">string</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
            </td>
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="description last"></td>
 | 
			
		||||
        </tr>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>utcDateCreated</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
            
 | 
			
		||||
                
 | 
			
		||||
<span class="param-type">string</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
            </td>
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="description last"></td>
 | 
			
		||||
        </tr>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>utcDateModified</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
@@ -326,7 +372,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="entities_note_revision.js.html">entities/note_revision.js</a>, <a href="entities_note_revision.js.html#line22">line 22</a>
 | 
			
		||||
        <a href="entities_note_revision.js.html">entities/note_revision.js</a>, <a href="entities_note_revision.js.html#line33">line 33</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -354,6 +400,8 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
@@ -383,6 +431,320 @@
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
        <h3 class="subsection-title">Methods</h3>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="getContent"><span class="type-signature">(async) </span>getContent<span class="signature">()</span><span class="type-signature"> → {Promise.<*>}</span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="entities_note_revision.js.html">entities/note_revision.js</a>, <a href="entities_note_revision.js.html#line67">line 67</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
    <dt>
 | 
			
		||||
        Type
 | 
			
		||||
    </dt>
 | 
			
		||||
    <dd>
 | 
			
		||||
        
 | 
			
		||||
<span class="param-type">Promise.<*></span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="isStringNote"><span class="type-signature"></span>isStringNote<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="entities_note_revision.js.html">entities/note_revision.js</a>, <a href="entities_note_revision.js.html#line53">line 53</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
<div class="param-desc">
 | 
			
		||||
    true if the note has string content (not binary)
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
    <dt>
 | 
			
		||||
        Type
 | 
			
		||||
    </dt>
 | 
			
		||||
    <dd>
 | 
			
		||||
        
 | 
			
		||||
<span class="param-type">boolean</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="setContent"><span class="type-signature">(async) </span>setContent<span class="signature">()</span><span class="type-signature"> → {Promise}</span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl class="details">
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="entities_note_revision.js.html">entities/note_revision.js</a>, <a href="entities_note_revision.js.html#line102">line 102</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h5>Returns:</h5>
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<dl>
 | 
			
		||||
    <dt>
 | 
			
		||||
        Type
 | 
			
		||||
    </dt>
 | 
			
		||||
    <dd>
 | 
			
		||||
        
 | 
			
		||||
<span class="param-type">Promise</span>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    </dd>
 | 
			
		||||
</dl>
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -397,13 +759,13 @@
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@
 | 
			
		||||
 | 
			
		||||
<header>
 | 
			
		||||
    
 | 
			
		||||
        <h2><span class="attribs"><span class="type-signature"></span></span>Option<span class="signature">(name, value, isSynced, dateModified, dateCreated)</span><span class="type-signature"></span></h2>
 | 
			
		||||
        <h2><span class="attribs"><span class="type-signature"></span></span>Option<span class="signature">(name, value, isSynced, utcDateModified, utcDateCreated)</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>
 | 
			
		||||
        
 | 
			
		||||
@@ -45,7 +45,7 @@
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="Option"><span class="type-signature"></span>new Option<span class="signature">(name, value, isSynced, dateModified, dateCreated)</span><span class="type-signature"></span></h4>
 | 
			
		||||
    <h4 class="name" id="Option"><span class="type-signature"></span>new Option<span class="signature">(name, value, isSynced, utcDateModified, utcDateCreated)</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -154,7 +154,7 @@
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>dateModified</code></td>
 | 
			
		||||
                <td class="name"><code>utcDateModified</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
@@ -177,7 +177,7 @@
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>dateCreated</code></td>
 | 
			
		||||
                <td class="name"><code>utcDateCreated</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
@@ -234,7 +234,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="entities_option.js.html">entities/option.js</a>, <a href="entities_option.js.html#line17">line 17</a>
 | 
			
		||||
        <a href="entities_option.js.html">entities/option.js</a>, <a href="entities_option.js.html#line22">line 22</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -262,6 +262,8 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
@@ -305,13 +307,13 @@
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@
 | 
			
		||||
 | 
			
		||||
<header>
 | 
			
		||||
    
 | 
			
		||||
        <h2><span class="attribs"><span class="type-signature"></span></span>RecentNote<span class="signature">(branchId, notePath, isDeleted, dateModified)</span><span class="type-signature"></span></h2>
 | 
			
		||||
        <h2><span class="attribs"><span class="type-signature"></span></span>RecentNote<span class="signature">(noteId, notePath, isDeleted, utcDateModified)</span><span class="type-signature"></span></h2>
 | 
			
		||||
        
 | 
			
		||||
            <div class="class-description">RecentNote represents recently visited note.</div>
 | 
			
		||||
        
 | 
			
		||||
@@ -45,7 +45,7 @@
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    <h4 class="name" id="RecentNote"><span class="type-signature"></span>new RecentNote<span class="signature">(branchId, notePath, isDeleted, dateModified)</span><span class="type-signature"></span></h4>
 | 
			
		||||
    <h4 class="name" id="RecentNote"><span class="type-signature"></span>new RecentNote<span class="signature">(noteId, notePath, isDeleted, utcDateModified)</span><span class="type-signature"></span></h4>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
@@ -85,7 +85,7 @@
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>branchId</code></td>
 | 
			
		||||
                <td class="name"><code>noteId</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
@@ -154,7 +154,7 @@
 | 
			
		||||
 | 
			
		||||
        <tr>
 | 
			
		||||
            
 | 
			
		||||
                <td class="name"><code>dateModified</code></td>
 | 
			
		||||
                <td class="name"><code>utcDateModified</code></td>
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            <td class="type">
 | 
			
		||||
@@ -239,6 +239,8 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
@@ -282,13 +284,13 @@
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -37,22 +37,22 @@ const dateUtils = require('../services/date_utils');
 | 
			
		||||
 * @param {string} apiTokenId - primary key
 | 
			
		||||
 * @param {string} token
 | 
			
		||||
 * @param {boolean} isDeleted - true if API token is deleted
 | 
			
		||||
 * @param {string} dateCreated
 | 
			
		||||
 * @param {string} utcDateCreated
 | 
			
		||||
 *
 | 
			
		||||
 * @extends Entity
 | 
			
		||||
 */
 | 
			
		||||
class ApiToken extends Entity {
 | 
			
		||||
    static get entityName() { return "api_tokens"; }
 | 
			
		||||
    static get primaryKeyName() { return "apiTokenId"; }
 | 
			
		||||
    static get hashedProperties() { return ["apiTokenId", "token", "dateCreated", "isDeleted"]; }
 | 
			
		||||
    static get hashedProperties() { return ["apiTokenId", "token", "utcDateCreated", "isDeleted"]; }
 | 
			
		||||
 | 
			
		||||
    beforeSaving() {
 | 
			
		||||
        if (!this.isDeleted) {
 | 
			
		||||
            this.isDeleted = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!this.dateCreated) {
 | 
			
		||||
            this.dateCreated = dateUtils.nowDate();
 | 
			
		||||
        if (!this.utcDateCreated) {
 | 
			
		||||
            this.utcDateCreated = dateUtils.utcNowDateTime();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        super.beforeSaving();
 | 
			
		||||
@@ -69,13 +69,13 @@ module.exports = ApiToken;</code></pre>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -44,15 +44,15 @@ const sql = require('../services/sql');
 | 
			
		||||
 * @param {int} position
 | 
			
		||||
 * @param {boolean} isInheritable
 | 
			
		||||
 * @param {boolean} isDeleted
 | 
			
		||||
 * @param {string} dateCreated
 | 
			
		||||
 * @param {string} dateModified
 | 
			
		||||
 * @param {string} utcDateCreated
 | 
			
		||||
 * @param {string} utcDateModified
 | 
			
		||||
 *
 | 
			
		||||
 * @extends Entity
 | 
			
		||||
 */
 | 
			
		||||
class Attribute extends Entity {
 | 
			
		||||
    static get entityName() { return "attributes"; }
 | 
			
		||||
    static get primaryKeyName() { return "attributeId"; }
 | 
			
		||||
    static get hashedProperties() { return ["attributeId", "noteId", "type", "name", "value", "isInheritable", "isDeleted", "dateCreated"]; }
 | 
			
		||||
    static get hashedProperties() { return ["attributeId", "noteId", "type", "name", "value", "isInheritable", "isDeleted", "utcDateCreated"]; }
 | 
			
		||||
 | 
			
		||||
    constructor(row) {
 | 
			
		||||
        super(row);
 | 
			
		||||
@@ -123,14 +123,14 @@ class Attribute extends Entity {
 | 
			
		||||
            this.isDeleted = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!this.dateCreated) {
 | 
			
		||||
            this.dateCreated = dateUtils.nowDate();
 | 
			
		||||
        if (!this.utcDateCreated) {
 | 
			
		||||
            this.utcDateCreated = dateUtils.utcNowDateTime();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        super.beforeSaving();
 | 
			
		||||
 | 
			
		||||
        if (this.isChanged) {
 | 
			
		||||
            this.dateModified = dateUtils.nowDate();
 | 
			
		||||
            this.utcDateModified = dateUtils.utcNowDateTime();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -150,13 +150,13 @@ module.exports = Attribute;</code></pre>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -44,8 +44,8 @@ const sql = require('../services/sql');
 | 
			
		||||
 * @param {string} prefix
 | 
			
		||||
 * @param {boolean} isExpanded
 | 
			
		||||
 * @param {boolean} isDeleted
 | 
			
		||||
 * @param {string} dateModified
 | 
			
		||||
 * @param {string} dateCreated
 | 
			
		||||
 * @param {string} utcDateModified
 | 
			
		||||
 * @param {string} utcDateCreated
 | 
			
		||||
 *
 | 
			
		||||
 * @extends Entity
 | 
			
		||||
 */
 | 
			
		||||
@@ -70,21 +70,25 @@ class Branch extends Entity {
 | 
			
		||||
    async beforeSaving() {
 | 
			
		||||
        if (this.notePosition === undefined) {
 | 
			
		||||
            const maxNotePos = await sql.getValue('SELECT MAX(notePosition) FROM branches WHERE parentNoteId = ? AND isDeleted = 0', [this.parentNoteId]);
 | 
			
		||||
            this.notePosition = maxNotePos === null ? 0 : maxNotePos + 1;
 | 
			
		||||
            this.notePosition = maxNotePos === null ? 0 : maxNotePos + 10;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!this.isExpanded) {
 | 
			
		||||
            this.isExpanded = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!this.isDeleted) {
 | 
			
		||||
            this.isDeleted = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!this.dateCreated) {
 | 
			
		||||
            this.dateCreated = dateUtils.nowDate();
 | 
			
		||||
        if (!this.utcDateCreated) {
 | 
			
		||||
            this.utcDateCreated = dateUtils.utcNowDateTime();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        super.beforeSaving();
 | 
			
		||||
 | 
			
		||||
        if (this.isChanged) {
 | 
			
		||||
            this.dateModified = dateUtils.nowDate();
 | 
			
		||||
            this.utcDateModified = dateUtils.utcNowDateTime();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -104,13 +108,13 @@ module.exports = Branch;</code></pre>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -36,8 +36,11 @@ class Entity {
 | 
			
		||||
     */
 | 
			
		||||
    constructor(row = {}) {
 | 
			
		||||
        for (const key in row) {
 | 
			
		||||
            // ! is used when joint-fetching notes and note_contents objects for performance
 | 
			
		||||
            if (!key.startsWith('!')) {
 | 
			
		||||
                this[key] = row[key];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ('isDeleted' in this) {
 | 
			
		||||
            this.isDeleted = !!this.isDeleted;
 | 
			
		||||
@@ -51,8 +54,14 @@ class Entity {
 | 
			
		||||
 | 
			
		||||
        this.hash = this.generateHash();
 | 
			
		||||
 | 
			
		||||
        if (this.forcedChange) {
 | 
			
		||||
            this.isChanged = true;
 | 
			
		||||
            delete this.forcedChange;
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            this.isChanged = origHash !== this.hash;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    generateIdIfNecessary() {
 | 
			
		||||
        if (!this[this.constructor.primaryKeyName]) {
 | 
			
		||||
@@ -87,13 +96,13 @@ module.exports = Entity;</code></pre>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -41,15 +41,15 @@ const dateUtils = require('../services/date_utils');
 | 
			
		||||
 * @param {string} targetNoteId
 | 
			
		||||
 * @param {string} type
 | 
			
		||||
 * @param {boolean} isDeleted
 | 
			
		||||
 * @param {string} dateModified
 | 
			
		||||
 * @param {string} dateCreated
 | 
			
		||||
 * @param {string} utcDateModified
 | 
			
		||||
 * @param {string} utcDateCreated
 | 
			
		||||
 *
 | 
			
		||||
 * @extends Entity
 | 
			
		||||
 */
 | 
			
		||||
class Link extends Entity {
 | 
			
		||||
    static get entityName() { return "links"; }
 | 
			
		||||
    static get primaryKeyName() { return "linkId"; }
 | 
			
		||||
    static get hashedProperties() { return ["linkId", "noteId", "targetNoteId", "type", "isDeleted", "dateCreated", "dateModified"]; }
 | 
			
		||||
    static get hashedProperties() { return ["linkId", "noteId", "targetNoteId", "type", "isDeleted", "utcDateCreated", "utcDateModified"]; }
 | 
			
		||||
 | 
			
		||||
    async getNote() {
 | 
			
		||||
        return await repository.getEntity("SELECT * FROM notes WHERE noteId = ?", [this.noteId]);
 | 
			
		||||
@@ -64,14 +64,14 @@ class Link extends Entity {
 | 
			
		||||
            this.isDeleted = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!this.dateCreated) {
 | 
			
		||||
            this.dateCreated = dateUtils.nowDate();
 | 
			
		||||
        if (!this.utcDateCreated) {
 | 
			
		||||
            this.utcDateCreated = dateUtils.utcNowDateTime();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        super.beforeSaving();
 | 
			
		||||
 | 
			
		||||
        if (this.isChanged) {
 | 
			
		||||
            this.dateModified = dateUtils.nowDate();
 | 
			
		||||
            this.utcDateModified = dateUtils.utcNowDateTime();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,9 @@ const Attribute = require('./attribute');
 | 
			
		||||
const protectedSessionService = require('../services/protected_session');
 | 
			
		||||
const repository = require('../services/repository');
 | 
			
		||||
const sql = require('../services/sql');
 | 
			
		||||
const utils = require('../services/utils');
 | 
			
		||||
const dateUtils = require('../services/date_utils');
 | 
			
		||||
const syncTableService = require('../services/sync_table');
 | 
			
		||||
 | 
			
		||||
const LABEL = 'label';
 | 
			
		||||
const LABEL_DEFINITION = 'label-definition';
 | 
			
		||||
@@ -47,18 +49,20 @@ const RELATION_DEFINITION = 'relation-definition';
 | 
			
		||||
 * @property {string} type - one of "text", "code", "file" or "render"
 | 
			
		||||
 * @property {string} mime - MIME type, e.g. "text/html"
 | 
			
		||||
 * @property {string} title - note title
 | 
			
		||||
 * @property {string} content - note content - e.g. HTML text for text notes, file payload for files
 | 
			
		||||
 * @property {boolean} isProtected - true if note is protected
 | 
			
		||||
 * @property {boolean} isDeleted - true if note is deleted
 | 
			
		||||
 * @property {string} dateCreated
 | 
			
		||||
 * @property {string} dateModified
 | 
			
		||||
 * @property {boolean} isErased - true if note's content is erased after it has been deleted
 | 
			
		||||
 * @property {string} dateCreated - local date time (with offset)
 | 
			
		||||
 * @property {string} dateModified - local date time (with offset)
 | 
			
		||||
 * @property {string} utcDateCreated
 | 
			
		||||
 * @property {string} utcDateModified
 | 
			
		||||
 *
 | 
			
		||||
 * @extends Entity
 | 
			
		||||
 */
 | 
			
		||||
class Note extends Entity {
 | 
			
		||||
    static get entityName() { return "notes"; }
 | 
			
		||||
    static get primaryKeyName() { return "noteId"; }
 | 
			
		||||
    static get hashedProperties() { return ["noteId", "title", "content", "type", "isProtected", "isDeleted"]; }
 | 
			
		||||
    static get hashedProperties() { return ["noteId", "title", "type", "isProtected", "isDeleted"]; }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param row - object containing database row from "notes" table
 | 
			
		||||
@@ -67,7 +71,7 @@ class Note extends Entity {
 | 
			
		||||
        super(row);
 | 
			
		||||
 | 
			
		||||
        this.isProtected = !!this.isProtected;
 | 
			
		||||
        /* true if content (meaning any kind of potentially encrypted content) is either not encrypted
 | 
			
		||||
        /* true if content is either not encrypted
 | 
			
		||||
         * or encrypted, but with available protected session (so effectively decrypted) */
 | 
			
		||||
        this.isContentAvailable = true;
 | 
			
		||||
 | 
			
		||||
@@ -75,19 +79,98 @@ class Note extends Entity {
 | 
			
		||||
        if (this.isProtected && this.noteId) {
 | 
			
		||||
            this.isContentAvailable = protectedSessionService.isProtectedSessionAvailable();
 | 
			
		||||
 | 
			
		||||
            protectedSessionService.decryptNote(this);
 | 
			
		||||
            if (this.isContentAvailable) {
 | 
			
		||||
                this.title = protectedSessionService.decryptString(this.title);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                this.title = "[protected]";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        this.setContent(this.content);
 | 
			
		||||
    /*
 | 
			
		||||
     * Note content has quite special handling - it's not a separate entity, but a lazily loaded
 | 
			
		||||
     * part of Note entity with it's own sync. Reasons behind this hybrid design has been:
 | 
			
		||||
     *
 | 
			
		||||
     * - 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
 | 
			
		||||
     * - changes in the note metadata or title should not trigger note content sync (so we keep separate utcDateModified and sync rows)
 | 
			
		||||
     * - but to the user note content and title changes are one and the same - single dateModified (so all changes must go through Note and content is not a separate entity)
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    /** @returns {Promise<*>} */
 | 
			
		||||
    async getContent(silentNotFoundError = false) {
 | 
			
		||||
        if (this.content === undefined) {
 | 
			
		||||
            const res = await sql.getRow(`SELECT content, hash FROM note_contents WHERE noteId = ?`, [this.noteId]);
 | 
			
		||||
 | 
			
		||||
            if (!res) {
 | 
			
		||||
                if (silentNotFoundError) {
 | 
			
		||||
                    return undefined;
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    throw new Error("Cannot find note content for noteId=" + this.noteId);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
    setContent(content) {
 | 
			
		||||
            this.content = res.content;
 | 
			
		||||
 | 
			
		||||
            if (this.isProtected) {
 | 
			
		||||
                if (this.isContentAvailable) {
 | 
			
		||||
                    this.content = this.content === null ? null : protectedSessionService.decrypt(this.content);
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    this.content = "";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (this.isStringNote()) {
 | 
			
		||||
                this.content = this.content === null
 | 
			
		||||
                    ? ""
 | 
			
		||||
                    : this.content.toString("UTF-8");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return this.content;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {Promise<*>} */
 | 
			
		||||
    async getJsonContent() {
 | 
			
		||||
        const content = await this.getContent();
 | 
			
		||||
 | 
			
		||||
        return JSON.parse(content);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {Promise} */
 | 
			
		||||
    async setContent(content) {
 | 
			
		||||
        // force updating note itself so that dateModified is represented correctly even for the content
 | 
			
		||||
        this.forcedChange = true;
 | 
			
		||||
        await this.save();
 | 
			
		||||
 | 
			
		||||
        this.content = content;
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            this.jsonContent = JSON.parse(this.content);
 | 
			
		||||
        const pojo = {
 | 
			
		||||
            noteId: this.noteId,
 | 
			
		||||
            content: content,
 | 
			
		||||
            utcDateModified: dateUtils.utcNowDateTime(),
 | 
			
		||||
            hash: utils.hash(this.noteId + "|" + content)
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        if (this.isProtected) {
 | 
			
		||||
            if (this.isContentAvailable) {
 | 
			
		||||
                pojo.content = protectedSessionService.encrypt(pojo.content);
 | 
			
		||||
            }
 | 
			
		||||
        catch(e) {}
 | 
			
		||||
            else {
 | 
			
		||||
                throw new Error(`Cannot update content of noteId=${this.noteId} since we're out of protected session.`);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        await sql.upsert("note_contents", "noteId", pojo);
 | 
			
		||||
 | 
			
		||||
        await syncTableService.addNoteContentSync(this.noteId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {Promise} */
 | 
			
		||||
    async setJsonContent(content) {
 | 
			
		||||
        await this.setContent(JSON.stringify(content, null, '\t'));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {boolean} true if this note is the root of the note tree. Root note has "root" noteId */
 | 
			
		||||
@@ -113,6 +196,11 @@ class Note extends Entity {
 | 
			
		||||
        return (this.type === "code" || this.type === "file" || this.type === "render") && this.mime === "text/html";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {boolean} true if the note has string content (not binary) */
 | 
			
		||||
    isStringNote() {
 | 
			
		||||
        return utils.isStringNote(this.type, this.mime);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {string} JS script environment - either "frontend" or "backend" */
 | 
			
		||||
    getScriptEnv() {
 | 
			
		||||
        if (this.isHtml() || (this.isJavaScript() && this.mime.endsWith('env=frontend'))) {
 | 
			
		||||
@@ -132,9 +220,35 @@ class Note extends Entity {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @returns {Promise<Attribute[]>} attributes belonging to this specific note (excludes inherited attributes)
 | 
			
		||||
     *
 | 
			
		||||
     * This method can be significantly faster than the getAttributes()
 | 
			
		||||
     */
 | 
			
		||||
    async getOwnedAttributes() {
 | 
			
		||||
        return await repository.getEntities(`SELECT * FROM attributes WHERE isDeleted = 0 AND noteId = ?`, [this.noteId]);
 | 
			
		||||
    async getOwnedAttributes(type, name) {
 | 
			
		||||
        let query = `SELECT * FROM attributes WHERE isDeleted = 0 AND noteId = ?`;
 | 
			
		||||
        const params = [this.noteId];
 | 
			
		||||
 | 
			
		||||
        if (type) {
 | 
			
		||||
            query += ` AND type = ?`;
 | 
			
		||||
            params.push(type);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (name) {
 | 
			
		||||
            query += ` AND name = ?`;
 | 
			
		||||
            params.push(name);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return await repository.getEntities(query, params);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @returns {Promise<Attribute>} attribute belonging to this specific note (excludes inherited attributes)
 | 
			
		||||
     *
 | 
			
		||||
     * This method can be significantly faster than the getAttribute()
 | 
			
		||||
     */
 | 
			
		||||
    async getOwnedAttribute(type, name) {
 | 
			
		||||
        const attrs = await this.getOwnedAttributes(type, name);
 | 
			
		||||
 | 
			
		||||
        return attrs.length > 0 ? attrs[0] : null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -185,6 +299,21 @@ class Note extends Entity {
 | 
			
		||||
        return (await this.getAttributes(name)).filter(attr => attr.type === RELATION);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param {string} [name] - relation name to filter
 | 
			
		||||
     * @returns {Promise<Note[]>}
 | 
			
		||||
     */
 | 
			
		||||
    async getRelationTargets(name) {
 | 
			
		||||
        const relations = await this.getRelations(name);
 | 
			
		||||
        const targets = [];
 | 
			
		||||
 | 
			
		||||
        for (const relation of relations) {
 | 
			
		||||
            targets.push(await relation.getTargetNote());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return targets;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param {string} [name] - relation name to filter
 | 
			
		||||
     * @returns {Promise<Attribute[]>} all note's relation definitions including inherited ones
 | 
			
		||||
@@ -217,16 +346,16 @@ class Note extends Entity {
 | 
			
		||||
            treeWithAttrs(noteId, level) AS (
 | 
			
		||||
                SELECT * FROM tree
 | 
			
		||||
                UNION
 | 
			
		||||
                SELECT attributes.value, treeWithAttrs.level + 1 FROM attributes
 | 
			
		||||
                SELECT attributes.value, treeWithAttrs.level FROM attributes
 | 
			
		||||
                     JOIN treeWithAttrs ON treeWithAttrs.noteId = attributes.noteId
 | 
			
		||||
                WHERE attributes.isDeleted = 0
 | 
			
		||||
                  AND attributes.type = 'relation'
 | 
			
		||||
                  AND attributes.name = 'template'
 | 
			
		||||
                  AND (attributes.noteId = ? OR attributes.isInheritable = 1)
 | 
			
		||||
                  AND (treeWithAttrs.level = 0 OR attributes.isInheritable = 1)
 | 
			
		||||
                )
 | 
			
		||||
            SELECT attributes.* FROM attributes JOIN treeWithAttrs ON attributes.noteId = treeWithAttrs.noteId
 | 
			
		||||
            WHERE attributes.isDeleted = 0 AND (attributes.isInheritable = 1 OR attributes.noteId = ?)
 | 
			
		||||
            ORDER BY level, noteId, position`, [this.noteId, this.noteId, this.noteId]);
 | 
			
		||||
            WHERE attributes.isDeleted = 0 AND (attributes.isInheritable = 1 OR treeWithAttrs.level = 0)
 | 
			
		||||
            ORDER BY level, noteId, position`, [this.noteId]);
 | 
			
		||||
        // attributes are ordered so that "closest" attributes are first
 | 
			
		||||
        // we order by noteId so that attributes from same note stay together. Actual noteId ordering doesn't matter.
 | 
			
		||||
 | 
			
		||||
@@ -315,7 +444,7 @@ class Note extends Entity {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates given attribute name-value pair if it doesn't exist.
 | 
			
		||||
     * Update's given attribute's value or creates it if it doesn't exist
 | 
			
		||||
     *
 | 
			
		||||
     * @param {string} type - attribute type (label, relation, etc.)
 | 
			
		||||
     * @param {string} name - attribute name
 | 
			
		||||
@@ -324,9 +453,17 @@ class Note extends Entity {
 | 
			
		||||
     */
 | 
			
		||||
    async setAttribute(type, name, value) {
 | 
			
		||||
        const attributes = await this.getOwnedAttributes();
 | 
			
		||||
        let attr = attributes.find(attr => attr.type === type && (value === undefined || attr.value === value));
 | 
			
		||||
        let attr = attributes.find(attr => attr.type === type && attr.name === name);
 | 
			
		||||
 | 
			
		||||
        if (!attr) {
 | 
			
		||||
        if (attr) {
 | 
			
		||||
            if (attr.value !== value) {
 | 
			
		||||
                attr.value = value;
 | 
			
		||||
                await attr.save();
 | 
			
		||||
 | 
			
		||||
                this.invalidateAttributeCache();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            attr = new Attribute({
 | 
			
		||||
                noteId: this.noteId,
 | 
			
		||||
                type: type,
 | 
			
		||||
@@ -428,7 +565,7 @@ class Note extends Entity {
 | 
			
		||||
    async toggleRelation(enabled, name, value) { return await this.toggleAttribute(RELATION, enabled, name, value); }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create label name-value pair if it doesn't exist yet.
 | 
			
		||||
     * Update's given label's value or creates it if it doesn't exist
 | 
			
		||||
     *
 | 
			
		||||
     * @param {string} name - label name
 | 
			
		||||
     * @param {string} [value] - label value
 | 
			
		||||
@@ -437,7 +574,7 @@ class Note extends Entity {
 | 
			
		||||
    async setLabel(name, value) { return await this.setAttribute(LABEL, name, value); }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create relation name-value pair if it doesn't exist yet.
 | 
			
		||||
     * Update's given relation's value or creates it if it doesn't exist
 | 
			
		||||
     *
 | 
			
		||||
     * @param {string} name - relation name
 | 
			
		||||
     * @param {string} [value] - relation value (noteId)
 | 
			
		||||
@@ -550,28 +687,17 @@ class Note extends Entity {
 | 
			
		||||
    /**
 | 
			
		||||
     * Get list of links coming out of this note.
 | 
			
		||||
     *
 | 
			
		||||
     * @returns {Promise<Link[]>}
 | 
			
		||||
     * @deprecated - not intended for general use
 | 
			
		||||
     * @returns {Promise<Attribute[]>}
 | 
			
		||||
     */
 | 
			
		||||
    async getLinks() {
 | 
			
		||||
        return await repository.getEntities("SELECT * FROM links WHERE noteId = ? AND isDeleted = 0", [this.noteId]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get list of links targetting this note.
 | 
			
		||||
     *
 | 
			
		||||
     * @returns {Promise<Link[]>}
 | 
			
		||||
     */
 | 
			
		||||
    async getTargetLinks() {
 | 
			
		||||
        return await repository.getEntities("SELECT * FROM links WHERE targetNoteId = ? AND isDeleted = 0", [this.noteId]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Return all links from this note, including deleted ones.
 | 
			
		||||
     *
 | 
			
		||||
     * @returns {Promise<Link[]>}
 | 
			
		||||
     */
 | 
			
		||||
    async getLinksWithDeleted() {
 | 
			
		||||
        return await repository.getEntities("SELECT * FROM links WHERE noteId = ?", [this.noteId]);
 | 
			
		||||
        return await repository.getEntities(`
 | 
			
		||||
            SELECT * 
 | 
			
		||||
            FROM attributes 
 | 
			
		||||
            WHERE noteId = ? AND 
 | 
			
		||||
                  isDeleted = 0 AND 
 | 
			
		||||
                  type = 'relation' AND 
 | 
			
		||||
                  name IN ('internal-link', 'image-link', 'relation-map-link')`, [this.noteId]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -629,37 +755,42 @@ class Note extends Entity {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    beforeSaving() {
 | 
			
		||||
        if (this.isJson() && this.jsonContent) {
 | 
			
		||||
            this.content = JSON.stringify(this.jsonContent, null, '\t');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // we do this here because encryption needs the note ID for the IV
 | 
			
		||||
        this.generateIdIfNecessary();
 | 
			
		||||
 | 
			
		||||
        if (!this.isDeleted) {
 | 
			
		||||
            this.isDeleted = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!this.dateCreated) {
 | 
			
		||||
            this.dateCreated = dateUtils.nowDate();
 | 
			
		||||
            this.dateCreated = dateUtils.localNowDateTime();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!this.utcDateCreated) {
 | 
			
		||||
            this.utcDateCreated = dateUtils.utcNowDateTime();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        super.beforeSaving();
 | 
			
		||||
 | 
			
		||||
        if (this.isChanged) {
 | 
			
		||||
            this.dateModified = dateUtils.nowDate();
 | 
			
		||||
            this.dateModified = dateUtils.localNowDateTime();
 | 
			
		||||
            this.utcDateModified = dateUtils.utcNowDateTime();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // cannot be static!
 | 
			
		||||
    updatePojo(pojo) {
 | 
			
		||||
        if (pojo.isProtected) {
 | 
			
		||||
            protectedSessionService.encryptNote(pojo);
 | 
			
		||||
            if (this.isContentAvailable) {
 | 
			
		||||
                pojo.title = protectedSessionService.encrypt(pojo.title);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                // updating protected note outside of protected session means we will keep original ciphertexts
 | 
			
		||||
                delete pojo.title;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        delete pojo.jsonContent;
 | 
			
		||||
        delete pojo.isContentAvailable;
 | 
			
		||||
        delete pojo.__attributeCache;
 | 
			
		||||
        delete pojo.content;
 | 
			
		||||
        delete pojo.contentHash;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -673,13 +804,13 @@ module.exports = Note;</code></pre>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -31,6 +31,10 @@
 | 
			
		||||
const Entity = require('./entity');
 | 
			
		||||
const protectedSessionService = require('../services/protected_session');
 | 
			
		||||
const repository = require('../services/repository');
 | 
			
		||||
const utils = require('../services/utils');
 | 
			
		||||
const sql = require('../services/sql');
 | 
			
		||||
const dateUtils = require('../services/date_utils');
 | 
			
		||||
const syncTableService = require('../services/sync_table');
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * NoteRevision represents snapshot of note's title and content at some point in the past. It's used for seamless note versioning.
 | 
			
		||||
@@ -40,17 +44,19 @@ const repository = require('../services/repository');
 | 
			
		||||
 * @param {string} type
 | 
			
		||||
 * @param {string} mime
 | 
			
		||||
 * @param {string} title
 | 
			
		||||
 * @param {string} content
 | 
			
		||||
 * @param {string} isProtected
 | 
			
		||||
 * @param {string} dateModifiedFrom
 | 
			
		||||
 * @param {string} dateModifiedTo
 | 
			
		||||
 * @param {string} dateLastEdited
 | 
			
		||||
 * @param {string} dateCreated
 | 
			
		||||
 * @param {string} utcDateLastEdited
 | 
			
		||||
 * @param {string} utcDateCreated
 | 
			
		||||
 * @param {string} utcDateModified
 | 
			
		||||
 *
 | 
			
		||||
 * @extends Entity
 | 
			
		||||
 */
 | 
			
		||||
class NoteRevision extends Entity {
 | 
			
		||||
    static get entityName() { return "note_revisions"; }
 | 
			
		||||
    static get primaryKeyName() { return "noteRevisionId"; }
 | 
			
		||||
    static get hashedProperties() { return ["noteRevisionId", "noteId", "title", "content", "isProtected", "dateModifiedFrom", "dateModifiedTo"]; }
 | 
			
		||||
    static get hashedProperties() { return ["noteRevisionId", "noteId", "title", "contentLength", "isProtected", "dateLastEdited", "dateCreated", "utcDateLastEdited", "utcDateCreated", "utcDateModified"]; }
 | 
			
		||||
 | 
			
		||||
    constructor(row) {
 | 
			
		||||
        super(row);
 | 
			
		||||
@@ -58,7 +64,12 @@ class NoteRevision extends Entity {
 | 
			
		||||
        this.isProtected = !!this.isProtected;
 | 
			
		||||
 | 
			
		||||
        if (this.isProtected) {
 | 
			
		||||
            protectedSessionService.decryptNoteRevision(this);
 | 
			
		||||
            if (protectedSessionService.isProtectedSessionAvailable()) {
 | 
			
		||||
                this.title = protectedSessionService.decryptString(this.title);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                this.title = "[Protected]";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -66,12 +77,98 @@ class NoteRevision extends Entity {
 | 
			
		||||
        return await repository.getEntity("SELECT * FROM notes WHERE noteId = ?", [this.noteId]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    beforeSaving() {
 | 
			
		||||
        if (this.isProtected) {
 | 
			
		||||
            protectedSessionService.encryptNoteRevision(this);
 | 
			
		||||
    /** @returns {boolean} true if the note has string content (not binary) */
 | 
			
		||||
    isStringNote() {
 | 
			
		||||
        return utils.isStringNote(this.type, this.mime);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        super.beforeSaving();
 | 
			
		||||
    /*
 | 
			
		||||
     * 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 {Promise<*>} */
 | 
			
		||||
    async getContent(silentNotFoundError = false) {
 | 
			
		||||
        if (this.content === undefined) {
 | 
			
		||||
            const res = await sql.getRow(`SELECT content, hash 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);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            this.content = res.content;
 | 
			
		||||
 | 
			
		||||
            if (this.isProtected) {
 | 
			
		||||
                if (protectedSessionService.isProtectedSessionAvailable()) {
 | 
			
		||||
                    this.content = protectedSessionService.decrypt(this.content);
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    this.content = "";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (this.isStringNote()) {
 | 
			
		||||
                this.content = this.content === null
 | 
			
		||||
                    ? ""
 | 
			
		||||
                    : this.content.toString("UTF-8");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return this.content;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @returns {Promise} */
 | 
			
		||||
    async setContent(content) {
 | 
			
		||||
        // force updating note itself so that utcDateModified is represented correctly even for the content
 | 
			
		||||
        this.forcedChange = true;
 | 
			
		||||
        this.contentLength = content.length;
 | 
			
		||||
        await this.save();
 | 
			
		||||
 | 
			
		||||
        this.content = content;
 | 
			
		||||
 | 
			
		||||
        const pojo = {
 | 
			
		||||
            noteRevisionId: this.noteRevisionId,
 | 
			
		||||
            content: content,
 | 
			
		||||
            utcDateModified: dateUtils.utcNowDateTime(),
 | 
			
		||||
            hash: utils.hash(this.noteRevisionId + "|" + content)
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        if (this.isProtected) {
 | 
			
		||||
            if (protectedSessionService.isProtectedSessionAvailable()) {
 | 
			
		||||
                pojo.content = protectedSessionService.encrypt(pojo.content);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                throw new Error(`Cannot update content of noteRevisionId=${this.noteRevisionId} since we're out of protected session.`);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        await sql.upsert("note_revision_contents", "noteRevisionId", pojo);
 | 
			
		||||
 | 
			
		||||
        await syncTableService.addNoteRevisionContentSync(this.noteRevisionId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // cannot be static!
 | 
			
		||||
    updatePojo(pojo) {
 | 
			
		||||
        if (pojo.isProtected) {
 | 
			
		||||
            if (protectedSessionService.isProtectedSessionAvailable()) {
 | 
			
		||||
                pojo.title = protectedSessionService.encrypt(pojo.title);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                // updating protected note outside of protected session means we will keep original ciphertexts
 | 
			
		||||
                delete pojo.title;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        delete pojo.content;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -85,13 +182,13 @@ module.exports = NoteRevision;</code></pre>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -37,8 +37,8 @@ const dateUtils = require('../services/date_utils');
 | 
			
		||||
 * @param {string} name
 | 
			
		||||
 * @param {string} value
 | 
			
		||||
 * @param {boolean} isSynced
 | 
			
		||||
 * @param {string} dateModified
 | 
			
		||||
 * @param {string} dateCreated
 | 
			
		||||
 * @param {string} utcDateModified
 | 
			
		||||
 * @param {string} utcDateCreated
 | 
			
		||||
 *
 | 
			
		||||
 * @extends Entity
 | 
			
		||||
 */
 | 
			
		||||
@@ -54,10 +54,14 @@ class Option extends Entity {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    beforeSaving() {
 | 
			
		||||
        if (!this.utcDateCreated) {
 | 
			
		||||
            this.utcDateCreated = dateUtils.utcNowDateTime();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        super.beforeSaving();
 | 
			
		||||
 | 
			
		||||
        if (this.isChanged) {
 | 
			
		||||
            this.dateModified = dateUtils.nowDate();
 | 
			
		||||
            this.utcDateModified = dateUtils.utcNowDateTime();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -72,13 +76,13 @@ module.exports = Option;</code></pre>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -34,25 +34,25 @@ const dateUtils = require('../services/date_utils');
 | 
			
		||||
/**
 | 
			
		||||
 * RecentNote represents recently visited note.
 | 
			
		||||
 *
 | 
			
		||||
 * @param {string} branchId
 | 
			
		||||
 * @param {string} noteId
 | 
			
		||||
 * @param {string} notePath
 | 
			
		||||
 * @param {boolean} isDeleted
 | 
			
		||||
 * @param {string} dateModified
 | 
			
		||||
 * @param {string} utcDateModified
 | 
			
		||||
 *
 | 
			
		||||
 * @extends Entity
 | 
			
		||||
 */
 | 
			
		||||
class RecentNote extends Entity {
 | 
			
		||||
    static get entityName() { return "recent_notes"; }
 | 
			
		||||
    static get primaryKeyName() { return "branchId"; }
 | 
			
		||||
    static get hashedProperties() { return ["branchId", "notePath", "dateCreated", "isDeleted"]; }
 | 
			
		||||
    static get primaryKeyName() { return "noteId"; }
 | 
			
		||||
    static get hashedProperties() { return ["noteId", "notePath", "utcDateCreated", "isDeleted"]; }
 | 
			
		||||
 | 
			
		||||
    beforeSaving() {
 | 
			
		||||
        if (!this.isDeleted) {
 | 
			
		||||
            this.isDeleted = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!this.dateCreated) {
 | 
			
		||||
            this.dateCreated = dateUtils.nowDate();
 | 
			
		||||
        if (!this.utcDateCreated) {
 | 
			
		||||
            this.utcDateCreated = dateUtils.utcNowDateTime();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        super.beforeSaving();
 | 
			
		||||
@@ -69,13 +69,13 @@ module.exports = RecentNote;</code></pre>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -272,7 +272,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line144">line 144</a>
 | 
			
		||||
        <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line173">line 173</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -558,7 +558,7 @@
 | 
			
		||||
    
 | 
			
		||||
    <dt class="tag-source">Source:</dt>
 | 
			
		||||
    <dd class="tag-source"><ul class="dummy"><li>
 | 
			
		||||
        <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line151">line 151</a>
 | 
			
		||||
        <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line180">line 180</a>
 | 
			
		||||
    </li></ul></dd>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@@ -588,13 +588,13 @@
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -50,13 +50,13 @@
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,12 @@
 | 
			
		||||
/*global document */
 | 
			
		||||
(function() {
 | 
			
		||||
    var source = document.getElementsByClassName('prettyprint source linenums');
 | 
			
		||||
    var i = 0;
 | 
			
		||||
    var lineNumber = 0;
 | 
			
		||||
    var lineId;
 | 
			
		||||
    var lines;
 | 
			
		||||
    var totalLines;
 | 
			
		||||
    var anchorHash;
 | 
			
		||||
(() => {
 | 
			
		||||
    const source = document.getElementsByClassName('prettyprint source linenums');
 | 
			
		||||
    let i = 0;
 | 
			
		||||
    let lineNumber = 0;
 | 
			
		||||
    let lineId;
 | 
			
		||||
    let lines;
 | 
			
		||||
    let totalLines;
 | 
			
		||||
    let anchorHash;
 | 
			
		||||
 | 
			
		||||
    if (source && source[0]) {
 | 
			
		||||
        anchorHash = document.location.hash.substring(1);
 | 
			
		||||
@@ -15,7 +15,7 @@
 | 
			
		||||
 | 
			
		||||
        for (; i < totalLines; i++) {
 | 
			
		||||
            lineNumber++;
 | 
			
		||||
            lineId = 'line' + lineNumber;
 | 
			
		||||
            lineId = `line${lineNumber}`;
 | 
			
		||||
            lines[i].id = lineId;
 | 
			
		||||
            if (lineId === anchorHash) {
 | 
			
		||||
                lines[i].className += ' selected';
 | 
			
		||||
 
 | 
			
		||||
@@ -30,15 +30,17 @@
 | 
			
		||||
const noteService = require('./notes');
 | 
			
		||||
const sql = require('./sql');
 | 
			
		||||
const utils = require('./utils');
 | 
			
		||||
const dateUtils = require('./date_utils');
 | 
			
		||||
const attributeService = require('./attributes');
 | 
			
		||||
const dateNoteService = require('./date_notes');
 | 
			
		||||
const treeService = require('./tree');
 | 
			
		||||
const config = require('./config');
 | 
			
		||||
const repository = require('./repository');
 | 
			
		||||
const axios = require('axios');
 | 
			
		||||
const dayjs = require('dayjs');
 | 
			
		||||
const cloningService = require('./cloning');
 | 
			
		||||
const messagingService = require('./messaging');
 | 
			
		||||
const ws = require('./ws.js');
 | 
			
		||||
const appInfo = require('./app_info');
 | 
			
		||||
const searchService = require('./search');
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This is the main backend API interface for scripts. It's published in the local "api" object.
 | 
			
		||||
@@ -46,20 +48,23 @@ const messagingService = require('./messaging');
 | 
			
		||||
 * @constructor
 | 
			
		||||
 * @hideconstructor
 | 
			
		||||
 */
 | 
			
		||||
function BackendScriptApi(startNote, currentNote, originEntity) {
 | 
			
		||||
function BackendScriptApi(currentNote, apiParams) {
 | 
			
		||||
    /** @property {Note} note where script started executing */
 | 
			
		||||
    this.startNote = startNote;
 | 
			
		||||
    /** @property {Note} note where script is currently executing */
 | 
			
		||||
    this.startNote = apiParams.startNote;
 | 
			
		||||
    /** @property {Note} note where script is currently executing. Don't mix this up with concept of active note */
 | 
			
		||||
    this.currentNote = currentNote;
 | 
			
		||||
    /** @property {Entity} entity whose event triggered this executions */
 | 
			
		||||
    this.originEntity = originEntity;
 | 
			
		||||
    this.originEntity = apiParams.originEntity;
 | 
			
		||||
 | 
			
		||||
    for (const key in apiParams) {
 | 
			
		||||
        this[key] = apiParams[key];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.axios = axios;
 | 
			
		||||
    this.dayjs = dayjs;
 | 
			
		||||
 | 
			
		||||
    this.utils = {
 | 
			
		||||
        unescapeHtml: utils.unescapeHtml,
 | 
			
		||||
        isoDateTimeStr: dateUtils.dateStr,
 | 
			
		||||
        isoDateStr: date => dateUtils.dateStr(date).substr(0, 10)
 | 
			
		||||
        unescapeHtml: utils.unescapeHtml
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -116,6 +121,30 @@ function BackendScriptApi(startNote, currentNote, originEntity) {
 | 
			
		||||
     */
 | 
			
		||||
    this.getEntities = repository.getEntities;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This is a powerful search method - you can search by attributes and their values, e.g.:
 | 
			
		||||
     * "@dateModified =* MONTH AND @log". See full documentation for all options at: https://github.com/zadam/trilium/wiki/Search
 | 
			
		||||
     *
 | 
			
		||||
     * @method
 | 
			
		||||
     * @param {string} searchString
 | 
			
		||||
     * @returns {Promise<Note[]>}
 | 
			
		||||
     */
 | 
			
		||||
    this.searchForNotes = searchService.searchForNotes;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This is a powerful search method - you can search by attributes and their values, e.g.:
 | 
			
		||||
     * "@dateModified =* MONTH AND @log". See full documentation for all options at: https://github.com/zadam/trilium/wiki/Search
 | 
			
		||||
     *
 | 
			
		||||
     * @method
 | 
			
		||||
     * @param {string} searchString
 | 
			
		||||
     * @returns {Promise<Note|null>}
 | 
			
		||||
     */
 | 
			
		||||
    this.searchForNote = async searchString => {
 | 
			
		||||
        const notes = await searchService.searchForNotes(searchString);
 | 
			
		||||
 | 
			
		||||
        return notes.length > 0 ? notes[0] : null;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Retrieves notes with given label name & value
 | 
			
		||||
     *
 | 
			
		||||
@@ -196,6 +225,25 @@ function BackendScriptApi(startNote, currentNote, originEntity) {
 | 
			
		||||
     */
 | 
			
		||||
    this.createNote = noteService.createNote;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates new note according to given params and force all connected clients to refresh their tree.
 | 
			
		||||
     *
 | 
			
		||||
     * @method
 | 
			
		||||
     *
 | 
			
		||||
     * @param {string} parentNoteId - create new note under this parent
 | 
			
		||||
     * @param {string} title
 | 
			
		||||
     * @param {string} [content=""]
 | 
			
		||||
     * @param {CreateNoteExtraOptions} [extraOptions={}]
 | 
			
		||||
     * @returns {Promise<{note: Note, branch: Branch}>} object contains newly created entities note and branch
 | 
			
		||||
     */
 | 
			
		||||
    this.createNoteAndRefresh = async function(parentNoteId, title, content, extraOptions) {
 | 
			
		||||
        const ret = await noteService.createNote(parentNoteId, title, content, extraOptions);
 | 
			
		||||
 | 
			
		||||
        ws.refreshTree();
 | 
			
		||||
        
 | 
			
		||||
        return ret;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Log given message to trilium logs.
 | 
			
		||||
     *
 | 
			
		||||
@@ -212,14 +260,42 @@ function BackendScriptApi(startNote, currentNote, originEntity) {
 | 
			
		||||
    this.getRootCalendarNote = dateNoteService.getRootCalendarNote;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns day note for given date (YYYY-MM-DD format). If such note doesn't exist, it is created.
 | 
			
		||||
     * Returns day note for given date. If such note doesn't exist, it is created.
 | 
			
		||||
     *
 | 
			
		||||
     * @method
 | 
			
		||||
     * @param {string} date
 | 
			
		||||
     * @param {string} date in YYYY-MM-DD format
 | 
			
		||||
     * @returns {Promise<Note|null>}
 | 
			
		||||
     */
 | 
			
		||||
    this.getDateNote = dateNoteService.getDateNote;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns note for the first date of the week of the given date.
 | 
			
		||||
     *
 | 
			
		||||
     * @method
 | 
			
		||||
     * @param {string} date in YYYY-MM-DD format
 | 
			
		||||
     * @param {object} options - "startOfTheWeek" - either "monday" (default) or "sunday"
 | 
			
		||||
     * @returns {Promise<Note|null>}
 | 
			
		||||
     */
 | 
			
		||||
    this.getWeekNote = dateNoteService.getWeekNote;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns month note for given date. If such note doesn't exist, it is created.
 | 
			
		||||
     *
 | 
			
		||||
     * @method
 | 
			
		||||
     * @param {string} date in YYYY-MM format
 | 
			
		||||
     * @returns {Promise<Note|null>}
 | 
			
		||||
     */
 | 
			
		||||
    this.getMonthNote = dateNoteService.getMonthNote;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns year note for given year. If such note doesn't exist, it is created.
 | 
			
		||||
     *
 | 
			
		||||
     * @method
 | 
			
		||||
     * @param {string} year in YYYY format
 | 
			
		||||
     * @returns {Promise<Note|null>}
 | 
			
		||||
     */
 | 
			
		||||
    this.getYearNote = dateNoteService.getYearNote;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @method
 | 
			
		||||
     * @param {string} parentNoteId - this note's child notes will be sorted
 | 
			
		||||
@@ -234,9 +310,10 @@ function BackendScriptApi(startNote, currentNote, originEntity) {
 | 
			
		||||
     * This method looks similar to toggleNoteInParent() but differs because we're looking up branch by prefix.
 | 
			
		||||
     *
 | 
			
		||||
     * @method
 | 
			
		||||
     * @deprecated - this method is pretty confusing and serves specialized purpose only
 | 
			
		||||
     * @param {string} noteId
 | 
			
		||||
     * @param {string} prefix
 | 
			
		||||
     * @param {string} [parentNoteId]
 | 
			
		||||
     * @param {string|null} parentNoteId
 | 
			
		||||
     */
 | 
			
		||||
    this.setNoteToParent = treeService.setNoteToParent;
 | 
			
		||||
 | 
			
		||||
@@ -261,10 +338,16 @@ function BackendScriptApi(startNote, currentNote, originEntity) {
 | 
			
		||||
     *
 | 
			
		||||
     * @returns {Promise<void>}
 | 
			
		||||
     */
 | 
			
		||||
    this.refreshTree = () => messagingService.sendMessageToAllClients({ type: 'refresh-tree' });
 | 
			
		||||
    this.refreshTree = ws.refreshTree;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return {{syncVersion, appVersion, buildRevision, dbVersion, dataDirectory, buildDate}|*} - object representing basic info about running Trilium version
 | 
			
		||||
     */
 | 
			
		||||
    this.getAppInfo = () => appInfo
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = BackendScriptApi;</code></pre>
 | 
			
		||||
module.exports = BackendScriptApi;
 | 
			
		||||
</code></pre>
 | 
			
		||||
        </article>
 | 
			
		||||
    </section>
 | 
			
		||||
 | 
			
		||||
@@ -274,13 +357,13 @@ module.exports = BackendScriptApi;</code></pre>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<nav>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
<br class="clear">
 | 
			
		||||
 | 
			
		||||
<footer>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
 | 
			
		||||
    Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script> prettyPrint(); </script>
 | 
			
		||||
 
 | 
			
		||||
@@ -273,7 +273,7 @@ tr > th:last-child { border-right: 1px solid #ddd; }
 | 
			
		||||
    margin: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.prettyprint
 | 
			
		||||
.source
 | 
			
		||||
{
 | 
			
		||||
    border: 1px solid #ddd;
 | 
			
		||||
    width: 80%;
 | 
			
		||||
@@ -284,7 +284,7 @@ tr > th:last-child { border-right: 1px solid #ddd; }
 | 
			
		||||
    width: inherit;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.prettyprint code
 | 
			
		||||
.source code
 | 
			
		||||
{
 | 
			
		||||
    font-size: 100%;
 | 
			
		||||
    line-height: 18px;
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user