mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-29 01:06:36 +01:00 
			
		
		
		
	Compare commits
	
		
			550 Commits
		
	
	
		
			v0.59.3
			...
			v0.61.6-be
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 3a83d58b25 | ||
|  | 6fa9d996e8 | ||
|  | 1ea3d238e0 | ||
|  | eb273b7dbb | ||
|  | d2263c68f8 | ||
|  | 97d8b19868 | ||
|  | 2bc7da91a6 | ||
|  | 2b4cbb5f6b | ||
|  | 7b662b04ff | ||
|  | f8e4a665bd | ||
|  | f9a27dd90c | ||
|  | 641985737f | ||
|  | 121e4ba2ea | ||
|  | 01474ecd2d | ||
|  | 82e4e28e7b | ||
|  | 886ee0dbcb | ||
|  | 6f7fbacca1 | ||
|  | 8da5b90aea | ||
|  | e7d57bc08f | ||
|  | 041758766a | ||
|  | f2a510e4c5 | ||
|  | 4717242dc7 | ||
|  | c1865f8564 | ||
|  | 515c5411a6 | ||
|  | 3f7a5504c7 | ||
|  | 8c7c37cf98 | ||
|  | c0f48c0e99 | ||
|  | abedf2bba4 | ||
|  | bb0137b2fd | ||
|  | 6c54c7d17d | ||
|  | 90255ac55b | ||
|  | e741c2826c | ||
|  | 026992db78 | ||
|  | 33780c1e17 | ||
|  | ede9c43f67 | ||
|  | 5c12ac4eee | ||
|  | 522518cf0d | ||
|  | 1d869d25c2 | ||
|  | a9cdd93cb4 | ||
|  | 4240da349d | ||
|  | c257bc07a8 | ||
|  | 00eaa16985 | ||
|  | fefb059564 | ||
|  | 9166765ced | ||
|  | 6ae7661603 | ||
|  | 30e75056bd | ||
|  | 530e56dcb5 | ||
|  | 63675bfbae | ||
|  | 696ce38083 | ||
|  | 12014b9f4d | ||
|  | e8b52f9e6c | ||
|  | 04b125afc0 | ||
|  | 2a7fe85020 | ||
|  | 119050e355 | ||
|  | 72122d0f95 | ||
|  | bd22863bb7 | ||
|  | ce3834eb9e | ||
|  | 8edb5428e5 | ||
|  | 527718eff7 | ||
|  | 5b0f487f3f | ||
|  | a3fa8341ba | ||
|  | 04813743e2 | ||
|  | ddf75cd5e5 | ||
|  | d0e5ad5b7e | ||
|  | b4631e927c | ||
|  | b7bc843a37 | ||
|  | 98d65f8767 | ||
|  | 0599891ec0 | ||
|  | cc06701565 | ||
|  | 40683985cd | ||
|  | 074e13a889 | ||
|  | 98b0baefe2 | ||
|  | 3aad0ebc95 | ||
|  | 479d720a6e | ||
|  | e4892c9888 | ||
|  | f8c9178c5d | ||
|  | 83049c95c3 | ||
|  | bc8f531b33 | ||
|  | 23278f54cb | ||
|  | 18801fb3e1 | ||
|  | dc0a0dcf09 | ||
|  | 04c306b360 | ||
|  | d6a4f1db13 | ||
|  | 84c4b368c8 | ||
|  | 4307f25205 | ||
|  | 48f03f7a1b | ||
|  | 9d24499fef | ||
|  | df97b269a7 | ||
|  | ee6fb98a0d | ||
|  | 13e30e5855 | ||
|  | 5ab2ec0f13 | ||
|  | 8465d7fa68 | ||
|  | d153fc7ba5 | ||
|  | 1a7c2d4c32 | ||
|  | b3381a3b53 | ||
|  | ac0d61e9b4 | ||
|  | b13a6ced19 | ||
|  | b61aab06b5 | ||
|  | 64b86b2666 | ||
|  | 27e6fa9526 | ||
|  | 3d31742285 | ||
|  | 2b2f4fbc07 | ||
|  | 513bf252cd | ||
|  | f591e954f3 | ||
|  | 59de1925a9 | ||
|  | 6c1011341c | ||
|  | 906082a6b2 | ||
|  | 30bcd1764a | ||
|  | cea54aecad | ||
|  | ff6f2a4d44 | ||
|  | 5f6fded833 | ||
|  | fed5f1a7d2 | ||
|  | a06ee1ced1 | ||
|  | 332b92791e | ||
|  | d4a9461460 | ||
|  | 2dac6ab281 | ||
|  | 4d00404f55 | ||
|  | 3adab07ddb | ||
|  | 3d0c3652ce | ||
|  | c3f5bb5518 | ||
|  | b2d460d5c1 | ||
|  | d475346a09 | ||
|  | ca41806bc2 | ||
|  | a748710b01 | ||
|  | ac9a4b3afc | ||
|  | b7f0fd2db3 | ||
|  | 7d6c847d47 | ||
|  | 6ec6d66f17 | ||
|  | 977089cc28 | ||
|  | c3f8975166 | ||
|  | 639f80b603 | ||
|  | 927da84d3b | ||
|  | b8c9943deb | ||
|  | bb6ab0fe45 | ||
|  | 0c86dece5f | ||
|  | b7b0bd80ed | ||
|  | f06207207b | ||
|  | 068684101f | ||
|  | f78d96a3d4 | ||
|  | a0d958bf12 | ||
|  | 0802b81807 | ||
|  | 192e399cb5 | ||
|  | fc564f6aed | ||
|  | eb34f9c64f | ||
|  | 48029cea7c | ||
|  | f4ec4e58c7 | ||
|  | faa402fcda | ||
|  | 788841d256 | ||
|  | b7c37fdf58 | ||
|  | a46c5a2243 | ||
|  | 430f2975f8 | ||
|  | dd8226ff4c | ||
|  | 807b442c7a | ||
|  | a452e4add5 | ||
|  | 48b30b985e | ||
|  | 05d2f4fe96 | ||
|  | 85a75fc186 | ||
|  | ddda4d9867 | ||
|  | 42c8059ae1 | ||
|  | 0f4eb8ff4c | ||
|  | 8ee537e2eb | ||
|  | 8eb091445b | ||
|  | 1fc23c948e | ||
|  | cb2b97635a | ||
|  | 8fb42e4517 | ||
|  | edae1a5d1c | ||
|  | 08398a1417 | ||
|  | 712304bbc6 | ||
|  | afb893c157 | ||
|  | ebccd48013 | ||
|  | 54065672aa | ||
|  | 8394ce8002 | ||
|  | 176784834f | ||
|  | a47004bb4e | ||
|  | 995f1c9fc4 | ||
|  | 1f3b6feaff | ||
|  | 8095c77b91 | ||
|  | 6cfd18b29b | ||
|  | defd997424 | ||
|  | 5905950c17 | ||
|  | 691fccb769 | ||
|  | bbe3f436d3 | ||
|  | af053b61fc | ||
|  | e22f77eae7 | ||
|  | 3223e76787 | ||
|  | 74400dad97 | ||
|  | 1b68adf3e4 | ||
|  | a2cd6f92d7 | ||
|  | 3ff5fe61b2 | ||
|  | 75c6afd1c3 | ||
|  | 8d2958738f | ||
|  | 0496412f4a | ||
|  | f80a20d18c | ||
|  | 34c642a49a | ||
|  | 2ebbc33081 | ||
|  | ac56056f65 | ||
|  | 6f16b4caec | ||
|  | bea39f37ee | ||
|  | 6548149107 | ||
|  | fbc805a221 | ||
|  | 6015a067ec | ||
|  | 4a1ecd906b | ||
|  | 41844cf817 | ||
|  | 004cfe1965 | ||
|  | b97ebe9f03 | ||
|  | 08ec866dd2 | ||
|  | 2bdd538d7d | ||
|  | 6e69cafe54 | ||
|  | 38839532d5 | ||
|  | 0234ff5fca | ||
|  | 44bcfd47c0 | ||
|  | 69c7eb14aa | ||
|  | 00453fc151 | ||
|  | 5c393f959d | ||
|  | e6bf6424e8 | ||
|  | 57702a07a2 | ||
|  | 3b3f6082a7 | ||
|  | 49241ab318 | ||
|  | 93addac8bb | ||
|  | fe908759d1 | ||
|  | 779751a234 | ||
|  | cb9feab7b2 | ||
|  | b79631a35d | ||
|  | c177aaa901 | ||
|  | eff3e1df85 | ||
|  | b46d5f4a71 | ||
|  | 5b421d51b5 | ||
|  | 8852e8e531 | ||
|  | 8bc84cfaf6 | ||
|  | cde13dc580 | ||
|  | 282d135f0f | ||
|  | 3e3d7aa4d7 | ||
|  | 446c41d020 | ||
|  | 33fdad5159 | ||
|  | 463d145cb7 | ||
|  | 1413756d00 | ||
|  | d3bf325f19 | ||
|  | c4f69fd9cb | ||
|  | 50ec17433d | ||
|  | 2c8eb82d42 | ||
|  | af67cf64b1 | ||
|  | 095da691a4 | ||
|  | 7e71029d1c | ||
|  | 045ee18237 | ||
|  | e47c3a27b0 | ||
|  | ced99f8ac8 | ||
|  | 0c4492bcd0 | ||
|  | d9359c7c55 | ||
|  | 86a080e7ec | ||
|  | 0a66809bf0 | ||
|  | ecfdde2f2a | ||
|  | 758dba9ba5 | ||
|  | ae42e0efc7 | ||
|  | b5cfc28912 | ||
|  | c802bf7d8b | ||
|  | 9e5a02094c | ||
|  | 58253567cd | ||
|  | 92d5aeae41 | ||
|  | d2d286a4ff | ||
|  | a6ade790c6 | ||
|  | a9dae7823f | ||
|  | 86861f6ec3 | ||
|  | d26a0fae17 | ||
|  | 375dba3264 | ||
|  | 74044754e2 | ||
|  | 64aed9b462 | ||
|  | 5428cafa50 | ||
|  | 735852b3c1 | ||
|  | f4b5d43899 | ||
|  | 235b779dec | ||
|  | 2a39906993 | ||
|  | e1b67e20ec | ||
|  | df17840dbc | ||
|  | 9d52f80c2f | ||
|  | 0aa119af2c | ||
|  | c2f70031d0 | ||
|  | 1a2beb941e | ||
|  | 01b2887b36 | ||
|  | 5286d4a97c | ||
|  | bf6106f4dc | ||
|  | 82efc92413 | ||
|  | 34481df2e7 | ||
|  | ad4631018a | ||
|  | ef89eede17 | ||
|  | 6878877acd | ||
|  | 611a983461 | ||
|  | 8e913cb453 | ||
|  | 9d49264258 | ||
|  | 6098d62dcc | ||
|  | 580ceec6b3 | ||
|  | 79dca12274 | ||
|  | 66c25e7f29 | ||
|  | dc4983a013 | ||
|  | 039959a48b | ||
|  | 63be25f5bb | ||
|  | ce7489049f | ||
|  | b3d5938665 | ||
|  | 579ed7e194 | ||
|  | e20fac19ba | ||
|  | 9e9fb2979f | ||
|  | 7fc2824325 | ||
|  | 0728f540ab | ||
|  | 4913a5a5fa | ||
|  | 14dd2b8827 | ||
|  | 4e9e7eba48 | ||
|  | f3bc604516 | ||
|  | bd278e291a | ||
|  | 074820dae5 | ||
|  | 1089e84f56 | ||
|  | ed3d81ce62 | ||
|  | 57aa0a0fe1 | ||
|  | 88a961180f | ||
|  | 1f8798d7ac | ||
|  | bd8429a0ba | ||
|  | af95d387b9 | ||
|  | da348075e8 | ||
|  | d24d3af87d | ||
|  | 085c0e76ca | ||
|  | d7d98b29a7 | ||
|  | cb3b03537c | ||
|  | 7c7bea5e3a | ||
|  | 9fc474504b | ||
|  | 412fd105c9 | ||
|  | 470a0c7b21 | ||
|  | 9968cba348 | ||
|  | aee520a209 | ||
|  | cf4201b084 | ||
|  | 76196ed42c | ||
|  | 6089a369e3 | ||
|  | 092db03729 | ||
|  | 239c14a5df | ||
|  | 8a6002c6be | ||
|  | 38781d33ac | ||
|  | 0518cdbe8e | ||
|  | 4849dacd52 | ||
|  | 7cf47520d4 | ||
|  | 8eb0a4e1cb | ||
|  | ad2a7a2da3 | ||
|  | 6a9aa5eeda | ||
|  | 04524ae8e4 | ||
|  | 04caba9f5b | ||
|  | cc1f831a6a | ||
|  | 331d280075 | ||
|  | 46ed61d38a | ||
|  | ff5d3a5f0c | ||
|  | 626af84f42 | ||
|  | b05ce12e7b | ||
|  | 274505188b | ||
|  | f85209a72f | ||
|  | 291f0e79d9 | ||
|  | 64db5e2542 | ||
|  | c4a2ff5fa1 | ||
|  | 9f5f0aeddd | ||
|  | 4d5612e845 | ||
|  | 371f174756 | ||
|  | 5676ff9b2e | ||
|  | aa8c0fdad8 | ||
|  | 8284c673f9 | ||
|  | cc02546ed3 | ||
|  | d09132dd60 | ||
|  | ec662d01d0 | ||
|  | ad0b98e2a1 | ||
|  | 3cafad3bf4 | ||
|  | fbea3ed94f | ||
|  | 0ab18e3069 | ||
|  | 2aa987c072 | ||
|  | a06ddc439d | ||
|  | f6944b8219 | ||
|  | fa3cbb4645 | ||
|  | 6dfc72c065 | ||
|  | 0af6f91d21 | ||
|  | 4aeecfdfa9 | ||
|  | 79d4dcf5f1 | ||
|  | 26a6ef8c03 | ||
|  | 5e1f81e53e | ||
|  | 9cdcbb3125 | ||
|  | 35338e9ec6 | ||
|  | 78d83b8826 | ||
|  | 8edf06d28d | ||
|  | ecd2a5cbac | ||
|  | c0cf319521 | ||
|  | bb9631476e | ||
|  | 386e8dd32e | ||
|  | 61616f708f | ||
|  | 8ce499e958 | ||
|  | 22587ee6b5 | ||
|  | 9b32d86f78 | ||
|  | 5ea8226996 | ||
|  | fbffc6b2b5 | ||
|  | cd01886eb2 | ||
|  | bb8fd2b054 | ||
|  | d8bc9c2982 | ||
|  | d232694dec | ||
|  | 735ac55bb8 | ||
|  | c9aab9b479 | ||
|  | 53c87f3d25 | ||
|  | 4f1fafdf75 | ||
|  | 330e7ac08e | ||
|  | 49fb913eab | ||
|  | 4b074365e7 | ||
|  | 0896000fcd | ||
|  | e007aba067 | ||
|  | a6eda2479f | ||
|  | eff567ee48 | ||
|  | d3c2c314ac | ||
|  | 89681977b5 | ||
|  | e10a7ea9a6 | ||
|  | c3c6d73bb2 | ||
|  | 5e2efca933 | ||
|  | e71b0d82a1 | ||
|  | c6c162cdda | ||
|  | 8b46d6c718 | ||
|  | e24d5a6f83 | ||
|  | e28fbf4617 | ||
|  | 0e4a040ed8 | ||
|  | b84670d503 | ||
|  | 8725f7cfb2 | ||
|  | 83d8908ee8 | ||
|  | af9ef83742 | ||
|  | 3eafdadd1f | ||
|  | 1d3272e9f8 | ||
|  | 447b8f0f0c | ||
|  | aaf6e3bace | ||
|  | 44c61b8e7d | ||
|  | 8226f62ded | ||
|  | d3b17f586d | ||
|  | a556ba0959 | ||
|  | ad40cd72ff | ||
|  | 9a22c3fce7 | ||
|  | 63e044ffdf | ||
|  | 2e794ee38f | ||
|  | a1d4e062ed | ||
|  | d2d2a28885 | ||
|  | ead4242735 | ||
|  | 30a8c6b579 | ||
|  | 25df8f9c52 | ||
|  | 65d2389b2e | ||
|  | 7aa26580ba | ||
|  | e4376bb9f2 | ||
|  | f01657e1dd | ||
|  | 0c08126752 | ||
|  | ea64adc2f9 | ||
|  | ad8ec68443 | ||
|  | 5e5fe2ccf3 | ||
|  | 34ecd77bd4 | ||
|  | 6cf0fe0b73 | ||
|  | 3f8bf7cacc | ||
|  | 17128c5874 | ||
|  | 9e71c44c76 | ||
|  | 54c0268593 | ||
|  | a5f0b2a81e | ||
|  | a154bea016 | ||
|  | 2a34c8fa66 | ||
|  | 15a11daf38 | ||
|  | 5e88e24693 | ||
|  | 988c5c6a25 | ||
|  | d98c46a275 | ||
|  | 185b206627 | ||
|  | cfb04f7d8a | ||
|  | dba0c9f373 | ||
|  | ee60652746 | ||
|  | fbc79eae62 | ||
|  | b356a634d1 | ||
|  | b2ed5a01b3 | ||
|  | 839b172b92 | ||
|  | 745e120a0b | ||
|  | a0ac603260 | ||
|  | 181ddce887 | ||
|  | 50043f889b | ||
|  | 49d1c5140e | ||
|  | ab7a07a318 | ||
|  | 306e7abb47 | ||
|  | cec4dfa6c3 | ||
|  | 21813a7b83 | ||
|  | 293573a0cd | ||
|  | 8695228537 | ||
|  | 24866a3e25 | ||
|  | e871edc8f3 | ||
|  | 517f1992a1 | ||
|  | e6adf3a522 | ||
|  | 32e9fd291d | ||
|  | 8229a97ffb | ||
|  | 6612a3a550 | ||
|  | c44be53673 | ||
|  | 5d6d9ab6d6 | ||
|  | d100b0dc07 | ||
|  | a0e9ac73c9 | ||
|  | 2bc78ccafb | ||
|  | 53aebf1448 | ||
|  | 2e9ce962df | ||
|  | fa406d3ded | ||
|  | 93ad83d2ae | ||
|  | 72b1cc4d89 | ||
|  | e70cca4736 | ||
|  | d354c91d7c | ||
|  | 2d7b5e4aa2 | ||
|  | b542a28673 | ||
|  | 45a74a046c | ||
|  | 3192531d4c | ||
|  | 351bb760ae | ||
|  | 79a6baca6f | ||
|  | f9645e8971 | ||
|  | 7611c83148 | ||
|  | 53b4f0e0d5 | ||
|  | 9a645c24ca | ||
|  | 682d821b67 | ||
|  | 71afffaac1 | ||
|  | cf904a874e | ||
|  | 5a32a7ce18 | ||
|  | 6d6221636c | ||
|  | 8a4caaf6fb | ||
|  | fa6d1879dd | ||
|  | 874b6c71a3 | ||
|  | 9be524ef89 | ||
|  | fd8a2d4d92 | ||
|  | 0b270ee87a | ||
|  | 5cc5859211 | ||
|  | bd489d5780 | ||
|  | 56e8506cb9 | ||
|  | c86be990d6 | ||
|  | a24c56a9d5 | ||
|  | 95e38a037b | ||
|  | 256b800d0e | ||
|  | b3c4c850db | ||
|  | 4284116280 | ||
|  | d31b5ac99f | ||
|  | b3f47bb2b6 | ||
|  | e698aa5822 | ||
|  | 1fdb23746a | ||
|  | 9cd5bdeb53 | ||
|  | e6183b9a1d | ||
|  | d83005fe4d | ||
|  | 2b84f1be00 | ||
|  | bb45c67e60 | ||
|  | 515fb4e5db | ||
|  | b6efc954bd | ||
|  | eee05a4d01 | ||
|  | dc97400dbf | ||
|  | e16bedfab4 | ||
|  | 5a8e216dec | ||
|  | 1faf8225c7 | ||
|  | bfbb531863 | ||
|  | 48ba73e06d | ||
|  | c922322ed3 | ||
|  | 53aaffd0f5 | ||
|  | d3ec9f022c | ||
|  | 5225a99995 | ||
|  | 929f8ef720 | ||
|  | 5820f874fc | ||
|  | a904e82d72 | 
							
								
								
									
										7
									
								
								.eslintignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.eslintignore
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| node_modules | ||||
| dist | ||||
| bin | ||||
| docs | ||||
| libraries | ||||
| coverage | ||||
| play | ||||
							
								
								
									
										211
									
								
								.eslintrc.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										211
									
								
								.eslintrc.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,211 @@ | ||||
| module.exports = { | ||||
|     env: { | ||||
|         browser: true, | ||||
|         commonjs: true, | ||||
|         es2021: true, | ||||
|         node: true, | ||||
|     }, | ||||
|     // plugins: ['prettier'], // to be activated | ||||
|     extends: ['eslint:recommended', 'airbnb-base', 'plugin:jsonc/recommended-with-jsonc', 'prettier'], | ||||
|     overrides: [ | ||||
|         { | ||||
|             files: ['*.json', '*.json5', '*.jsonc'], | ||||
|             parser: 'jsonc-eslint-parser', | ||||
|         }, | ||||
|         { | ||||
|             files: ['package.json'], | ||||
|             parser: 'jsonc-eslint-parser', | ||||
|             rules: { | ||||
|                 'jsonc/sort-keys': [ | ||||
|                     'off', | ||||
|                     { | ||||
|                         pathPattern: '^$', | ||||
|                         order: [ | ||||
|                             'name', | ||||
|                             'version', | ||||
|                             'private', | ||||
|                             'packageManager', | ||||
|                             'description', | ||||
|                             'type', | ||||
|                             'keywords', | ||||
|                             'homepage', | ||||
|                             'bugs', | ||||
|                             'license', | ||||
|                             'author', | ||||
|                             'contributors', | ||||
|                             'funding', | ||||
|                             'files', | ||||
|                             'main', | ||||
|                             'module', | ||||
|                             'exports', | ||||
|                             'unpkg', | ||||
|                             'jsdelivr', | ||||
|                             'browser', | ||||
|                             'bin', | ||||
|                             'man', | ||||
|                             'directories', | ||||
|                             'repository', | ||||
|                             'publishConfig', | ||||
|                             'scripts', | ||||
|                             'peerDependencies', | ||||
|                             'peerDependenciesMeta', | ||||
|                             'optionalDependencies', | ||||
|                             'dependencies', | ||||
|                             'devDependencies', | ||||
|                             'engines', | ||||
|                             'config', | ||||
|                             'overrides', | ||||
|                             'pnpm', | ||||
|                             'husky', | ||||
|                             'lint-staged', | ||||
|                             'eslintConfig', | ||||
|                         ], | ||||
|                     }, | ||||
|                     { | ||||
|                         pathPattern: '^(?:dev|peer|optional|bundled)?[Dd]ependencies$', | ||||
|                         order: { type: 'asc' }, | ||||
|                     }, | ||||
|                 ], | ||||
|             }, | ||||
|         }, | ||||
|     ], | ||||
|     globals: { | ||||
|         $: true, | ||||
|         jQuery: true, | ||||
|         glob: true, | ||||
|         log: true, | ||||
|         EditorWatchdog: true, | ||||
|         // \src\share\canvas_share.js | ||||
|         React: true, | ||||
|         appState: true, | ||||
|         ExcalidrawLib: true, | ||||
|         elements: true, | ||||
|         files: true, | ||||
|         ReactDOM: true, | ||||
|         // src\public\app\widgets\type_widgets\relation_map.js | ||||
|         jsPlumb: true, | ||||
|         panzoom: true, | ||||
|         logError: true, | ||||
|         // src\public\app\widgets\type_widgets\image.js | ||||
|         WZoom: true, | ||||
|         // \src\public\app\widgets\type_widgets\read_only_text.js | ||||
|         renderMathInElement: true, | ||||
|         // \src\public\app\widgets\type_widgets\editable_text.js | ||||
|         BalloonEditor: true, | ||||
|         FancytreeNode: true, | ||||
|         CKEditorInspector: true, | ||||
|         // \src\public\app\widgets\type_widgets\editable_code.js | ||||
|         CodeMirror: true, | ||||
|         // \src\public\app\services\resizer.js | ||||
|         Split: true, | ||||
|         // \src\public\app\services\content_renderer.js | ||||
|         mermaid: true, | ||||
|         // src\public\app\services\frontend_script_api.js | ||||
|         dayjs: true, | ||||
|         // \src\public\app\widgets\note_map.js | ||||
|         ForceGraph: true, | ||||
|         // \src\public\app\setup.js | ||||
|         ko: true, | ||||
|         syncInProgress: true, | ||||
|         // src\public\app\services\utils.js | ||||
|         logInfo: true, | ||||
|         __non_webpack_require__: true, | ||||
|         // | ||||
|     }, | ||||
|     parserOptions: { | ||||
|         ecmaVersion: 'latest', | ||||
|         sourceType: 'module', | ||||
|     }, | ||||
|     rules: { | ||||
|         // eslint:recommended | ||||
|         'no-unused-vars': 'off', | ||||
|         'linebreak-style': 'off', | ||||
|         'no-useless-escape': 'off', | ||||
|         'no-empty': 'off', | ||||
|         'no-constant-condition': 'off', | ||||
|         'getter-return': 'off', | ||||
|         'no-cond-assign': 'off', | ||||
|         'no-async-promise-executor': 'off', | ||||
|         'no-extra-semi': 'off', | ||||
|         'no-inner-declarations': 'off', | ||||
|  | ||||
|         // prettier | ||||
|         'prettier/prettier': ['off', { endOfLine: 'auto' }], | ||||
|  | ||||
|         // airbnb-base | ||||
|         'no-console': 'off', | ||||
|         'no-plusplus': 'off', | ||||
|         'no-param-reassign': 'off', | ||||
|         'global-require': 'off', | ||||
|         'no-use-before-define': 'off', | ||||
|         'no-await-in-loop': 'off', | ||||
|         radix: 'off', | ||||
|         'import/order': 'off', | ||||
|         'import/no-extraneous-dependencies': 'off', | ||||
|         'prefer-destructuring': 'off', | ||||
|         'no-shadow': 'off', | ||||
|         'no-new': 'off', | ||||
|         'no-restricted-syntax': 'off', | ||||
|         strict: 'off', | ||||
|         'class-methods-use-this': 'off', | ||||
|         'no-else-return': 'off', | ||||
|         'import/no-dynamic-require': 'off', | ||||
|         'no-underscore-dangle': 'off', | ||||
|         'prefer-template': 'off', | ||||
|         'consistent-return': 'off', | ||||
|         'no-continue': 'off', | ||||
|         'object-shorthand': 'off', | ||||
|         'one-var': 'off', | ||||
|         'prefer-const': 'off', | ||||
|         'spaced-comment': 'off', | ||||
|         'no-loop-func': 'off', | ||||
|         'arrow-body-style': 'off', | ||||
|  | ||||
|         'guard-for-in': 'off', | ||||
|         'no-return-assign': 'off', | ||||
|         'dot-notation': 'off', | ||||
|  | ||||
|         'func-names': 'off', | ||||
|         'import/no-useless-path-segments': 'off', | ||||
|         'default-param-last': 'off', | ||||
|         'prefer-arrow-callback': 'off', | ||||
|         'no-unneeded-ternary': 'off', | ||||
|         'no-return-await': 'off', | ||||
|         'import/extensions': 'off', | ||||
|  | ||||
|         'no-var': 'off', | ||||
|         'import/newline-after-import': 'off', | ||||
|         'no-restricted-globals': 'off', | ||||
|         'operator-assignment': 'off', | ||||
|         'no-eval': 'off', | ||||
|         'max-classes-per-file': 'off', | ||||
|         'vars-on-top': 'off', | ||||
|         'no-bitwise': 'off', | ||||
|         'no-lonely-if': 'off', | ||||
|         'no-multi-assign': 'off', | ||||
|         'no-promise-executor-return': 'off', | ||||
|         'no-empty-function': 'off', | ||||
|         'import/no-unresolved': 'off', | ||||
|         camelcase: 'off', | ||||
|         eqeqeq: 'off', | ||||
|         'lines-between-class-members': 'off', | ||||
|         'import/no-cycle': 'off', | ||||
|         'new-cap': 'off', | ||||
|         'prefer-object-spread': 'off', | ||||
|         'no-new-func': 'off', | ||||
|         'no-unused-expressions': 'off', | ||||
|         'lines-around-directive': 'off', | ||||
|         'prefer-exponentiation-operator': 'off', | ||||
|         'no-restricted-properties': 'off', | ||||
|         'prefer-rest-params': 'off', | ||||
|         'no-unreachable-loop': 'off', | ||||
|         'no-alert': 'off', | ||||
|         'no-useless-return': 'off', | ||||
|         'no-nested-ternary': 'off', | ||||
|         'prefer-regex-literals': 'off', | ||||
|         'import/no-named-as-default-member': 'off', | ||||
|         yoda: 'off', | ||||
|         'no-script-url': 'off', | ||||
|         'no-prototype-builtins':'off' | ||||
|     }, | ||||
| }; | ||||
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -12,3 +12,4 @@ server-package.json | ||||
| .idea/httpRequests/ | ||||
| data/ | ||||
| tmp/ | ||||
| .eslintcache | ||||
| @@ -2,7 +2,7 @@ image: | ||||
|   file: .gitpod.dockerfile | ||||
|  | ||||
| tasks: | ||||
|     - before: nvm install 16.19.1 && nvm use 16.19.1 | ||||
|     - before: nvm install 18.16.1 && nvm use 18.16.1 | ||||
|       init: npm install | ||||
|       command: npm run start-server | ||||
|  | ||||
|   | ||||
							
								
								
									
										1
									
								
								.husky/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.husky/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| _ | ||||
							
								
								
									
										4
									
								
								.husky/pre-commit
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.husky/pre-commit
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| #!/bin/sh | ||||
| . "$(dirname "$0")/_/husky.sh" | ||||
|  | ||||
| #npx lint-staged | ||||
							
								
								
									
										4
									
								
								.idea/dataSources.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								.idea/dataSources.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,11 +1,11 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="DataSourceManagerImpl" format="xml" multifile-model="true"> | ||||
