mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-30 18:05:55 +01:00 
			
		
		
		
	Compare commits
	
		
			47 Commits
		
	
	
		
			v0.62.1-be
			...
			v0.62.6
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | e76093e75c | ||
|  | 4f8073daa7 | ||
|  | 47fb96faa8 | ||
|  | 6e33553146 | ||
|  | 807941e6a5 | ||
|  | 1e30c0702e | ||
|  | 390ad6d813 | ||
|  | 77800d073f | ||
|  | 1953c7896f | ||
|  | cd43752f61 | ||
|  | d6046efa1b | ||
|  | ee608fcf46 | ||
|  | 894b08a1b8 | ||
|  | 4e549baedc | ||
|  | 6b6e42e9ba | ||
|  | 0404b78fb8 | ||
|  | 439743d2b0 | ||
|  | 0ac397e7ff | ||
|  | d243880099 | ||
|  | 2e23c521c3 | ||
|  | eb761b286f | ||
|  | d0f6ff5f98 | ||
|  | 84feaabc52 | ||
|  | a6036859b8 | ||
|  | 93dcce2217 | ||
|  | 686af0c6a1 | ||
|  | d07f02b95f | ||
|  | ad74952194 | ||
|  | 10f3df3ed4 | ||
|  | 18e2e6779b | ||
|  | ed129c307b | ||
|  | 8742e4bfe9 | ||
|  | 722299dd26 | ||
|  | e2b1421bf3 | ||
|  | 1f41d39bc7 | ||
|  | ce39d3b4ce | ||
|  | ef2ade849b | ||
|  | 88067c071c | ||
|  | f5018e9820 | ||
|  | 1561f402f0 | ||
|  | 0d7889d212 | ||
|  | 19a10e59e9 | ||
|  | 746abb02d3 | ||
|  | 23351298c8 | ||
|  | 426a8f75aa | ||
|  | 999cf0d9e3 | ||
|  | 0afc41060a | 
| @@ -8,3 +8,6 @@ CREATE TABLE IF NOT EXISTS "blobs" ( | ||||
|  | ||||
| ALTER TABLE notes ADD blobId TEXT DEFAULT NULL; | ||||
| ALTER TABLE note_revisions ADD blobId TEXT DEFAULT NULL; | ||||
|  | ||||
| CREATE INDEX IF NOT EXISTS IDX_notes_blobId on notes (blobId); | ||||
| CREATE INDEX IF NOT EXISTS IDX_note_revisions_blobId on note_revisions (blobId); | ||||
|   | ||||
| @@ -21,5 +21,6 @@ CREATE INDEX `IDX_revisions_utcDateCreated` ON `revisions` (`utcDateCreated`); | ||||
| CREATE INDEX `IDX_revisions_utcDateLastEdited` ON `revisions` (`utcDateLastEdited`); | ||||
| CREATE INDEX `IDX_revisions_dateCreated` ON `revisions` (`dateCreated`); | ||||
| CREATE INDEX `IDX_revisions_dateLastEdited` ON `revisions` (`dateLastEdited`); | ||||
| CREATE INDEX IF NOT EXISTS IDX_revisions_blobId on revisions (blobId); | ||||
|  | ||||
| UPDATE entity_changes SET entityName = 'revisions' WHERE entityName = 'note_revisions'; | ||||
|   | ||||
| @@ -19,3 +19,5 @@ CREATE INDEX IDX_attachments_ownerId_role | ||||
|  | ||||
| CREATE INDEX IDX_attachments_utcDateScheduledForErasureSince | ||||
|     on attachments (utcDateScheduledForErasureSince); | ||||
|  | ||||
| CREATE INDEX IF NOT EXISTS IDX_attachments_blobId on attachments (blobId); | ||||
|   | ||||
| @@ -1588,7 +1588,7 @@ See addLabel, addRelation for more specific methods. | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1351">line 1351</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1345">line 1345</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1835,7 +1835,7 @@ See addLabel, addRelation for more specific methods. | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1372">line 1372</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1366">line 1366</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -2081,7 +2081,7 @@ returned. | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1385">line 1385</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1379">line 1379</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -2316,7 +2316,7 @@ returned. | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1470">line 1470</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1464">line 1464</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -2432,7 +2432,7 @@ In the future, this functionality might get more generic and some of the require | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1522">line 1522</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1516">line 1516</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -2653,7 +2653,7 @@ In the future, this functionality might get more generic and some of the require | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1560">line 1560</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1554">line 1554</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -2848,7 +2848,7 @@ In the future, this functionality might get more generic and some of the require | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1192">line 1192</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1186">line 1186</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -4207,7 +4207,7 @@ In the future, this functionality might get more generic and some of the require | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1245">line 1245</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1239">line 1239</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -4386,7 +4386,7 @@ In the future, this functionality might get more generic and some of the require | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1255">line 1255</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1249">line 1249</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -9019,7 +9019,7 @@ This method can be significantly faster than the getAttribute() | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1214">line 1214</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1208">line 1208</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -11329,7 +11329,7 @@ This method can be significantly faster than the getAttribute() | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1286">line 1286</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1280">line 1280</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -11435,7 +11435,7 @@ This method can be significantly faster than the getAttribute() | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1264">line 1264</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1258">line 1258</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -12675,7 +12675,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_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1330">line 1330</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1324">line 1324</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -12855,7 +12855,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_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1446">line 1446</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1440">line 1440</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -13035,7 +13035,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_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1454">line 1454</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1448">line 1448</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -13288,7 +13288,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_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1660">line 1660</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1654">line 1654</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -13390,7 +13390,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_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1614">line 1614</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1608">line 1608</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -13622,7 +13622,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_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1299">line 1299</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1293">line 1293</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -14081,7 +14081,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_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1430">line 1430</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1424">line 1424</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -14241,7 +14241,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_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1438">line 1438</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1432">line 1432</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -14483,7 +14483,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_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1397">line 1397</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1391">line 1391</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -14694,7 +14694,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_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1413">line 1413</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1407">line 1407</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -14905,7 +14905,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_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1422">line 1422</a> | ||||
|         <a href="becca_entities_bnote.js.html">becca/entities/bnote.js</a>, <a href="becca_entities_bnote.js.html#line1416">line 1416</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|   | ||||
| @@ -94,7 +94,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#line43">line 43</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line44">line 44</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -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#line671">line 671</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line679">line 679</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -314,7 +314,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#line69">line 69</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line70">line 70</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -386,7 +386,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#line53">line 53</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line54">line 54</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -458,7 +458,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#line74">line 74</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line75">line 75</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -530,7 +530,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#line58">line 58</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line59">line 59</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -602,7 +602,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#line515">line 515</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line516">line 516</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -674,7 +674,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#line48">line 48</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line49">line 49</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -746,7 +746,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#line79">line 79</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line80">line 80</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -774,6 +774,161 @@ available in the JS backend notes. You can use e.g. <code>api.log(api.startNote. | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="backupNow"><span class="type-signature"></span>backupNow<span class="signature">(backupName)</span><span class="type-signature"> → {Promise}</span></h4> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     <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>backupName</code></td> | ||||
|              | ||||
|  | ||||
|             <td class="type"> | ||||
|              | ||||
|                  | ||||
| <span class="param-type">string</span> | ||||
|  | ||||
|  | ||||
|              | ||||
|             </td> | ||||
|  | ||||
|              | ||||
|  | ||||
|              | ||||
|  | ||||
|             <td class="description last">If the backupName is e.g. "now", then the backup will be written to "backup-now.db" file</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#line672">line 672</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
| </dl> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <h5>Returns:</h5> | ||||
|  | ||||
|          | ||||
| <div class="param-desc"> | ||||
|     - resolves once the backup is finished | ||||
| </div> | ||||
|  | ||||
|  | ||||
|  | ||||
| <dl> | ||||
|     <dt> | ||||
|         Type | ||||
|     </dt> | ||||
|     <dd> | ||||
|          | ||||
| <span class="param-type">Promise</span> | ||||
|  | ||||
|  | ||||
|     </dd> | ||||
| </dl> | ||||
|  | ||||
|      | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|          | ||||
|              | ||||
|  | ||||
|      | ||||
|  | ||||
|      | ||||
|     <h4 class="name" id="createDataNote"><span class="type-signature"></span>createDataNote<span class="signature">(parentNoteId, title, content)</span><span class="type-signature"> → {Object}</span></h4> | ||||
|      | ||||
|  | ||||
| @@ -922,7 +1077,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|      | ||||
|     <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#line275">line 275</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line276">line 276</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1441,7 +1596,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|      | ||||
|     <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#line298">line 298</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line299">line 299</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -2075,7 +2230,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|      | ||||
|     <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#line318">line 318</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line319">line 319</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -2602,7 +2757,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|      | ||||
|     <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#line542">line 542</a> | ||||
|         <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> | ||||
|      | ||||
|  | ||||
| @@ -2803,7 +2958,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|      | ||||
|     <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#line258">line 258</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line259">line 259</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -2985,7 +3140,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|      | ||||
|     <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#line235">line 235</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line236">line 236</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -3186,7 +3341,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|      | ||||
|     <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#line225">line 225</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line226">line 226</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -3337,7 +3492,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|      | ||||
|     <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#line502">line 502</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line503">line 503</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -3538,7 +3693,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|      | ||||
|     <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#line608">line 608</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line609">line 609</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -3640,7 +3795,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|      | ||||
|     <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#line521">line 521</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line522">line 522</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -3798,7 +3953,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|      | ||||
|     <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#line115">line 115</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line116">line 116</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -3952,7 +4107,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|      | ||||
|     <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#line108">line 108</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line109">line 109</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -4106,7 +4261,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|      | ||||
|     <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#line155">line 155</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line156">line 156</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -4260,7 +4415,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|      | ||||
|     <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#line101">line 101</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line102">line 102</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -4461,7 +4616,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|      | ||||
|     <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#line401">line 401</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line402">line 402</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -4615,7 +4770,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|      | ||||
|     <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#line129">line 129</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line130">line 130</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -4720,7 +4875,7 @@ JSON MIME type. See also createNewNote() for more options. | ||||
|      | ||||
|     <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#line135">line 135</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line136">line 136</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -4827,7 +4982,7 @@ if some action needs to happen on only one specific instance. | ||||
|      | ||||
|     <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#line87">line 87</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line88">line 88</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -5028,7 +5183,7 @@ if some action needs to happen on only one specific instance. | ||||
|      | ||||
|     <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#line432">line 432</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line433">line 433</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -5182,7 +5337,7 @@ if some action needs to happen on only one specific instance. | ||||
|      | ||||
|     <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#line94">line 94</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line95">line 95</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -5383,7 +5538,7 @@ if some action needs to happen on only one specific instance. | ||||
|      | ||||
|     <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#line214">line 214</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line215">line 215</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -5584,7 +5739,7 @@ if some action needs to happen on only one specific instance. | ||||
|      | ||||
|     <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#line204">line 204</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line205">line 205</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -5735,7 +5890,7 @@ if some action needs to happen on only one specific instance. | ||||
|      | ||||
|     <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#line142">line 142</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line143">line 143</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -5840,7 +5995,7 @@ if some action needs to happen on only one specific instance. | ||||
|      | ||||
|     <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#line148">line 148</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line149">line 149</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -5991,7 +6146,7 @@ if some action needs to happen on only one specific instance. | ||||
|      | ||||
|     <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#line122">line 122</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line123">line 123</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -6100,7 +6255,7 @@ if some action needs to happen on only one specific instance. | ||||
|      | ||||
|     <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#line391">line 391</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line392">line 392</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -6270,7 +6425,7 @@ if some action needs to happen on only one specific instance. | ||||
|      | ||||
|     <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#line410">line 410</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line411">line 411</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -6573,7 +6728,7 @@ if some action needs to happen on only one specific instance. | ||||
|      | ||||
|     <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#line422">line 422</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line423">line 423</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -6774,7 +6929,7 @@ if some action needs to happen on only one specific instance. | ||||
|      | ||||
|     <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#line442">line 442</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line443">line 443</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -6927,7 +7082,7 @@ if some action needs to happen on only one specific instance. | ||||
|      | ||||
|     <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#line364">line 364</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line365">line 365</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -7082,7 +7237,7 @@ if some action needs to happen on only one specific instance. | ||||
|      | ||||
|     <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#line495">line 495</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line496">line 496</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -7267,7 +7422,7 @@ instances execute the given function. | ||||
|      | ||||
|     <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#line621">line 621</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line622">line 622</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -7431,7 +7586,7 @@ you need to make some DB changes, you need to surround your call with api.transa | ||||
|      | ||||
|     <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#line664">line 664</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line665">line 665</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -7634,7 +7789,7 @@ you need to make some DB changes, you need to surround your call with api.transa | ||||
|      | ||||
|     <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#line190">line 190</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line191">line 191</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -7836,7 +7991,7 @@ you need to make some DB changes, you need to surround your call with api.transa | ||||
|      | ||||
|     <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#line166">line 166</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line167">line 167</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -8045,7 +8200,7 @@ This method looks similar to toggleNoteInParent() but differs because we're look | ||||
|      | ||||
|     <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#line476">line 476</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line477">line 477</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -8391,7 +8546,7 @@ This method looks similar to toggleNoteInParent() but differs because we're look | ||||
|      | ||||
|     <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#line456">line 456</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line457">line 457</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -8615,7 +8770,7 @@ This method looks similar to toggleNoteInParent() but differs because we're look | ||||
|      | ||||
|     <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#line247">line 247</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line248">line 248</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -8771,7 +8926,7 @@ exists, then we'll use that transaction. | ||||
|      | ||||
|     <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#line486">line 486</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line487">line 487</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -8926,7 +9081,7 @@ exists, then we'll use that transaction. | ||||
|      | ||||
|     <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#line509">line 509</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line510">line 510</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|   | ||||
| @@ -208,7 +208,7 @@ class AbstractBeccaEntity { | ||||
|  | ||||
|         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 | ||||
|         // 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]); | ||||
|     } | ||||
|  | ||||
| @@ -258,7 +258,7 @@ class AbstractBeccaEntity { | ||||
|             isErased: false, | ||||
|             utcDateChanged: pojo.utcDateModified, | ||||
|             isSynced: true, | ||||
|             // overriding componentId will cause frontend to think the change is coming from a different component | ||||
|             // overriding componentId will cause the frontend to think the change is coming from a different component | ||||
|             // and thus reload | ||||
|             componentId: opts.forceFrontendReload ? utils.randomString(10) : null | ||||
|         }); | ||||
|   | ||||
| @@ -1202,14 +1202,8 @@ class BNote extends AbstractBeccaEntity { | ||||
|  | ||||
|     /** @returns {BAttachment} */ | ||||
|     getAttachmentByTitle(title) { | ||||
|         return sql.getRows(` | ||||
|                 SELECT attachments.* | ||||
|                 FROM attachments  | ||||
|                 WHERE ownerId = ?  | ||||
|                   AND title = ? | ||||
|                   AND isDeleted = 0 | ||||
|                 ORDER BY position`, [this.noteId, title]) | ||||
|             .map(row => new BAttachment(row))[0]; | ||||
|         // cannot use SQL to filter by title since it can be encrypted | ||||
|         return this.getAttachments().filter(attachment => attachment.title === title)[0]; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|   | ||||
| @@ -185,14 +185,8 @@ class BRevision extends AbstractBeccaEntity { | ||||
|  | ||||
|     /** @returns {BAttachment} */ | ||||
|     getAttachmentByTitle(title) { | ||||
|         return sql.getRows(` | ||||
|                 SELECT attachments.* | ||||
|                 FROM attachments  | ||||
|                 WHERE ownerId = ?  | ||||
|                   AND title = ? | ||||
|                   AND isDeleted = 0 | ||||
|                 ORDER BY position`, [this.revisionId, title]) | ||||
|             .map(row => new BAttachment(row))[0]; | ||||
|         // cannot use SQL to filter by title since it can be encrypted | ||||
|         return this.getAttachments().filter(attachment => attachment.title === title)[0]; | ||||
|     } | ||||
|  | ||||
|     beforeSaving() { | ||||
|   | ||||
| @@ -152,7 +152,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line31">line 31</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line32">line 32</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -612,7 +612,7 @@ not for direct use. | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line26">line 26</a> | ||||
|         <a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line27">line 27</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|   | ||||
| @@ -47,7 +47,8 @@ const SpacedUpdate = require("./spaced_update"); | ||||
| const specialNotesService = require("./special_notes"); | ||||
| const branchService = require("./branches"); | ||||
| const exportService = require("./export/zip"); | ||||
| const syncMutex = require("./sync_mutex.js"); | ||||
| const syncMutex = require("./sync_mutex"); | ||||
| const backupService = require("./backup"); | ||||
| const optionsService = require("./options"); | ||||
|  | ||||
|  | ||||
| @@ -691,6 +692,13 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|      */ | ||||
|     this.runOutsideOfSync = syncMutex.doExclusively; | ||||
|  | ||||
|     /** | ||||
|      * @method | ||||
|      * @param {string} backupName - If the backupName is e.g. "now", then the backup will be written to "backup-now.db" file | ||||
|      * @returns {Promise} - resolves once the backup is finished | ||||
|      */ | ||||
|     this.backupNow = backupService.backupNow; | ||||
|  | ||||
|     /** | ||||
|      * This object contains "at your risk" and "no BC guarantees" objects for advanced use cases. | ||||
|      * | ||||
|   | ||||
| @@ -1172,7 +1172,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line378">line 378</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line381">line 381</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1278,7 +1278,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line265">line 265</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line268">line 268</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1380,7 +1380,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line250">line 250</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line253">line 253</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1482,7 +1482,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line259">line 259</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line262">line 262</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1656,7 +1656,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line641">line 641</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line644">line 644</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -1834,7 +1834,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line663">line 663</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line666">line 666</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -2034,7 +2034,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line312">line 312</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line315">line 315</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -2213,7 +2213,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line434">line 434</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line437">line 437</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -2392,7 +2392,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line444">line 444</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line447">line 447</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -2498,7 +2498,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line888">line 888</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line891">line 891</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -2602,7 +2602,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line171">line 171</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line174">line 174</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -2706,7 +2706,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line188">line 188</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line191">line 191</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -2808,7 +2808,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line198">line 198</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line201">line 201</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -2910,7 +2910,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line240">line 240</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line243">line 243</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -3012,7 +3012,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line245">line 245</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line248">line 248</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -3163,7 +3163,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line717">line 717</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line720">line 720</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -3318,7 +3318,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line741">line 741</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line744">line 744</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -3485,7 +3485,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line527">line 527</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line530">line 530</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -3595,7 +3595,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line1004">line 1004</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line1007">line 1007</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -3699,7 +3699,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line883">line 883</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line886">line 886</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -3801,7 +3801,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line783">line 783</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line786">line 786</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -3975,7 +3975,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line630">line 630</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line633">line 633</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -4153,7 +4153,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line652">line 652</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line655">line 655</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -4353,7 +4353,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line299">line 299</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line302">line 302</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -4508,7 +4508,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line711">line 711</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line714">line 714</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -4663,7 +4663,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line735">line 735</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line738">line 738</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -4830,7 +4830,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line519">line 519</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line522">line 522</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -4985,7 +4985,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line723">line 723</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line726">line 726</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -5140,7 +5140,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line747">line 747</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line750">line 750</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -5307,7 +5307,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line593">line 593</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line596">line 596</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -5413,7 +5413,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line163">line 163</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line166">line 166</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -5515,7 +5515,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line178">line 178</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line181">line 181</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -5617,7 +5617,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line206">line 206</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line209">line 209</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -5719,7 +5719,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line211">line 211</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line214">line 214</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -5870,7 +5870,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line729">line 729</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line732">line 732</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -6025,7 +6025,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line759">line 759</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line762">line 762</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -6195,7 +6195,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line769">line 769</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line772">line 772</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -6346,7 +6346,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line753">line 753</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line756">line 756</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -6513,7 +6513,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line601">line 601</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line604">line 604</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -6619,7 +6619,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line932">line 932</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line935">line 935</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -6797,7 +6797,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line400">line 400</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line403">line 403</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -6903,7 +6903,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line873">line 873</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line876">line 876</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -7009,7 +7009,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line863">line 863</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line866">line 866</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -7183,7 +7183,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line610">line 610</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line613">line 613</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -7289,7 +7289,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line193">line 193</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line196">line 196</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -7440,7 +7440,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line679">line 679</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line682">line 682</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -7618,7 +7618,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line621">line 621</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line624">line 624</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -7773,7 +7773,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line673">line 673</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line676">line 676</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -7928,7 +7928,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line699">line 699</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line702">line 702</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -8083,7 +8083,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line705">line 705</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line708">line 708</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -8191,7 +8191,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line856">line 856</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line859">line 859</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -8275,7 +8275,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line453">line 453</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line456">line 456</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -8369,7 +8369,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line927">line 927</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line930">line 930</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -8475,7 +8475,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line919">line 919</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line922">line 922</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -8581,7 +8581,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line137">line 137</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line140">line 140</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
| @@ -8732,7 +8732,7 @@ | ||||
|      | ||||
|     <dt class="tag-source">Source:</dt> | ||||
|     <dd class="tag-source"><ul class="dummy"><li> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line685">line 685</a> | ||||
|         <a href="entities_fnote.js.html">entities/fnote.js</a>, <a href="entities_fnote.js.html#line688">line 688</a> | ||||
|     </li></ul></dd> | ||||
|      | ||||
|  | ||||
|   | ||||
| @@ -121,6 +121,9 @@ class FNote { | ||||
|          * @type {string} | ||||
|          */ | ||||
|         this.mime = row.mime; | ||||
|  | ||||
|         // the main use case to keep this is to detect content change which should trigger refresh | ||||
|         this.blobId = row.blobId; | ||||
|     } | ||||
|  | ||||
|     addParent(parentNoteId, branchId, sort = true) { | ||||
|   | ||||
| @@ -5,8 +5,8 @@ | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * CKEditor 5 (v40.0.0) content styles. | ||||
|  * Generated on Thu, 19 Oct 2023 13:45:23 GMT. | ||||
|  * CKEditor 5 (v40.1.0) content styles. | ||||
|  * Generated on Mon, 20 Nov 2023 08:41:49 GMT. | ||||
|  * For more information, check out https://ckeditor.com/docs/ckeditor5/latest/installation/advanced/content-styles.html | ||||
|  */ | ||||
|  | ||||
| @@ -87,6 +87,13 @@ | ||||
| .ck-content[dir="ltr"] .table th { | ||||
|     text-align: left; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-media-embed/theme/mediaembed.css */ | ||||
| .ck-content .media { | ||||
|     clear: both; | ||||
|     margin: 0.9em 0; | ||||
|     display: block; | ||||
|     min-width: 15em; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ | ||||
| .ck-content .page-break { | ||||
|     position: relative; | ||||
| @@ -123,13 +130,6 @@ | ||||
|     -ms-user-select: none; | ||||
|     user-select: none; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-media-embed/theme/mediaembed.css */ | ||||
| .ck-content .media { | ||||
|     clear: both; | ||||
|     margin: 0.9em 0; | ||||
|     display: block; | ||||
|     min-width: 15em; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-content .todo-list { | ||||
|     list-style: none; | ||||
|   | ||||
							
								
								
									
										4
									
								
								libraries/ckeditor/ckeditor.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								libraries/ckeditor/ckeditor.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										76
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										76
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -1,21 +1,21 @@ | ||||
| { | ||||
|   "name": "trilium", | ||||
|   "version": "0.62.0-beta", | ||||
|   "version": "0.62.5", | ||||
|   "lockfileVersion": 2, | ||||
|   "requires": true, | ||||
|   "packages": { | ||||
|     "": { | ||||
|       "name": "trilium", | ||||
|       "version": "0.62.0-beta", | ||||
|       "version": "0.62.5", | ||||
|       "hasInstallScript": true, | ||||
|       "license": "AGPL-3.0-only", | ||||
|       "dependencies": { | ||||
|         "@braintree/sanitize-url": "6.0.4", | ||||
|         "@electron/remote": "2.0.12", | ||||
|         "@electron/remote": "2.1.0", | ||||
|         "@excalidraw/excalidraw": "0.16.1", | ||||
|         "archiver": "6.0.1", | ||||
|         "async-mutex": "0.4.0", | ||||
|         "axios": "1.6.1", | ||||
|         "axios": "1.6.2", | ||||
|         "better-sqlite3": "8.4.0", | ||||
|         "chokidar": "3.5.3", | ||||
|         "cls-hooked": "4.2.2", | ||||
| @@ -81,11 +81,11 @@ | ||||
|       }, | ||||
|       "devDependencies": { | ||||
|         "cross-env": "7.0.3", | ||||
|         "electron": "25.9.4", | ||||
|         "electron": "25.9.8", | ||||
|         "electron-builder": "24.6.4", | ||||
|         "electron-packager": "17.1.2", | ||||
|         "electron-rebuild": "3.2.9", | ||||
|         "eslint": "8.53.0", | ||||
|         "eslint": "8.54.0", | ||||
|         "eslint-config-airbnb-base": "15.0.0", | ||||
|         "eslint-config-prettier": "9.0.0", | ||||
|         "eslint-plugin-import": "2.29.0", | ||||
| @@ -340,9 +340,9 @@ | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@electron/remote": { | ||||
|       "version": "2.0.12", | ||||
|       "resolved": "https://registry.npmjs.org/@electron/remote/-/remote-2.0.12.tgz", | ||||
|       "integrity": "sha512-IJN6xLAxptq5MCvXNCU6+pdQyz0DjpPtX6g2TPJftu3Z9pU6BTdnos9ZMN8nK471LkASqiA6C+Hzjv5SS8PAQw==", | ||||
|       "version": "2.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/@electron/remote/-/remote-2.1.0.tgz", | ||||
|       "integrity": "sha512-38jzz2beoYTo0DNS+aoaGyLS/fHeNTAc1Aom6HlYsxKnvVWjcg4xriC7J2IUkYSEDHGKX/D7jUst+mH4dHR6QA==", | ||||
|       "peerDependencies": { | ||||
|         "electron": ">= 13.0.0" | ||||
|       } | ||||
| @@ -461,9 +461,9 @@ | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@eslint/js": { | ||||
|       "version": "8.53.0", | ||||
|       "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", | ||||
|       "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", | ||||
|       "version": "8.54.0", | ||||
|       "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", | ||||
|       "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", | ||||
|       "dev": true, | ||||
|       "engines": { | ||||
|         "node": "^12.22.0 || ^14.17.0 || >=16.0.0" | ||||
| @@ -2475,9 +2475,9 @@ | ||||
|       "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" | ||||
|     }, | ||||
|     "node_modules/axios": { | ||||
|       "version": "1.6.1", | ||||
|       "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", | ||||
|       "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", | ||||
|       "version": "1.6.2", | ||||
|       "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", | ||||
|       "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", | ||||
|       "dependencies": { | ||||
|         "follow-redirects": "^1.15.0", | ||||
|         "form-data": "^4.0.0", | ||||
| @@ -4366,9 +4366,9 @@ | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/electron": { | ||||
|       "version": "25.9.4", | ||||
|       "resolved": "https://registry.npmjs.org/electron/-/electron-25.9.4.tgz", | ||||
|       "integrity": "sha512-5pDU8a7o7ZIPTZHAqjflGMq764Favdsc271KXrAT3oWvFTHs5Ve9+IOt5EUVPrwvC2qRWKpCIEM47WzwkTlENQ==", | ||||
|       "version": "25.9.8", | ||||
|       "resolved": "https://registry.npmjs.org/electron/-/electron-25.9.8.tgz", | ||||
|       "integrity": "sha512-PGgp6PH46QVENHuAHc2NT1Su8Q1qov7qIl2jI5tsDpTibwV2zD8539AeWBQySeBU4dhbj9onIl7+1bXQ0wefBg==", | ||||
|       "hasInstallScript": true, | ||||
|       "dependencies": { | ||||
|         "@electron/get": "^2.0.0", | ||||
| @@ -5111,15 +5111,15 @@ | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/eslint": { | ||||
|       "version": "8.53.0", | ||||
|       "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", | ||||
|       "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", | ||||
|       "version": "8.54.0", | ||||
|       "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", | ||||
|       "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "@eslint-community/eslint-utils": "^4.2.0", | ||||
|         "@eslint-community/regexpp": "^4.6.1", | ||||
|         "@eslint/eslintrc": "^2.1.3", | ||||
|         "@eslint/js": "8.53.0", | ||||
|         "@eslint/js": "8.54.0", | ||||
|         "@humanwhocodes/config-array": "^0.11.13", | ||||
|         "@humanwhocodes/module-importer": "^1.0.1", | ||||
|         "@nodelib/fs.walk": "^1.2.8", | ||||
| @@ -13832,9 +13832,9 @@ | ||||
|       } | ||||
|     }, | ||||
|     "@electron/remote": { | ||||
|       "version": "2.0.12", | ||||
|       "resolved": "https://registry.npmjs.org/@electron/remote/-/remote-2.0.12.tgz", | ||||
|       "integrity": "sha512-IJN6xLAxptq5MCvXNCU6+pdQyz0DjpPtX6g2TPJftu3Z9pU6BTdnos9ZMN8nK471LkASqiA6C+Hzjv5SS8PAQw==", | ||||
|       "version": "2.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/@electron/remote/-/remote-2.1.0.tgz", | ||||
|       "integrity": "sha512-38jzz2beoYTo0DNS+aoaGyLS/fHeNTAc1Aom6HlYsxKnvVWjcg4xriC7J2IUkYSEDHGKX/D7jUst+mH4dHR6QA==", | ||||
|       "requires": {} | ||||
|     }, | ||||
|     "@electron/universal": { | ||||
| @@ -13923,9 +13923,9 @@ | ||||
|       } | ||||
|     }, | ||||
|     "@eslint/js": { | ||||
|       "version": "8.53.0", | ||||
|       "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", | ||||
|       "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", | ||||
|       "version": "8.54.0", | ||||
|       "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", | ||||
|       "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "@excalidraw/excalidraw": { | ||||
| @@ -15522,9 +15522,9 @@ | ||||
|       "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" | ||||
|     }, | ||||
|     "axios": { | ||||
|       "version": "1.6.1", | ||||
|       "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", | ||||
|       "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", | ||||
|       "version": "1.6.2", | ||||
|       "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", | ||||
|       "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", | ||||
|       "requires": { | ||||
|         "follow-redirects": "^1.15.0", | ||||
|         "form-data": "^4.0.0", | ||||
| @@ -16964,9 +16964,9 @@ | ||||
|       } | ||||
|     }, | ||||
|     "electron": { | ||||
|       "version": "25.9.4", | ||||
|       "resolved": "https://registry.npmjs.org/electron/-/electron-25.9.4.tgz", | ||||
|       "integrity": "sha512-5pDU8a7o7ZIPTZHAqjflGMq764Favdsc271KXrAT3oWvFTHs5Ve9+IOt5EUVPrwvC2qRWKpCIEM47WzwkTlENQ==", | ||||
|       "version": "25.9.8", | ||||
|       "resolved": "https://registry.npmjs.org/electron/-/electron-25.9.8.tgz", | ||||
|       "integrity": "sha512-PGgp6PH46QVENHuAHc2NT1Su8Q1qov7qIl2jI5tsDpTibwV2zD8539AeWBQySeBU4dhbj9onIl7+1bXQ0wefBg==", | ||||
|       "requires": { | ||||
|         "@electron/get": "^2.0.0", | ||||
|         "@types/node": "^18.11.18", | ||||
| @@ -17539,15 +17539,15 @@ | ||||
|       "dev": true | ||||
|     }, | ||||
|     "eslint": { | ||||
|       "version": "8.53.0", | ||||
|       "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", | ||||
|       "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", | ||||
|       "version": "8.54.0", | ||||
|       "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", | ||||
|       "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "@eslint-community/eslint-utils": "^4.2.0", | ||||
|         "@eslint-community/regexpp": "^4.6.1", | ||||
|         "@eslint/eslintrc": "^2.1.3", | ||||
|         "@eslint/js": "8.53.0", | ||||
|         "@eslint/js": "8.54.0", | ||||
|         "@humanwhocodes/config-array": "^0.11.13", | ||||
|         "@humanwhocodes/module-importer": "^1.0.1", | ||||
|         "@nodelib/fs.walk": "^1.2.8", | ||||
|   | ||||
							
								
								
									
										10
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								package.json
									
									
									
									
									
								
							| @@ -2,7 +2,7 @@ | ||||
|   "name": "trilium", | ||||
|   "productName": "Trilium Notes", | ||||
|   "description": "Trilium Notes", | ||||
|   "version": "0.62.1-beta", | ||||
|   "version": "0.62.6", | ||||
|   "license": "AGPL-3.0-only", | ||||
|   "main": "electron.js", | ||||
|   "bin": { | ||||
| @@ -37,11 +37,11 @@ | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@braintree/sanitize-url": "6.0.4", | ||||
|     "@electron/remote": "2.0.12", | ||||
|     "@electron/remote": "2.1.0", | ||||
|     "@excalidraw/excalidraw": "0.16.1", | ||||
|     "archiver": "6.0.1", | ||||
|     "async-mutex": "0.4.0", | ||||
|     "axios": "1.6.1", | ||||
|     "axios": "1.6.2", | ||||
|     "better-sqlite3": "8.4.0", | ||||
|     "chokidar": "3.5.3", | ||||
|     "cls-hooked": "4.2.2", | ||||
| @@ -104,11 +104,11 @@ | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "cross-env": "7.0.3", | ||||
|     "electron": "25.9.4", | ||||
|     "electron": "25.9.8", | ||||
|     "electron-builder": "24.6.4", | ||||
|     "electron-packager": "17.1.2", | ||||
|     "electron-rebuild": "3.2.9", | ||||
|     "eslint": "8.53.0", | ||||
|     "eslint": "8.54.0", | ||||
|     "eslint-config-airbnb-base": "15.0.0", | ||||
|     "eslint-config-prettier": "9.0.0", | ||||
|     "eslint-plugin-import": "2.29.0", | ||||
|   | ||||
| @@ -427,6 +427,116 @@ paths: | ||||
|             application/json; charset=utf-8: | ||||
|               schema: | ||||
|                 $ref: '#/components/schemas/Error' | ||||
|   /attachments: | ||||
|     post: | ||||
|       description: create an attachment | ||||
|       operationId: postAttachment | ||||
|       requestBody: | ||||
|         required: true | ||||
|         content: | ||||
|           application/json: | ||||
|             schema: | ||||
|               $ref: '#/components/schemas/CreateAttachment' | ||||
|       responses: | ||||
|         '201': | ||||
|           description: attachment created | ||||
|           content: | ||||
|             application/json; charset=utf-8: | ||||
|               schema: | ||||
|                 $ref: '#/components/schemas/Attachment' | ||||
|         default: | ||||
|           description: unexpected error | ||||
|           content: | ||||
|             application/json; charset=utf-8: | ||||
|               schema: | ||||
|                 $ref: '#/components/schemas/Error' | ||||
|   /attachments/{attachmentId}: | ||||
|     parameters: | ||||
|       - name: attachmentId | ||||
|         in: path | ||||
|         required: true | ||||
|         schema: | ||||
|           $ref: '#/components/schemas/EntityId' | ||||
|     get: | ||||
|       description: Returns an attachment identified by its ID | ||||
|       operationId: getAttachmentById | ||||
|       responses: | ||||
|         '200': | ||||
|           description: attachment response | ||||
|           content: | ||||
|             application/json; charset=utf-8: | ||||
|               schema: | ||||
|                 $ref: '#/components/schemas/Attachment' | ||||
|         default: | ||||
|           description: unexpected error | ||||
|           content: | ||||
|             application/json; charset=utf-8: | ||||
|               schema: | ||||
|                 $ref: '#/components/schemas/Error' | ||||
|     patch: | ||||
|       description: patch an attachment identified by the attachmentId with changes in the body. Only role, mime, title, and position are patchable. | ||||
|       operationId: patchAttachmentById | ||||
|       requestBody: | ||||
|         required: true | ||||
|         content: | ||||
|           application/json: | ||||
|             schema: | ||||
|               $ref: '#/components/schemas/Attachment' | ||||
|       responses: | ||||
|         '200': | ||||
|           description: attribute updated | ||||
|           content: | ||||
|             application/json; charset=utf-8: | ||||
|               schema: | ||||
|                 $ref: '#/components/schemas/Attachment' | ||||
|         default: | ||||
|           description: unexpected error | ||||
|           content: | ||||
|             application/json; charset=utf-8: | ||||
|               schema: | ||||
|                 $ref: '#/components/schemas/Error' | ||||
|     delete: | ||||
|       description: deletes an attachment based on the attachmentId supplied. | ||||
|       operationId: deleteAttachmentById | ||||
|       responses: | ||||
|         '204': | ||||
|           description: attachment deleted | ||||
|         default: | ||||
|           description: unexpected error | ||||
|           content: | ||||
|             application/json; charset=utf-8: | ||||
|               schema: | ||||
|                 $ref: '#/components/schemas/Error' | ||||
|   /attachments/{attachmentId}/content: | ||||
|     parameters: | ||||
|       - name: attachmentId | ||||
|         in: path | ||||
|         required: true | ||||
|         schema: | ||||
|           $ref: '#/components/schemas/EntityId' | ||||
|     get: | ||||
|       description: Returns attachment content identified by its ID | ||||
|       operationId: getAttachmentContent | ||||
|       responses: | ||||
|         '200': | ||||
|           description: attachment content response | ||||
|           content: | ||||
|             text/html: | ||||
|               schema: | ||||
|                 type: string | ||||
|     put: | ||||
|       description: Updates attachment content identified by its ID | ||||
|       operationId: putAttachmentContentById | ||||
|       requestBody: | ||||
|         description: html content of attachment | ||||
|         required: true | ||||
|         content: | ||||
|           text/plain: | ||||
|             schema: | ||||
|               type: string | ||||
|       responses: | ||||
|         '204': | ||||
|           description: attachment content updated | ||||
|   /attributes: | ||||
|     post: | ||||
|       description: create an attribute for a given note | ||||
| @@ -474,7 +584,7 @@ paths: | ||||
|               schema: | ||||
|                 $ref: '#/components/schemas/Error' | ||||
|     patch: | ||||
|       description: patch a attribute identified by the attributeId with changes in the body. For labels, only value and position can be updated. For relations, only position can be updated. If you want to modify other properties, you need to delete the old attribute and create a new one. | ||||
|       description: patch an attribute identified by the attributeId with changes in the body. For labels, only value and position can be updated. For relations, only position can be updated. If you want to modify other properties, you need to delete the old attribute and create a new one. | ||||
|       operationId: patchAttributeById | ||||
|       requestBody: | ||||
|         required: true | ||||
| @@ -496,7 +606,7 @@ paths: | ||||
|               schema: | ||||
|                 $ref: '#/components/schemas/Error' | ||||
|     delete: | ||||
|       description: deletes a attribute based on the attributeId supplied. | ||||
|       description: deletes an attribute based on the attributeId supplied. | ||||
|       operationId: deleteAttributeById | ||||
|       responses: | ||||
|         '204': | ||||
| @@ -884,6 +994,57 @@ components: | ||||
|           $ref: '#/components/schemas/Note' | ||||
|         branch: | ||||
|           $ref: '#/components/schemas/Branch' | ||||
|     Attachment: | ||||
|       type: object | ||||
|       description: Attachment is owned by a note, has title and content | ||||
|       properties: | ||||
|         attachmentId: | ||||
|           $ref: '#/components/schemas/EntityId' | ||||
|           readOnly: true | ||||
|         ownerId: | ||||
|           $ref: '#/components/schemas/EntityId' | ||||
|           description: identifies the owner of the attachment, is either noteId or revisionId | ||||
|         role: | ||||
|           type: string | ||||
|         mime: | ||||
|           type: string | ||||
|         title: | ||||
|           type: string | ||||
|         position: | ||||
|           type: integer | ||||
|           format: int32 | ||||
|         blobId: | ||||
|           type: string | ||||
|           description: ID of the blob object which effectively serves as a content hash | ||||
|         dateModified: | ||||
|           $ref: '#/components/schemas/LocalDateTime' | ||||
|           readOnly: true | ||||
|         utcDateModified: | ||||
|           $ref: '#/components/schemas/UtcDateTime' | ||||
|           readOnly: true | ||||
|         utcDateScheduledForErasureSince: | ||||
|           $ref: '#/components/schemas/UtcDateTime' | ||||
|           readOnly: true | ||||
|         contentLength: | ||||
|           type: integer | ||||
|           format: int32 | ||||
|     CreateAttachment: | ||||
|       type: object | ||||
|       properties: | ||||
|         ownerId: | ||||
|           $ref: '#/components/schemas/EntityId' | ||||
|           description: identifies the owner of the attachment, is either noteId or revisionId | ||||
|         role: | ||||
|           type: string | ||||
|         mime: | ||||
|           type: string | ||||
|         title: | ||||
|           type: string | ||||
|         content: | ||||
|           type: string | ||||
|         position: | ||||
|           type: integer | ||||
|           format: int32 | ||||
|     Attribute: | ||||
|       type: object | ||||
|       description: Attribute (Label, Relation) is a key-value record attached to a note. | ||||
|   | ||||
| @@ -117,14 +117,14 @@ async function renderCode(note, $renderedContent) { | ||||
| } | ||||
|  | ||||
| function renderImage(entity, $renderedContent, options = {}) { | ||||
|     const sanitizedTitle = entity.title.replace(/[^a-z0-9-.]/gi, ""); | ||||
|     const encodedTitle = encodeURIComponent(entity.title); | ||||
|  | ||||
|     let url; | ||||
|  | ||||
|     if (entity instanceof FNote) { | ||||
|         url = `api/images/${entity.noteId}/${sanitizedTitle}?${Math.random()}`; | ||||
|         url = `api/images/${entity.noteId}/${encodedTitle}?${Math.random()}`; | ||||
|     } else if (entity instanceof FAttachment) { | ||||
|         url = `api/attachments/${entity.attachmentId}/image/${sanitizedTitle}?${entity.utcDateModified}">`; | ||||
|         url = `api/attachments/${entity.attachmentId}/image/${encodedTitle}?${entity.utcDateModified}">`; | ||||
|     } | ||||
|  | ||||
|     $renderedContent // styles needed for the zoom to work well | ||||
|   | ||||
| @@ -42,6 +42,7 @@ async function createLink(notePath, options = {}) { | ||||
|     const showNotePath = options.showNotePath === undefined ? false : options.showNotePath; | ||||
|     const showNoteIcon = options.showNoteIcon === undefined ? false : options.showNoteIcon; | ||||
|     const referenceLink = options.referenceLink === undefined ? false : options.referenceLink; | ||||
|     const autoConvertToImage = options.autoConvertToImage === undefined ? false : options.autoConvertToImage; | ||||
|  | ||||
|     const { noteId, parentNoteId } = treeService.getNoteIdAndParentIdFromUrl(notePath); | ||||
|     const viewScope = options.viewScope || {}; | ||||
| @@ -58,6 +59,16 @@ async function createLink(notePath, options = {}) { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     const note = await froca.getNote(noteId); | ||||
|  | ||||
|     if (autoConvertToImage && ['image', 'canvas', 'mermaid'].includes(note.type) && viewMode === 'default') { | ||||
|         const encodedTitle = encodeURIComponent(linkTitle); | ||||
|  | ||||
|         return $("<img>") | ||||
|             .attr("src", `api/images/${noteId}/${encodedTitle}?${Math.random()}`) | ||||
|             .attr("alt", linkTitle); | ||||
|     } | ||||
|  | ||||
|     const $container = $("<span>"); | ||||
|  | ||||
|     if (showNoteIcon) { | ||||
| @@ -288,7 +299,7 @@ async function loadReferenceLinkTitle($el, href = null) { | ||||
|  | ||||
|     if (note) { | ||||
|         const icon = await getLinkIcon(noteId, viewScope.viewMode); | ||||
| k | ||||
|  | ||||
|         $el.prepend($("<span>").addClass(icon)); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -97,7 +97,7 @@ export default class IncludeNoteDialog extends BasicWidget { | ||||
|  | ||||
|         const boxSize = $("input[name='include-note-box-size']:checked").val(); | ||||
|  | ||||
|         if (note.type === 'image') { | ||||
|         if (['image', 'canvas', 'mermaid'].includes(note.type)) { | ||||
|             // there's no benefit to use insert note functionlity for images, | ||||
|             // so we'll just add an IMG tag | ||||
|             this.textTypeWidget.addImage(noteId); | ||||
|   | ||||
| @@ -274,16 +274,16 @@ export default class RevisionsDialog extends BasicWidget { | ||||
|  | ||||
|             this.$content.html($table); | ||||
|         } else if (revisionItem.type === 'canvas') { | ||||
|             const sanitizedTitle = revisionItem.title.replace(/[^a-z0-9-.]/gi, ""); | ||||
|             const encodedTitle = encodeURIComponent(revisionItem.title); | ||||
|  | ||||
|             this.$content.html($("<img>") | ||||
|                 .attr("src", `api/revisions/${revisionItem.revisionId}/image/${sanitizedTitle}?${Math.random()}`) | ||||
|                 .attr("src", `api/revisions/${revisionItem.revisionId}/image/${encodedTitle}?${Math.random()}`) | ||||
|                 .css("max-width", "100%")); | ||||
|         } else if (revisionItem.type === 'mermaid') { | ||||
|             const sanitizedTitle = revisionItem.title.replace(/[^a-z0-9-.]/gi, ""); | ||||
|             const encodedTitle = encodeURIComponent(revisionItem.title); | ||||
|  | ||||
|             this.$content.html($("<img>") | ||||
|                 .attr("src", `api/revisions/${revisionItem.revisionId}/image/${sanitizedTitle}?${Math.random()}`) | ||||
|                 .attr("src", `api/revisions/${revisionItem.revisionId}/image/${encodedTitle}?${Math.random()}`) | ||||
|                 .css("max-width", "100%")); | ||||
|  | ||||
|             this.$content.append($("<pre>").text(fullRevision.content)); | ||||
|   | ||||
| @@ -56,7 +56,6 @@ export default class HighlightsListWidget extends RightPanelWidget { | ||||
|                 .class("icon-action"), | ||||
|             new OnClickButtonWidget() | ||||
|                 .icon("bx-x") | ||||
|                 .title("Close Highlights List") | ||||
|                 .titlePlacement("left") | ||||
|                 .onClick(widget => widget.triggerCommand("closeHlt")) | ||||
|                 .class("icon-action") | ||||
|   | ||||
| @@ -258,10 +258,11 @@ export default class NoteDetailWidget extends NoteContextAwareWidget { | ||||
|                         .append($("<h2>").text(this.note.title)) | ||||
|                         .append($promotedAttributes) | ||||
|                         .prop('outerHTML'), | ||||
|  | ||||
|             footer: ` | ||||
| <script src="${assetPath}/libraries/katex/katex.min.js"></script> | ||||
| <script src="${assetPath}/libraries/katex/mhchem.min.js"></script> | ||||
| <script src="${assetPath}/libraries/katex/auto-render.min.js"></script> | ||||
| <script src="${assetPath}/node_modules/katex/dist/katex.min.js"></script> | ||||
| <script src="${assetPath}/node_modules/katex/dist/contrib/mhchem.min.js"></script> | ||||
| <script src="${assetPath}/node_modules/katex/dist/contrib/auto-render.min.js"></script> | ||||
| <script> | ||||
|     document.body.className += ' ck-content printed-content'; | ||||
|      | ||||
| @@ -273,7 +274,7 @@ export default class NoteDetailWidget extends NoteContextAwareWidget { | ||||
|                 `${assetPath}/libraries/codemirror/codemirror.css`, | ||||
|                 `${assetPath}/libraries/ckeditor/ckeditor-content.css`, | ||||
|                 `${assetPath}/libraries/bootstrap/css/bootstrap.min.css`, | ||||
|                 `${assetPath}/libraries/katex/katex.min.css`, | ||||
|                 `${assetPath}/node_modules/katex/dist/katex.min.css`, | ||||
|                 `${assetPath}/stylesheets/print.css`, | ||||
|                 `${assetPath}/stylesheets/relation_map.css`, | ||||
|                 `${assetPath}/stylesheets/ckeditor-theme.css` | ||||
|   | ||||
| @@ -402,11 +402,11 @@ export default class NoteTreeWidget extends NoteContextAwareWidget { | ||||
|                     })); | ||||
|  | ||||
|                     if (notes.length === 1) { | ||||
|                         linkService.createLink(notes[0].noteId, {referenceLink: true}) | ||||
|                         linkService.createLink(notes[0].noteId, {referenceLink: true, autoConvertToImage: true}) | ||||
|                             .then($link => data.dataTransfer.setData("text/html", $link[0].outerHTML)); | ||||
|                     } | ||||
|                     else { | ||||
|                         Promise.all(notes.map(note => linkService.createLink(note.noteId, {referenceLink: true}))).then(links => { | ||||
|                         Promise.all(notes.map(note => linkService.createLink(note.noteId, {referenceLink: true, autoConvertToImage: true}))).then(links => { | ||||
|                             const $list = $("<ul>").append(...links.map($link => $("<li>").append($link))); | ||||
|  | ||||
|                             data.dataTransfer.setData("text/html", $list[0].outerHTML); | ||||
|   | ||||
| @@ -8,8 +8,14 @@ import options from "../../services/options.js"; | ||||
| import utils from "../../services/utils.js"; | ||||
|  | ||||
| const TPL = ` | ||||
| <div> | ||||
| <div class="promoted-attributes-widget"> | ||||
|     <style> | ||||
|     body.mobile .promoted-attributes-widget { | ||||
|         /* https://github.com/zadam/trilium/issues/4468 */ | ||||
|         flex-shrink: 0.4; | ||||
|         overflow: auto; | ||||
|     } | ||||
|      | ||||
|     .promoted-attributes-container { | ||||
|         margin: auto; | ||||
|         display: flex; | ||||
|   | ||||
| @@ -68,7 +68,6 @@ export default class TocWidget extends RightPanelWidget { | ||||
|                 .class("icon-action"), | ||||
|             new OnClickButtonWidget() | ||||
|                 .icon("bx-x") | ||||
|                 .title("Close Table of Contents") | ||||
|                 .titlePlacement("left") | ||||
|                 .onClick(widget => widget.triggerCommand("closeToc")) | ||||
|                 .class("icon-action") | ||||
|   | ||||
| @@ -248,6 +248,7 @@ export default class ExcalidrawTypeWidget extends TypeWidget { | ||||
|  | ||||
|             this.excalidrawRef.current.updateScene(sceneData); | ||||
|             this.excalidrawRef.current.addFiles(fileArray); | ||||
|             this.excalidrawRef.current.history.clear(); | ||||
|         } | ||||
|  | ||||
|         Promise.all( | ||||
|   | ||||
| @@ -365,12 +365,10 @@ export default class EditableTextTypeWidget extends AbstractTextTypeWidget { | ||||
|         const note = await froca.getNote(noteId); | ||||
|  | ||||
|         this.watchdog.editor.model.change( writer => { | ||||
|             const sanitizedTitle = note.title.replace(/[^a-z0-9-.]/gi, ""); | ||||
|             const src = `api/images/${note.noteId}/${sanitizedTitle}`; | ||||
|             const encodedTitle = encodeURIComponent(note.title); | ||||
|             const src = `api/images/${note.noteId}/${encodedTitle}`; | ||||
|  | ||||
|             const imageElement = writer.createElement( 'image',  { 'src': src } ); | ||||
|  | ||||
|             this.watchdog.editor.model.insertContent(imageElement, this.watchdog.editor.model.document.selection); | ||||
|             this.watchdog.editor.execute( 'insertImage', { source: src } ); | ||||
|         } ); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -20,14 +20,14 @@ const eventService = require("../../services/events.js"); | ||||
| function moveBranchToParent(req) { | ||||
|     const {branchId, parentBranchId} = req.params; | ||||
|  | ||||
|     const parentBranch = becca.getBranch(parentBranchId); | ||||
|     const branchToMove = becca.getBranch(branchId); | ||||
|     const targetParentBranch = becca.getBranch(parentBranchId); | ||||
|  | ||||
|     if (!parentBranch || !branchToMove) { | ||||
|     if (!branchToMove || !targetParentBranch) { | ||||
|         throw new ValidationError(`One or both branches '${branchId}', '${parentBranchId}' have not been found`); | ||||
|     } | ||||
|  | ||||
|     return branchService.moveBranchToBranch(branchToMove, parentBranch, branchId); | ||||
|     return branchService.moveBranchToBranch(branchToMove, targetParentBranch, branchId); | ||||
| } | ||||
|  | ||||
| function moveBranchBeforeNote(req) { | ||||
|   | ||||
| @@ -153,8 +153,9 @@ function processContent(images, note, content) { | ||||
|             const buffer = Buffer.from(dataUrl.split(",")[1], 'base64'); | ||||
|  | ||||
|             const attachment = imageService.saveImageToAttachment(note.noteId, buffer, filename, true); | ||||
|             const sanitizedTitle = attachment.title.replace(/[^a-z0-9-.]/gi, ""); | ||||
|             const url = `api/attachments/${attachment.attachmentId}/image/${sanitizedTitle}`; | ||||
|  | ||||
|             const encodedTitle = encodeURIComponent(attachment.title); | ||||
|             const url = `api/attachments/${attachment.attachmentId}/image/${encodedTitle}`; | ||||
|  | ||||
|             log.info(`Replacing '${imageId}' with '${url}' in note '${note.noteId}'`); | ||||
|  | ||||
|   | ||||
| @@ -8,6 +8,7 @@ const cls = require('../../services/cls'); | ||||
| const path = require('path'); | ||||
| const becca = require("../../becca/becca"); | ||||
| const blobService = require("../../services/blob"); | ||||
| const eraseService = require("../../services/erase.js"); | ||||
|  | ||||
| function getRevisionBlob(req) { | ||||
|     const preview = req.query.preview === 'true'; | ||||
| @@ -88,11 +89,11 @@ function eraseAllRevisions(req) { | ||||
|     const revisionIdsToErase = sql.getColumn('SELECT revisionId FROM revisions WHERE noteId = ?', | ||||
|         [req.params.noteId]); | ||||
|  | ||||
|     revisionService.eraseRevisions(revisionIdsToErase); | ||||
|     eraseService.eraseRevisions(revisionIdsToErase); | ||||
| } | ||||
|  | ||||
| function eraseRevision(req) { | ||||
|     revisionService.eraseRevisions([req.params.revisionId]); | ||||
|     eraseService.eraseRevisions([req.params.revisionId]); | ||||
| } | ||||
|  | ||||
| function restoreRevision(req) { | ||||
|   | ||||
| @@ -19,7 +19,8 @@ const SpacedUpdate = require("./spaced_update"); | ||||
| const specialNotesService = require("./special_notes"); | ||||
| const branchService = require("./branches"); | ||||
| const exportService = require("./export/zip"); | ||||
| const syncMutex = require("./sync_mutex.js"); | ||||
| const syncMutex = require("./sync_mutex"); | ||||
| const backupService = require("./backup"); | ||||
| const optionsService = require("./options"); | ||||
|  | ||||
|  | ||||
| @@ -663,6 +664,13 @@ function BackendScriptApi(currentNote, apiParams) { | ||||
|      */ | ||||
|     this.runOutsideOfSync = syncMutex.doExclusively; | ||||
|  | ||||
|     /** | ||||
|      * @method | ||||
|      * @param {string} backupName - If the backupName is e.g. "now", then the backup will be written to "backup-now.db" file | ||||
|      * @returns {Promise} - resolves once the backup is finished | ||||
|      */ | ||||
|     this.backupNow = backupService.backupNow; | ||||
|  | ||||
|     /** | ||||
|      * This object contains "at your risk" and "no BC guarantees" objects for advanced use cases. | ||||
|      * | ||||
|   | ||||
| @@ -1,12 +1,12 @@ | ||||
| const treeService = require("./tree"); | ||||
| const sql = require("./sql"); | ||||
|  | ||||
| function moveBranchToNote(sourceBranch, targetParentNoteId) { | ||||
|     if (sourceBranch.parentNoteId === targetParentNoteId) { | ||||
| function moveBranchToNote(branchToMove, targetParentNoteId) { | ||||
|     if (branchToMove.parentNoteId === targetParentNoteId) { | ||||
|         return {success: true}; // no-op | ||||
|     } | ||||
|  | ||||
|     const validationResult = treeService.validateParentChild(targetParentNoteId, sourceBranch.noteId, sourceBranch.branchId); | ||||
|     const validationResult = treeService.validateParentChild(targetParentNoteId, branchToMove.noteId, branchToMove.branchId); | ||||
|  | ||||
|     if (!validationResult.success) { | ||||
|         return [200, validationResult]; | ||||
| @@ -15,10 +15,10 @@ function moveBranchToNote(sourceBranch, targetParentNoteId) { | ||||
|     const maxNotePos = sql.getValue('SELECT MAX(notePosition) FROM branches WHERE parentNoteId = ? AND isDeleted = 0', [targetParentNoteId]); | ||||
|     const newNotePos = maxNotePos === null ? 0 : maxNotePos + 10; | ||||
|  | ||||
|     const newBranch = sourceBranch.createClone(targetParentNoteId, newNotePos); | ||||
|     const newBranch = branchToMove.createClone(targetParentNoteId, newNotePos); | ||||
|     newBranch.save(); | ||||
|  | ||||
|     sourceBranch.markAsDeleted(); | ||||
|     branchToMove.markAsDeleted(); | ||||
|  | ||||
|     return { | ||||
|         success: true, | ||||
| @@ -26,16 +26,18 @@ function moveBranchToNote(sourceBranch, targetParentNoteId) { | ||||
|     }; | ||||
| } | ||||
|  | ||||
| function moveBranchToBranch(sourceBranch, targetParentBranch) { | ||||
|     const res = moveBranchToNote(sourceBranch, targetParentBranch.noteId); | ||||
| function moveBranchToBranch(branchToMove, targetParentBranch) { | ||||
|     const res = moveBranchToNote(branchToMove, targetParentBranch.noteId); | ||||
|  | ||||
|     if (!res.success) { | ||||
|         return res; | ||||
|     } | ||||
|  | ||||
|     // expanding so that the new placement of the branch is immediately visible | ||||
|     targetParentBranch.isExpanded = true; | ||||
|     targetParentBranch.save(); | ||||
|     if (!targetParentBranch.isExpanded) { | ||||
|         targetParentBranch.isExpanded = true; | ||||
|         targetParentBranch.save(); | ||||
|     } | ||||
|  | ||||
|     return res; | ||||
| } | ||||
|   | ||||
| @@ -1 +1 @@ | ||||
| module.exports = { buildDate:"2023-11-14T00:57:51+01:00", buildRevision: "3abf74a9f336ed9900b88472d3995747587ad67f" }; | ||||
| module.exports = { buildDate:"2024-01-21T23:49:23+01:00", buildRevision: "4f8073daa7cff1b8b6737ae45792b2e87c2adf33" }; | ||||
|   | ||||
| @@ -4,6 +4,7 @@ const becca = require("../becca/becca"); | ||||
| const cloningService = require("./cloning"); | ||||
| const branchService = require("./branches"); | ||||
| const utils = require("./utils"); | ||||
| const eraseService = require("./erase.js"); | ||||
|  | ||||
| const ACTION_HANDLERS = { | ||||
|     addLabel: (action, note) => { | ||||
| @@ -18,7 +19,7 @@ const ACTION_HANDLERS = { | ||||
|         note.deleteNote(deleteId); | ||||
|     }, | ||||
|     deleteRevisions: (action, note) => { | ||||
|         revisionService.eraseRevisions(note.getRevisions().map(rev => rev.revisionId)); | ||||
|         eraseService.eraseRevisions(note.getRevisions().map(rev => rev.revisionId)); | ||||
|     }, | ||||
|     deleteLabel: (action, note) => { | ||||
|         for (const label of note.getOwnedLabels(action.labelName)) { | ||||
|   | ||||
| @@ -48,6 +48,14 @@ function isEntityEventsDisabled() { | ||||
|     return !!namespace.get('disableEntityEvents'); | ||||
| } | ||||
|  | ||||
| function setMigrationRunning(running) { | ||||
|     namespace.set('migrationRunning', !!running); | ||||
| } | ||||
|  | ||||
| function isMigrationRunning() { | ||||
|     return !!namespace.get('migrationRunning'); | ||||
| } | ||||
|  | ||||
| function disableSlowQueryLogging(disable) { | ||||
|     namespace.set('disableSlowQueryLogging', disable); | ||||
| } | ||||
| @@ -102,5 +110,7 @@ module.exports = { | ||||
|     putEntityChange, | ||||
|     ignoreEntityChangeIds, | ||||
|     disableSlowQueryLogging, | ||||
|     isSlowQueryLoggingDisabled | ||||
|     isSlowQueryLoggingDisabled, | ||||
|     setMigrationRunning, | ||||
|     isMigrationRunning | ||||
| }; | ||||
|   | ||||
| @@ -467,7 +467,7 @@ class ConsistencyChecks { | ||||
|                     WHERE blobs.blobId IS NULL`, | ||||
|             ({revisionId, blobId}) => { | ||||
|                 if (this.autoFix) { | ||||
|                     revisionService.eraseRevisions([revisionId]); | ||||
|                     eraseService.eraseRevisions([revisionId]); | ||||
|  | ||||
|                     this.reloadNeeded = true; | ||||
|  | ||||
|   | ||||
| @@ -29,7 +29,7 @@ function eraseNotes(noteIdsToErase) { | ||||
|     const revisionIdsToErase = sql.getManyRows(`SELECT revisionId FROM revisions WHERE noteId IN (???)`, noteIdsToErase) | ||||
|         .map(row => row.revisionId); | ||||
|  | ||||
|     revisionService.eraseRevisions(revisionIdsToErase); | ||||
|     eraseRevisions(revisionIdsToErase); | ||||
|  | ||||
|     log.info(`Erased notes: ${JSON.stringify(noteIdsToErase)}`); | ||||
| } | ||||
| @@ -79,6 +79,18 @@ function eraseAttachments(attachmentIdsToErase) { | ||||
|     log.info(`Erased attachments: ${JSON.stringify(attachmentIdsToErase)}`); | ||||
| } | ||||
|  | ||||
| function eraseRevisions(revisionIdsToErase) { | ||||
|     if (revisionIdsToErase.length === 0) { | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     sql.executeMany(`DELETE FROM revisions WHERE revisionId IN (???)`, revisionIdsToErase); | ||||
|  | ||||
|     setEntityChangesAsErased(sql.getManyRows(`SELECT * FROM entity_changes WHERE entityName = 'revisions' AND entityId IN (???)`, revisionIdsToErase)); | ||||
|  | ||||
|     log.info(`Removed revisions: ${JSON.stringify(revisionIdsToErase)}`); | ||||
| } | ||||
|  | ||||
| function eraseUnusedBlobs() { | ||||
|     const unusedBlobIds = sql.getColumn(` | ||||
|         SELECT blobs.blobId | ||||
| @@ -184,5 +196,6 @@ module.exports = { | ||||
|     eraseUnusedAttachmentsNow, | ||||
|     eraseNotesWithDeleteId, | ||||
|     eraseUnusedBlobs, | ||||
|     eraseAttachments | ||||
|     eraseAttachments, | ||||
|     eraseRevisions | ||||
| }; | ||||
|   | ||||
| @@ -303,8 +303,8 @@ function importEnex(taskContext, file, parentNote) { | ||||
|  | ||||
|                     const attachment = imageService.saveImageToAttachment(noteEntity.noteId, resource.content, originalName, taskContext.data.shrinkImages); | ||||
|  | ||||
|                     const sanitizedTitle = attachment.title.replace(/[^a-z0-9-.]/gi, ""); | ||||
|                     const url = `api/attachments/${attachment.attachmentId}/image/${sanitizedTitle}`; | ||||
|                     const encodedTitle = encodeURIComponent(attachment.title); | ||||
|                     const url = `api/attachments/${attachment.attachmentId}/image/${encodedTitle}`; | ||||
|                     const imageLink = `<img src="${url}">`; | ||||
|  | ||||
|                     content = content.replace(mediaRegex, imageLink); | ||||
|   | ||||
| @@ -302,7 +302,7 @@ const DEFAULT_KEYBOARD_ACTIONS = [ | ||||
|     }, | ||||
|     { | ||||
|         actionName: "lastTab", | ||||
|         defaultShortcuts: ["CommandOrControl+0"], | ||||
|         defaultShortcuts: [], | ||||
|         description: "Activates the last tab in the list", | ||||
|         scope: "window" | ||||
|     }, | ||||
|   | ||||
| @@ -5,12 +5,13 @@ const log = require('./log'); | ||||
| const utils = require('./utils'); | ||||
| const resourceDir = require('./resource_dir'); | ||||
| const appInfo = require('./app_info'); | ||||
| const cls = require('./cls.js'); | ||||
|  | ||||
| async function migrate() { | ||||
|     const currentDbVersion = getDbVersion(); | ||||
|  | ||||
|     if (currentDbVersion < 214) { | ||||
|         log.error("Direct migration from your current version is not supported. Please upgrade to the latest v0.60.X first and only then to this version."); | ||||
|         log.error("Direct migration from your current version is not supported. Please upgrade to the latest v0.60.4 first and only then to this version."); | ||||
|  | ||||
|         utils.crash(); | ||||
|         return; | ||||
| @@ -18,7 +19,7 @@ async function migrate() { | ||||
|  | ||||
|     // backup before attempting migration | ||||
|     await backupService.backupNow( | ||||
|         // creating a special backup for versions 0.60.X, the changes in 0.61 are major. | ||||
|         // creating a special backup for version 0.60.4, the changes in 0.61 are major. | ||||
|         currentDbVersion === 214 | ||||
|             ? `before-migration-v060` | ||||
|             : 'before-migration' | ||||
| @@ -51,6 +52,9 @@ async function migrate() { | ||||
|     // all migrations are executed in one transaction - upgrade either succeeds, or the user can stay at the old version | ||||
|     // otherwise if half of the migrations succeed, user can't use any version - DB is too "new" for the old app, | ||||
|     // and too old for the new app version. | ||||
|  | ||||
|     cls.setMigrationRunning(true); | ||||
|  | ||||
|     sql.transactional(() => { | ||||
|         for (const mig of migrations) { | ||||
|             try { | ||||
|   | ||||
| @@ -471,6 +471,8 @@ function findRelationMapLinks(content, foundLinks) { | ||||
| const imageUrlToAttachmentIdMapping = {}; | ||||
|  | ||||
| async function downloadImage(noteId, imageUrl) { | ||||
|     const unescapedUrl = utils.unescapeHtml(imageUrl); | ||||
|  | ||||
|     try { | ||||
|         let imageBuffer; | ||||
|  | ||||
| @@ -487,14 +489,14 @@ async function downloadImage(noteId, imageUrl) { | ||||
|                 }); | ||||
|             }); | ||||
|         } else { | ||||
|             imageBuffer = await request.getImage(imageUrl); | ||||
|             imageBuffer = await request.getImage(unescapedUrl); | ||||
|         } | ||||
|  | ||||
|         const parsedUrl = url.parse(imageUrl); | ||||
|         const parsedUrl = url.parse(unescapedUrl); | ||||
|         const title = path.basename(parsedUrl.pathname); | ||||
|  | ||||
|         const imageService = require('../services/image'); | ||||
|         const {attachment} = imageService.saveImageToAttachment(noteId, imageBuffer, title, true, true); | ||||
|         const attachment = imageService.saveImageToAttachment(noteId, imageBuffer, title, true, true); | ||||
|  | ||||
|         imageUrlToAttachmentIdMapping[imageUrl] = attachment.attachmentId; | ||||
|  | ||||
| @@ -511,7 +513,7 @@ const downloadImagePromises = {}; | ||||
| function replaceUrl(content, url, attachment) { | ||||
|     const quotedUrl = utils.quoteRegex(url); | ||||
|  | ||||
|     return content.replace(new RegExp(`\\s+src=[\"']${quotedUrl}[\"']`, "ig"), ` src="api/attachments/${encodeURIComponent(attachment.title)}/image"`); | ||||
|     return content.replace(new RegExp(`\\s+src=[\"']${quotedUrl}[\"']`, "ig"), ` src="api/attachments/${attachment.attachmentId}/image/${encodeURIComponent(attachment.title)}"`); | ||||
| } | ||||
|  | ||||
| function downloadImages(noteId, content) { | ||||
| @@ -529,9 +531,9 @@ function downloadImages(noteId, content) { | ||||
|             const imageService = require('../services/image'); | ||||
|             const attachment = imageService.saveImageToAttachment(noteId, imageBuffer, "inline image", true, true); | ||||
|  | ||||
|             const sanitizedTitle = attachment.title.replace(/[^a-z0-9-.]/gi, ""); | ||||
|             const encodedTitle = encodeURIComponent(attachment.title); | ||||
|  | ||||
|             content = `${content.substr(0, imageMatch.index)}<img src="api/attachments/${attachment.attachmentId}/image/${sanitizedTitle}"${content.substr(imageMatch.index + imageMatch[0].length)}`; | ||||
|             content = `${content.substr(0, imageMatch.index)}<img src="api/attachments/${attachment.attachmentId}/image/${encodedTitle}"${content.substr(imageMatch.index + imageMatch[0].length)}`; | ||||
|         } | ||||
|         else if (!url.includes('api/images/') && !/api\/attachments\/.+\/image\/?.*/.test(url) | ||||
|             // this is an exception for the web clipper's "imageId" | ||||
| @@ -636,6 +638,10 @@ function saveAttachments(note, content) { | ||||
|         content = `${content.substr(0, attachmentMatch.index)}<a class="reference-link" href="#root/${note.noteId}?viewMode=attachments&attachmentId=${attachment.attachmentId}">${title}</a>${content.substr(attachmentMatch.index + attachmentMatch[0].length)}`; | ||||
|     } | ||||
|  | ||||
|     // removing absolute references to server to keep it working between instances, | ||||
|     // we also omit / at the beginning to keep the paths relative | ||||
|     content = content.replace(/src="[^"]*\/api\/attachments\//g, 'src="api/attachments/'); | ||||
|  | ||||
|     return content; | ||||
| } | ||||
|  | ||||
| @@ -889,6 +895,15 @@ function scanForLinks(note, content) { | ||||
|  * Things which have to be executed after updating content, but asynchronously (separate transaction) | ||||
|  */ | ||||
| async function asyncPostProcessContent(note, content) { | ||||
|     if (cls.isMigrationRunning()) { | ||||
|         // this is rarely needed for migrations, but can cause trouble by e.g. triggering downloads | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     if (note.hasStringContent() && !utils.isString(content)) { | ||||
|         content = content.toString(); | ||||
|     } | ||||
|  | ||||
|     scanForLinks(note, content); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -160,6 +160,8 @@ function getImage(imageUrl) { | ||||
|     }); | ||||
| } | ||||
|  | ||||
| const HTTP = 'http:', HTTPS = 'https:'; | ||||
|  | ||||
| function getProxyAgent(opts) { | ||||
|     if (!opts.proxy) { | ||||
|         return null; | ||||
| @@ -167,15 +169,15 @@ function getProxyAgent(opts) { | ||||
|  | ||||
|     const {protocol} = url.parse(opts.url); | ||||
|  | ||||
|     if (protocol === 'http:' || protocol === 'https:') { | ||||
|         const protoNoColon = protocol.substr(0, protocol.length - 1); | ||||
|         const AgentClass = require(`${protoNoColon}-proxy-agent`); | ||||
|  | ||||
|         return new AgentClass(opts.proxy); | ||||
|     } | ||||
|     else { | ||||
|     if (![HTTP, HTTPS].includes(protocol)) { | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     const AgentClass = HTTP === protocol | ||||
|         ? require("http-proxy-agent").HttpProxyAgent | ||||
|         : require("https-proxy-agent").HttpsProxyAgent; | ||||
|  | ||||
|     return new AgentClass(opts.proxy); | ||||
| } | ||||
|  | ||||
| function getClient(opts) { | ||||
|   | ||||
| @@ -46,18 +46,6 @@ function protectRevisions(note) { | ||||
|     } | ||||
| } | ||||
|  | ||||
| function eraseRevisions(revisionIdsToErase) { | ||||
|     if (revisionIdsToErase.length === 0) { | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     log.info(`Removing revisions: ${JSON.stringify(revisionIdsToErase)}`); | ||||
|  | ||||
|     sql.executeMany(`DELETE FROM revisions WHERE revisionId IN (???)`, revisionIdsToErase); | ||||
|     sql.executeMany(`UPDATE entity_changes SET isErased = 1, utcDateChanged = '${dateUtils.utcNowDateTime()}' WHERE entityName = 'revisions' AND entityId IN (???)`, revisionIdsToErase); | ||||
| } | ||||
|  | ||||
| module.exports = { | ||||
|     protectRevisions, | ||||
|     eraseRevisions | ||||
|     protectRevisions | ||||
| }; | ||||
|   | ||||
| @@ -10,6 +10,8 @@ class AttributeExistsExp extends Expression { | ||||
|  | ||||
|         this.attributeType = attributeType; | ||||
|         this.attributeName = attributeName; | ||||
|         // template attr is used as a marker for templates, but it's not meant to be inherited | ||||
|         this.isTemplateLabel = this.attributeType === 'label' && (this.attributeName === 'template' || this.attributeName === 'workspacetemplate'); | ||||
|         this.prefixMatch = prefixMatch; | ||||
|     } | ||||
|  | ||||
| @@ -23,12 +25,10 @@ class AttributeExistsExp extends Expression { | ||||
|         for (const attr of attrs) { | ||||
|             const note = attr.note; | ||||
|  | ||||
|             if (attr.isInheritable) { | ||||
|             if (attr.isInheritable && !this.isTemplateLabel) { | ||||
|                 resultNoteSet.addAll(note.getSubtreeNotesIncludingTemplated()); | ||||
|             } | ||||
|             else if (note.isInherited() && | ||||
|                 // template attr is used as a marker for templates, but it's not meant to be inherited | ||||
|                 !(this.attributeType === 'label' && (this.attributeName === 'template' || this.attributeName === 'workspacetemplate'))) { | ||||
|             else if (note.isInherited() && !this.isTemplateLabel) { | ||||
|                 resultNoteSet.addAll(note.getInheritingNotes()); | ||||
|             } | ||||
|             else { | ||||
|   | ||||
| @@ -8,7 +8,7 @@ const becca = require('../becca/becca'); | ||||
|  | ||||
| function validateParentChild(parentNoteId, childNoteId, branchId = null) { | ||||
|     if (['root', '_hidden', '_share', '_lbRoot', '_lbAvailableLaunchers', '_lbVisibleLaunchers'].includes(childNoteId)) { | ||||
|         return { branch: null, success: false, message: `Cannot change this note's location.`}; | ||||
|         return { branch: null, success: false, message: `Cannot change this note's location.` }; | ||||
|     } | ||||
|  | ||||
|     if (parentNoteId === 'none') { | ||||
| @@ -16,14 +16,14 @@ function validateParentChild(parentNoteId, childNoteId, branchId = null) { | ||||
|         return { branch: null, success: false, message: `Cannot move anything into 'none' parent.` }; | ||||
|     } | ||||
|  | ||||
|     const existing = becca.getBranchFromChildAndParent(childNoteId, parentNoteId); | ||||
|     const existingBranch = becca.getBranchFromChildAndParent(childNoteId, parentNoteId); | ||||
|  | ||||
|     if (existing && (branchId === null || existing.branchId !== branchId)) { | ||||
|     if (existingBranch && existingBranch.branchId !== branchId) { | ||||
|         const parentNote = becca.getNote(parentNoteId); | ||||
|         const childNote = becca.getNote(childNoteId); | ||||
|  | ||||
|         return { | ||||
|             branch: existing, | ||||
|             branch: existingBranch, | ||||
|             success: false, | ||||
|             message: `Note "${childNote.title}" note already exists in the "${parentNote.title}".` | ||||
|         }; | ||||
| @@ -52,6 +52,10 @@ function validateParentChild(parentNoteId, childNoteId, branchId = null) { | ||||
|  * Tree cycle can be created when cloning or when moving existing clone. This method should detect both cases. | ||||
|  */ | ||||
| function wouldAddingBranchCreateCycle(parentNoteId, childNoteId) { | ||||
|     if (parentNoteId === childNoteId) { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     const childNote = becca.getNote(childNoteId); | ||||
|     const parentNote = becca.getNote(parentNoteId); | ||||
|  | ||||
| @@ -205,8 +209,9 @@ function sortNotesIfNeeded(parentNoteId) { | ||||
| function setNoteToParent(noteId, prefix, parentNoteId) { | ||||
|     const parentNote = becca.getNote(parentNoteId); | ||||
|  | ||||
|     if (!parentNote) { | ||||
|         throw new Error(`Cannot move note to deleted parent note '${parentNoteId}'`); | ||||
|     if (parentNoteId && !parentNote) { | ||||
|         // null parentNoteId is a valid value | ||||
|         throw new Error(`Cannot move note to deleted / missing parent note '${parentNoteId}'`); | ||||
|     } | ||||
|  | ||||
|     // case where there might be more such branches is ignored. It's expected there should be just one | ||||
|   | ||||
| @@ -63,6 +63,8 @@ function isElectron() { | ||||
| } | ||||
|  | ||||
| function hash(text) { | ||||
|     text = text.normalize(); | ||||
|  | ||||
|     return crypto.createHash('sha1').update(text).digest('base64'); | ||||
| } | ||||
|  | ||||
| @@ -303,6 +305,10 @@ function toMap(list, key) { | ||||
|     return map; | ||||
| } | ||||
|  | ||||
| function isString(x) { | ||||
|     return Object.prototype.toString.call(x) === "[object String]"; | ||||
| } | ||||
|  | ||||
| module.exports = { | ||||
|     randomSecureToken, | ||||
|     randomString, | ||||
| @@ -335,4 +341,5 @@ module.exports = { | ||||
|     normalize, | ||||
|     hashedBlobId, | ||||
|     toMap, | ||||
|     isString | ||||
| }; | ||||
|   | ||||
| @@ -105,10 +105,10 @@ function renderText(result, note) { | ||||
|  | ||||
|         if (result.content.includes(`<span class="math-tex">`)) { | ||||
|             result.header += ` | ||||
| <script src="../../${assetPath}/libraries/katex/katex.min.js"></script> | ||||
| <link rel="stylesheet" href="../../${assetPath}/libraries/katex/katex.min.css"> | ||||
| <script src="../../${assetPath}/libraries/katex/auto-render.min.js"></script> | ||||
| <script src="../../${assetPath}/libraries/katex/mhchem.min.js"></script> | ||||
| <script src="../../${assetPath}/node_modules/katex/dist/katex.min.js"></script> | ||||
| <link rel="stylesheet" href="../../${assetPath}/node_modules/katex/dist/katex.min.css"> | ||||
| <script src="../../${assetPath}/node_modules/katex/dist/contrib/auto-render.min.js"></script> | ||||
| <script src="../../${assetPath}/node_modules/katex/dist/contrib/mhchem.min.js"></script> | ||||
| <script> | ||||
| document.addEventListener("DOMContentLoaded", function() { | ||||
|     renderMathInElement(document.getElementById('content')); | ||||
| @@ -137,7 +137,7 @@ function renderCode(result) { | ||||
|  | ||||
| function renderMermaid(result, note) { | ||||
|     result.content = ` | ||||
| <img src="api/images/${note.noteId}/${note.escapedTitle}?${note.utcDateModified}"> | ||||
| <img src="api/images/${note.noteId}/${note.encodedTitle}?${note.utcDateModified}"> | ||||
| <hr> | ||||
| <details> | ||||
|     <summary>Chart source</summary> | ||||
| @@ -146,7 +146,7 @@ function renderMermaid(result, note) { | ||||
| } | ||||
|  | ||||
| function renderImage(result, note) { | ||||
|     result.content = `<img src="api/images/${note.noteId}/${note.escapedTitle}?${note.utcDateModified}">`; | ||||
|     result.content = `<img src="api/images/${note.noteId}/${note.encodedTitle}?${note.utcDateModified}">`; | ||||
| } | ||||
|  | ||||
| function renderFile(note, result) { | ||||
|   | ||||
| @@ -490,6 +490,10 @@ class SNote extends AbstractShacaEntity { | ||||
|         return escape(this.title); | ||||
|     } | ||||
|  | ||||
|     get encodedTitle() { | ||||
|         return encodeURIComponent(this.title); | ||||
|     } | ||||
|  | ||||
|     getPojo() { | ||||
|         return { | ||||
|             noteId: this.noteId, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user