|     <data-source source="LOCAL" name="SQLite - document.db" uuid="30cef30d-e704-484d-a4ca-5d3bfc2ece63"> | ||||
|     <data-source source="LOCAL" name="document.db" uuid="2a4ac1e6-b828-4a2a-8e4a-3f59f10aff26"> | ||||
|       <driver-ref>sqlite.xerial</driver-ref> | ||||
|       <synchronize>true</synchronize> | ||||
|       <jdbc-driver>org.sqlite.JDBC</jdbc-driver> | ||||
|       <jdbc-url>jdbc:sqlite:$PROJECT_DIR$/../trilium-data/document.db</jdbc-url> | ||||
|       <jdbc-url>jdbc:sqlite:$PROJECT_DIR$/data/document.db</jdbc-url> | ||||
|       <working-dir>$ProjectFileDir$</working-dir> | ||||
|     </data-source> | ||||
|   </component> | ||||
|   | ||||
							
								
								
									
										2
									
								
								.idea/inspectionProfiles/Project_Default.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								.idea/inspectionProfiles/Project_Default.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,7 +1,7 @@ | ||||
| <component name="InspectionProjectProfileManager"> | ||||
|   <profile version="1.0"> | ||||
|     <option name="myName" value="Project Default" /> | ||||
|     <inspection_tool class="JSUnfilteredForInLoop" enabled="false" level="WARNING" enabled_by_default="false" /> | ||||
|     <inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" /> | ||||
|     <inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false"> | ||||
|       <option name="processCode" value="true" /> | ||||
|       <option name="processLiterals" value="true" /> | ||||
|   | ||||
							
								
								
									
										6
									
								
								.idea/jsLinters/eslint.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.idea/jsLinters/eslint.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="EslintConfiguration"> | ||||
|     <option name="fix-on-save" value="true" /> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										1
									
								
								.idea/misc.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1
									
								
								.idea/misc.xml
									
									
									
										generated
									
									
									
								
							| @@ -1,4 +1,3 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="JavaScriptSettings"> | ||||
|     <option name="languageLevel" value="ES6" /> | ||||
|   | ||||
							
								
								
									
										13
									
								
								.prettierrc.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								.prettierrc.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| //https://prettier.io/docs/en/options.html | ||||
| module.exports = { | ||||
| 	semi: true, | ||||
| 	trailingComma: 'none', | ||||
| 	singleQuote: true, | ||||
| 	printWidth: 100, | ||||
| 	tabWidth: 4, | ||||
| 	useTabs: false, | ||||
| 	quoteProps: "as-needed", | ||||
| 	bracketSpacing: true, | ||||
| 	arrowParens: "avoid" | ||||
| 	// htmlWhitespaceSensitivity: 'ignore', | ||||
| }; | ||||
							
								
								
									
										6
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| { | ||||
|   "recommendations": [ | ||||
|     "dbaeumer.vscode-eslint", | ||||
|     "esbenp.prettier-vscode", | ||||
|   ] | ||||
| } | ||||
							
								
								
									
										19
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							| @@ -1,19 +1,24 @@ | ||||
| { | ||||
|     "version": "0.2.0", | ||||
|     "configurations": [ | ||||
|         // nodemon should be installed globally, use npm i -g nodemon | ||||
|         { | ||||
|             "type": "node", | ||||
|             "console": "integratedTerminal", | ||||
|             "internalConsoleOptions": "neverOpen", | ||||
|             "name": "nodemon start-server", | ||||
|             "program": "${workspaceFolder}/src/www", | ||||
|             "request": "launch", | ||||
|             "name": "start-server", | ||||
|             "skipFiles": [ | ||||
|                 "<node_internals>/**" | ||||
|             ], | ||||
|             "restart": true, | ||||
|             "runtimeExecutable": "nodemon", | ||||
|             "env": { | ||||
|                 "TRILIUM_ENV": "dev", | ||||
|                 "TRILIUM_DATA_DIR": "./data" | ||||
|             }, | ||||
|             "skipFiles": [ | ||||
|                 "<node_internals>/**" | ||||
|             ], | ||||
|             "type": "node", | ||||
|             "outputCapture": "std", | ||||
|             "program": "${workspaceFolder}/src/www" | ||||
|         } | ||||
|         }, | ||||
|     ] | ||||
| } | ||||
							
								
								
									
										33
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| { | ||||
|   "[javascript]": { | ||||
|     "editor.defaultFormatter": "dbaeumer.vscode-eslint" | ||||
|   }, | ||||
|   "[json]": { | ||||
|     "editor.defaultFormatter": "dbaeumer.vscode-eslint" | ||||
|   }, | ||||
|   "editor.formatOnSave": true, | ||||
|   "eslint.format.enable": true, | ||||
|   "eslint.probe": [ | ||||
|     "javascript", | ||||
|     "javascriptreact", | ||||
|     "typescript", | ||||
|     "typescriptreact", | ||||
|     "html", | ||||
|     "vue", | ||||
|     "markdown", | ||||
|     "json", | ||||
|     "jsonc" | ||||
|   ], | ||||
|   "eslint.validate": [ | ||||
|     "javascript", | ||||
|     "javascriptreact", | ||||
|     "typescript", | ||||
|     "typescriptreact", | ||||
|     "html", | ||||
|     "vue", | ||||
|     "markdown", | ||||
|     "json", | ||||
|     "jsonc" | ||||
|   ], | ||||
|   "files.eol": "\n", | ||||
| } | ||||
| @@ -1,5 +1,5 @@ | ||||
| # !!! Don't try to build this Dockerfile directly, run it through bin/build-docker.sh script !!! | ||||
| FROM node:16.19.1-alpine | ||||
| FROM node:18.16.1-alpine | ||||
|  | ||||
| # Create app directory | ||||
| WORKDIR /usr/src/app | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| # Trilium Notes | ||||
|  | ||||
| [English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | ||||
| [English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md) | ||||
|  | ||||
| [](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) | ||||
| Trilium Notes 是一个层次化的笔记应用程序,专注于建立大型个人知识库。请参阅[屏幕截图](https://github.com/zadam/trilium/wiki/Screenshot-tour)以快速了解: | ||||
|   | ||||
							
								
								
									
										83
									
								
								README.ja.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								README.ja.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,83 @@ | ||||
| # Trilium Notes | ||||
|  | ||||
| [English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md) | ||||
|  | ||||
| Trilium Notes は、大規模な個人知識ベースの構築に焦点を当てた、階層型ノートアプリケーションです。概要は[スクリーンショット](https://github.com/zadam/trilium/wiki/Screenshot-tour)をご覧ください: | ||||
|  | ||||
| <a href="https://github.com/zadam/trilium/wiki/Screenshot-tour"><img src="https://raw.githubusercontent.com/wiki/zadam/trilium/images/screenshot.png" alt="Trilium Screenshot" width="1000"></a> | ||||
|  | ||||
| ウクライナは現在、ロシアの侵略から自国を守っています。[ウクライナ軍や人道的な慈善団体への寄付](https://standforukraine.com/)をご検討ください。 | ||||
|  | ||||
| <p float="left"> | ||||
|   <img src="https://upload.wikimedia.org/wikipedia/commons/4/49/Flag_of_Ukraine.svg" alt="drawing" width="400"/> | ||||
|   <img src="https://signmyrocket.com//uploads/2b2a523cd0c0e76cdbba95a89a9636b2_1676971281.jpg" alt="Trilium Notes supports Ukraine!" width="570"/> | ||||
| </p> | ||||
|  | ||||
| ## 🎁 特徴 | ||||
|  | ||||
| * ノートは、任意の深さのツリーに配置できます。単一のノートをツリー内の複数の場所に配置できます ([cloning](https://github.com/zadam/trilium/wiki/Cloning-notes) を参照) | ||||
| * マークダウン[オートフォーマット](https://github.com/zadam/trilium/wiki/Text-notes#autoformat)による、表、画像、[数学](https://github.com/zadam/trilium/wiki/Text-notes#math-support)などの豊富な WYSIWYG ノート編集機能 | ||||
| * シンタックスハイライトを含む[ソースコード付きノート](https://github.com/zadam/trilium/wiki/Code-notes)の編集をサポート | ||||
| * [ノート間のナビゲーション](https://github.com/zadam/trilium/wiki/Note-navigation)、全文検索、[ノートホイスト](https://github.com/zadam/trilium/wiki/Note-hoisting)が高速かつ簡単に行えます | ||||
| * シームレスな[ノートのバージョン管理](https://github.com/zadam/trilium/wiki/Note-revisions) | ||||
| * ノート[属性](https://github.com/zadam/trilium/wiki/Attributes)は、ノート整理、クエリ、高度な[スクリプト](https://github.com/zadam/trilium/wiki/Scripts)に使用できます | ||||
| * 自己ホスト型同期サーバーとの[同期](https://github.com/zadam/trilium/wiki/Synchronization) | ||||
|   * [同期サーバーをホストするサードパーティ・サービス](https://trilium.cc/paid-hosting)があります | ||||
| * 公開インターネットへのノートの[共有](https://github.com/zadam/trilium/wiki/Sharing)(公開) | ||||
| * ノートごとの粒度を持つ強力な[ノート暗号化](https://github.com/zadam/trilium/wiki/Protected-notes) | ||||
| * 組み込みの Excalidraw を使用した図のスケッチ (ノート タイプ"キャンバス") | ||||
| * ノートとその関係を可視化するための[関係図](https://github.com/zadam/trilium/wiki/Relation-map)と[リンクマップ](https://github.com/zadam/trilium/wiki/Link-map) | ||||
| * [スクリプティング](https://github.com/zadam/trilium/wiki/Scripts) - [高度なショーケース](https://github.com/zadam/trilium/wiki/Advanced-showcases)を参照 | ||||
| * 自動化のための [REST API](https://github.com/zadam/trilium/wiki/ETAPI) | ||||
| * ユーザビリティとパフォーマンスの両方で 100 000 ノート以上に拡張可能 | ||||
| * スマートフォンとタブレット向けのタッチ最適化[モバイルフロントエンド](https://github.com/zadam/trilium/wiki/Mobile-frontend) | ||||
| * [ナイトテーマ](https://github.com/zadam/trilium/wiki/Themes) | ||||
| * [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import) と [Markdown のインポートとエクスポート](https://github.com/zadam/trilium/wiki/Markdown) | ||||
| * Web コンテンツを簡単に保存するための [Web クリッパー](https://github.com/zadam/trilium/wiki/Web-clipper) | ||||
|  | ||||
| サードパーティのテーマ、スクリプト、プラグインなどは、 [awesome-trilium](https://github.com/Nriver/awesome-trilium) をチェックしてください。 | ||||
|  | ||||
| ## 🏗 ビルド | ||||
|  | ||||
| Trilium は、デスクトップアプリケーション(Linux、Windows)またはサーバー上でホストされるウェブアプリケーション(Linux)として提供されます。 Mac OS のデスクトップビルドも利用可能ですが、 [unsupported](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support) となっています。 | ||||
|  | ||||
| * デスクトップで Trilium を使用したい場合は、 [latest release](https://github.com/zadam/trilium/releases/latest) からお使いのプラットフォームのバイナリリリースをダウンロードし、パッケージを解凍して ``trilium`` の実行ファイルを実行してください。 | ||||
| * サーバーに Trilium をインストールする場合は、[このページ](https://github.com/zadam/trilium/wiki/Server-installation)に従ってください。 | ||||
|   * 現在、対応(動作確認)しているブラウザは、最近の Chrome と Firefox のみです。 | ||||
|  | ||||
| Trilium は Flatpak としても提供されます: | ||||
|  | ||||
| [<img width="240" src="https://flathub.org/assets/badges/flathub-badge-en.png">](https://flathub.org/apps/details/com.github.zadam.trilium) | ||||
|  | ||||
| ## 📝 ドキュメント | ||||
|  | ||||
| [ドキュメントページの全リストはwikiをご覧ください。](https://github.com/zadam/trilium/wiki/) | ||||
|  | ||||
| また、[個人的な知識基盤のパターン](https://github.com/zadam/trilium/wiki/Patterns-of-personal-knowledge-base)を読むと、 Trilium の使い方のヒントを得ることができます。 | ||||
|  | ||||
| ## 💻 コントリビュート | ||||
|  | ||||
| ブラウザベースの開発環境を使用 | ||||
|  | ||||
| [](https://gitpod.io/#https://github.com/zadam/trilium) | ||||
|  | ||||
| または、ローカルにクローンして実行 | ||||
| ``` | ||||
| npm install | ||||
| npm run start-server | ||||
| ``` | ||||
|  | ||||
| ## 📢 シャウトアウト | ||||
|  | ||||
| * [CKEditor 5](https://github.com/ckeditor/ckeditor5) - 市場で最高の WYSIWYG エディター、非常にインタラクティブで聞き上手なチーム | ||||
| * [FancyTree](https://github.com/mar10/fancytree) - 真の競争相手がいない、非常に機能豊富なツリーライブラリです。 Trilium Notes は、これなしでは成り立たないでしょう。 | ||||
| * [CodeMirror](https://github.com/codemirror/CodeMirror) - 膨大な数の言語をサポートするコードエディタ | ||||
| * [jsPlumb](https://github.com/jsplumb/jsplumb) - 競合のないビジュアルコネクティビティライブラリです。[関係図](https://github.com/zadam/trilium/wiki/Relation-map)、[リンク図](https://github.com/zadam/trilium/wiki/Link-map)で使用。 | ||||
|  | ||||
| ## 🤝 サポート | ||||
|  | ||||
| GitHub スポンサー、[PayPal](https://paypal.me/za4am)もしくは Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2) にて Trilium をサポートすることができます。 | ||||
|  | ||||
| ## 🔑 ライセンス | ||||
|  | ||||
| このプログラムはフリーソフトウェアです:フリーソフトウェア財団が発行した GNU Affero General Public License のバージョン3、またはそれ以降のバージョンのいずれかに従って、再配布および/または改変することができます。 | ||||
| @@ -1,6 +1,6 @@ | ||||
| # Trilium Notes | ||||
|  | ||||
| [](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | ||||
| [](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md) | ||||
|  | ||||
| Trilium Notes is a hierarchical note taking application with focus on building large personal knowledge bases. See [screenshots](https://github.com/zadam/trilium/wiki/Screenshot-tour) for quick overview: | ||||
|  | ||||
| @@ -76,7 +76,7 @@ npm run start-server | ||||
|  | ||||
| ## 🤝 Support | ||||
|  | ||||
| You can support Trilum using GitHub Sponsors, [PayPal](https://paypal.me/za4am) or Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2). | ||||
| You can support Trilium using GitHub Sponsors, [PayPal](https://paypal.me/za4am) or Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2). | ||||
|  | ||||
| ## 🔑 License | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| # Trilium Notes | ||||
|  | ||||
| [English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | ||||
| [English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md) | ||||
|  | ||||
| [](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) | ||||
| Trilium Notes – это приложение для заметок с иерархической структурой, ориентированное на создание больших персональных баз знаний. Для быстрого ознакомления посмотрите [скриншот-тур](https://github.com/zadam/trilium/wiki/Screenshot-tour): | ||||
|   | ||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -24,9 +24,6 @@ mv "./dist/Trilium Notes-linux-x64" $BUILD_DIR | ||||
|  | ||||
| cp images/app-icons/png/128x128.png $BUILD_DIR/icon.png | ||||
|  | ||||
| # removing software WebGL binaries because they are pretty huge and not necessary | ||||
| rm -r $BUILD_DIR/swiftshader | ||||
|  | ||||
| cp bin/tpl/anonymize-database.sql $BUILD_DIR/ | ||||
|  | ||||
| cp -r dump-db $BUILD_DIR/ | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| #!/usr/bin/env bash | ||||
|  | ||||
| PKG_DIR=dist/trilium-linux-x64-server | ||||
| NODE_VERSION=16.19.1 | ||||
| NODE_VERSION=18.16.1 | ||||
|  | ||||
| if [ "$1" != "DONTCOPY" ] | ||||
| then | ||||
|   | ||||
| @@ -22,9 +22,6 @@ rm -rf $BUILD_DIR | ||||
|  | ||||
| mv "./dist/Trilium Notes-win32-x64" $BUILD_DIR | ||||
|  | ||||
| # removing software WebGL binaries because they are pretty huge and not necessary | ||||
| rm -r $BUILD_DIR/swiftshader | ||||
|  | ||||
| cp bin/tpl/anonymize-database.sql $BUILD_DIR/ | ||||
|  | ||||
| cp -r dump-db $BUILD_DIR/ | ||||
|   | ||||
| @@ -5,7 +5,7 @@ if [[ $# -eq 0 ]] ; then | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| n exec 16.19.1 npm run webpack | ||||
| n exec 18.16.1 npm run webpack | ||||
|  | ||||
| DIR=$1 | ||||
|  | ||||
| @@ -27,7 +27,7 @@ cp -r electron.js $DIR/ | ||||
| cp webpack-* $DIR/ | ||||
|  | ||||
| # run in subshell (so we return to original dir) | ||||
| (cd $DIR && n exec 16.19.1 npm install --only=prod) | ||||
| (cd $DIR && n exec 18.16.1 npm install --only=prod) | ||||
|  | ||||
| # cleanup of useless files in dependencies | ||||
| rm -r $DIR/node_modules/image-q/demo | ||||
|   | ||||
| @@ -1,9 +1,8 @@ | ||||
|  | ||||
| UPDATE etapi_tokens SET tokenHash = 'API token hash value'; | ||||
| UPDATE notes SET title = 'title' WHERE noteId != 'root' AND noteId NOT LIKE '\_%' ESCAPE '\'; | ||||
| UPDATE note_contents SET content = 'text' WHERE content IS NOT NULL; | ||||
| UPDATE note_revisions SET title = 'title'; | ||||
| UPDATE note_revision_contents SET content = 'text' WHERE content IS NOT NULL; | ||||
| UPDATE blobs SET content = 'text' WHERE content IS NOT NULL; | ||||
| UPDATE revisions SET title = 'title'; | ||||
|  | ||||
| UPDATE attributes SET name = 'name', value = 'value' | ||||
|                   WHERE type = 'label' | ||||
| @@ -29,7 +28,7 @@ UPDATE attributes SET name = 'name', value = 'value' | ||||
|                                      'widget', | ||||
|                                      'noteInfoWidgetDisabled', | ||||
|                                      'linkMapWidgetDisabled', | ||||
|                                      'noteRevisionsWidgetDisabled', | ||||
|                                      'revisionsWidgetDisabled', | ||||
|                                      'whatLinksHereWidgetDisabled', | ||||
|                                      'similarNotesWidgetDisabled', | ||||
|                                      'workspace', | ||||
| @@ -104,7 +103,7 @@ UPDATE attributes SET name = 'name' | ||||
|                                      'widget', | ||||
|                                      'noteInfoWidgetDisabled', | ||||
|                                      'linkMapWidgetDisabled', | ||||
|                                      'noteRevisionsWidgetDisabled', | ||||
|                                      'revisionsWidgetDisabled', | ||||
|                                      'whatLinksHereWidgetDisabled', | ||||
|                                      'similarNotesWidgetDisabled', | ||||
|                                      'workspace', | ||||
|   | ||||
| @@ -16,7 +16,7 @@ noBackup=false | ||||
| # host=0.0.0.0 | ||||
| # port setting is relevant only for web deployments, desktop builds run on a fixed port (changeable with TRILIUM_PORT environment variable) | ||||
| port=8080 | ||||
| # true for TLS/SSL/HTTPS (secure), false for HTTP (unsecure). | ||||
| # true for TLS/SSL/HTTPS (secure), false for HTTP (insecure). | ||||
| https=false | ||||
| # path to certificate (run "bash bin/generate-cert.sh" to generate self-signed certificate). Relevant only if https=true | ||||
| certPath= | ||||
|   | ||||
| @@ -1,5 +1,4 @@ | ||||
| - isDeleted = 0 by default | ||||
| - rename openTabs to openNoteContexts | ||||
| - unify readOnly handling to a single attribute: | ||||
|   * readOnly - like now | ||||
|   * readOnly=auto - like without readOnly (used to override inherited readOnly) | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								db/demo.zip
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								db/demo.zip
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -1 +0,0 @@ | ||||
| module.exports = () => console.log("NOOP, moved to migration 0189"); | ||||
| @@ -1,4 +0,0 @@ | ||||
| -- black theme has been removed, dark is closest replacement | ||||
| UPDATE options SET value = 'dark' WHERE name = 'theme' AND value = 'black'; | ||||
|  | ||||
| UPDATE options SET value = 'light' WHERE name = 'theme' AND value = 'white'; | ||||
| @@ -1,2 +0,0 @@ | ||||
| ALTER TABLE branches DROP COLUMN utcDateCreated; | ||||
| ALTER TABLE options DROP COLUMN utcDateCreated; | ||||
| @@ -1,33 +0,0 @@ | ||||
| CREATE TABLE IF NOT EXISTS "mig_entity_changes" ( | ||||
|                                                 `id`	INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, | ||||
|                                                 `entityName`	TEXT NOT NULL, | ||||
|                                                 `entityId`	TEXT NOT NULL, | ||||
|                                                 `hash`	TEXT NOT NULL, | ||||
|                                                 `isErased` INT NOT NULL, | ||||
|                                                 `changeId` TEXT NOT NULL, | ||||
|                                                 `sourceId` TEXT NOT NULL, | ||||
|                                                 `isSynced` INTEGER NOT NULL, | ||||
|                                                 `utcDateChanged` TEXT NOT NULL | ||||
| ); | ||||
|  | ||||
| INSERT INTO mig_entity_changes (id, entityName, entityId, hash, isErased, changeId, sourceId, isSynced, utcDateChanged) | ||||
|     SELECT id, entityName, entityId, hash, isErased, '', sourceId, isSynced, utcDateChanged FROM entity_changes; | ||||
|  | ||||
| -- delete duplicates https://github.com/zadam/trilium/issues/2534 | ||||
| DELETE FROM mig_entity_changes WHERE isErased = 0 AND id IN ( | ||||
|     SELECT id FROM mig_entity_changes ec | ||||
|     WHERE ( | ||||
|               SELECT COUNT(*) FROM mig_entity_changes | ||||
|               WHERE ec.entityName = mig_entity_changes.entityName | ||||
|                 AND ec.entityId = mig_entity_changes.entityId | ||||
|           ) > 1 | ||||
| ); | ||||
|  | ||||
| DROP TABLE entity_changes; | ||||
|  | ||||
| ALTER TABLE mig_entity_changes RENAME TO entity_changes; | ||||
|  | ||||
| CREATE UNIQUE INDEX `IDX_entityChanges_entityName_entityId` ON "entity_changes" ( | ||||
|                                                                                  `entityName`, | ||||
|                                                                                  `entityId` | ||||
|     ); | ||||
| @@ -1,8 +0,0 @@ | ||||
| UPDATE branches SET branchId = 'hidden' where branchId = ( | ||||
|     SELECT branchId FROM branches | ||||
|     WHERE parentNoteId = 'root' | ||||
|       AND noteId = 'hidden' | ||||
|       AND isDeleted = 0 | ||||
|     ORDER BY utcDateModified | ||||
|     LIMIT 1 | ||||
| ); | ||||
| @@ -1 +0,0 @@ | ||||
| DELETE FROM options WHERE name = 'username'; | ||||
| @@ -1,15 +0,0 @@ | ||||
| CREATE TABLE IF NOT EXISTS "etapi_tokens" | ||||
| ( | ||||
|     etapiTokenId TEXT PRIMARY KEY NOT NULL, | ||||
|     name TEXT NOT NULL, | ||||
|     tokenHash TEXT NOT NULL, | ||||
|     utcDateCreated TEXT NOT NULL, | ||||
|     utcDateModified TEXT NOT NULL, | ||||
|     isDeleted INT NOT NULL DEFAULT 0); | ||||
|  | ||||
| INSERT INTO etapi_tokens (etapiTokenId, name, tokenHash, utcDateCreated, utcDateModified, isDeleted) | ||||
| SELECT apiTokenId, 'Trilium Sender', token, utcDateCreated, utcDateCreated, isDeleted FROM api_tokens; | ||||
|  | ||||
| DROP TABLE api_tokens; | ||||
|  | ||||
| UPDATE entity_changes SET entityName = 'etapi_tokens' WHERE entityName = 'api_tokens'; | ||||
| @@ -1,10 +0,0 @@ | ||||
| module.exports = () => { | ||||
|     const sql = require('../../src/services/sql'); | ||||
|     const crypto = require('crypto'); | ||||
|  | ||||
|     for (const {etapiTokenId, token} of sql.getRows("SELECT etapiTokenId, tokenHash AS token FROM etapi_tokens")) { | ||||
|         const tokenHash = crypto.createHash('sha256').update(token).digest('base64'); | ||||
|          | ||||
|         sql.execute(`UPDATE etapi_tokens SET tokenHash = ? WHERE etapiTokenId = ?`, [tokenHash, etapiTokenId]); | ||||
|     } | ||||
| }; | ||||
| @@ -1,20 +0,0 @@ | ||||
| DROP TABLE entity_changes; | ||||
| -- not preserving the data because of https://github.com/zadam/trilium/issues/3447 | ||||
|  | ||||
| CREATE TABLE IF NOT EXISTS "entity_changes" ( | ||||
|                                                     `id`	INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, | ||||
|                                                     `entityName`	TEXT NOT NULL, | ||||
|                                                     `entityId`	TEXT NOT NULL, | ||||
|                                                     `hash`	TEXT NOT NULL, | ||||
|                                                     `isErased` INT NOT NULL, | ||||
|                                                     `changeId` TEXT NOT NULL, | ||||
|                                                     `componentId` TEXT NOT NULL, | ||||
|                                                     `instanceId` TEXT NOT NULL, | ||||
|                                                     `isSynced` INTEGER NOT NULL, | ||||
|                                                     `utcDateChanged` TEXT NOT NULL | ||||
| ); | ||||
|  | ||||
| CREATE UNIQUE INDEX `IDX_entityChanges_entityName_entityId` ON "entity_changes" ( | ||||
|                                                                                  `entityName`, | ||||
|                                                                                  `entityId` | ||||
|     ); | ||||
| @@ -1 +0,0 @@ | ||||
| CREATE INDEX `IDX_entity_changes_changeId` ON `entity_changes` (`changeId`); | ||||
| @@ -1,15 +0,0 @@ | ||||
| const becca = require('../../src/becca/becca'); | ||||
| const beccaLoader = require('../../src/becca/becca_loader'); | ||||
| const cls = require('../../src/services/cls'); | ||||
|  | ||||
| module.exports = () => { | ||||
|     cls.init(() => { | ||||
|         beccaLoader.load(); | ||||
|  | ||||
|         for (const note of Object.values(becca.notes)) { | ||||
|             if (note.hasLabel('calendarRoot')) { | ||||
|                 note.addLabel('excludeFromNoteMap', "", true); | ||||
|             } | ||||
|         } | ||||
|     }); | ||||
| }; | ||||
| @@ -1,2 +0,0 @@ | ||||
| -- removing potential remnants of recent notes in entity changes, see https://github.com/zadam/trilium/issues/2842 | ||||
| DELETE FROM entity_changes WHERE entityName = 'recent_notes'; | ||||
| @@ -1,2 +0,0 @@ | ||||
| UPDATE attributes SET value = replace(value, 'setLabelValue', 'updateLabelValue') WHERE name = 'action' AND type = 'label'; | ||||
| UPDATE attributes SET value = replace(value, 'setRelationTarget', 'updateRelationTarget') WHERE name = 'action' AND type = 'label'; | ||||
| @@ -1 +0,0 @@ | ||||
| module.exports = () => console.log("NOOP, increased because of protected notes IV change"); | ||||
| @@ -1,6 +0,0 @@ | ||||
| UPDATE branches SET branchId = '_hidden__search' WHERE parentNoteId = 'hidden' AND noteId = 'search' AND isDeleted = 0; | ||||
| UPDATE branches SET branchId = 'root__globalNoteMap' WHERE parentNoteId = 'singles' AND noteId = 'globalnotemap' AND isDeleted = 0; | ||||
| UPDATE branches SET branchId = '_hidden__sqlConsole' WHERE parentNoteId = 'hidden' AND noteId = 'sqlconsole' AND isDeleted = 0; | ||||
| UPDATE branches SET branchId = 'root__hidden' WHERE parentNoteId = 'root' AND noteId = 'hidden' AND isDeleted = 0; | ||||
| UPDATE branches SET branchId = '_hidden__bulkAction' WHERE parentNoteId = 'hidden' AND noteId = 'bulkaction' AND isDeleted = 0; | ||||
| UPDATE branches SET branchId = '_hidden__share' WHERE parentNoteId = 'root' AND noteId = 'share' AND isDeleted = 0; | ||||
| @@ -1,53 +0,0 @@ | ||||
| UPDATE notes SET noteId = '_globalNoteMap', title = 'Note Map' WHERE noteId = 'globalnotemap'; | ||||
| UPDATE note_contents SET noteId = '_globalNoteMap' WHERE noteId = 'globalnotemap'; | ||||
| UPDATE note_revisions SET noteId = '_globalNoteMap' WHERE noteId = 'globalnotemap'; | ||||
| UPDATE branches SET noteId = '_globalNoteMap' WHERE noteId = 'globalnotemap'; | ||||
| UPDATE branches SET parentNoteId = '_globalNoteMap' WHERE parentNoteId = 'globalnotemap'; | ||||
| UPDATE attributes SET noteId = '_globalNoteMap' WHERE noteId = 'globalnotemap'; | ||||
| UPDATE attributes SET value = '_globalNoteMap' WHERE type = 'relation' AND value = 'globalnotemap'; | ||||
| UPDATE entity_changes SET entityId = '_globalNoteMap' WHERE entityId = 'globalnotemap'; | ||||
|  | ||||
| UPDATE notes SET noteId = '_bulkAction', title = 'Bulk Action' WHERE noteId = 'bulkaction'; | ||||
| UPDATE note_contents SET noteId = '_bulkAction' WHERE noteId = 'bulkaction'; | ||||
| UPDATE note_revisions SET noteId = '_bulkAction' WHERE noteId = 'bulkaction'; | ||||
| UPDATE branches SET parentNoteId = '_bulkAction' WHERE parentNoteId = 'bulkaction'; | ||||
| UPDATE branches SET noteId = '_bulkAction' WHERE noteId = 'bulkaction'; | ||||
| UPDATE attributes SET noteId = '_bulkAction' WHERE noteId = 'bulkaction'; | ||||
| UPDATE attributes SET value = '_bulkAction' WHERE type = 'relation' AND value = 'bulkaction'; | ||||
| UPDATE entity_changes SET entityId = '_bulkAction' WHERE entityId = 'bulkaction'; | ||||
|  | ||||
| UPDATE notes SET noteId = '_sqlConsole', title = 'SQL Console History' WHERE noteId = 'sqlconsole'; | ||||
| UPDATE note_contents SET noteId = '_sqlConsole' WHERE noteId = 'sqlconsole'; | ||||
| UPDATE note_revisions SET noteId = '_sqlConsole' WHERE noteId = 'sqlconsole'; | ||||
| UPDATE branches SET noteId = '_sqlConsole' WHERE noteId = 'sqlconsole'; | ||||
| UPDATE branches SET parentNoteId = '_sqlConsole' WHERE parentNoteId = 'sqlconsole'; | ||||
| UPDATE attributes SET noteId = '_sqlConsole' WHERE noteId = 'sqlconsole'; | ||||
| UPDATE attributes SET value = '_sqlConsole' WHERE type = 'relation' AND value = 'sqlconsole'; | ||||
| UPDATE entity_changes SET entityId = '_sqlConsole' WHERE entityId = 'sqlconsole'; | ||||
|  | ||||
| UPDATE notes SET noteId = '_hidden', title = 'Hidden Notes' WHERE noteId = 'hidden'; | ||||
| UPDATE note_contents SET noteId = '_hidden' WHERE noteId = 'hidden'; | ||||
| UPDATE note_revisions SET noteId = '_hidden' WHERE noteId = 'hidden'; | ||||
| UPDATE branches SET noteId = '_hidden', prefix = NULL WHERE noteId = 'hidden'; | ||||
| UPDATE branches SET parentNoteId = '_hidden' WHERE parentNoteId = 'hidden'; | ||||
| UPDATE attributes SET noteId = '_hidden' WHERE noteId = 'hidden'; | ||||
| UPDATE attributes SET value = '_hidden' WHERE type = 'relation' AND value = 'hidden'; | ||||
| UPDATE entity_changes SET entityId = '_hidden' WHERE entityId = 'hidden'; | ||||
|  | ||||
| UPDATE notes SET noteId = '_search', title = 'Search History' WHERE noteId = 'search'; | ||||
| UPDATE note_contents SET noteId = '_search' WHERE noteId = 'search'; | ||||
| UPDATE note_revisions SET noteId = '_search' WHERE noteId = 'search'; | ||||
| UPDATE branches SET noteId = '_search' WHERE noteId = 'search'; | ||||
| UPDATE branches SET parentNoteId = '_search' WHERE parentNoteId = 'search'; | ||||
| UPDATE attributes SET noteId = '_search' WHERE noteId = 'search'; | ||||
| UPDATE attributes SET value = '_search' WHERE type = 'relation' AND value = 'search'; | ||||
| UPDATE entity_changes SET entityId = '_search' WHERE entityId = 'search'; | ||||
|  | ||||
| UPDATE notes SET noteId = '_share', title = 'Shared Notes' WHERE noteId = 'share'; | ||||
| UPDATE note_contents SET noteId = '_share' WHERE noteId = 'share'; | ||||
| UPDATE note_revisions SET noteId = '_share' WHERE noteId = 'share'; | ||||
| UPDATE branches SET noteId = '_share' WHERE noteId = 'share'; | ||||
| UPDATE branches SET parentNoteId = '_share' WHERE parentNoteId = 'share'; | ||||
| UPDATE attributes SET noteId = '_share' WHERE noteId = 'share'; | ||||
| UPDATE attributes SET value = '_share' WHERE type = 'relation' AND value = 'share'; | ||||
| UPDATE entity_changes SET entityId = '_share' WHERE entityId = 'share'; | ||||
| @@ -1,12 +0,0 @@ | ||||
| module.exports = () => { | ||||
|     const hiddenSubtreeService = require('../../src/services/hidden_subtree'); | ||||
|     const cls = require("../../src/services/cls"); | ||||
|     const beccaLoader = require("../../src/becca/becca_loader"); | ||||
|  | ||||
|     cls.init(() => { | ||||
|         beccaLoader.load(); | ||||
|         // make sure the hidden subtree exists since the subsequent migrations we will move some existing notes into it (share...) | ||||
|         // in previous releases hidden subtree was created lazily | ||||
|         hiddenSubtreeService.checkHiddenSubtree(true); | ||||
|     }); | ||||
| }; | ||||
| @@ -1,2 +0,0 @@ | ||||
| DELETE FROM branches WHERE noteId = '_share' AND parentNoteId != 'root' AND parentNoteId != '_hidden'; -- delete all other branches of _share if any | ||||
| UPDATE branches SET parentNoteId = '_hidden' WHERE noteId = '_share'; | ||||
| @@ -1,2 +0,0 @@ | ||||
| DELETE FROM branches WHERE noteId = '_globalNoteMap' AND parentNoteId != 'singles' AND parentNoteId != '_hidden'; -- make sure there are no clones which would fail at the next line | ||||
| UPDATE branches SET parentNoteId = '_hidden' WHERE noteId = '_globalNoteMap'; | ||||
| @@ -1,6 +0,0 @@ | ||||
| DELETE FROM branches WHERE noteId = 'singles'; | ||||
| DELETE FROM notes WHERE noteId = 'singles'; | ||||
| DELETE FROM note_contents WHERE noteId = 'singles'; | ||||
| DELETE FROM note_revisions WHERE noteId = 'singles'; | ||||
| DELETE FROM attributes WHERE noteId = 'singles'; | ||||
| DELETE FROM entity_changes WHERE entityId = 'singles'; | ||||
| @@ -1,21 +0,0 @@ | ||||
| module.exports = () => { | ||||
|     const cls = require("../../src/services/cls"); | ||||
|     const cloningService = require("../../src/services/cloning"); | ||||
|     const beccaLoader = require("../../src/becca/becca_loader"); | ||||
|     const becca = require("../../src/becca/becca"); | ||||
|  | ||||
|     cls.init(() => { | ||||
|         beccaLoader.load(); | ||||
|  | ||||
|         for (const attr of becca.findAttributes('label','bookmarked')) { | ||||
|             cloningService.toggleNoteInParent(true, attr.noteId, '_lbBookmarks'); | ||||
|  | ||||
|             attr.markAsDeleted("0204__migrate_bookmarks_to_clones"); | ||||
|         } | ||||
|  | ||||
|         // bookmarkFolder used to work in 0.57 without the bookmarked label | ||||
|         for (const attr of becca.findAttributes('label','bookmarkFolder')) { | ||||
|             cloningService.toggleNoteInParent(true, attr.noteId, '_lbBookmarks'); | ||||
|         } | ||||
|     }); | ||||
| }; | ||||
| @@ -1,3 +0,0 @@ | ||||
| UPDATE notes SET type = 'relationMap' WHERE type = 'relation-map'; | ||||
| UPDATE notes SET type = 'noteMap' WHERE type = 'note-map'; | ||||
| UPDATE notes SET type = 'webView' WHERE type = 'web-view'; | ||||
| @@ -1,33 +0,0 @@ | ||||
| // the history was previously not exposed and the fact they were not cleaned up is rather a side-effect than an intention | ||||
|  | ||||
| module.exports = () => { | ||||
|     const cls = require("../../src/services/cls"); | ||||
|     const beccaLoader = require("../../src/becca/becca_loader"); | ||||
|     const becca = require("../../src/becca/becca"); | ||||
|  | ||||
|     cls.init(() => { | ||||
|         beccaLoader.load(); | ||||
|  | ||||
|         // deleting just branches because they might be cloned (and therefore saved) also outside of the hidden subtree | ||||
|  | ||||
|         const searchRoot = becca.getNote('_search'); | ||||
|  | ||||
|         for (const searchBranch of searchRoot.getChildBranches()) { | ||||
|             const searchNote = searchBranch.getNote(); | ||||
|  | ||||
|             if (searchNote.type === 'search') { | ||||
|                 searchBranch.deleteBranch('0206__delete_search_and_sql_console_history'); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         const sqlConsoleRoot = becca.getNote('_sqlConsole'); | ||||
|  | ||||
|         for (const sqlConsoleBranch of sqlConsoleRoot.getChildBranches()) { | ||||
|             const sqlConsoleNote = sqlConsoleBranch.getNote(); | ||||
|  | ||||
|             if (sqlConsoleNote.type === 'code' && sqlConsoleNote.mime === 'text/x-sqlite;schema=trilium') { | ||||
|                 sqlConsoleBranch.deleteBranch('0206__delete_search_and_sql_console_history'); | ||||
|             } | ||||
|         } | ||||
|     }); | ||||
| }; | ||||
| @@ -1,2 +0,0 @@ | ||||
| UPDATE notes SET title = 'SQL Console History' WHERE noteId = '_sqlConsole'; | ||||
| UPDATE notes SET title = 'Search History' WHERE noteId = '_search'; | ||||
| @@ -1,13 +0,0 @@ | ||||
| module.exports = () => { | ||||
|     const cls = require("../../src/services/cls"); | ||||
|     const beccaLoader = require("../../src/becca/becca_loader"); | ||||
|     const becca = require("../../src/becca/becca"); | ||||
|  | ||||
|     cls.init(() => { | ||||
|         beccaLoader.load(); | ||||
|  | ||||
|         for (const label of becca.getNote('_hidden').getLabels('archived')) { | ||||
|             label.markAsDeleted('0208__remove_archived_from_hidden'); | ||||
|         } | ||||
|     }); | ||||
| }; | ||||
| @@ -1,5 +0,0 @@ | ||||
| UPDATE attributes SET name = 'workspaceInbox' WHERE type = 'label' AND name = 'hoistedInbox'; | ||||
| UPDATE entity_changes SET entityId = 'workspaceInbox' WHERE entityName = 'attributes' AND entityId = 'hoistedInbox'; | ||||
|  | ||||
| UPDATE attributes SET name = 'workspaceSearchHome' WHERE type = 'label' AND name = 'hoistedSearchHome'; | ||||
| UPDATE entity_changes SET entityId = 'workspaceSearchHome' WHERE entityName = 'attributes' AND entityId = 'hoistedSearchHome'; | ||||
| @@ -1,24 +0,0 @@ | ||||
| module.exports = async () => { | ||||
|     const cls = require("../../src/services/cls"); | ||||
|     const beccaLoader = require("../../src/becca/becca_loader"); | ||||
|     const log = require("../../src/services/log"); | ||||
|     const consistencyChecks = require("../../src/services/consistency_checks"); | ||||
|     const noteService = require("../../src/services/notes"); | ||||
|  | ||||
|     await cls.init(async () => { | ||||
|         // precaution for the 0211 migration | ||||
|         noteService.eraseDeletedNotesNow(); | ||||
|  | ||||
|         beccaLoader.load(); | ||||
|  | ||||
|         try { | ||||
|             // precaution before running 211 which might produce unique constraint problems if the DB was not consistent | ||||
|             consistencyChecks.runOnDemandChecksWithoutExclusiveLock(true); | ||||
|         } | ||||
|         catch (e) { | ||||
|             // consistency checks might start failing in the future if there's some incompatible migration down the road | ||||
|             // we can optimistically assume the DB is consistent and still continue | ||||
|             log.error(`Consistency checks failed in migration 0210: ${e.message} ${e.stack}`); | ||||
|         } | ||||
|     }); | ||||
| }; | ||||
| @@ -1,12 +0,0 @@ | ||||
| -- case based on isDeleted is needed, otherwise 2 branches (1 deleted, 1 not) might get the same ID | ||||
| UPDATE entity_changes SET entityId = COALESCE(( | ||||
|     SELECT | ||||
|         CASE isDeleted | ||||
|             WHEN 0 THEN parentNoteId || '_' || noteId | ||||
|             WHEN 1 THEN branchId | ||||
|         END | ||||
|     FROM branches WHERE branchId = entityId | ||||
| ), entityId) | ||||
| WHERE entityName = 'branches' AND isErased = 0; | ||||
|  | ||||
| UPDATE branches SET branchId = parentNoteId || '_' || noteId WHERE isDeleted = 0; | ||||
| @@ -1,27 +0,0 @@ | ||||
| module.exports = () => { | ||||
|     const cls = require("../../src/services/cls"); | ||||
|     const beccaLoader = require("../../src/becca/becca_loader"); | ||||
|     const becca = require("../../src/becca/becca"); | ||||
|     const log = require("../../src/services/log"); | ||||
|  | ||||
|     cls.init(() => { | ||||
|         beccaLoader.load(); | ||||
|  | ||||
|         const hidden = becca.getNote("_hidden"); | ||||
|  | ||||
|         if (!hidden) { | ||||
|             log.info("MIGRATION 212: no _hidden note, skipping."); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         for (const noteId of hidden.getSubtreeNoteIds({includeHidden: true})) { | ||||
|             if (noteId.startsWith("_")) { // is "named" note | ||||
|                 const note = becca.getNote(noteId); | ||||
|  | ||||
|                 for (const attr of note.getOwnedAttributes()) { | ||||
|                     attr.markAsDeleted("0212__delete_all_attributes_of_named_notes"); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     }); | ||||
| }; | ||||
| @@ -1,48 +0,0 @@ | ||||
| module.exports = () => { | ||||
|     const beccaLoader = require("../../src/becca/becca_loader"); | ||||
|     const becca = require("../../src/becca/becca"); | ||||
|     const cls = require("../../src/services/cls"); | ||||
|     const log = require("../../src/services/log"); | ||||
|  | ||||
|     cls.init(() => { | ||||
|         beccaLoader.load(); | ||||
|  | ||||
|         for (const note of Object.values(becca.notes)) { | ||||
|             try { | ||||
|                 if (!note.isJavaScript()) { | ||||
|                     continue; | ||||
|                 } | ||||
|  | ||||
|                 if (!note.mime?.endsWith('env=frontend') && !note.mime?.endsWith('env=backend')) { | ||||
|                     continue; | ||||
|                 } | ||||
|  | ||||
|                 const origContent = note.getContent().toString(); | ||||
|                 const fixedContent = origContent | ||||
|                     .replaceAll("runOnServer", "runOnBackend") | ||||
|                     .replaceAll("api.refreshTree()", "") | ||||
|                     .replaceAll("addTextToActiveTabEditor", "addTextToActiveContextEditor") | ||||
|                     .replaceAll("getActiveTabNote", "getActiveContextNote") | ||||
|                     .replaceAll("getActiveTabTextEditor", "getActiveContextTextEditor") | ||||
|                     .replaceAll("getActiveTabNotePath", "getActiveContextNotePath") | ||||
|                     .replaceAll("getDateNote", "getDayNote") | ||||
|                     .replaceAll("utils.unescapeHtml", "unescapeHtml") | ||||
|                     .replaceAll("sortNotesByTitle", "sortNotes") | ||||
|                     .replaceAll("CollapsibleWidget", "RightPanelWidget") | ||||
|                     .replaceAll("TabAwareWidget", "NoteContextAwareWidget") | ||||
|                     .replaceAll("TabCachingWidget", "NoteContextAwareWidget") | ||||
|                     .replaceAll("NoteContextCachingWidget", "NoteContextAwareWidget"); | ||||
|  | ||||
|                 if (origContent !== fixedContent) { | ||||
|                     log.info(`Replacing legacy API calls for note '${note.noteId}'`); | ||||
|  | ||||
|                     note.saveNoteRevision(); | ||||
|                     note.setContent(fixedContent); | ||||
|                 } | ||||
|             } | ||||
|             catch (e) { | ||||
|                 log.error(`Error during migration to 213 for note '${note.noteId}': ${e.message} ${e.stack}`); | ||||
|             } | ||||
|         } | ||||
|     }); | ||||
| }; | ||||
							
								
								
									
										10
									
								
								db/migrations/0215__content_structure.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								db/migrations/0215__content_structure.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| CREATE TABLE IF NOT EXISTS "blobs" ( | ||||
|                                                `blobId`	TEXT NOT NULL, | ||||
|                                                `content`	TEXT NULL DEFAULT NULL, | ||||
|                                                `dateModified` TEXT NOT NULL, | ||||
|                                                `utcDateModified` TEXT NOT NULL, | ||||
|                                                PRIMARY KEY(`blobId`) | ||||
| ); | ||||
|  | ||||
| ALTER TABLE notes ADD blobId TEXT DEFAULT NULL; | ||||
| ALTER TABLE note_revisions ADD blobId TEXT DEFAULT NULL; | ||||
							
								
								
									
										62
									
								
								db/migrations/0216__move_content_into_blobs.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								db/migrations/0216__move_content_into_blobs.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | ||||
| module.exports = () => { | ||||
|     const sql = require("../../src/services/sql"); | ||||
|     const utils = require("../../src/services/utils"); | ||||
|  | ||||
|     const existingBlobIds = new Set(); | ||||
|  | ||||
|     for (const noteId of sql.getColumn(`SELECT noteId FROM note_contents`)) { | ||||
|         const row = sql.getRow(`SELECT noteId, content, dateModified, utcDateModified FROM note_contents WHERE noteId = ?`, [noteId]); | ||||
|         const blobId = utils.hashedBlobId(row.content); | ||||
|  | ||||
|         if (!existingBlobIds.has(blobId)) { | ||||
|             existingBlobIds.add(blobId); | ||||
|  | ||||
|             sql.insert('blobs', { | ||||
|                 blobId, | ||||
|                 content: row.content, | ||||
|                 dateModified: row.dateModified, | ||||
|                 utcDateModified: row.utcDateModified | ||||
|             }); | ||||
|  | ||||
|             sql.execute("UPDATE entity_changes SET entityName = 'blobs', entityId = ? WHERE entityName = 'note_contents' AND entityId = ?", [blobId, row.noteId]); | ||||
|         } else { | ||||
|             // duplicates | ||||
|             sql.execute("DELETE FROM entity_changes WHERE entityName = 'note_contents' AND entityId = ?", [row.noteId]); | ||||
|         } | ||||
|  | ||||
|         sql.execute('UPDATE notes SET blobId = ? WHERE noteId = ?', [blobId, row.noteId]); | ||||
|     } | ||||
|  | ||||
|     for (const noteRevisionId of sql.getColumn(`SELECT noteRevisionId FROM note_revision_contents`)) { | ||||
|         const row = sql.getRow(`SELECT noteRevisionId, content, utcDateModified FROM note_revision_contents WHERE noteRevisionId = ?`, [noteRevisionId]); | ||||
|         const blobId = utils.hashedBlobId(row.content); | ||||
|  | ||||
|         if (!existingBlobIds.has(blobId)) { | ||||
|             existingBlobIds.add(blobId); | ||||
|  | ||||
|             sql.insert('blobs', { | ||||
|                 blobId, | ||||
|                 content: row.content, | ||||
|                 dateModified: row.utcDateModified, | ||||
|                 utcDateModified: row.utcDateModified | ||||
|             }); | ||||
|  | ||||
|             sql.execute("UPDATE entity_changes SET entityName = 'blobs', entityId = ? WHERE entityName = 'note_revision_contents' AND entityId = ?", [blobId, row.noteRevisionId]); | ||||
|         } else { | ||||
|             // duplicates | ||||
|             sql.execute("DELETE FROM entity_changes WHERE entityName = 'note_revision_contents' AND entityId = ?", [row.noteId]); | ||||
|         } | ||||
|  | ||||
|         sql.execute('UPDATE note_revisions SET blobId = ? WHERE noteRevisionId = ?', [blobId, row.noteRevisionId]); | ||||
|     } | ||||
|  | ||||
|     const notesWithoutBlobIds = sql.getColumn("SELECT noteId FROM notes WHERE blobId IS NULL"); | ||||
|     if (notesWithoutBlobIds.length > 0) { | ||||
|         throw new Error("BlobIds were not filled correctly in notes: " + JSON.stringify(notesWithoutBlobIds)); | ||||
|     } | ||||
|  | ||||
|     const noteRevisionsWithoutBlobIds = sql.getColumn("SELECT noteRevisionId FROM note_revisions WHERE blobId IS NULL"); | ||||
|     if (noteRevisionsWithoutBlobIds.length > 0) { | ||||
|         throw new Error("BlobIds were not filled correctly in note revisions: " + JSON.stringify(noteRevisionsWithoutBlobIds)); | ||||
|     } | ||||
| }; | ||||
							
								
								
									
										4
									
								
								db/migrations/0217__drop_content_tables.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								db/migrations/0217__drop_content_tables.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| DROP TABLE note_contents; | ||||
| DROP TABLE note_revision_contents; | ||||
|  | ||||
| DELETE FROM entity_changes WHERE entityName IN ('note_contents', 'note_revision_contents'); | ||||
							
								
								
									
										25
									
								
								db/migrations/0218__rename_note_revision_to_revision.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								db/migrations/0218__rename_note_revision_to_revision.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| CREATE TABLE IF NOT EXISTS "revisions" (`revisionId`	TEXT NOT NULL PRIMARY KEY, | ||||
|                                         `noteId`	TEXT NOT NULL, | ||||
|                                         type TEXT DEFAULT '' NOT NULL, | ||||
|                                         mime TEXT DEFAULT '' NOT NULL, | ||||
|                                         `title`	TEXT NOT NULL, | ||||
|                                         `isProtected`	INT NOT NULL DEFAULT 0, | ||||
|                                         blobId TEXT DEFAULT NULL, | ||||
|                                         `utcDateLastEdited` TEXT NOT NULL, | ||||
|                                         `utcDateCreated` TEXT NOT NULL, | ||||
|                                         `utcDateModified` TEXT NOT NULL, | ||||
|                                         `dateLastEdited` TEXT NOT NULL, | ||||
|                                         `dateCreated` TEXT NOT NULL); | ||||
|  | ||||
| INSERT INTO revisions (revisionId, noteId, type, mime, title, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, blobId) | ||||
| SELECT noteRevisionId, noteId, type, mime, title, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, blobId FROM note_revisions; | ||||
|  | ||||
| DROP TABLE note_revisions; | ||||
|  | ||||
| CREATE INDEX `IDX_revisions_noteId` ON `revisions` (`noteId`); | ||||
| CREATE INDEX `IDX_revisions_utcDateCreated` ON `revisions` (`utcDateCreated`); | ||||
| CREATE INDEX `IDX_revisions_utcDateLastEdited` ON `revisions` (`utcDateLastEdited`); | ||||
| CREATE INDEX `IDX_revisions_dateCreated` ON `revisions` (`dateCreated`); | ||||
| CREATE INDEX `IDX_revisions_dateLastEdited` ON `revisions` (`dateLastEdited`); | ||||
|  | ||||
| UPDATE entity_changes SET entityName = 'revisions' WHERE entityName = 'note_revisions'; | ||||
							
								
								
									
										21
									
								
								db/migrations/0219__attachments.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								db/migrations/0219__attachments.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| CREATE TABLE IF NOT EXISTS "attachments" | ||||
| ( | ||||
|     attachmentId      TEXT not null primary key, | ||||
|     ownerId       TEXT not null, | ||||
|     role         TEXT not null, | ||||
|     mime         TEXT not null, | ||||
|     title         TEXT not null, | ||||
|     isProtected    INT  not null DEFAULT 0, | ||||
|     position     INT  default 0 not null, | ||||
|     blobId    TEXT DEFAULT null, | ||||
|     dateModified TEXT NOT NULL, | ||||
|     utcDateModified TEXT not null, | ||||
|     utcDateScheduledForErasureSince TEXT DEFAULT NULL, | ||||
|     isDeleted    INT  not null, | ||||
|     deleteId    TEXT DEFAULT NULL); | ||||
|  | ||||
| CREATE INDEX IDX_attachments_ownerId_role | ||||
|     on attachments (ownerId, role); | ||||
|  | ||||
| CREATE INDEX IDX_attachments_utcDateScheduledForErasureSince | ||||
|     on attachments (utcDateScheduledForErasureSince); | ||||
							
								
								
									
										23
									
								
								db/migrations/0220__migrate_images_to_attachments.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								db/migrations/0220__migrate_images_to_attachments.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| module.exports = () => { | ||||
|     const beccaLoader = require("../../src/becca/becca_loader"); | ||||
|     const becca = require("../../src/becca/becca"); | ||||
|     const cls = require("../../src/services/cls"); | ||||
|     const log = require("../../src/services/log"); | ||||
|  | ||||
|     cls.init(() => { | ||||
|         beccaLoader.load(); | ||||
|  | ||||
|         for (const note of Object.values(becca.notes)) { | ||||
|             try { | ||||
|                 const attachment = note.convertToParentAttachment({autoConversion: true}); | ||||
|  | ||||
|                 if (attachment) { | ||||
|                     log.info(`Auto-converted note '${note.noteId}' into attachment '${attachment.attachmentId}'.`); | ||||
|                 } | ||||
|             } | ||||
|             catch (e) { | ||||
|                 log.error(`Cannot convert note '${note.noteId}' to attachment: ${e.message} ${e.stack}`); | ||||
|             } | ||||
|         } | ||||
|     }); | ||||
| }; | ||||
| @@ -0,0 +1,2 @@ | ||||
| DELETE FROM options WHERE name = 'hideIncludedImages_main'; | ||||
| DELETE FROM entity_changes WHERE entityName = 'options' AND entityId = 'hideIncludedImages_main'; | ||||
| @@ -0,0 +1,2 @@ | ||||
| UPDATE options SET name = 'openNoteContexts' WHERE name = 'openTabs'; | ||||
| UPDATE entity_changes SET entityId = 'openNoteContexts' WHERE entityName = 'options' AND entityId = 'openTabs'; | ||||
							
								
								
									
										1
									
								
								db/migrations/0223__NOOP.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								db/migrations/0223__NOOP.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| SELECT 1; | ||||
							
								
								
									
										14
									
								
								db/migrations/0224__fix_blobIds.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								db/migrations/0224__fix_blobIds.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| UPDATE blobs SET blobId = REPLACE(blobId, '+', 'X'); | ||||
| UPDATE blobs SET blobId = REPLACE(blobId, '/', 'Y'); | ||||
|  | ||||
| UPDATE notes SET blobId = REPLACE(blobId, '+', 'X'); | ||||
| UPDATE notes SET blobId = REPLACE(blobId, '/', 'Y'); | ||||
|  | ||||
| UPDATE attachments SET blobId = REPLACE(blobId, '+', 'X'); | ||||
| UPDATE attachments SET blobId = REPLACE(blobId, '/', 'Y'); | ||||
|  | ||||
| UPDATE revisions SET blobId = REPLACE(blobId, '+', 'X'); | ||||
| UPDATE revisions SET blobId = REPLACE(blobId, '/', 'Y'); | ||||
|  | ||||
| UPDATE entity_changes SET entityId = REPLACE(entityId, '+', 'X') WHERE entityName = 'blobs'; | ||||
| UPDATE entity_changes SET entityId = REPLACE(entityId, '/', 'Y') WHERE entityName = 'blobs'; | ||||
							
								
								
									
										3
									
								
								db/migrations/0225__create_blobId_indices.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								db/migrations/0225__create_blobId_indices.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| CREATE INDEX IF NOT EXISTS IDX_notes_blobId on notes (blobId); | ||||
| CREATE INDEX IF NOT EXISTS IDX_revisions_blobId on revisions (blobId); | ||||
| CREATE INDEX IF NOT EXISTS IDX_attachments_blobId on attachments (blobId); | ||||
| @@ -35,6 +35,7 @@ CREATE TABLE IF NOT EXISTS "notes" ( | ||||
|                                        `isProtected`	INT NOT NULL DEFAULT 0, | ||||
|                                        `type` TEXT NOT NULL DEFAULT 'text', | ||||
|                                        `mime` TEXT NOT NULL DEFAULT 'text/html', | ||||
|                                        blobId TEXT DEFAULT NULL, | ||||
|                                        `isDeleted`	INT NOT NULL DEFAULT 0, | ||||
|                                        `deleteId`   TEXT DEFAULT NULL, | ||||
|                                        `dateCreated`	TEXT NOT NULL, | ||||
| @@ -42,27 +43,18 @@ CREATE TABLE IF NOT EXISTS "notes" ( | ||||
|                                        `utcDateCreated`	TEXT NOT NULL, | ||||
|                                        `utcDateModified`	TEXT NOT NULL, | ||||
|                                        PRIMARY KEY(`noteId`)); | ||||
| CREATE TABLE IF NOT EXISTS "note_contents" ( | ||||
|                                                `noteId`	TEXT NOT NULL, | ||||
|                                                `content`	TEXT NULL DEFAULT NULL, | ||||
|                                                `dateModified` TEXT NOT NULL, | ||||
|                                                `utcDateModified` TEXT NOT NULL, | ||||
|                                                PRIMARY KEY(`noteId`) | ||||
| ); | ||||
| CREATE TABLE IF NOT EXISTS "note_revisions" (`noteRevisionId`	TEXT NOT NULL PRIMARY KEY, | ||||
| CREATE TABLE IF NOT EXISTS "revisions" (`revisionId`	TEXT NOT NULL PRIMARY KEY, | ||||
|                                              `noteId`	TEXT NOT NULL, | ||||
|                                              type TEXT DEFAULT '' NOT NULL, | ||||
|                                              mime TEXT DEFAULT '' NOT NULL, | ||||
|                                              `title`	TEXT NOT NULL, | ||||
|                                              `isProtected`	INT NOT NULL DEFAULT 0, | ||||
|                                             blobId TEXT DEFAULT NULL, | ||||
|                                              `utcDateLastEdited` TEXT NOT NULL, | ||||
|                                              `utcDateCreated` TEXT NOT NULL, | ||||
|                                              `utcDateModified` TEXT NOT NULL, | ||||
|                                              `dateLastEdited` TEXT NOT NULL, | ||||
|                                              `dateCreated` TEXT NOT NULL); | ||||
| CREATE TABLE IF NOT EXISTS "note_revision_contents" (`noteRevisionId`	TEXT NOT NULL PRIMARY KEY, | ||||
|                                                      `content`	TEXT, | ||||
|                                                      `utcDateModified` TEXT NOT NULL); | ||||
| CREATE TABLE IF NOT EXISTS "options" | ||||
| ( | ||||
|     name TEXT not null PRIMARY KEY, | ||||
| @@ -94,11 +86,11 @@ CREATE INDEX `IDX_notes_dateCreated` ON `notes` (`dateCreated`); | ||||
| CREATE INDEX `IDX_notes_dateModified` ON `notes` (`dateModified`); | ||||
| CREATE INDEX `IDX_notes_utcDateModified` ON `notes` (`utcDateModified`); | ||||
| CREATE INDEX `IDX_notes_utcDateCreated` ON `notes` (`utcDateCreated`); | ||||
| CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (`noteId`); | ||||
| CREATE INDEX `IDX_note_revisions_utcDateCreated` ON `note_revisions` (`utcDateCreated`); | ||||
| CREATE INDEX `IDX_note_revisions_utcDateLastEdited` ON `note_revisions` (`utcDateLastEdited`); | ||||
| CREATE INDEX `IDX_note_revisions_dateCreated` ON `note_revisions` (`dateCreated`); | ||||
| CREATE INDEX `IDX_note_revisions_dateLastEdited` ON `note_revisions` (`dateLastEdited`); | ||||
| CREATE INDEX `IDX_revisions_noteId` ON `revisions` (`noteId`); | ||||
| CREATE INDEX `IDX_revisions_utcDateCreated` ON `revisions` (`utcDateCreated`); | ||||
| CREATE INDEX `IDX_revisions_utcDateLastEdited` ON `revisions` (`utcDateLastEdited`); | ||||
| CREATE INDEX `IDX_revisions_dateCreated` ON `revisions` (`dateCreated`); | ||||
| CREATE INDEX `IDX_revisions_dateLastEdited` ON `revisions` (`dateLastEdited`); | ||||
| CREATE INDEX `IDX_entity_changes_changeId` ON `entity_changes` (`changeId`); | ||||
| CREATE INDEX IDX_attributes_name_value | ||||
|     on attributes (name, value); | ||||
| @@ -112,3 +104,31 @@ CREATE TABLE IF NOT EXISTS "recent_notes" | ||||
|     notePath TEXT not null, | ||||
|     utcDateCreated TEXT not null | ||||
| ); | ||||
| CREATE TABLE IF NOT EXISTS "blobs" ( | ||||
|                                                `blobId`	TEXT NOT NULL, | ||||
|                                                `content`	TEXT NULL DEFAULT NULL, | ||||
|                                                `dateModified` TEXT NOT NULL, | ||||
|                                                `utcDateModified` TEXT NOT NULL, | ||||
|                                                PRIMARY KEY(`blobId`) | ||||
| ); | ||||
| CREATE TABLE IF NOT EXISTS "attachments" | ||||
| ( | ||||
|     attachmentId      TEXT not null primary key, | ||||
|     ownerId       TEXT not null, | ||||
|     role         TEXT not null, | ||||
|     mime         TEXT not null, | ||||
|     title         TEXT not null, | ||||
|     isProtected    INT  not null DEFAULT 0, | ||||
|     position     INT  default 0 not null, | ||||
|     blobId    TEXT DEFAULT null, | ||||
|     dateModified TEXT NOT NULL, | ||||
|     utcDateModified TEXT not null, | ||||
|     utcDateScheduledForErasureSince TEXT DEFAULT NULL, | ||||
|     isDeleted    INT  not null, | ||||
|     deleteId    TEXT DEFAULT NULL); | ||||
| CREATE INDEX IDX_attachments_ownerId_role | ||||
|     on attachments (ownerId, role); | ||||
|  | ||||
| CREATE INDEX IDX_notes_blobId on notes (blobId); | ||||
| CREATE INDEX IDX_revisions_blobId on revisions (blobId); | ||||
| CREATE INDEX IDX_attachments_blobId on attachments (blobId); | ||||
|   | ||||
| @@ -4,11 +4,10 @@ const fs = require("fs"); | ||||
| const dataDir = require("./src/services/data_dir"); | ||||
| const config = ini.parse(fs.readFileSync(dataDir.CONFIG_INI_PATH, 'utf-8')); | ||||
|  | ||||
| if (config.https) { | ||||
| if (config.Network.https) { | ||||
|     // built-in TLS (terminated by trilium) is not supported yet, PRs are welcome | ||||
|     // for reverse proxy terminated TLS this will works since config.https will be false | ||||
|     process.exit(0); | ||||
|     return; | ||||
| } | ||||
|  | ||||
| const port = require('./src/services/port'); | ||||
|   | ||||
| @@ -93,7 +93,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line16">line 16</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line18">line 18</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -183,7 +183,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line53">line 53</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line55">line 55</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -211,7 +211,7 @@ | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="addEntityChange"><span class="type-signature">(protected) </span>addEntityChange<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|     <h4 class="name" id="_getContent"><span class="type-signature">(protected) </span>_getContent<span class="signature">()</span><span class="type-signature"> → {string|Buffer}</span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
| @@ -259,7 +259,112 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line62">line 62</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line246">line 246</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <h5>Returns:</h5> | ||||
|  | ||||
|          | ||||
|  | ||||
|  | ||||
| <dl> | ||||
|     <dt> | ||||
|         Type | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type">string</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">Buffer</span> | ||||
|  | ||||
|  | ||||
|     </dd> | ||||
| </dl> | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="_setContent"><span class="type-signature">(protected) </span>_setContent<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line124">line 124</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -343,7 +448,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line18">line 18</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line20">line 20</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -427,7 +532,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line30">line 30</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line32">line 32</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -511,7 +616,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line23">line 23</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line25">line 25</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -595,7 +700,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line74">line 74</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line76">line 76</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -679,7 +784,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line45">line 45</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line47">line 47</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -725,7 +830,7 @@ | ||||
| <div class="description"> | ||||
|     Mark the entity as (soft) deleted. It will be completely erased later. | ||||
|  | ||||
| This is a low level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead. | ||||
| This is a low-level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead. | ||||
| </div> | ||||
|  | ||||
|  | ||||
| @@ -833,7 +938,91 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line128">line 128</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line263">line 263</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="putEntityChange"><span class="type-signature">(protected) </span>putEntityChange<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line64">line 64</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -921,7 +1110,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line83">line 83</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line85">line 85</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -985,13 +1174,13 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
							
								
								
									
										2876
									
								
								docs/backend_api/BAttachment.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2876
									
								
								docs/backend_api/BAttachment.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -268,7 +268,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line53">line 53</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line55">line 55</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -772,7 +772,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="addEntityChange"><span class="type-signature">(protected) </span>addEntityChange<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|     <h4 class="name" id="_getContent"><span class="type-signature">(protected) </span>_getContent<span class="signature">()</span><span class="type-signature"> → {string|Buffer}</span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
| @@ -802,7 +802,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-overrides">Overrides:</dt> | ||||
|     <dd class="tag-overrides"><ul class="dummy"><li> | ||||
|         <a href="AbstractBeccaEntity.html#addEntityChange">AbstractBeccaEntity#addEntityChange</a> | ||||
|         <a href="AbstractBeccaEntity.html#_getContent">AbstractBeccaEntity#_getContent</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -825,7 +825,117 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line62">line 62</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line246">line 246</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <h5>Returns:</h5> | ||||
|  | ||||
|          | ||||
|  | ||||
|  | ||||
| <dl> | ||||
|     <dt> | ||||
|         Type | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type">string</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">Buffer</span> | ||||
|  | ||||
|  | ||||
|     </dd> | ||||
| </dl> | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="_setContent"><span class="type-signature">(protected) </span>_setContent<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-overrides">Overrides:</dt> | ||||
|     <dd class="tag-overrides"><ul class="dummy"><li> | ||||
|         <a href="AbstractBeccaEntity.html#_setContent">AbstractBeccaEntity#_setContent</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line124">line 124</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -914,7 +1024,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line18">line 18</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line20">line 20</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1003,7 +1113,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line30">line 30</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line32">line 32</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1092,7 +1202,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line23">line 23</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line25">line 25</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1286,7 +1396,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line74">line 74</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line76">line 76</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1480,7 +1590,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line45">line 45</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line47">line 47</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1628,7 +1738,7 @@ and relation (representing named relationship between source and target note)</d | ||||
| <div class="description"> | ||||
|     Mark the entity as (soft) deleted. It will be completely erased later. | ||||
|  | ||||
| This is a low level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead. | ||||
| This is a low-level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead. | ||||
| </div> | ||||
|  | ||||
|  | ||||
| @@ -1741,7 +1851,96 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line128">line 128</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line263">line 263</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="putEntityChange"><span class="type-signature">(protected) </span>putEntityChange<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-overrides">Overrides:</dt> | ||||
|     <dd class="tag-overrides"><ul class="dummy"><li> | ||||
|         <a href="AbstractBeccaEntity.html#putEntityChange">AbstractBeccaEntity#putEntityChange</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line64">line 64</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1834,7 +2033,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line83">line 83</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line85">line 85</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1898,13 +2097,13 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -203,7 +203,7 @@ Always check noteId instead.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line53">line 53</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line55">line 55</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -463,7 +463,7 @@ of deletion should not act as a clone. | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bbranch.js.html">becca/entities/bbranch.js</a>, <a href="becca_entities_bbranch.js.html#line133">line 133</a> | ||||
|         <a href="becca_entities_bbranch.js.html">becca/entities/bbranch.js</a>, <a href="becca_entities_bbranch.js.html#line134">line 134</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -657,7 +657,7 @@ of deletion should not act as a clone. | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bbranch.js.html">becca/entities/bbranch.js</a>, <a href="becca_entities_bbranch.js.html#line111">line 111</a> | ||||
|         <a href="becca_entities_bbranch.js.html">becca/entities/bbranch.js</a>, <a href="becca_entities_bbranch.js.html#line112">line 112</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -892,7 +892,7 @@ of deletion should not act as a clone. | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="addEntityChange"><span class="type-signature">(protected) </span>addEntityChange<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|     <h4 class="name" id="_getContent"><span class="type-signature">(protected) </span>_getContent<span class="signature">()</span><span class="type-signature"> → {string|Buffer}</span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
| @@ -922,7 +922,7 @@ of deletion should not act as a clone. | ||||
|      | ||||
|     <dt class="tag-overrides">Overrides:</dt> | ||||
|     <dd class="tag-overrides"><ul class="dummy"><li> | ||||
|         <a href="AbstractBeccaEntity.html#addEntityChange">AbstractBeccaEntity#addEntityChange</a> | ||||
|         <a href="AbstractBeccaEntity.html#_getContent">AbstractBeccaEntity#_getContent</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -945,7 +945,117 @@ of deletion should not act as a clone. | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line62">line 62</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line246">line 246</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <h5>Returns:</h5> | ||||
|  | ||||
|          | ||||
|  | ||||
|  | ||||
| <dl> | ||||
|     <dt> | ||||
|         Type | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type">string</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">Buffer</span> | ||||
|  | ||||
|  | ||||
|     </dd> | ||||
| </dl> | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="_setContent"><span class="type-signature">(protected) </span>_setContent<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-overrides">Overrides:</dt> | ||||
|     <dd class="tag-overrides"><ul class="dummy"><li> | ||||
|         <a href="AbstractBeccaEntity.html#_setContent">AbstractBeccaEntity#_setContent</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line124">line 124</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1034,7 +1144,7 @@ of deletion should not act as a clone. | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line18">line 18</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line20">line 20</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1216,7 +1326,7 @@ of deletion should not act as a clone. | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bbranch.js.html">becca/entities/bbranch.js</a>, <a href="becca_entities_bbranch.js.html#line145">line 145</a> | ||||
|         <a href="becca_entities_bbranch.js.html">becca/entities/bbranch.js</a>, <a href="becca_entities_bbranch.js.html#line146">line 146</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1327,7 +1437,7 @@ of deletion should not act as a clone. | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line30">line 30</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line32">line 32</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1416,7 +1526,7 @@ of deletion should not act as a clone. | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line23">line 23</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line25">line 25</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1446,6 +1556,108 @@ of deletion should not act as a clone. | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="getNote"><span class="type-signature"></span>getNote<span class="signature">()</span><span class="type-signature"> → {<a href="BNote.html">BNote</a>}</span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bbranch.js.html">becca/entities/bbranch.js</a>, <a href="becca_entities_bbranch.js.html#line107">line 107</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <h5>Returns:</h5> | ||||
|  | ||||
|          | ||||
|  | ||||
|  | ||||
| <dl> | ||||
|     <dt> | ||||
|         Type | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type"><a href="BNote.html">BNote</a></span> | ||||
|  | ||||
|  | ||||
|     </dd> | ||||
| </dl> | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
|  | ||||
| @@ -1505,7 +1717,7 @@ of deletion should not act as a clone. | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line74">line 74</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line76">line 76</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1594,7 +1806,7 @@ of deletion should not act as a clone. | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line45">line 45</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line47">line 47</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1640,7 +1852,7 @@ of deletion should not act as a clone. | ||||
| <div class="description"> | ||||
|     Mark the entity as (soft) deleted. It will be completely erased later. | ||||
|  | ||||
| This is a low level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead. | ||||
| This is a low-level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead. | ||||
| </div> | ||||
|  | ||||
|  | ||||
| @@ -1753,7 +1965,96 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line128">line 128</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line263">line 263</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="putEntityChange"><span class="type-signature">(protected) </span>putEntityChange<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-overrides">Overrides:</dt> | ||||
|     <dd class="tag-overrides"><ul class="dummy"><li> | ||||
|         <a href="AbstractBeccaEntity.html#putEntityChange">AbstractBeccaEntity#putEntityChange</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line64">line 64</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1846,7 +2147,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line83">line 83</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line85">line 85</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1910,13 +2211,13 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -205,7 +205,7 @@ from tokenHash and token.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line53">line 53</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line55">line 55</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -641,7 +641,7 @@ from tokenHash and token.</div> | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="addEntityChange"><span class="type-signature">(protected) </span>addEntityChange<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|     <h4 class="name" id="_getContent"><span class="type-signature">(protected) </span>_getContent<span class="signature">()</span><span class="type-signature"> → {string|Buffer}</span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
| @@ -671,7 +671,7 @@ from tokenHash and token.</div> | ||||
|      | ||||
|     <dt class="tag-overrides">Overrides:</dt> | ||||
|     <dd class="tag-overrides"><ul class="dummy"><li> | ||||
|         <a href="AbstractBeccaEntity.html#addEntityChange">AbstractBeccaEntity#addEntityChange</a> | ||||
|         <a href="AbstractBeccaEntity.html#_getContent">AbstractBeccaEntity#_getContent</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -694,7 +694,117 @@ from tokenHash and token.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line62">line 62</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line246">line 246</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <h5>Returns:</h5> | ||||
|  | ||||
|          | ||||
|  | ||||
|  | ||||
| <dl> | ||||
|     <dt> | ||||
|         Type | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type">string</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">Buffer</span> | ||||
|  | ||||
|  | ||||
|     </dd> | ||||
| </dl> | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="_setContent"><span class="type-signature">(protected) </span>_setContent<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-overrides">Overrides:</dt> | ||||
|     <dd class="tag-overrides"><ul class="dummy"><li> | ||||
|         <a href="AbstractBeccaEntity.html#_setContent">AbstractBeccaEntity#_setContent</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line124">line 124</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -783,7 +893,7 @@ from tokenHash and token.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line18">line 18</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line20">line 20</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -872,7 +982,7 @@ from tokenHash and token.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line30">line 30</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line32">line 32</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -961,7 +1071,7 @@ from tokenHash and token.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line23">line 23</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line25">line 25</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1050,7 +1160,7 @@ from tokenHash and token.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line74">line 74</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line76">line 76</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1139,7 +1249,7 @@ from tokenHash and token.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line45">line 45</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line47">line 47</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1185,7 +1295,7 @@ from tokenHash and token.</div> | ||||
| <div class="description"> | ||||
|     Mark the entity as (soft) deleted. It will be completely erased later. | ||||
|  | ||||
| This is a low level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead. | ||||
| This is a low-level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead. | ||||
| </div> | ||||
|  | ||||
|  | ||||
| @@ -1298,7 +1408,96 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line128">line 128</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line263">line 263</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="putEntityChange"><span class="type-signature">(protected) </span>putEntityChange<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-overrides">Overrides:</dt> | ||||
|     <dd class="tag-overrides"><ul class="dummy"><li> | ||||
|         <a href="AbstractBeccaEntity.html#putEntityChange">AbstractBeccaEntity#putEntityChange</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line64">line 64</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1391,7 +1590,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line83">line 83</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line85">line 85</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1455,13 +1654,13 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -30,7 +30,7 @@ | ||||
|      | ||||
|         <h2><span class="attribs"><span class="type-signature"></span></span>BOption<span class="signature">()</span><span class="type-signature"></span></h2> | ||||
|          | ||||
|             <div class="class-description">Option represents name-value pair, either directly configurable by the user or some system property.</div> | ||||
|             <div class="class-description">Option represents a name-value pair, either directly configurable by the user or some system property.</div> | ||||
|          | ||||
|      | ||||
| </header> | ||||
| @@ -199,7 +199,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line53">line 53</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line55">line 55</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -267,7 +267,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_boption.js.html">becca/entities/boption.js</a>, <a href="becca_entities_boption.js.html#line24">line 24</a> | ||||
|         <a href="becca_entities_boption.js.html">becca/entities/boption.js</a>, <a href="becca_entities_boption.js.html#line29">line 29</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -335,7 +335,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_boption.js.html">becca/entities/boption.js</a>, <a href="becca_entities_boption.js.html#line20">line 20</a> | ||||
|         <a href="becca_entities_boption.js.html">becca/entities/boption.js</a>, <a href="becca_entities_boption.js.html#line25">line 25</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -403,7 +403,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_boption.js.html">becca/entities/boption.js</a>, <a href="becca_entities_boption.js.html#line26">line 26</a> | ||||
|         <a href="becca_entities_boption.js.html">becca/entities/boption.js</a>, <a href="becca_entities_boption.js.html#line31">line 31</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -471,7 +471,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_boption.js.html">becca/entities/boption.js</a>, <a href="becca_entities_boption.js.html#line22">line 22</a> | ||||
|         <a href="becca_entities_boption.js.html">becca/entities/boption.js</a>, <a href="becca_entities_boption.js.html#line27">line 27</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -499,7 +499,7 @@ | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="addEntityChange"><span class="type-signature">(protected) </span>addEntityChange<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|     <h4 class="name" id="_getContent"><span class="type-signature">(protected) </span>_getContent<span class="signature">()</span><span class="type-signature"> → {string|Buffer}</span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
| @@ -529,7 +529,7 @@ | ||||
|      | ||||
|     <dt class="tag-overrides">Overrides:</dt> | ||||
|     <dd class="tag-overrides"><ul class="dummy"><li> | ||||
|         <a href="AbstractBeccaEntity.html#addEntityChange">AbstractBeccaEntity#addEntityChange</a> | ||||
|         <a href="AbstractBeccaEntity.html#_getContent">AbstractBeccaEntity#_getContent</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -552,7 +552,117 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line62">line 62</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line246">line 246</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <h5>Returns:</h5> | ||||
|  | ||||
|          | ||||
|  | ||||
|  | ||||
| <dl> | ||||
|     <dt> | ||||
|         Type | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type">string</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">Buffer</span> | ||||
|  | ||||
|  | ||||
|     </dd> | ||||
| </dl> | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="_setContent"><span class="type-signature">(protected) </span>_setContent<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-overrides">Overrides:</dt> | ||||
|     <dd class="tag-overrides"><ul class="dummy"><li> | ||||
|         <a href="AbstractBeccaEntity.html#_setContent">AbstractBeccaEntity#_setContent</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line124">line 124</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -641,7 +751,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line18">line 18</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line20">line 20</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -730,7 +840,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line30">line 30</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line32">line 32</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -819,7 +929,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line23">line 23</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line25">line 25</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -908,7 +1018,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line74">line 74</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line76">line 76</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -997,7 +1107,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line45">line 45</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line47">line 47</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1043,7 +1153,7 @@ | ||||
| <div class="description"> | ||||
|     Mark the entity as (soft) deleted. It will be completely erased later. | ||||
|  | ||||
| This is a low level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead. | ||||
| This is a low-level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead. | ||||
| </div> | ||||
|  | ||||
|  | ||||
| @@ -1156,7 +1266,96 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line128">line 128</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line263">line 263</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="putEntityChange"><span class="type-signature">(protected) </span>putEntityChange<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-overrides">Overrides:</dt> | ||||
|     <dd class="tag-overrides"><ul class="dummy"><li> | ||||
|         <a href="AbstractBeccaEntity.html#putEntityChange">AbstractBeccaEntity#putEntityChange</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line64">line 64</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1249,7 +1448,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line83">line 83</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line85">line 85</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1313,13 +1512,13 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -199,7 +199,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line53">line 53</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line55">line 55</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -431,7 +431,7 @@ | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="addEntityChange"><span class="type-signature">(protected) </span>addEntityChange<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|     <h4 class="name" id="_getContent"><span class="type-signature">(protected) </span>_getContent<span class="signature">()</span><span class="type-signature"> → {string|Buffer}</span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
| @@ -461,7 +461,7 @@ | ||||
|      | ||||
|     <dt class="tag-overrides">Overrides:</dt> | ||||
|     <dd class="tag-overrides"><ul class="dummy"><li> | ||||
|         <a href="AbstractBeccaEntity.html#addEntityChange">AbstractBeccaEntity#addEntityChange</a> | ||||
|         <a href="AbstractBeccaEntity.html#_getContent">AbstractBeccaEntity#_getContent</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -484,7 +484,117 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line62">line 62</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line246">line 246</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <h5>Returns:</h5> | ||||
|  | ||||
|          | ||||
|  | ||||
|  | ||||
| <dl> | ||||
|     <dt> | ||||
|         Type | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type">string</span> | ||||
| | | ||||
|  | ||||
| <span class="param-type">Buffer</span> | ||||
|  | ||||
|  | ||||
|     </dd> | ||||
| </dl> | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="_setContent"><span class="type-signature">(protected) </span>_setContent<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-overrides">Overrides:</dt> | ||||
|     <dd class="tag-overrides"><ul class="dummy"><li> | ||||
|         <a href="AbstractBeccaEntity.html#_setContent">AbstractBeccaEntity#_setContent</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line124">line 124</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -573,7 +683,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line18">line 18</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line20">line 20</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -662,7 +772,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line30">line 30</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line32">line 32</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -751,7 +861,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line23">line 23</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line25">line 25</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -840,7 +950,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line74">line 74</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line76">line 76</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -929,7 +1039,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line45">line 45</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line47">line 47</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -975,7 +1085,7 @@ | ||||
| <div class="description"> | ||||
|     Mark the entity as (soft) deleted. It will be completely erased later. | ||||
|  | ||||
| This is a low level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead. | ||||
| This is a low-level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead. | ||||
| </div> | ||||
|  | ||||
|  | ||||
| @@ -1088,7 +1198,96 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line128">line 128</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line263">line 263</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="putEntityChange"><span class="type-signature">(protected) </span>putEntityChange<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-overrides">Overrides:</dt> | ||||
|     <dd class="tag-overrides"><ul class="dummy"><li> | ||||
|         <a href="AbstractBeccaEntity.html#putEntityChange">AbstractBeccaEntity#putEntityChange</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line64">line 64</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1181,7 +1380,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line83">line 83</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line85">line 85</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1245,13 +1444,13 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
| <html lang="en"> | ||||
| <head> | ||||
|     <meta charset="utf-8"> | ||||
|     <title>JSDoc: Class: BNoteRevision</title> | ||||
|     <title>JSDoc: Class: BRevision</title> | ||||
| 
 | ||||
|     <script src="scripts/prettify/prettify.js"> </script> | ||||
|     <script src="scripts/prettify/lang-css.js"> </script> | ||||
| @@ -17,7 +17,7 @@ | ||||
| 
 | ||||
| <div id="main"> | ||||
| 
 | ||||
|     <h1 class="page-title">Class: BNoteRevision</h1> | ||||
|     <h1 class="page-title">Class: BRevision</h1> | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
| @@ -28,9 +28,9 @@ | ||||
| 
 | ||||
| <header> | ||||
|      | ||||
|         <h2><span class="attribs"><span class="type-signature"></span></span>BNoteRevision<span class="signature">()</span><span class="type-signature"></span></h2> | ||||
|         <h2><span class="attribs"><span class="type-signature"></span></span>BRevision<span class="signature">()</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. | ||||
|             <div class="class-description">Revision represents a snapshot of note's title and content at some point in the past. | ||||
| It's used for seamless note versioning.</div> | ||||
|          | ||||
|      | ||||
| @@ -46,7 +46,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <h4 class="name" id="BNoteRevision"><span class="type-signature"></span>new BNoteRevision<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|     <h4 class="name" id="BRevision"><span class="type-signature"></span>new BRevision<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| @@ -94,7 +94,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote_revision.js.html">becca/entities/bnote_revision.js</a>, <a href="becca_entities_bnote_revision.js.html#line17">line 17</a> | ||||
|         <a href="becca_entities_brevision.js.html">becca/entities/brevision.js</a>, <a href="becca_entities_brevision.js.html#line17">line 17</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -200,7 +200,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line53">line 53</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line55">line 55</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -218,7 +218,7 @@ It's used for seamless note versioning.</div> | ||||
| 
 | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="contentLength"><span class="type-signature"></span>contentLength<span class="type-signature"> :number</span></h4> | ||||
| <h4 class="name" id="blobId"><span class="type-signature"></span>blobId<span class="type-signature"> :string</span></h4> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| @@ -229,7 +229,7 @@ It's used for seamless note versioning.</div> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">number</span> | ||||
| <span class="param-type">string</span> | ||||
| 
 | ||||
| 
 | ||||
|         </li> | ||||
| @@ -268,7 +268,75 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote_revision.js.html">becca/entities/bnote_revision.js</a>, <a href="becca_entities_bnote_revision.js.html#line48">line 48</a> | ||||
|         <a href="becca_entities_brevision.js.html">becca/entities/brevision.js</a>, <a href="becca_entities_brevision.js.html#line39">line 39</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| </dl> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="contentLength"><span class="type-signature"></span>contentLength<span class="type-signature"> :int</span></h4> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">int</span> | ||||
| 
 | ||||
| 
 | ||||
|         </li> | ||||
|     </ul> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| <dl class="details"> | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_brevision.js.html">becca/entities/brevision.js</a>, <a href="becca_entities_brevision.js.html#line51">line 51</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -336,7 +404,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote_revision.js.html">becca/entities/bnote_revision.js</a>, <a href="becca_entities_bnote_revision.js.html#line40">line 40</a> | ||||
|         <a href="becca_entities_brevision.js.html">becca/entities/brevision.js</a>, <a href="becca_entities_brevision.js.html#line43">line 43</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -404,7 +472,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote_revision.js.html">becca/entities/bnote_revision.js</a>, <a href="becca_entities_bnote_revision.js.html#line38">line 38</a> | ||||
|         <a href="becca_entities_brevision.js.html">becca/entities/brevision.js</a>, <a href="becca_entities_brevision.js.html#line41">line 41</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -472,7 +540,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote_revision.js.html">becca/entities/bnote_revision.js</a>, <a href="becca_entities_bnote_revision.js.html#line34">line 34</a> | ||||
|         <a href="becca_entities_brevision.js.html">becca/entities/brevision.js</a>, <a href="becca_entities_brevision.js.html#line35">line 35</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -540,7 +608,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote_revision.js.html">becca/entities/bnote_revision.js</a>, <a href="becca_entities_bnote_revision.js.html#line32">line 32</a> | ||||
|         <a href="becca_entities_brevision.js.html">becca/entities/brevision.js</a>, <a href="becca_entities_brevision.js.html#line33">line 33</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -608,7 +676,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote_revision.js.html">becca/entities/bnote_revision.js</a>, <a href="becca_entities_bnote_revision.js.html#line28">line 28</a> | ||||
|         <a href="becca_entities_brevision.js.html">becca/entities/brevision.js</a>, <a href="becca_entities_brevision.js.html#line29">line 29</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -626,7 +694,7 @@ It's used for seamless note versioning.</div> | ||||
| 
 | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="noteRevisionId"><span class="type-signature"></span>noteRevisionId<span class="type-signature"> :string</span></h4> | ||||
| <h4 class="name" id="revisionId"><span class="type-signature"></span>revisionId<span class="type-signature"> :string</span></h4> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| @@ -676,7 +744,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote_revision.js.html">becca/entities/bnote_revision.js</a>, <a href="becca_entities_bnote_revision.js.html#line26">line 26</a> | ||||
|         <a href="becca_entities_brevision.js.html">becca/entities/brevision.js</a>, <a href="becca_entities_brevision.js.html#line27">line 27</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -744,7 +812,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote_revision.js.html">becca/entities/bnote_revision.js</a>, <a href="becca_entities_bnote_revision.js.html#line36">line 36</a> | ||||
|         <a href="becca_entities_brevision.js.html">becca/entities/brevision.js</a>, <a href="becca_entities_brevision.js.html#line37">line 37</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -812,7 +880,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote_revision.js.html">becca/entities/bnote_revision.js</a>, <a href="becca_entities_bnote_revision.js.html#line30">line 30</a> | ||||
|         <a href="becca_entities_brevision.js.html">becca/entities/brevision.js</a>, <a href="becca_entities_brevision.js.html#line31">line 31</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -880,7 +948,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote_revision.js.html">becca/entities/bnote_revision.js</a>, <a href="becca_entities_bnote_revision.js.html#line44">line 44</a> | ||||
|         <a href="becca_entities_brevision.js.html">becca/entities/brevision.js</a>, <a href="becca_entities_brevision.js.html#line47">line 47</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -948,7 +1016,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote_revision.js.html">becca/entities/bnote_revision.js</a>, <a href="becca_entities_bnote_revision.js.html#line42">line 42</a> | ||||
|         <a href="becca_entities_brevision.js.html">becca/entities/brevision.js</a>, <a href="becca_entities_brevision.js.html#line45">line 45</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -1016,7 +1084,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote_revision.js.html">becca/entities/bnote_revision.js</a>, <a href="becca_entities_bnote_revision.js.html#line46">line 46</a> | ||||
|         <a href="becca_entities_brevision.js.html">becca/entities/brevision.js</a>, <a href="becca_entities_brevision.js.html#line49">line 49</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -1044,7 +1112,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <h4 class="name" id="addEntityChange"><span class="type-signature">(protected) </span>addEntityChange<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|     <h4 class="name" id="_getContent"><span class="type-signature">(protected) </span>_getContent<span class="signature">()</span><span class="type-signature"> → {string|Buffer}</span></h4> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| @@ -1074,7 +1142,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-overrides">Overrides:</dt> | ||||
|     <dd class="tag-overrides"><ul class="dummy"><li> | ||||
|         <a href="AbstractBeccaEntity.html#addEntityChange">AbstractBeccaEntity#addEntityChange</a> | ||||
|         <a href="AbstractBeccaEntity.html#_getContent">AbstractBeccaEntity#_getContent</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -1097,7 +1165,117 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line62">line 62</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line246">line 246</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| </dl> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| <h5>Returns:</h5> | ||||
| 
 | ||||
|          | ||||
| 
 | ||||
| 
 | ||||
| <dl> | ||||
|     <dt> | ||||
|         Type | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type">string</span> | ||||
| | | ||||
| 
 | ||||
| <span class="param-type">Buffer</span> | ||||
| 
 | ||||
| 
 | ||||
|     </dd> | ||||
| </dl> | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|          | ||||
|              | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <h4 class="name" id="_setContent"><span class="type-signature">(protected) </span>_setContent<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| <dl class="details"> | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <dt class="tag-overrides">Overrides:</dt> | ||||
|     <dd class="tag-overrides"><ul class="dummy"><li> | ||||
|         <a href="AbstractBeccaEntity.html#_setContent">AbstractBeccaEntity#_setContent</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line124">line 124</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -1186,7 +1364,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line18">line 18</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line20">line 20</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -1275,7 +1453,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line30">line 30</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line32">line 32</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -1364,7 +1542,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line23">line 23</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line25">line 25</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -1400,7 +1578,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <h4 class="name" id="getContent"><span class="type-signature"></span>getContent<span class="signature">()</span><span class="type-signature"> → {*}</span></h4> | ||||
|     <h4 class="name" id="getAttachments"><span class="type-signature"></span>getAttachments<span class="signature">()</span><span class="type-signature"> → {Array.<<a href="BAttachment.html">BAttachment</a>>}</span></h4> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| @@ -1448,7 +1626,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote_revision.js.html">becca/entities/bnote_revision.js</a>, <a href="becca_entities_bnote_revision.js.html#line76">line 76</a> | ||||
|         <a href="becca_entities_brevision.js.html">becca/entities/brevision.js</a>, <a href="becca_entities_brevision.js.html#line99">line 99</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -1484,7 +1662,7 @@ It's used for seamless note versioning.</div> | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type">*</span> | ||||
| <span class="param-type">Array.<<a href="BAttachment.html">BAttachment</a>></span> | ||||
| 
 | ||||
| 
 | ||||
|     </dd> | ||||
| @@ -1502,7 +1680,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <h4 class="name" id="getContentMetadata"><span class="type-signature"></span>getContentMetadata<span class="signature">()</span><span class="type-signature"> → {Object}</span></h4> | ||||
|     <h4 class="name" id="getContent"><span class="type-signature"></span>getContent<span class="signature">()</span><span class="type-signature"> → {string|Buffer}</span></h4> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| @@ -1550,7 +1728,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote_revision.js.html">becca/entities/bnote_revision.js</a>, <a href="becca_entities_bnote_revision.js.html#line140">line 140</a> | ||||
|         <a href="becca_entities_brevision.js.html">becca/entities/brevision.js</a>, <a href="becca_entities_brevision.js.html#line85">line 85</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -1586,7 +1764,10 @@ It's used for seamless note versioning.</div> | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type">Object</span> | ||||
| <span class="param-type">string</span> | ||||
| | | ||||
| 
 | ||||
| <span class="param-type">Buffer</span> | ||||
| 
 | ||||
| 
 | ||||
|     </dd> | ||||
| @@ -1657,7 +1838,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line74">line 74</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line76">line 76</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -1746,7 +1927,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line45">line 45</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line47">line 47</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -1782,7 +1963,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <h4 class="name" id="isStringNote"><span class="type-signature"></span>isStringNote<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> | ||||
|     <h4 class="name" id="hasStringContent"><span class="type-signature"></span>hasStringContent<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h4> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| @@ -1830,7 +2011,7 @@ It's used for seamless note versioning.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote_revision.js.html">becca/entities/bnote_revision.js</a>, <a href="becca_entities_bnote_revision.js.html#line62">line 62</a> | ||||
|         <a href="becca_entities_brevision.js.html">becca/entities/brevision.js</a>, <a href="becca_entities_brevision.js.html#line65">line 65</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -1898,7 +2079,7 @@ It's used for seamless note versioning.</div> | ||||
| <div class="description"> | ||||
|     Mark the entity as (soft) deleted. It will be completely erased later. | ||||
| 
 | ||||
| This is a low level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead. | ||||
| This is a low-level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead. | ||||
| </div> | ||||
| 
 | ||||
| 
 | ||||
| @@ -2011,7 +2192,96 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line128">line 128</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line263">line 263</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| </dl> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|          | ||||
|              | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <h4 class="name" id="putEntityChange"><span class="type-signature">(protected) </span>putEntityChange<span class="signature">()</span><span class="type-signature"></span></h4> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| <dl class="details"> | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <dt class="tag-overrides">Overrides:</dt> | ||||
|     <dd class="tag-overrides"><ul class="dummy"><li> | ||||
|         <a href="AbstractBeccaEntity.html#putEntityChange">AbstractBeccaEntity#putEntityChange</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line64">line 64</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -2104,7 +2374,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line83">line 83</a> | ||||
|         <a href="becca_entities_abstract_becca_entity.js.html">becca/entities/abstract_becca_entity.js</a>, <a href="becca_entities_abstract_becca_entity.js.html#line85">line 85</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
| @@ -2152,6 +2422,246 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|          | ||||
|              | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <h4 class="name" id="setContent"><span class="type-signature"></span>setContent<span class="signature">(content, opts<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     <h5>Parameters:</h5> | ||||
|      | ||||
| 
 | ||||
| <table class="params"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|          | ||||
|         <th>Name</th> | ||||
|          | ||||
| 
 | ||||
|         <th>Type</th> | ||||
| 
 | ||||
|          | ||||
|         <th>Attributes</th> | ||||
|          | ||||
| 
 | ||||
|          | ||||
| 
 | ||||
|         <th class="last">Description</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
| 
 | ||||
|     <tbody> | ||||
|      | ||||
| 
 | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>content</code></td> | ||||
|              | ||||
| 
 | ||||
|             <td class="type"> | ||||
|              | ||||
|             </td> | ||||
| 
 | ||||
|              | ||||
|                 <td class="attributes"> | ||||
|                  | ||||
| 
 | ||||
|                  | ||||
| 
 | ||||
|                  | ||||
|                 </td> | ||||
|              | ||||
| 
 | ||||
|              | ||||
| 
 | ||||
|             <td class="description last"></td> | ||||
|         </tr> | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>opts</code></td> | ||||
|              | ||||
| 
 | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">object</span> | ||||
| 
 | ||||
| 
 | ||||
|              | ||||
|             </td> | ||||
| 
 | ||||
|              | ||||
|                 <td class="attributes"> | ||||
|                  | ||||
|                     <optional><br> | ||||
|                  | ||||
| 
 | ||||
|                  | ||||
| 
 | ||||
|                  | ||||
|                 </td> | ||||
|              | ||||
| 
 | ||||
|              | ||||
| 
 | ||||
|             <td class="description last"> | ||||
|                 <h6>Properties</h6> | ||||
|                  | ||||
| 
 | ||||
| <table class="params"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|          | ||||
|         <th>Name</th> | ||||
|          | ||||
| 
 | ||||
|         <th>Type</th> | ||||
| 
 | ||||
|          | ||||
|         <th>Attributes</th> | ||||
|          | ||||
| 
 | ||||
|          | ||||
|         <th>Default</th> | ||||
|          | ||||
| 
 | ||||
|         <th class="last">Description</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
| 
 | ||||
|     <tbody> | ||||
|      | ||||
| 
 | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>forceSave</code></td> | ||||
|              | ||||
| 
 | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">object</span> | ||||
| 
 | ||||
| 
 | ||||
|              | ||||
|             </td> | ||||
| 
 | ||||
|              | ||||
|                 <td class="attributes"> | ||||
|                  | ||||
|                     <optional><br> | ||||
|                  | ||||
| 
 | ||||
|                  | ||||
| 
 | ||||
|                  | ||||
|                 </td> | ||||
|              | ||||
| 
 | ||||
|              | ||||
|                 <td class="default"> | ||||
|                  | ||||
|                     false | ||||
|                  | ||||
|                 </td> | ||||
|              | ||||
| 
 | ||||
|             <td class="description last">will also save this BRevision entity</td> | ||||
|         </tr> | ||||
| 
 | ||||
|      | ||||
|     </tbody> | ||||
| </table> | ||||
| 
 | ||||
|             </td> | ||||
|         </tr> | ||||
| 
 | ||||
|      | ||||
|     </tbody> | ||||
| </table> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| <dl class="details"> | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_brevision.js.html">becca/entities/brevision.js</a>, <a href="becca_entities_brevision.js.html#line94">line 94</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|      | ||||
| </dl> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|          | ||||
|      | ||||
| 
 | ||||
| @@ -2168,13 +2678,13 @@ This is a low level method, for notes and branches use `note.deleteNote()` and ' | ||||
| </div> | ||||
| 
 | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
| 
 | ||||
| <br class="clear"> | ||||
| 
 | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
| 
 | ||||
| <script> prettyPrint(); </script> | ||||
| @@ -240,7 +240,7 @@ available in the JS backend notes. You can use e.g. <code>api.log(api.startNote. | ||||
|      | ||||
|     <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#line537">line 537</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line579">line 579</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -423,7 +423,7 @@ available in the JS backend notes. You can use e.g. <code>api.log(api.startNote. | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">where script is currently executing. Don't mix this up with concept of active note</td> | ||||
|             <td class="description last">where the script is currently executing. Don't mix this up with the concept of active note</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
| @@ -643,7 +643,7 @@ available in the JS backend notes. You can use e.g. <code>api.log(api.startNote. | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">whose event triggered this executions</td> | ||||
|             <td class="description last">whose event triggered this execution</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
| @@ -863,7 +863,7 @@ available in the JS backend notes. You can use e.g. <code>api.log(api.startNote. | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">where script started executing</td> | ||||
|             <td class="description last">where the script started executing</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
| @@ -3254,7 +3254,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="ensureNoteIsPresentInParent"><span class="type-signature"></span>ensureNoteIsPresentInParent<span class="signature">(noteId, parentNoteId, prefix)</span><span class="type-signature"> → {void}</span></h4> | ||||
|     <h4 class="name" id="ensureNoteIsPresentInParent"><span class="type-signature"></span>ensureNoteIsPresentInParent<span class="signature">(noteId, parentNoteId, prefix)</span><span class="type-signature"> → {Object}</span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
| @@ -3262,7 +3262,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|  | ||||
|  | ||||
| <div class="description"> | ||||
|     If there's no branch between note and parent note, create one. Otherwise, do nothing. | ||||
|     If there's no branch between note and parent note, create one. Otherwise, do nothing. Returns the new or existing branch. | ||||
| </div> | ||||
|  | ||||
|  | ||||
| @@ -3360,7 +3360,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">if branch will be created between note and parent note, set this prefix</td> | ||||
|             <td class="description last">if branch is created between note and parent note, set this prefix</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
| @@ -3437,7 +3437,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type">void</span> | ||||
| <span class="param-type">Object</span> | ||||
|  | ||||
|  | ||||
|     </dd> | ||||
| @@ -6272,7 +6272,7 @@ if some action needs to happen on only one specific instance. | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">number</span> | ||||
| <span class="param-type">int</span> | ||||
|  | ||||
|  | ||||
|              | ||||
| @@ -6381,6 +6381,191 @@ if some action needs to happen on only one specific instance. | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="runOnFrontend"><span class="type-signature"></span>runOnFrontend<span class="signature">(script, params)</span><span class="type-signature"> → {undefined}</span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
| <div class="description"> | ||||
|     Executes given anonymous function on the frontend(s). | ||||
| Internally this serializes the anonymous function into string and sends it to frontend(s) via WebSocket. | ||||
| Note that there can be multiple connected frontend instances (e.g. in different tabs). In such case, all | ||||
| instances execute the given function. | ||||
| </div> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Parameters:</h5> | ||||
|      | ||||
|  | ||||
| <table class="params"> | ||||
|     <thead> | ||||
|     <tr> | ||||
|          | ||||
|         <th>Name</th> | ||||
|          | ||||
|  | ||||
|         <th>Type</th> | ||||
|  | ||||
|          | ||||
|  | ||||
|          | ||||
|  | ||||
|         <th class="last">Description</th> | ||||
|     </tr> | ||||
|     </thead> | ||||
|  | ||||
|     <tbody> | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>script</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">script to be executed on the frontend</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|  | ||||
|         <tr> | ||||
|              | ||||
|                 <td class="name"><code>params</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">Array.<?></span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">list of parameters to the anonymous function to be sent to frontend</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
|     </tbody> | ||||
| </table> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line543">line 543</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <h5>Returns:</h5> | ||||
|  | ||||
|          | ||||
| <div class="param-desc"> | ||||
|     - no return value is provided. | ||||
| </div> | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl> | ||||
|     <dt> | ||||
|         Type | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type">undefined</span> | ||||
|  | ||||
|  | ||||
|     </dd> | ||||
| </dl> | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="searchForNote"><span class="type-signature"></span>searchForNote<span class="signature">(query, searchParams<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {<a href="BNote.html">BNote</a>|null}</span></h4> | ||||
|      | ||||
|  | ||||
| @@ -7463,7 +7648,7 @@ This method looks similar to toggleNoteInParent() but differs because we're look | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">if branch will be created between note and parent note, set this prefix</td> | ||||
|             <td class="description last">if branch is created between note and parent note, set this prefix</td> | ||||
|         </tr> | ||||
|  | ||||
|      | ||||
| @@ -7883,13 +8068,13 @@ exists, then we'll use that transaction. | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -35,6 +35,8 @@ const eventService = require("../../services/events"); | ||||
| const dateUtils = require("../../services/date_utils"); | ||||
| const cls = require("../../services/cls"); | ||||
| const log = require("../../services/log"); | ||||
| const protectedSessionService = require("../../services/protected_session"); | ||||
| const blobService = require("../../services/blob"); | ||||
|  | ||||
| let becca = null; | ||||
|  | ||||
| @@ -87,8 +89,8 @@ class AbstractBeccaEntity { | ||||
|     } | ||||
|  | ||||
|     /** @protected */ | ||||
|     addEntityChange(isDeleted = false) { | ||||
|         entityChangesService.addEntityChange({ | ||||
|     putEntityChange(isDeleted = false) { | ||||
|         entityChangesService.putEntityChange({ | ||||
|             entityName: this.constructor.entityName, | ||||
|             entityId: this[this.constructor.primaryKeyName], | ||||
|             hash: this.generateHash(isDeleted), | ||||
| @@ -127,7 +129,7 @@ class AbstractBeccaEntity { | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
|             this.addEntityChange(false); | ||||
|             this.putEntityChange(false); | ||||
|  | ||||
|             if (!cls.isEntityEventsDisabled()) { | ||||
|                 const eventPayload = { | ||||
| @@ -146,10 +148,143 @@ class AbstractBeccaEntity { | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     /** @protected */ | ||||
|     _setContent(content, opts = {}) { | ||||
|         // client code asks to save entity even if blobId didn't change (something else was changed) | ||||
|         opts.forceSave = !!opts.forceSave; | ||||
|         opts.forceFrontendReload = !!opts.forceFrontendReload; | ||||
|  | ||||
|         if (content === null || content === undefined) { | ||||
|             throw new Error(`Cannot set null content to ${this.constructor.primaryKeyName} '${this[this.constructor.primaryKeyName]}'`); | ||||
|         } | ||||
|  | ||||
|         if (this.hasStringContent()) { | ||||
|             content = content.toString(); | ||||
|         } else { | ||||
|             content = Buffer.isBuffer(content) ? content : Buffer.from(content); | ||||
|         } | ||||
|  | ||||
|         const unencryptedContentForHashCalculation = this.#getUnencryptedContentForHashCalculation(content); | ||||
|  | ||||
|         if (this.isProtected) { | ||||
|             if (protectedSessionService.isProtectedSessionAvailable()) { | ||||
|                 content = protectedSessionService.encrypt(content); | ||||
|             } else { | ||||
|                 throw new Error(`Cannot update content of blob since protected session is not available.`); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         sql.transactional(() => { | ||||
|             const newBlobId = this.#saveBlob(content, unencryptedContentForHashCalculation, opts); | ||||
|             const oldBlobId = this.blobId; | ||||
|  | ||||
|             if (newBlobId !== oldBlobId || opts.forceSave) { | ||||
|                 this.blobId = newBlobId; | ||||
|                 this.save(); | ||||
|  | ||||
|                 if (newBlobId !== oldBlobId) { | ||||
|                     this.#deleteBlobIfNotUsed(oldBlobId); | ||||
|                 } | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     #deleteBlobIfNotUsed(oldBlobId) { | ||||
|         if (sql.getValue("SELECT 1 FROM notes WHERE blobId = ? LIMIT 1", [oldBlobId])) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         if (sql.getValue("SELECT 1 FROM attachments WHERE blobId = ? LIMIT 1", [oldBlobId])) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         if (sql.getValue("SELECT 1 FROM revisions WHERE blobId = ? LIMIT 1", [oldBlobId])) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         sql.execute("DELETE FROM blobs WHERE blobId = ?", [oldBlobId]); | ||||
|         // blobs are not marked as erased in entity_changes, they are just purged completely | ||||
|         // this is because technically every keystroke can create a new blob and there would be just too many | ||||
|         sql.execute("DELETE FROM entity_changes WHERE entityName = 'blobs' AND entityId = ?", [oldBlobId]); | ||||
|     } | ||||
|  | ||||
|     #getUnencryptedContentForHashCalculation(unencryptedContent) { | ||||
|         if (this.isProtected) { | ||||
|             // a "random" prefix makes sure that the calculated hash/blobId is different for a decrypted/encrypted content | ||||
|             const encryptedPrefixSuffix = "t$[nvQg7q)&_ENCRYPTED_?M:Bf&j3jr_"; | ||||
|             return Buffer.isBuffer(unencryptedContent) | ||||
|                 ? Buffer.concat([Buffer.from(encryptedPrefixSuffix), unencryptedContent]) | ||||
|                 : `${encryptedPrefixSuffix}${unencryptedContent}`; | ||||
|         } else { | ||||
|             return unencryptedContent; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     #saveBlob(content, unencryptedContentForHashCalculation, opts = {}) { | ||||
|         /* | ||||
|          * We're using the unencrypted blob for the hash calculation, because otherwise the random IV would | ||||
|          * cause every content blob to be unique which would balloon the database size (esp. with revisioning). | ||||
|          * This has minor security implications (it's easy to infer that given content is shared between different | ||||
|          * notes/attachments), but the trade-off comes out clearly positive. | ||||
|          */ | ||||
|         const newBlobId = utils.hashedBlobId(unencryptedContentForHashCalculation); | ||||
|         const blobNeedsInsert = !sql.getValue('SELECT 1 FROM blobs WHERE blobId = ?', [newBlobId]); | ||||
|  | ||||
|         if (!blobNeedsInsert) { | ||||
|             return newBlobId; | ||||
|         } | ||||
|  | ||||
|         const pojo = { | ||||
|             blobId: newBlobId, | ||||
|             content: content, | ||||
|             dateModified: dateUtils.localNowDateTime(), | ||||
|             utcDateModified: dateUtils.utcNowDateTime() | ||||
|         }; | ||||
|  | ||||
|         sql.upsert("blobs", "blobId", pojo); | ||||
|  | ||||
|         // we can't reuse blobId as an entity_changes hash, because this one has to be calculatable without having | ||||
|         // access to the decrypted content | ||||
|         const hash = blobService.calculateContentHash(pojo); | ||||
|  | ||||
|         entityChangesService.putEntityChange({ | ||||
|             entityName: 'blobs', | ||||
|             entityId: newBlobId, | ||||
|             hash: hash, | ||||
|             isErased: false, | ||||
|             utcDateChanged: pojo.utcDateModified, | ||||
|             isSynced: true, | ||||
|             // overriding componentId will cause frontend to think the change is coming from a different component | ||||
|             // and thus reload | ||||
|             componentId: opts.forceFrontendReload ? utils.randomString(10) : null | ||||
|         }); | ||||
|  | ||||
|         eventService.emit(eventService.ENTITY_CHANGED, { | ||||
|             entityName: 'blobs', | ||||
|             entity: this | ||||
|         }); | ||||
|  | ||||
|         return newBlobId; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @protected | ||||
|      * @returns {string|Buffer} | ||||
|      */ | ||||
|     _getContent() { | ||||
|         const row = sql.getRow(`SELECT content FROM blobs WHERE blobId = ?`, [this.blobId]); | ||||
|  | ||||
|         if (!row) { | ||||
|             throw new Error(`Cannot find content for ${this.constructor.primaryKeyName} '${this[this.constructor.primaryKeyName]}', blobId '${this.blobId}'`); | ||||
|         } | ||||
|  | ||||
|         return blobService.processContent(row.content, this.isProtected, this.hasStringContent()); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Mark the entity as (soft) deleted. It will be completely erased later. | ||||
|      * | ||||
|      * This is a low level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead. | ||||
|      * This is a low-level method, for notes and branches use `note.deleteNote()` and 'branch.deleteBranch()` instead. | ||||
|      * | ||||
|      * @param [deleteId=null] | ||||
|      */ | ||||
| @@ -172,7 +307,7 @@ class AbstractBeccaEntity { | ||||
|  | ||||
|         log.info(`Marking ${entityName} ${entityId} as deleted`); | ||||
|  | ||||
|         this.addEntityChange(true); | ||||
|         this.putEntityChange(true); | ||||
|  | ||||
|         eventService.emit(eventService.ENTITY_DELETED, { entityName, entityId, entity: this }); | ||||
|     } | ||||
| @@ -189,7 +324,7 @@ class AbstractBeccaEntity { | ||||
|  | ||||
|         log.info(`Marking ${entityName} ${entityId} as deleted`); | ||||
|  | ||||
|         this.addEntityChange(true); | ||||
|         this.putEntityChange(true); | ||||
|  | ||||
|         eventService.emit(eventService.ENTITY_DELETED, { entityName, entityId, entity: this }); | ||||
|     } | ||||
| @@ -206,13 +341,13 @@ module.exports = AbstractBeccaEntity; | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
							
								
								
									
										284
									
								
								docs/backend_api/becca_entities_battachment.js.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										284
									
								
								docs/backend_api/becca_entities_battachment.js.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,284 @@ | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
| <head> | ||||
|     <meta charset="utf-8"> | ||||
|     <title>JSDoc: Source: becca/entities/battachment.js</title> | ||||
|  | ||||
|     <script src="scripts/prettify/prettify.js"> </script> | ||||
|     <script src="scripts/prettify/lang-css.js"> </script> | ||||
|     <!--[if lt IE 9]> | ||||
|       <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> | ||||
|     <![endif]--> | ||||
|     <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> | ||||
|     <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> | ||||
| </head> | ||||
|  | ||||
| <body> | ||||
|  | ||||
| <div id="main"> | ||||
|  | ||||
|     <h1 class="page-title">Source: becca/entities/battachment.js</h1> | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|      | ||||
|     <section> | ||||
|         <article> | ||||
|             <pre class="prettyprint source linenums"><code>"use strict"; | ||||
|  | ||||
| const utils = require('../../services/utils'); | ||||
| const dateUtils = require('../../services/date_utils'); | ||||
| const AbstractBeccaEntity = require("./abstract_becca_entity"); | ||||
| const sql = require("../../services/sql"); | ||||
| const protectedSessionService = require("../../services/protected_session"); | ||||
| const log = require("../../services/log"); | ||||
|  | ||||
| const attachmentRoleToNoteTypeMapping = { | ||||
|     'image': 'image' | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Attachment represent data related/attached to the note. Conceptually similar to attributes, but intended for | ||||
|  * larger amounts of data and generally not accessible to the user. | ||||
|  * | ||||
|  * @extends AbstractBeccaEntity | ||||
|  */ | ||||
| class BAttachment extends AbstractBeccaEntity { | ||||
|     static get entityName() { return "attachments"; } | ||||
|     static get primaryKeyName() { return "attachmentId"; } | ||||
|     static get hashedProperties() { return ["attachmentId", "ownerId", "role", "mime", "title", "blobId", | ||||
|                                             "utcDateScheduledForErasureSince", "utcDateModified"]; } | ||||
|  | ||||
|     constructor(row) { | ||||
|         super(); | ||||
|  | ||||
|         if (!row.ownerId?.trim()) { | ||||
|             throw new Error("'ownerId' must be given to initialize a Attachment entity"); | ||||
|         } else if (!row.role?.trim()) { | ||||
|             throw new Error("'role' must be given to initialize a Attachment entity"); | ||||
|         } else if (!row.mime?.trim()) { | ||||
|             throw new Error("'mime' must be given to initialize a Attachment entity"); | ||||
|         } else if (!row.title?.trim()) { | ||||
|             throw new Error("'title' must be given to initialize a Attachment entity"); | ||||
|         } | ||||
|  | ||||
|         /** @type {string} */ | ||||
|         this.attachmentId = row.attachmentId; | ||||
|         /** @type {string} either noteId or revisionId to which this attachment belongs */ | ||||
|         this.ownerId = row.ownerId; | ||||
|         /** @type {string} */ | ||||
|         this.role = row.role; | ||||
|         /** @type {string} */ | ||||
|         this.mime = row.mime; | ||||
|         /** @type {string} */ | ||||
|         this.title = row.title; | ||||
|         /** @type {int} */ | ||||
|         this.position = row.position; | ||||
|         /** @type {string} */ | ||||
|         this.blobId = row.blobId; | ||||
|         /** @type {boolean} */ | ||||
|         this.isProtected = !!row.isProtected; | ||||
|         /** @type {string} */ | ||||
|         this.dateModified = row.dateModified; | ||||
|         /** @type {string} */ | ||||
|         this.utcDateModified = row.utcDateModified; | ||||
|         /** @type {string} */ | ||||
|         this.utcDateScheduledForErasureSince = row.utcDateScheduledForErasureSince; | ||||
|  | ||||
|         /** @type {int} optionally added to the entity */ | ||||
|         this.contentLength = row.contentLength; | ||||
|  | ||||
|         this.decrypt(); | ||||
|     } | ||||
|  | ||||
|     /** @returns {BAttachment} */ | ||||
|     copy() { | ||||
|         return new BAttachment({ | ||||
|             ownerId: this.ownerId, | ||||
|             role: this.role, | ||||
|             mime: this.mime, | ||||
|             title: this.title, | ||||
|             blobId: this.blobId, | ||||
|             isProtected: this.isProtected | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     /** @returns {BNote} */ | ||||
|     getNote() { | ||||
|         return this.becca.notes[this.ownerId]; | ||||
|     } | ||||
|  | ||||
|     /** @returns {boolean} true if the note has string content (not binary) */ | ||||
|     hasStringContent() { | ||||
|         return utils.isStringNote(this.type, this.mime); | ||||
|     } | ||||
|  | ||||
|     isContentAvailable() { | ||||
|         return !this.attachmentId // new attachment which was not encrypted yet | ||||
|             || !this.isProtected | ||||
|             || protectedSessionService.isProtectedSessionAvailable() | ||||
|     } | ||||
|  | ||||
|     getTitleOrProtected() { | ||||
|         return this.isContentAvailable() ? this.title : '[protected]'; | ||||
|     } | ||||
|  | ||||
|     decrypt() { | ||||
|         if (this.isProtected && !this.isDecrypted && protectedSessionService.isProtectedSessionAvailable()) { | ||||
|             try { | ||||
|                 this.title = protectedSessionService.decryptString(this.title); | ||||
|                 this.isDecrypted = true; | ||||
|             } | ||||
|             catch (e) { | ||||
|                 log.error(`Could not decrypt attachment ${this.attachmentId}: ${e.message} ${e.stack}`); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** @returns {string|Buffer}  */ | ||||
|     getContent() { | ||||
|         return this._getContent(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @param content | ||||
|      * @param {object} [opts] | ||||
|      * @param {object} [opts.forceSave=false] - will also save this BAttachment entity | ||||
|      * @param {object} [opts.forceFrontendReload=false] - override frontend heuristics on when to reload, instruct to reload | ||||
|      */ | ||||
|     setContent(content, opts) { | ||||
|         this._setContent(content, opts); | ||||
|     } | ||||
|  | ||||
|     /** @returns {{note: BNote, branch: BBranch}} */ | ||||
|     convertToNote() { | ||||
|         if (this.type === 'search') { | ||||
|             throw new Error(`Note of type search cannot have child notes`); | ||||
|         } | ||||
|  | ||||
|         if (!this.getNote()) { | ||||
|             throw new Error("Cannot find note of this attachment. It is possible that this is note revision's attachment. " + | ||||
|                 "Converting note revision's attachments to note is not (yet) supported."); | ||||
|         } | ||||
|  | ||||
|         if (!(this.role in attachmentRoleToNoteTypeMapping)) { | ||||
|             throw new Error(`Mapping from attachment role '${this.role}' to note's type is not defined`); | ||||
|         } | ||||
|  | ||||
|         if (!this.isContentAvailable()) { // isProtected is the same for attachment | ||||
|             throw new Error(`Cannot convert protected attachment outside of protected session`); | ||||
|         } | ||||
|  | ||||
|         const noteService = require('../../services/notes'); | ||||
|  | ||||
|         const { note, branch } = noteService.createNewNote({ | ||||
|             parentNoteId: this.ownerId, | ||||
|             title: this.title, | ||||
|             type: attachmentRoleToNoteTypeMapping[this.role], | ||||
|             mime: this.mime, | ||||
|             content: this.getContent(), | ||||
|             isProtected: this.isProtected | ||||
|         }); | ||||
|  | ||||
|         this.markAsDeleted(); | ||||
|  | ||||
|         const parentNote = this.getNote(); | ||||
|  | ||||
|         if (this.role === 'image' && parentNote.type === 'text') { | ||||
|             const origContent = parentNote.getContent(); | ||||
|             const oldAttachmentUrl = `api/attachments/${this.attachmentId}/image/`; | ||||
|             const newNoteUrl = `api/images/${note.noteId}/`; | ||||
|  | ||||
|             const fixedContent = utils.replaceAll(origContent, oldAttachmentUrl, newNoteUrl); | ||||
|  | ||||
|             if (fixedContent !== origContent) { | ||||
|                 parentNote.setContent(fixedContent); | ||||
|             } | ||||
|  | ||||
|             noteService.asyncPostProcessContent(note, fixedContent); | ||||
|         } | ||||
|  | ||||
|         return { note, branch }; | ||||
|     } | ||||
|  | ||||
|     getFileName() { | ||||
|         const type = this.role === 'image' ? 'image' : 'file'; | ||||
|  | ||||
|         return utils.formatDownloadTitle(this.title, type, this.mime); | ||||
|     } | ||||
|  | ||||
|     beforeSaving() { | ||||
|         super.beforeSaving(); | ||||
|  | ||||
|         if (this.position === undefined || this.position === null) { | ||||
|             this.position = 10 + sql.getValue(`SELECT COALESCE(MAX(position), 0) | ||||
|                                               FROM attachments | ||||
|                                               WHERE ownerId = ?`, [this.noteId]); | ||||
|         } | ||||
|  | ||||
|         this.dateModified = dateUtils.localNowDateTime(); | ||||
|         this.utcDateModified = dateUtils.utcNowDateTime(); | ||||
|     } | ||||
|  | ||||
|     getPojo() { | ||||
|         return { | ||||
|             attachmentId: this.attachmentId, | ||||
|             ownerId: this.ownerId, | ||||
|             role: this.role, | ||||
|             mime: this.mime, | ||||
|             title: this.title, | ||||
|             position: this.position, | ||||
|             blobId: this.blobId, | ||||
|             isProtected: !!this.isProtected, | ||||
|             isDeleted: false, | ||||
|             dateModified: this.dateModified, | ||||
|             utcDateModified: this.utcDateModified, | ||||
|             utcDateScheduledForErasureSince: this.utcDateScheduledForErasureSince, | ||||
|             contentLength: this.contentLength | ||||
|         }; | ||||
|     } | ||||
|  | ||||
|     getPojoToSave() { | ||||
|         const pojo = this.getPojo(); | ||||
|         delete pojo.contentLength; | ||||
|  | ||||
|         if (pojo.isProtected) { | ||||
|             if (this.isDecrypted) { | ||||
|                 pojo.title = protectedSessionService.encrypt(pojo.title); | ||||
|             } | ||||
|             else { | ||||
|                 // updating protected note outside of protected session means we will keep original ciphertexts | ||||
|                 delete pojo.title; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return pojo; | ||||
|     } | ||||
| } | ||||
|  | ||||
| module.exports = BAttachment; | ||||
| </code></pre> | ||||
|         </article> | ||||
|     </section> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
| <script src="scripts/linenumber.js"> </script> | ||||
| </body> | ||||
| </html> | ||||
| @@ -124,7 +124,7 @@ class BAttribute extends AbstractBeccaEntity { | ||||
|         } | ||||
|  | ||||
|         if (this.type === 'relation' && !(this.value in this.becca.notes)) { | ||||
|             throw new Error(`Cannot save relation '${this.name}' of note '${this.noteId}' since it target not existing note '${this.value}'.`); | ||||
|             throw new Error(`Cannot save relation '${this.name}' of note '${this.noteId}' since it targets not existing note '${this.value}'.`); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -169,7 +169,7 @@ class BAttribute extends AbstractBeccaEntity { | ||||
|      */ | ||||
|     getTargetNote() { | ||||
|         if (this.type !== 'relation') { | ||||
|             throw new Error(`Attribute ${this.attributeId} is not relation`); | ||||
|             throw new Error(`Attribute '${this.attributeId}' is not a relation.`); | ||||
|         } | ||||
|  | ||||
|         if (!this.value) { | ||||
| @@ -216,9 +216,11 @@ class BAttribute extends AbstractBeccaEntity { | ||||
|             this.value = ""; | ||||
|         } | ||||
|  | ||||
|         if (this.position === undefined) { | ||||
|             // TODO: can be calculated from becca | ||||
|             this.position = 1 + sql.getValue(`SELECT COALESCE(MAX(position), 0) FROM attributes WHERE noteId = ?`, [this.noteId]); | ||||
|         if (this.position === undefined || this.position === null) { | ||||
|             const maxExistingPosition = this.getNote().getAttributes() | ||||
|                 .reduce((maxPosition, attr) => Math.max(maxPosition, attr.position || 0), 0); | ||||
|  | ||||
|             this.position = maxExistingPosition + 10; | ||||
|         } | ||||
|  | ||||
|         if (!this.isInheritable) { | ||||
| @@ -270,13 +272,13 @@ module.exports = BAttribute; | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
							
								
								
									
										81
									
								
								docs/backend_api/becca_entities_bblob.js.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								docs/backend_api/becca_entities_bblob.js.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,81 @@ | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
| <head> | ||||
|     <meta charset="utf-8"> | ||||
|     <title>JSDoc: Source: becca/entities/bblob.js</title> | ||||
|  | ||||
|     <script src="scripts/prettify/prettify.js"> </script> | ||||
|     <script src="scripts/prettify/lang-css.js"> </script> | ||||
|     <!--[if lt IE 9]> | ||||
|       <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> | ||||
|     <![endif]--> | ||||
|     <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> | ||||
|     <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> | ||||
| </head> | ||||
|  | ||||
| <body> | ||||
|  | ||||
| <div id="main"> | ||||
|  | ||||
|     <h1 class="page-title">Source: becca/entities/bblob.js</h1> | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|      | ||||
|     <section> | ||||
|         <article> | ||||
|             <pre class="prettyprint source linenums"><code>class BBlob { | ||||
|     static get entityName() { return "blobs"; } | ||||
|     static get primaryKeyName() { return "blobId"; } | ||||
|     static get hashedProperties() { return ["blobId", "content"]; } | ||||
|  | ||||
|     constructor(row) { | ||||
|         /** @type {string} */ | ||||
|         this.blobId = row.blobId; | ||||
|         /** @type {string|Buffer} */ | ||||
|         this.content = row.content; | ||||
|         /** @type {int} */ | ||||
|         this.contentLength = row.contentLength; | ||||
|         /** @type {string} */ | ||||
|         this.dateModified = row.dateModified; | ||||
|         /** @type {string} */ | ||||
|         this.utcDateModified = row.utcDateModified; | ||||
|     } | ||||
|  | ||||
|     getPojo() { | ||||
|         return { | ||||
|             blobId: this.blobId, | ||||
|             content: this.content, | ||||
|             contentLength: this.contentLength, | ||||
|             dateModified: this.dateModified, | ||||
|             utcDateModified: this.utcDateModified | ||||
|         }; | ||||
|     } | ||||
| } | ||||
|  | ||||
| module.exports = BBlob; | ||||
| </code></pre> | ||||
|         </article> | ||||
|     </section> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
| <script src="scripts/linenumber.js"> </script> | ||||
| </body> | ||||
| </html> | ||||
| @@ -131,6 +131,7 @@ class BBranch extends AbstractBeccaEntity { | ||||
|         return this.becca.notes[this.noteId]; | ||||
|     } | ||||
|  | ||||
|     /** @returns {BNote} */ | ||||
|     getNote() { | ||||
|         return this.childNote; | ||||
|     } | ||||
| @@ -214,11 +215,11 @@ class BBranch extends AbstractBeccaEntity { | ||||
|  | ||||
|             // first delete children and then parent - this will show up better in recent changes | ||||
|  | ||||
|             log.info(`Deleting note ${note.noteId}`); | ||||
|             log.info(`Deleting note '${note.noteId}'`); | ||||
|  | ||||
|             this.becca.notes[note.noteId].isBeingDeleted = true; | ||||
|  | ||||
|             for (const attribute of note.getOwnedAttributes()) { | ||||
|             for (const attribute of note.getOwnedAttributes().slice()) { | ||||
|                 attribute.markAsDeleted(deleteId); | ||||
|             } | ||||
|  | ||||
| @@ -226,6 +227,10 @@ class BBranch extends AbstractBeccaEntity { | ||||
|                 relation.markAsDeleted(deleteId); | ||||
|             } | ||||
|  | ||||
|             for (const attachment of note.getAttachments()) { | ||||
|                 attachment.markAsDeleted(deleteId); | ||||
|             } | ||||
|  | ||||
|             note.markAsDeleted(deleteId); | ||||
|  | ||||
|             return true; | ||||
| @@ -247,7 +252,7 @@ class BBranch extends AbstractBeccaEntity { | ||||
|  | ||||
|             for (const childBranch of this.parentNote.getChildBranches()) { | ||||
|                 if (maxNotePos < childBranch.notePosition | ||||
|                     && childBranch.noteId !== '_hidden' // hidden has very large notePosition to always stay last | ||||
|                     && childBranch.noteId !== '_hidden' // hidden has a very large notePosition to always stay last | ||||
|                 ) { | ||||
|                     maxNotePos = childBranch.notePosition; | ||||
|                 } | ||||
| @@ -313,13 +318,13 @@ module.exports = BBranch; | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -114,13 +114,13 @@ module.exports = BEtapiToken; | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -33,9 +33,9 @@ const log = require('../../services/log'); | ||||
| const sql = require('../../services/sql'); | ||||
| const utils = require('../../services/utils'); | ||||
| const dateUtils = require('../../services/date_utils'); | ||||
| const entityChangesService = require('../../services/entity_changes'); | ||||
| const AbstractBeccaEntity = require("./abstract_becca_entity"); | ||||
| const BNoteRevision = require("./bnote_revision"); | ||||
| const BRevision = require("./brevision"); | ||||
| const BAttachment = require("./battachment"); | ||||
| const TaskContext = require("../../services/task_context"); | ||||
| const dayjs = require("dayjs"); | ||||
| const utc = require('dayjs/plugin/utc'); | ||||
| @@ -46,14 +46,14 @@ const LABEL = 'label'; | ||||
| const RELATION = 'relation'; | ||||
|  | ||||
| /** | ||||
|  * Trilium's main entity which can represent text note, image, code note, file attachment etc. | ||||
|  * Trilium's main entity, which can represent text note, image, code note, file attachment etc. | ||||
|  * | ||||
|  * @extends AbstractBeccaEntity | ||||
|  */ | ||||
| class BNote extends AbstractBeccaEntity { | ||||
|     static get entityName() { return "notes"; } | ||||
|     static get primaryKeyName() { return "noteId"; } | ||||
|     static get hashedProperties() { return ["noteId", "title", "isProtected", "type", "mime"]; } | ||||
|     static get hashedProperties() { return ["noteId", "title", "isProtected", "type", "mime", "blobId"]; } | ||||
|  | ||||
|     constructor(row) { | ||||
|         super(); | ||||
| @@ -73,6 +73,7 @@ class BNote extends AbstractBeccaEntity { | ||||
|             row.type, | ||||
|             row.mime, | ||||
|             row.isProtected, | ||||
|             row.blobId, | ||||
|             row.dateCreated, | ||||
|             row.dateModified, | ||||
|             row.utcDateCreated, | ||||
| @@ -80,19 +81,21 @@ class BNote extends AbstractBeccaEntity { | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     update([noteId, title, type, mime, isProtected, dateCreated, dateModified, utcDateCreated, utcDateModified]) { | ||||
|     update([noteId, title, type, mime, isProtected, blobId, dateCreated, dateModified, utcDateCreated, utcDateModified]) { | ||||
|         // ------ Database persisted attributes ------ | ||||
|  | ||||
|         /** @type {string} */ | ||||
|         this.noteId = noteId; | ||||
|         /** @type {string} */ | ||||
|         this.title = title; | ||||
|         /** @type {boolean} */ | ||||
|         this.isProtected = !!isProtected; | ||||
|         /** @type {string} */ | ||||
|         this.type = type; | ||||
|         /** @type {string} */ | ||||
|         this.mime = mime; | ||||
|         /** @type {boolean} */ | ||||
|         this.isProtected = !!isProtected; | ||||
|         /** @type {string} */ | ||||
|         this.blobId = blobId; | ||||
|         /** @type {string} */ | ||||
|         this.dateCreated = dateCreated || dateUtils.localNowDateTime(); | ||||
|         /** @type {string} */ | ||||
| @@ -112,7 +115,7 @@ class BNote extends AbstractBeccaEntity { | ||||
|         this.decrypt(); | ||||
|  | ||||
|         /** @type {string|null} */ | ||||
|         this.flatTextCache = null; | ||||
|         this.__flatTextCache = null; | ||||
|  | ||||
|         return this; | ||||
|     } | ||||
| @@ -125,7 +128,7 @@ class BNote extends AbstractBeccaEntity { | ||||
|          * @private */ | ||||
|         this.parents = []; | ||||
|         /** @type {BNote[]} | ||||
|          * @private*/ | ||||
|          * @private */ | ||||
|         this.children = []; | ||||
|         /** @type {BAttribute[]} | ||||
|          * @private */ | ||||
| @@ -135,20 +138,20 @@ class BNote extends AbstractBeccaEntity { | ||||
|          * @private */ | ||||
|         this.__attributeCache = null; | ||||
|         /** @type {BAttribute[]|null} | ||||
|          * @private*/ | ||||
|         this.inheritableAttributeCache = null; | ||||
|          * @private */ | ||||
|         this.__inheritableAttributeCache = null; | ||||
|  | ||||
|         /** @type {BAttribute[]} | ||||
|          * @private*/ | ||||
|          * @private */ | ||||
|         this.targetRelations = []; | ||||
|  | ||||
|         this.becca.addNote(this.noteId, this); | ||||
|  | ||||
|         /** @type {BNote[]|null} | ||||
|          * @private */ | ||||
|         this.ancestorCache = null; | ||||
|         this.__ancestorCache = null; | ||||
|  | ||||
|         // following attributes are filled during searching from database | ||||
|         // following attributes are filled during searching in the database | ||||
|  | ||||
|         /** | ||||
|          * size of the content in bytes | ||||
| @@ -231,49 +234,41 @@ class BNote extends AbstractBeccaEntity { | ||||
|      * - but to the user note content and title changes are one and the same - single dateModified (so all changes must go through Note and content is not a separate entity) | ||||
|      */ | ||||
|  | ||||
|     /** @returns {*} */ | ||||
|     getContent(silentNotFoundError = false) { | ||||
|         const row = sql.getRow(`SELECT content FROM note_contents WHERE noteId = ?`, [this.noteId]); | ||||
|  | ||||
|         if (!row) { | ||||
|             if (silentNotFoundError) { | ||||
|                 return undefined; | ||||
|             } | ||||
|             else { | ||||
|                 throw new Error(`Cannot find note content for noteId=${this.noteId}`); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         let content = row.content; | ||||
|  | ||||
|         if (this.isProtected) { | ||||
|             if (protectedSessionService.isProtectedSessionAvailable()) { | ||||
|                 content = content === null ? null : protectedSessionService.decrypt(content); | ||||
|             } | ||||
|             else { | ||||
|                 content = ""; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         if (this.isStringNote()) { | ||||
|             return content === null | ||||
|                 ? "" | ||||
|                 : content.toString("UTF-8"); | ||||
|         } | ||||
|         else { | ||||
|             return content; | ||||
|         } | ||||
|     /** @returns {string|Buffer}  */ | ||||
|     getContent() { | ||||
|         return this._getContent(); | ||||
|     } | ||||
|  | ||||
|     /** @returns {{contentLength, dateModified, utcDateModified}} */ | ||||
|     /** @returns {{dateModified, utcDateModified}} */ | ||||
|     getContentMetadata() { | ||||
|         return sql.getRow(` | ||||
|             SELECT  | ||||
|                 LENGTH(content) AS contentLength,  | ||||
|                 dateModified, | ||||
|                 utcDateModified  | ||||
|             FROM note_contents  | ||||
|             WHERE noteId = ?`, [this.noteId]); | ||||
|         return sql.getRow(`SELECT dateModified, utcDateModified FROM blobs WHERE blobId = ?`, [this.blobId]); | ||||
|     } | ||||
|  | ||||
|     /** @returns {*} */ | ||||
|     getJsonContent() { | ||||
|         const content = this.getContent(); | ||||
|  | ||||
|         if (!content || !content.trim()) { | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
|         return JSON.parse(content); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @param content | ||||
|      * @param {object} [opts] | ||||
|      * @param {object} [opts.forceSave=false] - will also save this BNote entity | ||||
|      * @param {object} [opts.forceFrontendReload=false] - override frontend heuristics on when to reload, instruct to reload | ||||
|      */ | ||||
|     setContent(content, opts) { | ||||
|         this._setContent(content, opts); | ||||
|  | ||||
|         eventService.emit(eventService.NOTE_CONTENT_CHANGE, { entity: this }); | ||||
|     } | ||||
|  | ||||
|     setJsonContent(content) { | ||||
|         this.setContent(JSON.stringify(content, null, '\t')); | ||||
|     } | ||||
|  | ||||
|     get dateCreatedObj() { | ||||
| @@ -292,68 +287,6 @@ class BNote extends AbstractBeccaEntity { | ||||
|         return this.utcDateModified === null ? null : dayjs.utc(this.utcDateModified); | ||||
|     } | ||||
|  | ||||
|     /** @returns {*} */ | ||||
|     getJsonContent() { | ||||
|         const content = this.getContent(); | ||||
|  | ||||
|         if (!content || !content.trim()) { | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
|         return JSON.parse(content); | ||||
|     } | ||||
|  | ||||
|     setContent(content, ignoreMissingProtectedSession = false) { | ||||
|         if (content === null || content === undefined) { | ||||
|             throw new Error(`Cannot set null content to note '${this.noteId}'`); | ||||
|         } | ||||
|  | ||||
|         if (this.isStringNote()) { | ||||
|             content = content.toString(); | ||||
|         } | ||||
|         else { | ||||
|             content = Buffer.isBuffer(content) ? content : Buffer.from(content); | ||||
|         } | ||||
|  | ||||
|         const pojo = { | ||||
|             noteId: this.noteId, | ||||
|             content: content, | ||||
|             dateModified: dateUtils.localNowDateTime(), | ||||
|             utcDateModified: dateUtils.utcNowDateTime() | ||||
|         }; | ||||
|  | ||||
|         if (this.isProtected) { | ||||
|             if (protectedSessionService.isProtectedSessionAvailable()) { | ||||
|                 pojo.content = protectedSessionService.encrypt(pojo.content); | ||||
|             } | ||||
|             else if (!ignoreMissingProtectedSession) { | ||||
|                 throw new Error(`Cannot update content of noteId '${this.noteId}' since we're out of protected session.`); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         sql.upsert("note_contents", "noteId", pojo); | ||||
|  | ||||
|         const hash = utils.hash(`${this.noteId}|${pojo.content.toString()}`); | ||||
|  | ||||
|         entityChangesService.addEntityChange({ | ||||
|             entityName: 'note_contents', | ||||
|             entityId: this.noteId, | ||||
|             hash: hash, | ||||
|             isErased: false, | ||||
|             utcDateChanged: pojo.utcDateModified, | ||||
|             isSynced: true | ||||
|         }); | ||||
|  | ||||
|         eventService.emit(eventService.ENTITY_CHANGED, { | ||||
|             entityName: 'note_contents', | ||||
|             entity: this | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     setJsonContent(content) { | ||||
|         this.setContent(JSON.stringify(content, null, '\t')); | ||||
|     } | ||||
|  | ||||
|     /** @returns {boolean} true if this note is the root of the note tree. Root note has "root" noteId */ | ||||
|     isRoot() { | ||||
|         return this.noteId === 'root'; | ||||
| @@ -384,8 +317,13 @@ class BNote extends AbstractBeccaEntity { | ||||
|             || (this.type === 'file' && this.mime?.startsWith('image/')); | ||||
|     } | ||||
|  | ||||
|     /** @returns {boolean} true if the note has string content (not binary) */ | ||||
|     /** @deprecated use hasStringContent() instead */ | ||||
|     isStringNote() { | ||||
|         return this.hasStringContent(); | ||||
|     } | ||||
|  | ||||
|     /** @returns {boolean} true if the note has string content (not binary) */ | ||||
|     hasStringContent() { | ||||
|         return utils.isStringNote(this.type, this.mime); | ||||
|     } | ||||
|  | ||||
| @@ -407,6 +345,9 @@ class BNote extends AbstractBeccaEntity { | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Beware that the method must not create a copy of the array, but actually returns its internal array | ||||
|      * (for performance reasons) | ||||
|      * | ||||
|      * @param {string} [type] - (optional) attribute type to filter | ||||
|      * @param {string} [name] - (optional) attribute name to filter | ||||
|      * @returns {BAttribute[]} all note's attributes, including inherited ones | ||||
| @@ -425,7 +366,6 @@ class BNote extends AbstractBeccaEntity { | ||||
|             return this.__attributeCache.filter(attr => attr.name === name); | ||||
|         } | ||||
|         else { | ||||
|             // a bit unsafe to return the original array, but defensive copy would be costly | ||||
|             return this.__attributeCache; | ||||
|         } | ||||
|     } | ||||
| @@ -482,11 +422,11 @@ class BNote extends AbstractBeccaEntity { | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             this.inheritableAttributeCache = []; | ||||
|             this.__inheritableAttributeCache = []; | ||||
|  | ||||
|             for (const attr of this.__attributeCache) { | ||||
|                 if (attr.isInheritable) { | ||||
|                     this.inheritableAttributeCache.push(attr); | ||||
|                     this.__inheritableAttributeCache.push(attr); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| @@ -503,11 +443,11 @@ class BNote extends AbstractBeccaEntity { | ||||
|             return []; | ||||
|         } | ||||
|  | ||||
|         if (!this.inheritableAttributeCache) { | ||||
|             this.__getAttributes(path); // will refresh also this.inheritableAttributeCache | ||||
|         if (!this.__inheritableAttributeCache) { | ||||
|             this.__getAttributes(path); // will refresh also this.__inheritableAttributeCache | ||||
|         } | ||||
|  | ||||
|         return this.inheritableAttributeCache; | ||||
|         return this.__inheritableAttributeCache; | ||||
|     } | ||||
|  | ||||
|     __validateTypeName(type, name) { | ||||
| @@ -560,6 +500,20 @@ class BNote extends AbstractBeccaEntity { | ||||
|      */ | ||||
|     hasLabel(name, value) { return this.hasAttribute(LABEL, name, value); } | ||||
|  | ||||
|     /** | ||||
|      * @param {string} name - label name | ||||
|      * @returns {boolean} true if label exists (including inherited) and does not have "false" value. | ||||
|      */ | ||||
|     isLabelTruthy(name) { | ||||
|         const label = this.getLabel(name); | ||||
|  | ||||
|         if (!label) { | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         return label && label.value !== 'false'; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @param {string} name - label name | ||||
|      * @param {string} [value] - label value | ||||
| @@ -642,7 +596,8 @@ class BNote extends AbstractBeccaEntity { | ||||
|     /** | ||||
|      * @param {string} type - attribute type (label, relation, etc.) | ||||
|      * @param {string} name - attribute name | ||||
|      * @returns {BAttribute} attribute of given type and name. If there's more such attributes, first is  returned. Returns null if there's no such attribute belonging to this note. | ||||
|      * @returns {BAttribute} attribute of the given type and name. If there are more such attributes, first is returned. | ||||
|      *                       Returns null if there's no such attribute belonging to this note. | ||||
|      */ | ||||
|     getAttribute(type, name) { | ||||
|         const attributes = this.getAttributes(); | ||||
| @@ -721,6 +676,9 @@ class BNote extends AbstractBeccaEntity { | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Beware that the method must not create a copy of the array, but actually returns its internal array | ||||
|      * (for performance reasons) | ||||
|      * | ||||
|      * @param {string|null} [type] - (optional) attribute type to filter | ||||
|      * @param {string|null} [name] - (optional) attribute name to filter | ||||
|      * @param {string|null} [value] - (optional) attribute value to filter | ||||
| @@ -742,7 +700,7 @@ class BNote extends AbstractBeccaEntity { | ||||
|             return this.ownedAttributes.filter(attr => attr.name === name); | ||||
|         } | ||||
|         else { | ||||
|             return this.ownedAttributes.slice(); | ||||
|             return this.ownedAttributes; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -761,6 +719,21 @@ class BNote extends AbstractBeccaEntity { | ||||
|         return this.hasAttribute('label', 'archived'); | ||||
|     } | ||||
|  | ||||
|     areAllNotePathsArchived() { | ||||
|         // there's a slight difference between note being itself archived and all its note paths being archived | ||||
|         // - note is archived when it itself has an archived label or inherits it | ||||
|         // - note does not have or inherit archived label, but each note path contains a note with (non-inheritable) | ||||
|         //   archived label | ||||
|  | ||||
|         const bestNotePathRecord = this.getSortedNotePathRecords()[0]; | ||||
|  | ||||
|         if (!bestNotePathRecord) { | ||||
|             throw new Error(`No note path available for note '${this.noteId}'`); | ||||
|         } | ||||
|  | ||||
|         return bestNotePathRecord.isArchived; | ||||
|     } | ||||
|  | ||||
|     hasInheritableArchivedLabel() { | ||||
|         for (const attr of this.getAttributes()) { | ||||
|             if (attr.name === 'archived' && attr.type === LABEL && attr.isInheritable) { | ||||
| @@ -812,40 +785,40 @@ class BNote extends AbstractBeccaEntity { | ||||
|      * @returns {string} - returns flattened textual representation of note, prefixes and attributes | ||||
|      */ | ||||
|     getFlatText() { | ||||
|         if (!this.flatTextCache) { | ||||
|             this.flatTextCache = `${this.noteId} ${this.type} ${this.mime} `; | ||||
|         if (!this.__flatTextCache) { | ||||
|             this.__flatTextCache = `${this.noteId} ${this.type} ${this.mime} `; | ||||
|  | ||||
|             for (const branch of this.parentBranches) { | ||||
|                 if (branch.prefix) { | ||||
|                     this.flatTextCache += `${branch.prefix} `; | ||||
|                     this.__flatTextCache += `${branch.prefix} `; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             this.flatTextCache += `${this.title} `; | ||||
|             this.__flatTextCache += `${this.title} `; | ||||
|  | ||||
|             for (const attr of this.getAttributes()) { | ||||
|                 // it's best to use space as separator since spaces are filtered from the search string by the tokenization into words | ||||
|                 this.flatTextCache += `${attr.type === 'label' ? '#' : '~'}${attr.name}`; | ||||
|                 this.__flatTextCache += `${attr.type === 'label' ? '#' : '~'}${attr.name}`; | ||||
|  | ||||
|                 if (attr.value) { | ||||
|                     this.flatTextCache += `=${attr.value}`; | ||||
|                     this.__flatTextCache += `=${attr.value}`; | ||||
|                 } | ||||
|  | ||||
|                 this.flatTextCache += ' '; | ||||
|                 this.__flatTextCache += ' '; | ||||
|             } | ||||
|  | ||||
|             this.flatTextCache = utils.normalize(this.flatTextCache); | ||||
|             this.__flatTextCache = utils.normalize(this.__flatTextCache); | ||||
|         } | ||||
|  | ||||
|         return this.flatTextCache; | ||||
|         return this.__flatTextCache; | ||||
|     } | ||||
|  | ||||
|     invalidateThisCache() { | ||||
|         this.flatTextCache = null; | ||||
|         this.__flatTextCache = null; | ||||
|  | ||||
|         this.__attributeCache = null; | ||||
|         this.inheritableAttributeCache = null; | ||||
|         this.ancestorCache = null; | ||||
|         this.__inheritableAttributeCache = null; | ||||
|         this.__ancestorCache = null; | ||||
|     } | ||||
|  | ||||
|     invalidateSubTree(path = []) { | ||||
| @@ -874,24 +847,6 @@ class BNote extends AbstractBeccaEntity { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     invalidateSubtreeFlatText() { | ||||
|         this.flatTextCache = null; | ||||
|  | ||||
|         for (const childNote of this.children) { | ||||
|             childNote.invalidateSubtreeFlatText(); | ||||
|         } | ||||
|  | ||||
|         for (const targetRelation of this.targetRelations) { | ||||
|             if (targetRelation.name === 'template' || targetRelation.name === 'inherit') { | ||||
|                 const note = targetRelation.note; | ||||
|  | ||||
|                 if (note) { | ||||
|                     note.invalidateSubtreeFlatText(); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     getRelationDefinitions() { | ||||
|         return this.getLabels() | ||||
|             .filter(l => l.name.startsWith("relation:")); | ||||
| @@ -1020,7 +975,7 @@ class BNote extends AbstractBeccaEntity { | ||||
|         }; | ||||
|     } | ||||
|  | ||||
|     /** @returns {String[]} - includes the subtree node as well */ | ||||
|     /** @returns {string[]} - includes the subtree root note as well */ | ||||
|     getSubtreeNoteIds({includeArchived = true, includeHidden = false, resolveSearch = false} = {}) { | ||||
|         return this.getSubtree({includeArchived, includeHidden, resolveSearch}) | ||||
|             .notes | ||||
| @@ -1082,28 +1037,33 @@ class BNote extends AbstractBeccaEntity { | ||||
|  | ||||
|     /** @returns {BNote[]} */ | ||||
|     getAncestors() { | ||||
|         if (!this.ancestorCache) { | ||||
|         if (!this.__ancestorCache) { | ||||
|             const noteIds = new Set(); | ||||
|             this.ancestorCache = []; | ||||
|             this.__ancestorCache = []; | ||||
|  | ||||
|             for (const parent of this.parents) { | ||||
|                 if (noteIds.has(parent.noteId)) { | ||||
|                     continue; | ||||
|                 } | ||||
|  | ||||
|                 this.ancestorCache.push(parent); | ||||
|                 this.__ancestorCache.push(parent); | ||||
|                 noteIds.add(parent.noteId); | ||||
|  | ||||
|                 for (const ancestorNote of parent.getAncestors()) { | ||||
|                     if (!noteIds.has(ancestorNote.noteId)) { | ||||
|                         this.ancestorCache.push(ancestorNote); | ||||
|                         this.__ancestorCache.push(ancestorNote); | ||||
|                         noteIds.add(ancestorNote.noteId); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return this.ancestorCache; | ||||
|         return this.__ancestorCache; | ||||
|     } | ||||
|  | ||||
|     /** @returns {string[]} */ | ||||
|     getAncestorNoteIds() { | ||||
|         return this.getAncestors().map(note => note.noteId); | ||||
|     } | ||||
|  | ||||
|     /** @returns {boolean} */ | ||||
| @@ -1121,6 +1081,7 @@ class BNote extends AbstractBeccaEntity { | ||||
|         return this.noteId === '_hidden' || this.hasAncestor('_hidden'); | ||||
|     } | ||||
|  | ||||
|     /** @returns {BAttribute[]} */ | ||||
|     getTargetRelations() { | ||||
|         return this.targetRelations; | ||||
|     } | ||||
| @@ -1157,13 +1118,60 @@ class BNote extends AbstractBeccaEntity { | ||||
|         return minDistance; | ||||
|     } | ||||
|  | ||||
|     /** @returns {BNoteRevision[]} */ | ||||
|     getNoteRevisions() { | ||||
|         return sql.getRows("SELECT * FROM note_revisions WHERE noteId = ?", [this.noteId]) | ||||
|             .map(row => new BNoteRevision(row)); | ||||
|     /** @returns {BRevision[]} */ | ||||
|     getRevisions() { | ||||
|         return sql.getRows("SELECT * FROM revisions WHERE noteId = ?", [this.noteId]) | ||||
|             .map(row => new BRevision(row)); | ||||
|     } | ||||
|  | ||||
|     /** @returns {BAttachment[]} */ | ||||
|     getAttachments(opts = {}) { | ||||
|         opts.includeContentLength = !!opts.includeContentLength; | ||||
|         // from testing, it looks like calculating length does not make a difference in performance even on large-ish DB | ||||
|         // given that we're always fetching attachments only for a specific note, we might just do it always | ||||
|  | ||||
|         const query = opts.includeContentLength | ||||
|             ? `SELECT attachments.*, LENGTH(blobs.content) AS contentLength | ||||
|                FROM attachments  | ||||
|                JOIN blobs USING (blobId)  | ||||
|                WHERE ownerId = ? AND isDeleted = 0  | ||||
|                ORDER BY position` | ||||
|             : `SELECT * FROM attachments WHERE ownerId = ? AND isDeleted = 0 ORDER BY position`; | ||||
|  | ||||
|         return sql.getRows(query, [this.noteId]) | ||||
|             .map(row => new BAttachment(row)); | ||||
|     } | ||||
|  | ||||
|     /** @returns {BAttachment|null} */ | ||||
|     getAttachmentById(attachmentId, opts = {}) { | ||||
|         opts.includeContentLength = !!opts.includeContentLength; | ||||
|  | ||||
|         const query = opts.includeContentLength | ||||
|             ? `SELECT attachments.*, LENGTH(blobs.content) AS contentLength | ||||
|                FROM attachments  | ||||
|                JOIN blobs USING (blobId)  | ||||
|                WHERE ownerId = ? AND attachmentId = ? AND isDeleted = 0` | ||||
|             : `SELECT * FROM attachments WHERE ownerId = ? AND attachmentId = ? AND isDeleted = 0`; | ||||
|  | ||||
|         return sql.getRows(query, [this.noteId, attachmentId]) | ||||
|             .map(row => new BAttachment(row))[0]; | ||||
|     } | ||||
|  | ||||
|     /** @returns {BAttachment[]} */ | ||||
|     getAttachmentByRole(role) { | ||||
|         return sql.getRows(` | ||||
|                 SELECT attachments.* | ||||
|                 FROM attachments  | ||||
|                 WHERE ownerId = ?  | ||||
|                   AND role = ? | ||||
|                   AND isDeleted = 0 | ||||
|                 ORDER BY position`, [this.noteId, role]) | ||||
|             .map(row => new BAttachment(row)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gives all possible note paths leading to this note. Paths containing search note are ignored (could form cycles) | ||||
|      * | ||||
|      * @returns {string[][]} - array of notePaths (each represented by array of noteIds constituting the particular note path) | ||||
|      */ | ||||
|     getAllNotePaths() { | ||||
| @@ -1171,18 +1179,70 @@ class BNote extends AbstractBeccaEntity { | ||||
|             return [['root']]; | ||||
|         } | ||||
|  | ||||
|         const notePaths = []; | ||||
|         const parentNotes = this.getParentNotes(); | ||||
|  | ||||
|         for (const parentNote of this.getParentNotes()) { | ||||
|             for (const parentPath of parentNote.getAllNotePaths()) { | ||||
|                 parentPath.push(this.noteId); | ||||
|                 notePaths.push(parentPath); | ||||
|             } | ||||
|         const notePaths = parentNotes.length === 1 | ||||
|             ? parentNotes[0].getAllNotePaths() // optimization for the most common case | ||||
|             : parentNotes.flatMap(parentNote => parentNote.getAllNotePaths()); | ||||
|  | ||||
|         for (const notePath of notePaths) { | ||||
|             notePath.push(this.noteId); | ||||
|         } | ||||
|  | ||||
|         return notePaths; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @param {string} [hoistedNoteId='root'] | ||||
|      * @return {Array<{isArchived: boolean, isInHoistedSubTree: boolean, notePath: Array<string>, isHidden: boolean}>} | ||||
|      */ | ||||
|     getSortedNotePathRecords(hoistedNoteId = 'root') { | ||||
|         const isHoistedRoot = hoistedNoteId === 'root'; | ||||
|  | ||||
|         const notePaths = this.getAllNotePaths().map(path => ({ | ||||
|             notePath: path, | ||||
|             isInHoistedSubTree: isHoistedRoot || path.includes(hoistedNoteId), | ||||
|             isArchived: path.some(noteId => this.becca.notes[noteId].isArchived), | ||||
|             isHidden: path.includes('_hidden') | ||||
|         })); | ||||
|  | ||||
|         notePaths.sort((a, b) => { | ||||
|             if (a.isInHoistedSubTree !== b.isInHoistedSubTree) { | ||||
|                 return a.isInHoistedSubTree ? -1 : 1; | ||||
|             } else if (a.isArchived !== b.isArchived) { | ||||
|                 return a.isArchived ? 1 : -1; | ||||
|             } else if (a.isHidden !== b.isHidden) { | ||||
|                 return a.isHidden ? 1 : -1; | ||||
|             } else { | ||||
|                 return a.notePath.length - b.notePath.length; | ||||
|             } | ||||
|         }); | ||||
|  | ||||
|         return notePaths; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Returns a note path considered to be the "best" | ||||
|      * | ||||
|      * @param {string} [hoistedNoteId='root'] | ||||
|      * @return {string[]} array of noteIds constituting the particular note path | ||||
|      */ | ||||
|     getBestNotePath(hoistedNoteId = 'root') { | ||||
|         return this.getSortedNotePathRecords(hoistedNoteId)[0]?.notePath; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Returns a note path considered to be the "best" | ||||
|      * | ||||
|      * @param {string} [hoistedNoteId='root'] | ||||
|      * @return {string} serialized note path (e.g. 'root/a1h315/js725h') | ||||
|      */ | ||||
|     getBestNotePathString(hoistedNoteId = 'root') { | ||||
|         const notePath = this.getBestNotePath(hoistedNoteId); | ||||
|  | ||||
|         return notePath?.join("/"); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return boolean - true if there's no non-hidden path, note is not cloned to the visible tree | ||||
|      */ | ||||
| @@ -1196,9 +1256,7 @@ class BNote extends AbstractBeccaEntity { | ||||
|                 return false; | ||||
|             } else if (parentNote.noteId === '_hidden') { | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             if (!parentNote.isHiddenCompletely()) { | ||||
|             } else if (!parentNote.isHiddenCompletely()) { | ||||
|                 return false; | ||||
|             } | ||||
|         } | ||||
| @@ -1272,10 +1330,10 @@ class BNote extends AbstractBeccaEntity { | ||||
|      * @param {string} name - name of the attribute, not including the leading ~/# | ||||
|      * @param {string} [value] - value of the attribute - text for labels, target note ID for relations; optional. | ||||
|      * @param {boolean} [isInheritable=false] | ||||
|      * @param {int} [position] | ||||
|      * @param {int|null} [position] | ||||
|      * @returns {BAttribute} | ||||
|      */ | ||||
|     addAttribute(type, name, value = "", isInheritable = false, position = 1000) { | ||||
|     addAttribute(type, name, value = "", isInheritable = false, position = null) { | ||||
|         const BAttribute = require("./battribute"); | ||||
|  | ||||
|         return new BAttribute({ | ||||
| @@ -1314,7 +1372,7 @@ class BNote extends AbstractBeccaEntity { | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Based on enabled, attribute is either set or removed. | ||||
|      * Based on enabled, the attribute is either set or removed. | ||||
|      * | ||||
|      * @param {string} type - attribute type ('relation', 'label' etc.) | ||||
|      * @param {boolean} enabled - toggle On or Off | ||||
| @@ -1373,7 +1431,7 @@ class BNote extends AbstractBeccaEntity { | ||||
|     removeLabel(name, value) { return this.removeAttribute(LABEL, name, value); } | ||||
|  | ||||
|     /** | ||||
|      * Remove relation name-value pair, if it exists. | ||||
|      * Remove the relation name-value pair, if it exists. | ||||
|      * | ||||
|      * @param {string} name - relation name | ||||
|      * @param {string} [value] - relation value (noteId) | ||||
| @@ -1392,7 +1450,7 @@ class BNote extends AbstractBeccaEntity { | ||||
|  | ||||
|     /** | ||||
|      * @param parentNoteId | ||||
|      * @returns {{success: boolean, message: string}} | ||||
|      * @returns {{success: boolean, message: string, branchId: string, notePath: string}} | ||||
|      */ | ||||
|     cloneTo(parentNoteId) { | ||||
|         const cloningService = require("../../services/cloning"); | ||||
| @@ -1402,13 +1460,89 @@ class BNote extends AbstractBeccaEntity { | ||||
|         return cloningService.cloneNoteToBranch(this.noteId, branch.branchId); | ||||
|     } | ||||
|  | ||||
|     isEligibleForConversionToAttachment(opts = {autoConversion: false}) { | ||||
|         if (this.type !== 'image' || !this.isContentAvailable() || this.hasChildren() || this.getParentBranches().length !== 1) { | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         const targetRelations = this.getTargetRelations().filter(relation => relation.name === 'imageLink'); | ||||
|  | ||||
|         if (opts.autoConversion && targetRelations.length === 0) { | ||||
|             return false; | ||||
|         } else if (targetRelations.length > 1) { | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         const parentNote = this.getParentNotes()[0]; // at this point note can have only one parent | ||||
|         const referencingNote = targetRelations[0]?.getNote(); | ||||
|  | ||||
|         if (referencingNote && parentNote !== referencingNote) { | ||||
|             return false; | ||||
|         } else if (parentNote.type !== 'text' || !parentNote.isContentAvailable()) { | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Some notes are eligible for conversion into an attachment of its parent, note must have these properties: | ||||
|      * - it has exactly one target relation | ||||
|      * - it has a relation from its parent note | ||||
|      * - it has no children | ||||
|      * - it has no clones | ||||
|      * - the parent is of type text | ||||
|      * - both notes are either unprotected or user is in protected session | ||||
|      * | ||||
|      * Currently, works only for image notes. | ||||
|      * | ||||
|      * In the future, this functionality might get more generic and some of the requirements relaxed. | ||||
|      * | ||||
|      * @params {Object} [opts] | ||||
|      * @params {bolean} [opts.autoConversion=false} if true, the action is not triggered by user, but e.g. by migration, | ||||
|      *                                              and only perfect candidates will be migrated | ||||
|      * | ||||
|      * @returns {BAttachment|null} - null if note is not eligible for conversion | ||||
|      */ | ||||
|     convertToParentAttachment(opts = {autoConversion: false}) { | ||||
|         if (!this.isEligibleForConversionToAttachment(opts)) { | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
|         const content = this.getContent(); | ||||
|  | ||||
|         const parentNote = this.getParentNotes()[0]; | ||||
|         const attachment = parentNote.saveAttachment({ | ||||
|             role: 'image', | ||||
|             mime: this.mime, | ||||
|             title: this.title, | ||||
|             content: content | ||||
|         }); | ||||
|  | ||||
|         let parentContent = parentNote.getContent(); | ||||
|  | ||||
|         const oldNoteUrl = `api/images/${this.noteId}/`; | ||||
|         const newAttachmentUrl = `api/attachments/${attachment.attachmentId}/image/`; | ||||
|  | ||||
|         const fixedContent = utils.replaceAll(parentContent, oldNoteUrl, newAttachmentUrl); | ||||
|  | ||||
|         parentNote.setContent(fixedContent); | ||||
|  | ||||
|         const noteService = require("../../services/notes"); | ||||
|         noteService.asyncPostProcessContent(parentNote, fixedContent); // to mark an unused attachment for deletion | ||||
|  | ||||
|         this.deleteNote(); | ||||
|  | ||||
|         return attachment; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * (Soft) delete a note and all its descendants. | ||||
|      * | ||||
|      * @param {string} [deleteId] - optional delete identified | ||||
|      * @param {string} [deleteId=null] - optional delete identified | ||||
|      * @param {TaskContext} [taskContext] | ||||
|      */ | ||||
|     deleteNote(deleteId, taskContext) { | ||||
|     deleteNote(deleteId = null, taskContext = null) { | ||||
|         if (this.isDeleted) { | ||||
|             return; | ||||
|         } | ||||
| @@ -1435,7 +1569,7 @@ class BNote extends AbstractBeccaEntity { | ||||
|         if (this.isProtected && !this.isDecrypted && protectedSessionService.isProtectedSessionAvailable()) { | ||||
|             try { | ||||
|                 this.title = protectedSessionService.decryptString(this.title); | ||||
|                 this.flatTextCache = null; | ||||
|                 this.__flatTextCache = null; | ||||
|  | ||||
|                 this.isDecrypted = true; | ||||
|             } | ||||
| @@ -1454,42 +1588,91 @@ class BNote extends AbstractBeccaEntity { | ||||
|     } | ||||
|  | ||||
|     get isDeleted() { | ||||
|         // isBeingDeleted is relevant only in the transition period when the deletion process has begun, but not yet | ||||
|         // finished (note is still in becca) | ||||
|         return !(this.noteId in this.becca.notes) || this.isBeingDeleted; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @returns {BNoteRevision|null} | ||||
|      * @returns {BRevision|null} | ||||
|      */ | ||||
|     saveNoteRevision() { | ||||
|         const content = this.getContent(); | ||||
|     saveRevision() { | ||||
|         return sql.transactional(() => { | ||||
|             let noteContent = this.getContent(); | ||||
|             const contentMetadata = this.getContentMetadata(); | ||||
|  | ||||
|         if (!content || (Buffer.isBuffer(content) && content.byteLength === 0)) { | ||||
|             return null; | ||||
|             const revision = new BRevision({ | ||||
|                 noteId: this.noteId, | ||||
|                 // title and text should be decrypted now | ||||
|                 title: this.title, | ||||
|                 type: this.type, | ||||
|                 mime: this.mime, | ||||
|                 isProtected: this.isProtected, | ||||
|                 utcDateLastEdited: this.utcDateModified > contentMetadata.utcDateModified | ||||
|                     ? this.utcDateModified | ||||
|                     : contentMetadata.utcDateModified, | ||||
|                 utcDateCreated: dateUtils.utcNowDateTime(), | ||||
|                 utcDateModified: dateUtils.utcNowDateTime(), | ||||
|                 dateLastEdited: this.dateModified > contentMetadata.dateModified | ||||
|                     ? this.dateModified | ||||
|                     : contentMetadata.dateModified, | ||||
|                 dateCreated: dateUtils.localNowDateTime() | ||||
|             }, true); | ||||
|  | ||||
|             revision.save(); // to generate revisionId, which is then used to save attachments | ||||
|  | ||||
|             if (this.type === 'text') { | ||||
|                 for (const noteAttachment of this.getAttachments()) { | ||||
|                     if (noteAttachment.utcDateScheduledForErasureSince) { | ||||
|                         continue; | ||||
|                     } | ||||
|  | ||||
|                     const revisionAttachment = noteAttachment.copy(); | ||||
|                     revisionAttachment.ownerId = revision.revisionId; | ||||
|                     revisionAttachment.setContent(noteAttachment.getContent(), {forceSave: true}); | ||||
|  | ||||
|                     // content is rewritten to point to the revision attachments | ||||
|                     noteContent = noteContent.replaceAll(`attachments/${noteAttachment.attachmentId}`, | ||||
|                         `attachments/${revisionAttachment.attachmentId}`); | ||||
|  | ||||
|                     noteContent = noteContent.replaceAll(new RegExp(`href="[^"]*attachmentId=${noteAttachment.attachmentId}[^"]*"`, 'gi'), | ||||
|                         `href="api/attachments/${revisionAttachment.attachmentId}/download"`); | ||||
|                 } | ||||
|  | ||||
|                 revision.setContent(noteContent, {forceSave: true}); | ||||
|             } | ||||
|  | ||||
|             return revision; | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @returns {BAttachment} | ||||
|      */ | ||||
|     saveAttachment({attachmentId, role, mime, title, content, position}) { | ||||
|         let attachment; | ||||
|  | ||||
|         if (attachmentId) { | ||||
|             attachment = this.becca.getAttachmentOrThrow(attachmentId); | ||||
|         } else { | ||||
|             attachment = new BAttachment({ | ||||
|                 ownerId: this.noteId, | ||||
|                 title, | ||||
|                 role, | ||||
|                 mime, | ||||
|                 isProtected: this.isProtected, | ||||
|                 position | ||||
|             }); | ||||
|         } | ||||
|  | ||||
|         const contentMetadata = this.getContentMetadata(); | ||||
|         content = content || ""; | ||||
|         attachment.setContent(content, {forceSave: true}); | ||||
|  | ||||
|         const noteRevision = new BNoteRevision({ | ||||
|             noteId: this.noteId, | ||||
|             // title and text should be decrypted now | ||||
|             title: this.title, | ||||
|             type: this.type, | ||||
|             mime: this.mime, | ||||
|             isProtected: this.isProtected, | ||||
|             utcDateLastEdited: this.utcDateModified > contentMetadata.utcDateModified | ||||
|                 ? this.utcDateModified | ||||
|                 : contentMetadata.utcDateModified, | ||||
|             utcDateCreated: dateUtils.utcNowDateTime(), | ||||
|             utcDateModified: dateUtils.utcNowDateTime(), | ||||
|             dateLastEdited: this.dateModified > contentMetadata.dateModified | ||||
|                 ? this.dateModified | ||||
|                 : contentMetadata.dateModified, | ||||
|             dateCreated: dateUtils.localNowDateTime() | ||||
|         }, true).save(); | ||||
|         return attachment; | ||||
|     } | ||||
|  | ||||
|         noteRevision.setContent(content); | ||||
|  | ||||
|         return noteRevision; | ||||
|     getFileName() { | ||||
|         return utils.formatDownloadTitle(this.title, this.type, this.mime); | ||||
|     } | ||||
|  | ||||
|     beforeSaving() { | ||||
| @@ -1508,6 +1691,7 @@ class BNote extends AbstractBeccaEntity { | ||||
|             isProtected: this.isProtected, | ||||
|             type: this.type, | ||||
|             mime: this.mime, | ||||
|             blobId: this.blobId, | ||||
|             isDeleted: false, | ||||
|             dateCreated: this.dateCreated, | ||||
|             dateModified: this.dateModified, | ||||
| @@ -1544,13 +1728,13 @@ module.exports = BNote; | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -32,7 +32,7 @@ const dateUtils = require('../../services/date_utils'); | ||||
| const AbstractBeccaEntity = require("./abstract_becca_entity"); | ||||
|  | ||||
| /** | ||||
|  * Option represents name-value pair, either directly configurable by the user or some system property. | ||||
|  * Option represents a name-value pair, either directly configurable by the user or some system property. | ||||
|  * | ||||
|  * @extends AbstractBeccaEntity | ||||
|  */ | ||||
| @@ -44,6 +44,11 @@ class BOption extends AbstractBeccaEntity { | ||||
|     constructor(row) { | ||||
|         super(); | ||||
|  | ||||
|         this.updateFromRow(row); | ||||
|         this.becca.options[this.name] = this; | ||||
|     } | ||||
|  | ||||
|     updateFromRow(row) { | ||||
|         /** @type {string} */ | ||||
|         this.name = row.name; | ||||
|         /** @type {string} */ | ||||
| @@ -52,8 +57,6 @@ class BOption extends AbstractBeccaEntity { | ||||
|         this.isSynced = !!row.isSynced; | ||||
|         /** @type {string} */ | ||||
|         this.utcDateModified = row.utcDateModified; | ||||
|  | ||||
|         this.becca.options[this.name] = this; | ||||
|     } | ||||
|  | ||||
|     beforeSaving() { | ||||
| @@ -83,13 +86,13 @@ module.exports = BOption; | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -71,13 +71,13 @@ module.exports = BRecentNote; | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
| <html lang="en"> | ||||
| <head> | ||||
|     <meta charset="utf-8"> | ||||
|     <title>JSDoc: Source: becca/entities/bnote_revision.js</title> | ||||
|     <title>JSDoc: Source: becca/entities/brevision.js</title> | ||||
| 
 | ||||
|     <script src="scripts/prettify/prettify.js"> </script> | ||||
|     <script src="scripts/prettify/lang-css.js"> </script> | ||||
| @@ -17,7 +17,7 @@ | ||||
| 
 | ||||
| <div id="main"> | ||||
| 
 | ||||
|     <h1 class="page-title">Source: becca/entities/bnote_revision.js</h1> | ||||
|     <h1 class="page-title">Source: becca/entities/brevision.js</h1> | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
| @@ -30,28 +30,29 @@ | ||||
| 
 | ||||
| const protectedSessionService = require('../../services/protected_session'); | ||||
| const utils = require('../../services/utils'); | ||||
| const sql = require('../../services/sql'); | ||||
| const dateUtils = require('../../services/date_utils'); | ||||
| const becca = require('../becca'); | ||||
| const entityChangesService = require('../../services/entity_changes'); | ||||
| const AbstractBeccaEntity = require("./abstract_becca_entity"); | ||||
| const sql = require("../../services/sql"); | ||||
| const BAttachment = require("./battachment"); | ||||
| 
 | ||||
| /** | ||||
|  * NoteRevision represents snapshot of note's title and content at some point in the past. | ||||
|  * Revision represents a snapshot of note's title and content at some point in the past. | ||||
|  * It's used for seamless note versioning. | ||||
|  * | ||||
|  * @extends AbstractBeccaEntity | ||||
|  */ | ||||
| class BNoteRevision extends AbstractBeccaEntity { | ||||
|     static get entityName() { return "note_revisions"; } | ||||
|     static get primaryKeyName() { return "noteRevisionId"; } | ||||
|     static get hashedProperties() { return ["noteRevisionId", "noteId", "title", "isProtected", "dateLastEdited", "dateCreated", "utcDateLastEdited", "utcDateCreated", "utcDateModified"]; } | ||||
| class BRevision extends AbstractBeccaEntity { | ||||
|     static get entityName() { return "revisions"; } | ||||
|     static get primaryKeyName() { return "revisionId"; } | ||||
|     static get hashedProperties() { return ["revisionId", "noteId", "title", "isProtected", "dateLastEdited", "dateCreated", | ||||
|                                             "utcDateLastEdited", "utcDateCreated", "utcDateModified", "blobId"]; } | ||||
| 
 | ||||
|     constructor(row, titleDecrypted = false) { | ||||
|         super(); | ||||
| 
 | ||||
|         /** @type {string} */ | ||||
|         this.noteRevisionId = row.noteRevisionId; | ||||
|         this.revisionId = row.revisionId; | ||||
|         /** @type {string} */ | ||||
|         this.noteId = row.noteId; | ||||
|         /** @type {string} */ | ||||
| @@ -63,6 +64,8 @@ class BNoteRevision extends AbstractBeccaEntity { | ||||
|         /** @type {string} */ | ||||
|         this.title = row.title; | ||||
|         /** @type {string} */ | ||||
|         this.blobId = row.blobId; | ||||
|         /** @type {string} */ | ||||
|         this.dateLastEdited = row.dateLastEdited; | ||||
|         /** @type {string} */ | ||||
|         this.dateCreated = row.dateCreated; | ||||
| @@ -72,7 +75,7 @@ class BNoteRevision extends AbstractBeccaEntity { | ||||
|         this.utcDateCreated = row.utcDateCreated; | ||||
|         /** @type {string} */ | ||||
|         this.utcDateModified = row.utcDateModified; | ||||
|         /** @type {number} */ | ||||
|         /** @type {int} */ | ||||
|         this.contentLength = row.contentLength; | ||||
| 
 | ||||
|         if (this.isProtected && !titleDecrypted) { | ||||
| @@ -87,92 +90,47 @@ class BNoteRevision extends AbstractBeccaEntity { | ||||
|     } | ||||
| 
 | ||||
|     /** @returns {boolean} true if the note has string content (not binary) */ | ||||
|     isStringNote() { | ||||
|     hasStringContent() { | ||||
|         return utils.isStringNote(this.type, this.mime); | ||||
|     } | ||||
| 
 | ||||
|     isContentAvailable() { | ||||
|         return !this.revisionId // new note which was not encrypted yet | ||||
|             || !this.isProtected | ||||
|             || protectedSessionService.isProtectedSessionAvailable() | ||||
|     } | ||||
| 
 | ||||
|     /* | ||||
|      * Note revision content has quite special handling - it's not a separate entity, but a lazily loaded | ||||
|      * part of NoteRevision entity with its own sync. Reason behind this hybrid design is that | ||||
|      * part of Revision entity with its own sync. The reason behind this hybrid design is that | ||||
|      * content can be quite large, and it's not necessary to load it / fill memory for any note access even | ||||
|      * if we don't need a content, especially for bulk operations like search. | ||||
|      * | ||||
|      * This is the same approach as is used for Note's content. | ||||
|      */ | ||||
| 
 | ||||
|     /** @returns {*} */ | ||||
|     getContent(silentNotFoundError = false) { | ||||
|         const res = sql.getRow(`SELECT content FROM note_revision_contents WHERE noteRevisionId = ?`, [this.noteRevisionId]); | ||||
| 
 | ||||
|         if (!res) { | ||||
|             if (silentNotFoundError) { | ||||
|                 return undefined; | ||||
|             } | ||||
|             else { | ||||
|                 throw new Error(`Cannot find note revision content for noteRevisionId=${this.noteRevisionId}`); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         let content = res.content; | ||||
| 
 | ||||
|         if (this.isProtected) { | ||||
|             if (protectedSessionService.isProtectedSessionAvailable()) { | ||||
|                 content = protectedSessionService.decrypt(content); | ||||
|             } | ||||
|             else { | ||||
|                 content = ""; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         if (this.isStringNote()) { | ||||
|             return content === null | ||||
|                 ? "" | ||||
|                 : content.toString("UTF-8"); | ||||
|         } | ||||
|         else { | ||||
|             return content; | ||||
|         } | ||||
|     /** @returns {string|Buffer} */ | ||||
|     getContent() { | ||||
|         return this._getContent(); | ||||
|     } | ||||
| 
 | ||||
|     setContent(content) { | ||||
|         const pojo = { | ||||
|             noteRevisionId: this.noteRevisionId, | ||||
|             content: content, | ||||
|             utcDateModified: dateUtils.utcNowDateTime() | ||||
|         }; | ||||
| 
 | ||||
|         if (this.isProtected) { | ||||
|             if (protectedSessionService.isProtectedSessionAvailable()) { | ||||
|                 pojo.content = protectedSessionService.encrypt(pojo.content); | ||||
|             } | ||||
|             else { | ||||
|                 throw new Error(`Cannot update content of noteRevisionId=${this.noteRevisionId} since we're out of protected session.`); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         sql.upsert("note_revision_contents", "noteRevisionId", pojo); | ||||
| 
 | ||||
|         const hash = utils.hash(`${this.noteRevisionId}|${pojo.content.toString()}`); | ||||
| 
 | ||||
|         entityChangesService.addEntityChange({ | ||||
|             entityName: 'note_revision_contents', | ||||
|             entityId: this.noteRevisionId, | ||||
|             hash: hash, | ||||
|             isErased: false, | ||||
|             utcDateChanged: this.getUtcDateChanged(), | ||||
|             isSynced: true | ||||
|         }); | ||||
|     /** | ||||
|      * @param content | ||||
|      * @param {object} [opts] | ||||
|      * @param {object} [opts.forceSave=false] - will also save this BRevision entity | ||||
|      */ | ||||
|     setContent(content, opts) { | ||||
|         this._setContent(content, opts); | ||||
|     } | ||||
| 
 | ||||
|     /** @returns {{contentLength, dateModified, utcDateModified}} */ | ||||
|     getContentMetadata() { | ||||
|         return sql.getRow(` | ||||
|             SELECT  | ||||
|                 LENGTH(content) AS contentLength,  | ||||
|                 dateModified, | ||||
|                 utcDateModified  | ||||
|             FROM note_revision_contents  | ||||
|             WHERE noteRevisionId = ?`, [this.noteRevisionId]); | ||||
|     /** @returns {BAttachment[]} */ | ||||
|     getAttachments() { | ||||
|         return sql.getRows(` | ||||
|                 SELECT attachments.* | ||||
|                 FROM attachments  | ||||
|                 WHERE ownerId = ?  | ||||
|                   AND isDeleted = 0`, [this.revisionId]) | ||||
|             .map(row => new BAttachment(row)); | ||||
|     } | ||||
| 
 | ||||
|     beforeSaving() { | ||||
| @@ -183,23 +141,26 @@ class BNoteRevision extends AbstractBeccaEntity { | ||||
| 
 | ||||
|     getPojo() { | ||||
|         return { | ||||
|             noteRevisionId: this.noteRevisionId, | ||||
|             revisionId: this.revisionId, | ||||
|             noteId: this.noteId, | ||||
|             type: this.type, | ||||
|             mime: this.mime, | ||||
|             isProtected: this.isProtected, | ||||
|             title: this.title, | ||||
|             blobId: this.blobId, | ||||
|             dateLastEdited: this.dateLastEdited, | ||||
|             dateCreated: this.dateCreated, | ||||
|             utcDateLastEdited: this.utcDateLastEdited, | ||||
|             utcDateCreated: this.utcDateCreated, | ||||
|             utcDateModified: this.utcDateModified, | ||||
|             content: this.content, // used when retrieving full note revision to frontend | ||||
|             contentLength: this.contentLength | ||||
|         }; | ||||
|     } | ||||
| 
 | ||||
|     getPojoToSave() { | ||||
|         const pojo = this.getPojo(); | ||||
|         delete pojo.content; // not getting persisted | ||||
|         delete pojo.contentLength; // not getting persisted | ||||
| 
 | ||||
|         if (pojo.isProtected) { | ||||
| @@ -216,7 +177,7 @@ class BNoteRevision extends AbstractBeccaEntity { | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| module.exports = BNoteRevision; | ||||
| module.exports = BRevision; | ||||
| </code></pre> | ||||
|         </article> | ||||
|     </section> | ||||
| @@ -227,13 +188,13 @@ module.exports = BNoteRevision; | ||||
| </div> | ||||
| 
 | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
| 
 | ||||
| <br class="clear"> | ||||
| 
 | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
| 
 | ||||
| <script> prettyPrint(); </script> | ||||
| @@ -50,13 +50,13 @@ | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -1294,13 +1294,13 @@ | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -55,11 +55,11 @@ const exportService = require("./export/zip"); | ||||
|  * @constructor | ||||
|  */ | ||||
| function BackendScriptApi(currentNote, apiParams) { | ||||
|     /** @property {BNote} note where script started executing */ | ||||
|     /** @property {BNote} note where the script started executing */ | ||||
|     this.startNote = apiParams.startNote; | ||||
|     /** @property {BNote} note where script is currently executing. Don't mix this up with concept of active note */ | ||||
|     /** @property {BNote} note where the script is currently executing. Don't mix this up with the concept of active note */ | ||||
|     this.currentNote = currentNote; | ||||
|     /** @property {AbstractBeccaEntity} entity whose event triggered this executions */ | ||||
|     /** @property {AbstractBeccaEntity} entity whose event triggered this execution */ | ||||
|     this.originEntity = apiParams.originEntity; | ||||
|  | ||||
|     for (const key in apiParams) { | ||||
| @@ -165,13 +165,13 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|     this.getNoteWithLabel = attributeService.getNoteWithLabel; | ||||
|  | ||||
|     /** | ||||
|      * If there's no branch between note and parent note, create one. Otherwise, do nothing. | ||||
|      * If there's no branch between note and parent note, create one. Otherwise, do nothing. Returns the new or existing branch. | ||||
|      * | ||||
|      * @method | ||||
|      * @param {string} noteId | ||||
|      * @param {string} parentNoteId | ||||
|      * @param {string} prefix - if branch will be created between note and parent note, set this prefix | ||||
|      * @returns {void} | ||||
|      * @param {string} prefix - if branch is created between note and parent note, set this prefix | ||||
|      * @returns {{branch: BBranch|null}} | ||||
|      */ | ||||
|     this.ensureNoteIsPresentInParent = cloningService.ensureNoteIsPresentInParent; | ||||
|  | ||||
| @@ -192,7 +192,7 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|      * @param {boolean} present - true if we want the branch to exist, false if we want it gone | ||||
|      * @param {string} noteId | ||||
|      * @param {string} parentNoteId | ||||
|      * @param {string} prefix - if branch will be created between note and parent note, set this prefix | ||||
|      * @param {string} prefix - if branch is created between note and parent note, set this prefix | ||||
|      * @returns {void} | ||||
|      */ | ||||
|     this.toggleNoteInParent = cloningService.toggleNoteInParent; | ||||
| @@ -272,7 +272,7 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|  | ||||
|         const parentNote = becca.getNote(parentNoteId); | ||||
|  | ||||
|         // code note type can be inherited, otherwise text is default | ||||
|         // code note type can be inherited, otherwise "text" is the default | ||||
|         extraOptions.type = parentNote.type === 'code' ? 'code' : 'text'; | ||||
|         extraOptions.mime = parentNote.type === 'code' ? parentNote.mime : 'text/html'; | ||||
|  | ||||
| @@ -440,7 +440,7 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|      * Return randomly generated string of given length. This random string generation is NOT cryptographically secure. | ||||
|      * | ||||
|      * @method | ||||
|      * @param {number} length of the string | ||||
|      * @param {int} length of the string | ||||
|      * @returns {string} random string | ||||
|      */ | ||||
|     this.randomString = utils.randomString; | ||||
| @@ -499,11 +499,11 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|         if (opts.type === 'script' && !opts.scriptNoteId) { throw new Error("scriptNoteId is mandatory for launchers of type 'script'"); } | ||||
|         if (opts.type === 'customWidget' && !opts.widgetNoteId) { throw new Error("widgetNoteId is mandatory for launchers of type 'customWidget'"); } | ||||
|  | ||||
|         const parentNoteId = !!opts.isVisible ? '_lbVisibleLaunchers' : '_lbAvailableLaunchers'; | ||||
|         const parentNoteId = opts.isVisible ? '_lbVisibleLaunchers' : '_lbAvailableLaunchers'; | ||||
|         const noteId = 'al_' + opts.id; | ||||
|  | ||||
|         const launcherNote = | ||||
|             becca.getNote(opts.id) || | ||||
|             becca.getNote(noteId) || | ||||
|             specialNotesService.createLauncher({ | ||||
|                 noteId: noteId, | ||||
|                 parentNoteId: parentNoteId, | ||||
| @@ -542,7 +542,7 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|         if (opts.icon) { | ||||
|             launcherNote.setLabel('iconClass', `bx ${opts.icon}`); | ||||
|         } else { | ||||
|             launcherNote.removeLabel('keyboardShortcut'); | ||||
|             launcherNote.removeLabel('iconClass'); | ||||
|         } | ||||
|  | ||||
|         return {note: launcherNote}; | ||||
| @@ -557,6 +557,48 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|      */ | ||||
|     this.exportSubtreeToZipFile = async (noteId, format, zipFilePath) => await exportService.exportToZipFile(noteId, format, zipFilePath); | ||||
|  | ||||
|     /** | ||||
|      * Executes given anonymous function on the frontend(s). | ||||
|      * Internally this serializes the anonymous function into string and sends it to frontend(s) via WebSocket. | ||||
|      * Note that there can be multiple connected frontend instances (e.g. in different tabs). In such case, all | ||||
|      * instances execute the given function. | ||||
|      * | ||||
|      * @method | ||||
|      * @param {string} script - script to be executed on the frontend | ||||
|      * @param {Array.<?>} params - list of parameters to the anonymous function to be sent to frontend | ||||
|      * @returns {undefined} - no return value is provided. | ||||
|      */ | ||||
|     this.runOnFrontend = async (script, params = []) => { | ||||
|         if (typeof script === "function") { | ||||
|             script = script.toString(); | ||||
|         } | ||||
|  | ||||
|         ws.sendMessageToAllClients({ | ||||
|             type: 'execute-script', | ||||
|             script: script, | ||||
|             params: prepareParams(params), | ||||
|             startNoteId: this.startNote.noteId, | ||||
|             currentNoteId: this.currentNote.noteId, | ||||
|             originEntityName: "notes", // currently there's no other entity on the frontend which can trigger event | ||||
|             originEntityId: this.originEntity?.noteId || null | ||||
|         }); | ||||
|  | ||||
|         function prepareParams(params) { | ||||
|             if (!params) { | ||||
|                 return params; | ||||
|             } | ||||
|  | ||||
|             return params.map(p => { | ||||
|                 if (typeof p === "function") { | ||||
|                     return `!@#Function: ${p.toString()}`; | ||||
|                 } | ||||
|                 else { | ||||
|                     return p; | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     /** | ||||
|      * This object contains "at your risk" and "no BC guarantees" objects for advanced use cases. | ||||
|      * | ||||
| @@ -578,13 +620,13 @@ module.exports = BackendScriptApi; | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -245,7 +245,7 @@ function wrap(query, func) { | ||||
|             // in these cases error should be simply ignored. | ||||
|             console.log(e.message); | ||||
|  | ||||
|             return null | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
|         throw e; | ||||
| @@ -309,7 +309,7 @@ function fillParamList(paramIds, truncate = true) { | ||||
|     } | ||||
|  | ||||
|     // doing it manually to avoid this showing up on the sloq query list | ||||
|     const s = stmt(`INSERT INTO param_list VALUES ${paramIds.map(paramId => `(?)`).join(',')}`, paramIds); | ||||
|     const s = stmt(`INSERT INTO param_list VALUES ${paramIds.map(paramId => `(?)`).join(',')}`); | ||||
|  | ||||
|     s.run(paramIds); | ||||
| } | ||||
| @@ -407,13 +407,13 @@ module.exports = { | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BNoteRevision.html">BNoteRevision</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-sql.html">sql</a></li></ul><h3>Classes</h3><ul><li><a href="AbstractBeccaEntity.html">AbstractBeccaEntity</a></li><li><a href="BAttachment.html">BAttachment</a></li><li><a href="BAttribute.html">BAttribute</a></li><li><a href="BBranch.html">BBranch</a></li><li><a href="BEtapiToken.html">BEtapiToken</a></li><li><a href="BNote.html">BNote</a></li><li><a href="BOption.html">BOption</a></li><li><a href="BRecentNote.html">BRecentNote</a></li><li><a href="BRevision.html">BRevision</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -194,7 +194,75 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line16">line 16</a> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line17">line 17</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="froca"><span class="type-signature"></span>froca<span class="type-signature"> :Froca</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">Froca</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line10">line 10</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -262,7 +330,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line28">line 28</a> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line29">line 29</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -330,7 +398,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line22">line 22</a> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line23">line 23</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -398,7 +466,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line18">line 18</a> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line19">line 19</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -466,7 +534,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line26">line 26</a> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line27">line 27</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -534,7 +602,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line20">line 20</a> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line21">line 21</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -602,7 +670,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line24">line 24</a> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line25">line 25</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -678,7 +746,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line32">line 32</a> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line33">line 33</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -780,7 +848,7 @@ and relation (representing named relationship between source and target note)</d | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line37">line 37</a> | ||||
|         <a href="entities_fattribute.js.html">entities/fattribute.js</a>, <a href="entities_fattribute.js.html#line38">line 38</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -844,13 +912,13 @@ and relation (representing named relationship between source and target note)</d | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="FAttribute.html">FAttribute</a></li><li><a href="FBranch.html">FBranch</a></li><li><a href="FNote.html">FNote</a></li><li><a href="FNoteComplement.html">FNoteComplement</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="FAttribute.html">FAttribute</a></li><li><a href="FBranch.html">FBranch</a></li><li><a href="FNote.html">FNote</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
| @@ -198,7 +198,75 @@ parents.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line17">line 17</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line18">line 18</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
| <h4 class="name" id="froca"><span class="type-signature"></span>froca<span class="type-signature"> :Froca</span></h4> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <h5>Type:</h5> | ||||
|     <ul> | ||||
|         <li> | ||||
|              | ||||
| <span class="param-type">Froca</span> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|     </ul> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl class="details"> | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line8">line 8</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -266,7 +334,7 @@ parents.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line29">line 29</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line30">line 30</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -334,7 +402,7 @@ parents.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line27">line 27</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line28">line 28</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -402,7 +470,7 @@ parents.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line19">line 19</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line20">line 20</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -470,7 +538,7 @@ parents.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line23">line 23</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line24">line 24</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -538,7 +606,7 @@ parents.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line21">line 21</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line22">line 22</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -606,7 +674,7 @@ parents.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line25">line 25</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line26">line 26</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -682,7 +750,7 @@ parents.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line33">line 33</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line34">line 34</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -784,7 +852,7 @@ parents.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line38">line 38</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line39">line 39</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -886,7 +954,7 @@ parents.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line43">line 43</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line44">line 44</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -988,7 +1056,7 @@ parents.</div> | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line48">line 48</a> | ||||
|         <a href="entities_fbranch.js.html">entities/fbranch.js</a>, <a href="entities_fbranch.js.html#line49">line 49</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1017,7 +1085,7 @@ parents.</div> | ||||
|  | ||||
|          | ||||
| <div class="param-desc"> | ||||
|     true if it's top level, meaning its parent is root note | ||||
|     true if it's top level, meaning its parent is the root note | ||||
| </div> | ||||
|  | ||||
|  | ||||
| @@ -1056,13 +1124,13 @@ parents.</div> | ||||
| </div> | ||||
|  | ||||
| <nav> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="FAttribute.html">FAttribute</a></li><li><a href="FBranch.html">FBranch</a></li><li><a href="FNote.html">FNote</a></li><li><a href="FNoteComplement.html">FNoteComplement</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li></ul> | ||||
|     <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="FAttribute.html">FAttribute</a></li><li><a href="FBranch.html">FBranch</a></li><li><a href="FNote.html">FNote</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li></ul> | ||||
| </nav> | ||||
|  | ||||
| <br class="clear"> | ||||
|  | ||||
| <footer> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.1</a> | ||||
|     Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.2</a> | ||||
| </footer> | ||||
|  | ||||
| <script> prettyPrint(); </script> | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user