Compare commits

...

696 Commits

Author SHA1 Message Date
zadam
58d71bf8e3 release 0.58.6 2023-01-16 22:39:28 +01:00
zadam
9fd0b85ff2 doc note for the back/forward launchers 2023-01-16 22:37:21 +01:00
zadam
98620887d4 fix demo steel blue main menu icon 2023-01-16 22:19:36 +01:00
zadam
9eff08144c extra check that hidden tree is not created until migration is completed 2023-01-16 08:06:19 +01:00
zadam
4ba72bc8d3 fixed standalone anonymize script 2023-01-15 21:05:03 +01:00
zadam
743979266a fix history navigation buttons in server, #3527 2023-01-15 19:46:32 +01:00
zadam
4f98c960ec fix note revision for images 2023-01-15 19:23:28 +01:00
zadam
424b624ea9 small mermaid fixes 2023-01-15 13:48:01 +01:00
zadam
a004a8b092 fix loading custom themes in Options, closes #3528 2023-01-15 12:54:38 +01:00
zadam
df0f52aff9 clarified comment 2023-01-14 23:16:57 +01:00
zadam
f7bd72ba2f release 0.58.5 2023-01-14 23:02:39 +01:00
zadam
038c0e78a6 fix options check in froca 2023-01-14 23:01:02 +01:00
zadam
2a2cbcd68b fix duplicate unique key in migration, #3526 2023-01-14 22:57:39 +01:00
zadam
14da697a4e put firing of the runOnNoteContentChange on entity level instead of service level, #3436 2023-01-14 12:57:50 +01:00
zadam
2525857c20 fix null content when protecting notes, closes #3523 2023-01-14 00:01:24 +01:00
zadam
8eaef3e1d8 add runOnNoteContentChange into the autocomplete 2023-01-13 14:28:41 +01:00
zadam
082caf98e8 restore all "named" notes quickly after their deletion, #3517 2023-01-13 11:53:25 +01:00
zadam
60602a2264 fix creating notes into options, #3517 2023-01-13 11:34:35 +01:00
zadam
9479f1c1a1 toggling archived notes caused appearance of hidden subtree, fixes #3519 2023-01-13 11:25:58 +01:00
zadam
88bc7402a2 hidden notes should not appear in the global search unless hoisted into it, #3516 2023-01-13 10:09:41 +01:00
zadam
e7b3c3239b fix migration of bookmarks to also migrate bookmarkFolder #3514 2023-01-13 08:43:18 +01:00
zadam
4f4c3ef3f3 fix enex checkboxes for mac, closes #3511 2023-01-12 16:45:11 +01:00
zadam
decfeb366c zoom factor should be rounded to 1 floating point digit 2023-01-12 08:27:08 +01:00
zadam
420175f5ef release 0.58.4 2023-01-11 23:44:33 +01:00
zadam
bdfdc0402d update content should parse out links #3509 2023-01-11 23:22:51 +01:00
zadam
bb8496cb3f ETAPI method to create note revision, #3509 2023-01-11 23:18:51 +01:00
zadam
4bdb94fbaa ancestorDepth should be treated as string in ETAPI, fixes #3510 2023-01-11 23:08:57 +01:00
zadam
5bf9c253f2 toc fix 2023-01-10 16:16:13 +01:00
zadam
b0cc177d84 make heading regex in TOC case insensitive 2023-01-10 15:06:21 +01:00
zadam
c60f25fb7c more flexible heading regex 2023-01-10 00:00:46 +01:00
zadam
571cb6d0eb fix dynamic module import 2023-01-09 22:32:49 +01:00
zadam
f738787202 expand regex to account for more attributes in en-media tag in ENEX import, fixes #3503 2023-01-08 20:50:08 +01:00
zadam
4ae1b6e07b sender route should respect inbox, #3502 2023-01-08 20:40:38 +01:00
zadam
41b8f6882c note content renderer should load reference link titles, fixes #3499 2023-01-08 20:31:55 +01:00
zadam
43c5163f66 renamed closing commands 2023-01-08 13:58:51 +01:00
zadam
8a2a9b2ea6 Merge branch 'stable'
# Conflicts:
#	src/services/import/enex.js
2023-01-08 13:24:10 +01:00
zadam
c70272e756 fix creation date in ENEX import for mac files, closes #3496 2023-01-08 13:23:07 +01:00
zadam
843f5d0da1 gitignore 2023-01-08 12:54:55 +01:00
zadam
f86fb0d0a2 added TRILIUM_SYNC_SERVER_HOST env. variable to prevent prod sync issues 2023-01-06 15:14:04 +01:00
zadam
218f526a92 fix order by note content size, closes #3488 2023-01-05 15:52:07 +01:00
zadam
161b45aa12 Merge pull request #3489 from Nriver/master
use api.showMessage instead of alert
2023-01-05 15:24:42 +01:00
zadam
397629587c Merge remote-tracking branch 'origin/master' 2023-01-05 15:23:31 +01:00
zadam
034098fd06 don't use alert, #3483 2023-01-05 15:23:22 +01:00
Nriver
e03cc01e15 use api.showMessage instead of alert 2023-01-05 09:02:40 +08:00
zadam
0995c56506 release 0.58.3-beta 2023-01-04 22:36:31 +01:00
zadam
3a5fa2954d Merge remote-tracking branch 'origin/master' 2023-01-03 22:36:56 +01:00
zadam
398480415e package-lock.json 2023-01-03 22:36:41 +01:00
zadam
81013ed21a Merge branch 'stable'
# Conflicts:
#	package-lock.json
#	package.json
2023-01-03 22:35:45 +01:00
zadam
53360c147a npm script improvements 2023-01-03 22:34:31 +01:00
zadam
9e47da3f03 Merge pull request #3150 from zadam/dependabot/npm_and_yarn/json-schema-and-jsprim-0.4.0
Bump json-schema and jsprim
2023-01-03 22:32:36 +01:00
zadam
faefe10c15 Merge pull request #3423 from zadam/dependabot/npm_and_yarn/terser-5.16.1
Bump terser from 5.10.0 to 5.16.1
2023-01-03 22:32:15 +01:00
zadam
a4d3150a24 Merge pull request #2739 from zadam/dependabot/npm_and_yarn/nanoid-3.3.1
Bump nanoid from 3.1.30 to 3.3.1
2023-01-03 22:31:57 +01:00
zadam
e1f0676891 Merge pull request #3197 from zadam/dependabot/npm_and_yarn/dump-db/minimist-1.2.7
Bump minimist from 1.2.5 to 1.2.7 in /dump-db
2023-01-03 22:31:08 +01:00
zadam
792ac9b77d Merge pull request #3408 from zadam/dependabot/npm_and_yarn/qs-6.5.3
Bump qs from 6.5.2 to 6.5.3
2023-01-03 22:30:42 +01:00
zadam
bbbd2f7e82 Merge pull request #3481 from contributor/feature/safeVsCodeLaunch
Safe Vs Code debug launch
2023-01-03 22:29:36 +01:00
zadam
d910191e83 Merge pull request #3480 from contributor/feature/pageUrlSanitizeUrl
Fix pageUrl and clipping selection can create multiple notes for the same Url
2023-01-03 22:28:37 +01:00
zadam
e8a9389e6d remove console.log 2023-01-03 21:44:47 +01:00
zadam
6dce13bc34 export root note fix, #2346 2023-01-03 21:30:49 +01:00
contributor
71cdea3902 fix vscode launch can break release app data 2023-01-03 21:39:35 +02:00
contributor
85a6e8b47e fix clipping selection can create multiple notes for the same Url
sanitize was replacing '&' char to '&'and changing actual Url
2023-01-03 21:18:23 +02:00
contributor
f02ad63e97 npm i @braintree/sanitize-url 2023-01-03 21:18:23 +02:00
contributor
977399a73e refac: better naming 2023-01-03 21:18:23 +02:00
zadam
291ef87c9b fix edit button 2023-01-02 22:32:05 +01:00
zadam
115bf0af4d fix button paddings 2023-01-02 21:08:20 +01:00
zadam
e40f1fd11a fix inclusion of the image into the correct position in ENEX import, closes #3468 2023-01-01 21:02:54 +01:00
zadam
797ddf6205 search hit with exact note title match gets a strong score boost, closes #3470 2022-12-30 23:14:48 +01:00
zadam
ca4e1c19a7 make utils.normalize null-safe, #3469 2022-12-30 21:00:42 +01:00
zadam
dd82b0f958 Merge remote-tracking branch 'origin/master' 2022-12-29 10:25:54 +01:00
zadam
f150c223bc improved ZIP import validation and error handling 2022-12-29 10:25:49 +01:00
zadam
4f771cfa7a Merge pull request #3467 from contributor/feature/enex-pageUrl
Evernote import - use pageUrl attribute for enex source-url
2022-12-29 09:57:43 +01:00
contributor
aa3b26c965 Evernote import - use pageUrl attribute for enex source-url 2022-12-29 01:27:17 +02:00
zadam
f4cf04232f release 0.58.2-beta 2022-12-29 00:12:54 +01:00
zadam
d36cf47974 no-dir npm scripts 2022-12-28 23:17:59 +01:00
zadam
f809da58ec fix occurrences of 'root' branch 2022-12-28 13:09:49 +01:00
zadam
ff1f01be8c erase deleted notes in the migration 2022-12-28 12:58:53 +01:00
zadam
0ddaa8f5c2 migration fixes 2022-12-27 21:17:40 +01:00
zadam
620bed73bb put back the removed widgets, the BC break is not worth it 2022-12-27 15:05:12 +01:00
zadam
c177d2b97b fix migration 2022-12-27 14:52:32 +01:00
zadam
0758c82983 hidden subtree is now built as "predictable" to avoid duplicating it in sync 2022-12-27 14:44:28 +01:00
zadam
ecc2ed7d73 formatting 2022-12-27 10:22:50 +01:00
zadam
4b779d7512 small refactors in sync 2022-12-27 09:53:25 +01:00
zadam
701911b766 release 0.58.1-beta 2022-12-26 23:57:31 +01:00
zadam
7a8bbdced8 fix cursor in the textarea, closes #3459 2022-12-26 20:07:04 +01:00
zadam
affd8062e2 escape note titles in note map 2022-12-26 10:52:28 +01:00
zadam
2cfc43a4fd Merge pull request #3456 from WPum/patch-1
sync chinese readme with the english version
2022-12-25 19:53:34 +01:00
WPum
fb789b7bd8 sync chinese readme with the english version 2022-12-25 23:42:44 +08:00
zadam
b906efb23b fix ZIP import without metadata 2022-12-25 14:10:12 +01:00
zadam
f249d6cb26 fix sorting after cloning/moving notes into sorted parent, closes #3453 2022-12-25 13:46:31 +01:00
zadam
afb6e860ea fix docs 2022-12-25 13:06:06 +01:00
zadam
435e042ae9 fix docs 2022-12-25 13:03:22 +01:00
zadam
d64df5e3e7 fix comment 2022-12-25 13:03:04 +01:00
zadam
bd59802ca4 create new sortNotes backend API method and deprecate old sortNotesByTitle 2022-12-25 13:01:50 +01:00
zadam
7c98ade72b fix missing doc resources for launchers, closes #3455 2022-12-25 11:58:24 +01:00
zadam
c6485f8e03 fix assuming that trilium is exposed on the root path, closes #3452 2022-12-25 10:48:51 +01:00
zadam
a083917db1 fix context menu in browser for launchers, closes #3454 2022-12-25 10:33:31 +01:00
zadam
3b5f2b86d5 release 0.58.0-beta 2022-12-24 22:09:05 +01:00
zadam
f08fbf7bca fix migration 2022-12-24 21:25:34 +01:00
zadam
e2b227df34 make initialization of launchers more robust 2022-12-24 14:42:35 +01:00
zadam
4c51588270 custom widget launchers should not be initialized in safe mode 2022-12-24 13:57:42 +01:00
zadam
b13ea72152 autorefresh bookmarks on #bookmarkFolder change 2022-12-24 13:31:38 +01:00
zadam
5a2907b670 delete preview takes into account strong/weak branches 2022-12-24 13:15:19 +01:00
zadam
b6f7c604c7 fix share migration 2022-12-24 12:54:17 +01:00
zadam
c5fb2cccd5 fix bookmark's ID 2022-12-24 12:26:32 +01:00
zadam
1d1e6ae782 disallow dropping notes before/after available/visible launchers 2022-12-24 07:22:05 +01:00
zadam
bff33932d9 fix migration to not rely on branchId 2022-12-24 07:17:22 +01:00
zadam
392b89e6dd exported links to "named" notes should be preserved upon import 2022-12-23 23:08:30 +01:00
zadam
5ae0a5cf1e randomize existing fixed branchIds so it's clear they should not be relied upon 2022-12-23 21:13:00 +01:00
zadam
1a1fb126c1 randomize existing fixed branchIds so it's clear they should not be relied upon 2022-12-23 20:55:37 +01:00
zadam
5c4db266a4 code should not rely on fixed branch IDs since they can change after move 2022-12-23 20:40:58 +01:00
zadam
e5e0add1a2 fixed history navigation buttons 2022-12-23 20:17:04 +01:00
zadam
e1d20b8ff8 fix relation map buttons 2022-12-23 19:47:49 +01:00
zadam
c6a05d8853 fix calendar widget when hoisted into hidden subtree 2022-12-23 15:46:33 +01:00
zadam
c34bccf7e8 note map can display notes if hoisted in hidden subtree 2022-12-23 15:32:11 +01:00
zadam
0441e7396a small fixes 2022-12-23 15:07:48 +01:00
zadam
698eb53006 small fixes 2022-12-23 14:18:40 +01:00
zadam
3804d2df8c search should find notes in hidden subtree when hoisted into it 2022-12-23 14:02:18 +01:00
zadam
7147cc267e small fixes 2022-12-22 23:38:57 +01:00
zadam
29713de6cd small fixes 2022-12-22 23:11:12 +01:00
zadam
46f40ee534 fix options 2022-12-22 22:52:04 +01:00
zadam
a882ad41c5 small fixes 2022-12-22 21:01:52 +01:00
zadam
062e8c4b84 allow configuration of log, backup etc. directories per env variables, closes #3446 2022-12-22 19:50:00 +01:00
zadam
0f0ca51bd6 updated launcher info pages 2022-12-22 19:02:41 +01:00
zadam
af654a171f execute all DB migrations in one transaction 2022-12-22 18:53:04 +01:00
zadam
186e06bc01 descs for execute button 2022-12-22 18:37:32 +01:00
zadam
4cc9bdf5e4 Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	package-lock.json
2022-12-22 18:16:06 +01:00
zadam
e05e4bec32 fix old migration to avoid unique constraints problems, closes #3447 2022-12-22 15:11:20 +01:00
zadam
5a3882f388 fixed comments 2022-12-22 14:59:20 +01:00
zadam
8ec2547b4a backend API to create a launcher 2022-12-22 14:57:00 +01:00
zadam
059c339c09 fix warnings in ckeditor 2022-12-21 23:10:13 +01:00
zadam
724f99f17c add prefix "_" to "named" IDs 2022-12-21 16:11:00 +01:00
zadam
1b24276a4a always use template strings instead of string concatenation 2022-12-21 15:19:05 +01:00
zadam
ea006993f6 added a "script executor" ribbon widget 2022-12-20 23:46:44 +01:00
zadam
7a46159539 code buttons into the floating buttons (WIP) 2022-12-20 23:20:59 +01:00
zadam
50faa40bad apply color label also on note map, #3443 2022-12-20 20:41:51 +01:00
zadam
9d9305300c scale the whole edit widget, not just the icon 2022-12-20 20:25:52 +01:00
zadam
c89455f93f edit button grows and shakes on the first display #2483 2022-12-20 20:20:24 +01:00
zadam
7c6d67f1ad migration comments 2022-12-19 23:49:41 +01:00
zadam
8c4dda45ef bookmark buttons should behave similarly as other launcher buttons in respect to context menu, ctrl-click, left click 2022-12-19 23:19:47 +01:00
zadam
db5e76fe8c allow access to share api root note only if there's share index, #3434 2022-12-19 21:39:12 +01:00
zadam
5413a1aa79 create new runOnNoteContentChange event, #3436 2022-12-18 23:53:47 +01:00
zadam
e41104208a added today launcher 2022-12-18 23:25:35 +01:00
zadam
5fca606730 added note hoisting option to the note launcher 2022-12-18 22:05:06 +01:00
zadam
0de0b6fd06 sync status widget fix 2022-12-18 20:29:17 +01:00
zadam
db6dbc7821 can't create non-launcher notes into the launcher subtree 2022-12-18 20:12:43 +01:00
zadam
e5171e434b fix small gap between menu and submenu where hover can disappear 2022-12-18 19:45:36 +01:00
zadam
2df7d99a91 routes refactoring 2022-12-18 16:12:29 +01:00
zadam
6def541e78 improve compatibility with common js, #3436 2022-12-18 12:58:26 +01:00
zadam
5af506e268 reimplementation of frontend's api.addButtonToToolbar() to smoothen the upgrade 2022-12-17 21:46:51 +01:00
zadam
967919b400 fix note preloading in tab loading 2022-12-17 13:33:57 +01:00
zadam
575f09d97f fix display of title buttons 2022-12-17 13:28:53 +01:00
zadam
c28383de4f full search shows search errors, closes #3221 2022-12-17 13:07:42 +01:00
zadam
c496519095 Merge remote-tracking branch 'origin/master' 2022-12-17 11:58:36 +01:00
zadam
ecaa9a1d56 quick search shows search errors #3221 2022-12-17 11:58:30 +01:00
zadam
d34a0a9fc0 hidden subtree is not archived anymore 2022-12-16 16:00:49 +01:00
zadam
b202b43bf5 added watchdog for CKEditor to recover from crashes, fixes #3227 2022-12-15 21:45:47 +01:00
zadam
648dd73fa1 mermaid 9.3.0 2022-12-15 20:37:59 +01:00
zadam
1640a8aa7d Merge remote-tracking branch 'origin/master' 2022-12-15 18:58:54 +01:00
zadam
698a6bf91c ckeditor 35.4.0 2022-12-15 18:58:47 +01:00
dependabot[bot]
c409d7ff2a Bump qs from 6.5.2 to 6.5.3
Bumps [qs](https://github.com/ljharb/qs) from 6.5.2 to 6.5.3.
- [Release notes](https://github.com/ljharb/qs/releases)
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.5.2...v6.5.3)

---
updated-dependencies:
- dependency-name: qs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-15 15:39:13 +00:00
dependabot[bot]
f8dd175837 Bump terser from 5.10.0 to 5.16.1
Bumps [terser](https://github.com/terser/terser) from 5.10.0 to 5.16.1.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/compare/v5.10.0...v5.16.1)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-15 15:39:04 +00:00
zadam
195c6a4089 backend log improvements 2022-12-15 16:38:05 +01:00
zadam
6c431ae5ed fix enex import splitting image/resource into multiple chunks, closes #3424 2022-12-15 14:14:21 +01:00
zadam
8c01a77a7a docs update 2022-12-14 23:51:56 +01:00
zadam
239c68a33c docs update 2022-12-14 23:51:28 +01:00
dependabot[bot]
df3212c304 Bump minimist from 1.2.5 to 1.2.7 in /dump-db
Bumps [minimist](https://github.com/minimistjs/minimist) from 1.2.5 to 1.2.7.
- [Release notes](https://github.com/minimistjs/minimist/releases)
- [Changelog](https://github.com/minimistjs/minimist/blob/main/CHANGELOG.md)
- [Commits](https://github.com/minimistjs/minimist/compare/v1.2.5...v1.2.7)

---
updated-dependencies:
- dependency-name: minimist
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-14 22:50:02 +00:00
zadam
4026c2be4f Merge branch 'next58'
# Conflicts:
#	src/public/app/widgets/note_tree.js
#	src/services/tree.js
2022-12-14 23:48:58 +01:00
zadam
c6614bc85b removed logging 2022-12-14 23:45:55 +01:00
zadam
31b3af4129 label update should trigger parent resort, fixes #3366 2022-12-14 23:44:26 +01:00
zadam
c4b0c44919 change of archived label should force a reload of the parents since it can change its visibility status, fixes #3422 2022-12-14 19:26:39 +01:00
zadam
223ca95829 added error logs to bug report template 2022-12-14 12:28:08 +01:00
zadam
b9ae68d559 small fixes 2022-12-14 12:26:04 +01:00
zadam
e7470e31a0 Merge branch 'stable' 2022-12-14 11:20:55 +01:00
zadam
1b6d0c9bbc global menu improvements 2022-12-14 10:29:14 +01:00
zadam
75639c53f0 unhoist button on the left 2022-12-14 10:18:29 +01:00
zadam
587387dd46 improved error handling in case of errors during initial tabs loading 2022-12-14 10:00:33 +01:00
zadam
ffb3c044fa release 0.57.5 2022-12-13 23:08:52 +01:00
DynamoFox
921f75beba Fix missing share.js in public/app-dist folder; Delete unused public/app folder (Docker build)
(cherry picked from commit f45478260e)
2022-12-13 22:40:28 +01:00
zadam
f739259407 Merge pull request #3410 from DynamoFox/fix-missing-sharejs-file
Fix missing share.js in public/app-dist folder; Delete unused public/app folder (Docker build)
2022-12-13 22:39:28 +01:00
zadam
173b28062e advanced submenu is available in mobile 2022-12-13 22:29:26 +01:00
zadam
4f51f73b89 mobile interface should not create new tabs 2022-12-13 21:45:57 +01:00
zadam
ca968a9e31 hoisting support in mobile view WIP 2022-12-13 16:57:46 +01:00
zadam
2957e1d78a improvements in mobile layout for launchbar 2022-12-12 23:48:34 +01:00
zadam
d1b989ac12 Merge remote-tracking branch 'origin/stable' into next58 2022-12-12 21:43:56 +01:00
zadam
e3047ee450 Merge remote-tracking branch 'origin/master' into next58 2022-12-12 21:43:45 +01:00
DynamoFox
f45478260e Fix missing share.js in public/app-dist folder; Delete unused public/app folder (Docker build) 2022-12-12 21:39:10 +01:00
zadam
1bfd26ee8f release 0.57.4 2022-12-11 23:24:24 +01:00
zadam
bbdb7375ff Merge pull request #3406 from deajan/fix-powershell-exec-policy
Fix powershell exec policy
2022-12-11 23:16:37 +01:00
zadam
23322455a3 mobile layout now has launchbar 2022-12-11 22:26:18 +01:00
zadam
c1d4d3fc8a mobile layout improvements 2022-12-11 21:27:03 +01:00
Orsiris de Jong
fc40e54261 Remove unnecessary powershell scripts 2022-12-11 18:24:29 +01:00
Orsiris de Jong
87e833d373 Use inline powershell launcher, add unicode support for batch 2022-12-11 18:23:50 +01:00
zadam
dcfa9c4c0b mobile layout has floating buttons 2022-12-11 13:54:12 +01:00
zadam
c231b3cb79 styling changes of buttons 2022-12-11 13:20:37 +01:00
zadam
1f468f81cc Merge remote-tracking branch 'origin/next58' into next58
# Conflicts:
#	src/public/app/components/note_context.js
2022-12-10 14:37:02 +01:00
zadam
494f8d2153 fix reopening the very last tab, closes #3397 2022-12-10 14:35:58 +01:00
zadam
0f822b2761 global note map should not rehoist 2022-12-09 16:54:22 +01:00
zadam
5ac332960e note launchers by default open in the active note context but follow the same logic with ctrl/middle click as links 2022-12-09 16:48:00 +01:00
zadam
dfb462cf35 introduced new exception classes for structured error reporting 2022-12-09 16:13:22 +01:00
zadam
342ae6e5e2 introduced new exception classes for structured error reporting 2022-12-09 16:04:13 +01:00
zadam
eaf195e0c8 Merge remote-tracking branch 'origin/stable' into next58 2022-12-09 15:19:06 +01:00
zadam
9460cfdc55 Merge remote-tracking branch 'origin/master' into next58 2022-12-09 15:18:51 +01:00
zadam
c44bc60667 when opening a note from hidden subtree, make sure we're hoisted 2022-12-08 23:36:49 +01:00
zadam
8d6801bb85 new split should keep the hoisted note 2022-12-08 23:29:08 +01:00
zadam
c22b6b29e0 options fixes 2022-12-08 15:29:14 +01:00
zadam
44997f5cd1 options fixes 2022-12-08 15:18:41 +01:00
zadam
95f4195ca7 shortcuts layout fix 2022-12-08 14:27:21 +01:00
zadam
73eb585398 fixed migrations 2022-12-08 13:45:56 +01:00
DynamoFox
57d381b990 Fix missing boxicons icons; Add missing boxicons LICENSE file from upstream
(cherry picked from commit d06d4ba437)
2022-12-08 00:01:09 +01:00
zadam
e5ba6ff496 Merge pull request #3394 from DynamoFox/fix-missing-boxicons-icons
Fix missing boxicons icons; Add missing boxicons LICENSE file from upstream
2022-12-08 00:00:20 +01:00
zadam
128023d34e attempt to fix the ws crash, #3374 2022-12-07 23:58:22 +01:00
zadam
653f80f7d8 WIP 2022-12-07 23:37:40 +01:00
DynamoFox
d06d4ba437 Fix missing boxicons icons; Add missing boxicons LICENSE file from upstream 2022-12-07 20:32:19 +01:00
zadam
2a68bdb690 raw conversion of all options tabs 2022-12-07 16:02:08 +01:00
zadam
5f6a10ef22 options widget work 2022-12-07 15:37:53 +01:00
zadam
2ad19ddd36 generate hidden subtree declaratively 2022-12-07 12:46:41 +01:00
zadam
5fc9f5f3f9 improvements 2022-12-06 23:48:44 +01:00
zadam
b9632a7814 rename note types to camelCase 2022-12-06 23:01:42 +01:00
zadam
f336435adb appearance options broken up into individual widgets 2022-12-06 22:43:35 +01:00
zadam
9e83368f87 appearance tab in hidden subtree 2022-12-06 17:05:21 +01:00
zadam
d619a7a2d7 rename "widget" type to "content-widget" 2022-12-06 16:23:49 +01:00
zadam
012fb1f50b rename "widget" type to "content-widget" 2022-12-06 16:23:30 +01:00
zadam
d64b575e60 added isBeingDeleted to be able to recognize that note is being deleted while still leaving it accessible 2022-12-06 16:11:43 +01:00
zadam
aec2c2d5cd appearance options as a special note 2022-12-05 23:57:29 +01:00
zadam
0d06d5ccee dump-db should not contain node_modules in release artifacts 2022-12-04 23:49:16 +01:00
zadam
74fdaad032 mobile fix 2022-12-04 22:59:09 +01:00
zadam
d3bf0c1d8e bookmark migration 2022-12-04 20:05:18 +01:00
zadam
27ce273d29 bookmarks use cloning 2022-12-04 13:16:05 +01:00
zadam
cd60ad4267 improvements 2022-12-03 21:11:49 +01:00
zadam
56e01046c8 Merge branch 'master' into next58 2022-12-03 13:28:21 +01:00
zadam
518a413de7 fix internal link creation, closes #3376 2022-12-03 13:26:33 +01:00
zadam
29923af17d Merge remote-tracking branch 'origin/next58' into next58 2022-12-03 13:01:10 +01:00
zadam
99a5774148 Merge branch 'master' into next58
# Conflicts:
#	package-lock.json
2022-12-03 13:01:03 +01:00
zadam
46fdd15857 release 0.57.3 2022-12-02 22:44:40 +01:00
zadam
42cd333694 clarification on the 5 minute sync auth leeway 2022-12-02 22:12:07 +01:00
zadam
aaa69f696b Merge remote-tracking branch 'origin/master' 2022-12-02 22:07:41 +01:00
zadam
8ce9dcf4aa fix webmanifest and robots.txt 2022-12-02 22:06:18 +01:00
zadam
130ded91ff Merge pull request #3375 from DynamoFox/fix-dockerfile-to-generate-webpack-bundle
Fix missing webpack bundle generation in Docker container build
2022-12-02 21:09:50 +01:00
DynamoFox
851465da62 Fix missing webpack bundle generation in Docker container build 2022-12-02 18:15:03 +01:00
zadam
b85f335561 launcher improvements 2022-12-02 16:46:14 +01:00
zadam
7b36709e18 Merge remote-tracking branch 'origin/master' into next58 2022-12-02 15:28:04 +01:00
zadam
0d50cdb0f5 Merge remote-tracking branch 'origin/next58' into next58 2022-12-02 15:27:30 +01:00
zadam
eec2ff043e Merge branch 'master' into next58 2022-12-02 15:27:09 +01:00
zadam
0480f391d3 release 0.57.2 2022-12-01 22:56:29 +01:00
zadam
36c98e919a fix cursor jumping problem when having same note open in two tabs, closes #3365 2022-12-01 22:50:53 +01:00
zadam
0e68e8069b launcher improvements 2022-12-01 16:22:04 +01:00
zadam
7aa801fc1f notes with #keyboardShortcut don't need reload to take effect 2022-12-01 13:24:34 +01:00
zadam
fc080f785b moving components to its own directory 2022-12-01 13:07:23 +01:00
zadam
1a6c9be065 renamed shortcuts to launchers 2022-12-01 10:16:57 +01:00
zadam
b55c2d3dbc shortcut improvements 2022-12-01 10:03:04 +01:00
zadam
720fb0f73e refactorted shortcut handling into a service 2022-12-01 00:17:15 +01:00
zadam
0985314fb7 shortcut improvements 2022-11-30 16:57:51 +01:00
zadam
e759b4846a shortcut improvements 2022-11-29 16:16:57 +01:00
zadam
dacc2444c4 Merge pull request #3357 from agentydragon/stuff
Add Ctrl+PgUp/Dn for tab switching, pointer to Electron docs
2022-11-29 00:06:03 +01:00
zadam
8ea3608bf1 each stripped tag will be replace by a space, #3355 2022-11-29 00:00:45 +01:00
zadam
eecfce3cc9 shortcuts use templates 2022-11-28 23:39:23 +01:00
Rai
a402c79287 Add Ctrl+PgUp/Dn for tab switching, pointer to Electron docs 2022-11-27 19:33:05 -08:00
zadam
a459230aa9 shortcuts improvements 2022-11-27 23:43:25 +01:00
zadam
e4f57ab2fe fix path resolution bug when path is outside of hosted subtree 2022-11-27 15:50:01 +01:00
zadam
6a9ac6f90a shortcuts improvements 2022-11-26 14:57:39 +01:00
zadam
6883b71ce7 shortcut improvements 2022-11-25 15:29:57 +01:00
zadam
70552d58ac global menu styling improvements 2022-11-25 09:21:56 +01:00
zadam
c7bda4d0be global menu ref 2022-11-24 22:59:09 +01:00
zadam
e4e20c8007 Revert "open window before loading becca"
This reverts commit 2fbcd9aaf7.
2022-11-23 23:49:49 +01:00
zadam
2fbcd9aaf7 open window before loading becca 2022-11-23 23:31:05 +01:00
zadam
ee667634ab Merge branch 'stable' 2022-11-23 22:48:52 +01:00
zadam
7a8c69a6f9 fix jumping cursor position after closing a dialog, fixes #3325 2022-11-23 22:48:32 +01:00
zadam
723db97094 fix jumping cursor position after closing a dialog, fixes #3325 2022-11-23 22:47:20 +01:00
zadam
65be882b49 optimize initial render 2022-11-22 23:53:08 +01:00
zadam
48765cc87d optimize initial render 2022-11-22 22:45:50 +01:00
zadam
e2f6191229 upgrades 2022-11-22 20:48:04 +01:00
zadam
19126b7c6d Merge branch 'master' into next58
# Conflicts:
#	libraries/ckeditor/ckeditor.js
#	libraries/ckeditor/ckeditor.js.map
#	package-lock.json
#	package.json
#	src/public/app/layouts/desktop_layout.js
2022-11-22 20:46:08 +01:00
zadam
a76bef1a28 docker should use webpacked frontend files, fixes #3322 2022-11-21 21:15:04 +01:00
zadam
a259bd8c3a release 0.57.1-beta 2022-11-20 23:43:38 +01:00
zadam
4001953fd7 Merge remote-tracking branch 'origin/master' 2022-11-20 23:43:31 +01:00
zadam
9a6df54832 release 0.57.1-beta 2022-11-20 23:43:17 +01:00
zadam
29327bbc5d Merge pull request #3333 from DynamoFox/rate-limit-other-auth-routes
Rate limit some more ETAPI auth routes; loginRateLimiter now doesn't count successful auth to ETAPI routes
2022-11-20 23:35:10 +01:00
zadam
bcb3a707f4 option tabs refactored 2022-11-20 23:20:42 +01:00
zadam
0a67af4f46 refactoring option templates to use "options-section" class 2022-11-20 20:33:50 +01:00
zadam
b3c0b36ba6 refactor imageoptions to use updateOption() 2022-11-20 20:11:27 +01:00
zadam
a3783b0113 options dialog refactoring into more standard widget structure 2022-11-20 18:29:15 +01:00
DynamoFox
059dca905c Rate limit some more ETAPI auth routes; loginRateLimiter now doesn't count successful auth to ETAPI routes 2022-11-19 18:45:26 +01:00
zadam
02d908df1e added option to disable tray, closes #2612 2022-11-18 21:47:14 +01:00
zadam
1a95e459eb moved options to new tabs Images/Spellcheck 2022-11-18 21:38:36 +01:00
zadam
ae0c5a0c09 moved auto read only options to code/text tabs 2022-11-18 21:27:25 +01:00
zadam
6f238f5f1a create "disableTray" option 2022-11-18 21:08:32 +01:00
zadam
6cec8bcda8 "erase" button to the right 2022-11-17 23:14:01 +01:00
zadam
d388b4d814 add "erase all deleted notes now" also to recent changes 2022-11-17 23:12:36 +01:00
zadam
d9dac00a01 add TRILIUM_NO_UPLOAD_LIMIT to disable the upload limit, #3164 2022-11-17 22:54:45 +01:00
zadam
4961d9bb89 avoid errors on dead backlinks, #3289 2022-11-14 21:03:14 +01:00
zadam
89e319c7a2 fix backlink generation for drag & dropped links, fixes #3314 2022-11-14 20:30:52 +01:00
zadam
f7e56cbffe release 0.57.0-beta 2022-11-12 20:40:45 +01:00
zadam
3f115a7657 api docs 2022-11-12 20:40:40 +01:00
zadam
8fad8a1ce9 enabled advanced list features, fixes #3308 2022-11-10 23:22:37 +01:00
zadam
1b242a905b use CMD/meta key for opening link in a new tab on mac, #3303 2022-11-10 23:16:41 +01:00
zadam
c6e766f5c6 added a context menu for image to copy, #1954 2022-11-09 23:41:25 +01:00
zadam
055bd77bd6 Remove "Content of this note cannot be displayed" in the book format, fixes #3301 2022-11-08 23:06:56 +01:00
zadam
76f34e3eaf small tweaks of linewrap option 2022-11-08 22:55:11 +01:00
zadam
acf3f5013c Merge pull request #3299 from Banbury/code-options-linebreak
Added option to toggle line wrapping for Code notes
2022-11-08 22:49:02 +01:00
zadam
7f6edefad4 note about using password to login to web, #3297 2022-11-08 22:42:36 +01:00
zadam
60fc621cd4 add keyboard action to force creating note revisions, #2147 2022-11-08 22:36:15 +01:00
zadam
bf4776a33c note hoisting should be done on "hovered", not active note, closes #2124 2022-11-08 22:19:16 +01:00
zadam
81a59f48e6 Merge remote-tracking branch 'origin/master' 2022-11-08 21:28:58 +01:00
zadam
68eb04741d remove console.log 2022-11-08 21:27:49 +01:00
Banbury
1037d814ec Added option to toggle line wrapping for Code notes 2022-11-08 14:48:17 +01:00
zadam
e201f3536a fix jsdoc for createNoteLink 2022-11-08 10:11:52 +01:00
zadam
3cb368c4de search link map will display only direct results 2022-11-07 23:56:53 +01:00
zadam
df9f6ce33a link map improvements 2022-11-07 23:19:38 +01:00
zadam
b3c87156c2 library upgrades 2022-11-07 21:26:13 +01:00
zadam
d29a633529 fix 2022-11-07 21:11:42 +01:00
zadam
c92b451033 cleanup of hidden notes 2022-11-06 15:18:32 +01:00
zadam
3122d0cc6b move share root to hidden subtree 2022-11-06 14:44:26 +01:00
zadam
f1eaa20e47 note map fixes 2022-11-06 14:38:41 +01:00
zadam
1d8b02055e Merge branch 'stable' 2022-11-06 14:24:37 +01:00
zadam
a7f4bf8289 fix updating note detail after change from another client, closes #3292 2022-11-06 14:19:40 +01:00
zadam
8b0c60a046 improvements to notemap in relation to search 2022-11-05 22:32:50 +01:00
zadam
3d4776f577 better titles in delete dialog, #3290 2022-11-05 15:30:15 +01:00
zadam
8a539dc514 don't filter on root hoisted note 2022-11-03 21:40:42 +01:00
zadam
a707e7abf4 Merge pull request #3288 from eliandoran/feature/filter_edited_notes_when_hoisted
Filter "Edited notes" when hoisted or in a workspace
2022-11-03 21:38:56 +01:00
zadam
0fc9b2f203 fix codemirror loading, closes #3282 2022-11-03 21:14:56 +01:00
Elian Doran
9a4b72606d Filter "Edited Notes" when hoisted or in a workspace
Previously, when the user opened a day note the "Edited Notes" section would indicate all
the notes edited in that day, regardless of whether the user was inside a workspace or
hoisted a note.

Now the "Edited Notes" section filters out the notes if the user has a hoisted note.
2022-11-03 20:28:56 +02:00
zadam
0a02e5be83 Merge remote-tracking branch 'origin/master' 2022-11-01 22:49:45 +01:00
zadam
2467464433 add possibility to define a share index, closes #3265 2022-11-01 22:49:37 +01:00
zadam
eb68ab6776 Merge branch 'stable' 2022-11-01 19:10:16 +01:00
zadam
44b85d252d fix paste after, closes #3276 2022-11-01 13:39:29 +01:00
zadam
38d6fddc61 redirect /share to /share/, closes #3264 2022-10-30 09:05:12 +01:00
zadam
299007f66e Merge pull request #3256 from DeerTears/patch-1
Fix spelling mistake in README.md
2022-10-29 14:35:52 +02:00
Emberlynn Bland
47a92c8be8 Fix spelling mistake
"bult-in" -> "built-in"
2022-10-28 19:20:43 -06:00
zadam
9bc6cf7067 Merge pull request #3253 from nemec/master
Allow Mac users to close and re-open window
2022-10-28 20:08:38 +02:00
zadam
521d95021b fix refocusing find widget, closes #3252 2022-10-28 20:05:53 +02:00
Dan Nemec
5bc4d07aad Allow Mac users to close and re-open window 2022-10-27 19:59:41 -05:00
zadam
51aa9a0d6e Merge branch 'stable' 2022-10-27 23:04:55 +02:00
zadam
64d3ec940c release 0.56.2 2022-10-27 22:41:15 +02:00
zadam
6c37f2ce71 package-lock.json 2022-10-27 22:41:01 +02:00
zadam
75bd38885b use trilium version number in asset paths to avoid caching issues 2022-10-27 20:34:53 +02:00
zadam
b499640db8 use trilium version number in asset paths to avoid caching issues WIP 2022-10-26 23:50:54 +02:00
zadam
999a9da299 upgrade mermaid to 9.1.7
(cherry picked from commit 441a59305b)
2022-10-26 20:16:16 +02:00
zadam
441a59305b upgrade mermaid to 9.1.7 2022-10-26 20:15:42 +02:00
zadam
b74f5a0a33 Merge branch 'stable' 2022-10-26 20:12:22 +02:00
zadam
7d732eb73b fix deleting note from task manager, closes #3239 2022-10-26 19:14:49 +02:00
zadam
44b68326a0 close hanging autocomplete on dialog close, fixes #3241 2022-10-26 16:52:44 +02:00
zadam
d5732d7731 api docs 2022-10-26 16:52:00 +02:00
zadam
4e3d48fe7d allow specifying rootNote for date API functions, #3237 2022-10-26 14:23:56 +02:00
zadam
c7acfd4d4e fix clicking internal link in the ckeditor toolbar, closes #3236 2022-10-26 14:11:20 +02:00
zadam
af6d738d56 updated boxicons to 2.1.4, update icon index + search also within term array, fixes #3233 2022-10-25 23:01:09 +02:00
zadam
06e6fec4ca increment db and sync version due to new note type 2022-10-23 21:16:15 +02:00
zadam
12943cc808 Merge branch 'master' into next57
# Conflicts:
#	package-lock.json
2022-10-23 21:13:09 +02:00
zadam
bbde7141b0 fix wrong display of included note in read only text, closes #3225 2022-10-23 14:34:37 +02:00
zadam
f6ad1c6aa7 release 0.56.1 2022-10-22 23:07:24 +02:00
zadam
c1127ec429 fix running of runOnNoteCreation hook, #3219 2022-10-22 21:34:38 +02:00
dependabot[bot]
6ec734df13 Bump json-schema and jsprim
Bumps [json-schema](https://github.com/kriszyp/json-schema) and [jsprim](https://github.com/joyent/node-jsprim). These dependencies needed to be updated together.

Updates `json-schema` from 0.2.3 to 0.4.0
- [Release notes](https://github.com/kriszyp/json-schema/releases)
- [Commits](https://github.com/kriszyp/json-schema/compare/v0.2.3...v0.4.0)

Updates `jsprim` from 1.4.1 to 1.4.2
- [Release notes](https://github.com/joyent/node-jsprim/releases)
- [Changelog](https://github.com/TritonDataCenter/node-jsprim/blob/v1.4.2/CHANGES.md)
- [Commits](https://github.com/joyent/node-jsprim/compare/v1.4.1...v1.4.2)

---
updated-dependencies:
- dependency-name: json-schema
  dependency-type: indirect
- dependency-name: jsprim
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-22 14:03:30 +00:00
zadam
867f7f3f59 don't display "workspace templates", #3219 2022-10-22 16:03:21 +02:00
zadam
1c52303bb3 don't display "workspace templates", #3219 2022-10-22 16:01:15 +02:00
zadam
876e6caa23 better handling of incorrect operators 2022-10-22 15:58:15 +02:00
zadam
34f07b4376 better inbox desc 2022-10-22 15:22:42 +02:00
zadam
ffc28c8485 better inbox desc 2022-10-22 15:22:03 +02:00
zadam
913e9ef6e0 Merge remote-tracking branch 'origin/master' 2022-10-22 15:01:17 +02:00
zadam
14fb9c76b0 fix backlinks in day note subtree, fixes #3158 2022-10-22 15:01:10 +02:00
zadam
c5435009d7 Merge pull request #3213 from agentydragon/both-protos
Check both http and https in DockerHealthcheck
2022-10-22 14:00:45 +02:00
Rai
1d3132e447 Check both http and https in DockerHealthcheck
I've been getting Docker reporting my Trilium container as unhealthy
because wget was trying to talk HTTP to it while it was expecting
HTTPS.
2022-10-20 23:29:23 -07:00
zadam
63eb22c7ac fix print color to black, closes #3202 2022-10-20 22:32:06 +02:00
zadam
657c54efd4 fix print color to black, closes #3202 2022-10-20 22:31:08 +02:00
zadam
4f1f632a7d fix activating notes in the hidden subtree 2022-10-16 23:11:46 +02:00
zadam
7e83d3a54d Merge remote-tracking branch 'origin/master' into next57 2022-10-16 21:25:03 +02:00
zadam
c11cf41f30 don't create app icon for flatpak/debian linux builds, fixes #3201 2022-10-16 20:52:10 +02:00
zadam
8d30d5d689 Merge remote-tracking branch 'origin/master' into next57 2022-10-16 11:24:24 +02:00
zadam
01910d3231 flathub release script 2022-10-15 21:09:27 +02:00
zadam
e22af42cd0 release 0.56.0-beta 2022-10-15 12:49:56 +02:00
zadam
70c9292413 codemirror 5.65.9 2022-10-15 12:22:09 +02:00
zadam
c16f7a5e02 Merge branch 'master' into next55
# Conflicts:
#	electron.js
#	package-lock.json
#	package.json
#	src/public/app/layouts/desktop_layout.js
#	src/public/app/widgets/note_tree.js
#	src/services/port.js
2022-10-15 12:09:25 +02:00
zadam
b9c22fcbc8 Merge remote-tracking branch 'origin/master' 2022-10-15 12:03:13 +02:00
zadam
4012ec7498 Merge branch 'stable'
# Conflicts:
#	src/public/app/widgets/attribute_widgets/attribute_detail.js
2022-10-15 12:03:03 +02:00
zadam
7d6d466284 Merge pull request #3199 from DaiYuANg/master
update pwa manifest support deploy in sub folder
2022-10-15 12:00:41 +02:00
DaiYuANg
36842f4a58 update pwa manifest support deploy in sub folder 2022-10-15 13:01:48 +08:00
zadam
dc62cf4805 ckeditor 35.2.1 2022-10-14 22:39:28 +02:00
zadam
ed8acc7ee3 switch-server, switch-electron npm scripts to ease rebuilding better-sqlite3 2022-10-14 21:59:43 +02:00
zadam
4116fe0a20 fix propagation of noteTypeMimeChanged event to global scope to fix e.g. edit button switching depending on note type 2022-10-14 20:36:40 +02:00
zadam
a4e99662cb edit button should get refreshed based on type change 2022-10-13 23:52:53 +02:00
zadam
c6d4eb486e fix toc with > 10 items on the same level, closes #3182 2022-10-09 22:20:11 +02:00
zadam
c2308b7a5d fix comment 2022-10-09 21:34:01 +02:00
zadam
3e07c08043 basic auth etapi should require "etapi" username 2022-10-09 21:33:32 +02:00
zadam
5a3c50d9fb extra null relation checks in notemap 2022-10-08 22:24:58 +02:00
zadam
3e4a9f63fa support basic auth in ETAPI 2022-10-08 20:59:11 +02:00
zadam
6d4ef4ee3d improved error handling of wrong port configuration, #3177 2022-10-01 15:32:30 +02:00
zadam
20ff5627d8 ckeditor 35.1.0 2022-09-28 22:55:53 +02:00
zadam
1d26fd6bf0 added "note color" 2022-09-25 14:19:30 +02:00
zadam
a9c0daa51a FIXME comment on virtual branches 2022-09-24 23:03:38 +02:00
zadam
e3b2bbdca5 Merge remote-tracking branch 'origin/master' 2022-09-24 22:38:27 +02:00
zadam
d905f7cc26 include icon into reference links 2022-09-24 22:38:20 +02:00
zadam
fe3f24cdb0 Merge pull request #3161 from oc013/docker-compose-example
Update docker-compose sample to use node user home dir and pull directly from docker hub
2022-09-24 13:14:28 +02:00
oc013
971c709e87 Update docker-compose sample to use node user home dir 2022-09-23 21:12:50 -04:00
zadam
7f78937543 keyboardShortcut attr detail help 2022-09-23 22:51:17 +02:00
zadam
41dac2bd1b keyboardShortcut attr detail help 2022-09-23 22:50:49 +02:00
zadam
85bf2a5706 fix hidden backlinks, closes #3158 2022-09-22 23:29:20 +02:00
zadam
ce7937a3a3 Merge remote-tracking branch 'origin/master' 2022-09-22 22:53:29 +02:00
zadam
7bb9d33245 0 offset of context menu, fixes #3157 2022-09-22 22:53:22 +02:00
zadam
1be89c094b Merge pull request #3153 from charlesdagenais/master
improve "open" button behaviour for files when in browser
2022-09-22 22:48:33 +02:00
Charles Dagenais
73ad557784 improve "open" button behaviour for files when in browser 2022-09-21 21:56:59 -04:00
zadam
9f744153e3 fix TODO script example 2022-09-22 00:00:32 +02:00
zadam
0c196ae3a5 fix deleting / erasing note 2022-09-21 23:58:54 +02:00
zadam
15ed381f85 release 0.55.1 2022-09-21 22:43:34 +02:00
zadam
180051d252 added "scrolling-container" class, fixes #3147 2022-09-19 23:15:54 +02:00
zadam
a19c58703f Merge remote-tracking branch 'origin/master' 2022-09-19 23:12:20 +02:00
zadam
fc43d9222a fix erasing notes - becca should be reloaded afterwards, closes #3146 2022-09-19 23:12:12 +02:00
zadam
af6bf08243 Merge pull request #3143 from charlesdagenais/master
add file properties widget in mobile layout
2022-09-19 22:44:23 +02:00
zadam
fb6a0bc2a6 Merge pull request #3142 from spasche/zip-import-skip-bad-url
let import continue when malformed URLs are encountered
2022-09-19 22:42:31 +02:00
Charles Dagenais
1f61c1b3b6 add file properties info in mobile view 2022-09-18 12:40:00 -04:00
Sylvain Pasche
fc69f3b8f3 let import continue when malformed URLs are encountered
In case of malformed URLs in imported HTML, keep original URL instead
of having the import get stuck.
2022-09-18 18:18:42 +02:00
zadam
d4658b9c2a bring back the possibility to close the floating buttons again, closes #3116 2022-09-18 14:57:44 +02:00
zadam
84f72edf1d use button CSS variables in more places 2022-09-18 13:52:19 +02:00
zadam
552d872047 more standard window-all-closed handling 2022-09-18 10:05:49 +02:00
zadam
47235965d5 api log close button 2022-09-18 08:48:01 +02:00
zadam
24e4455e91 Merge remote-tracking branch 'origin/master' 2022-09-17 23:06:43 +02:00
zadam
ea35b0c800 Merge branch 'api-log-capture' 2022-09-17 23:06:42 +02:00
zadam
1a30087426 api log implementation 2022-09-17 23:06:17 +02:00
zadam
5e9d004ca2 Merge pull request #3139 from jph/add-methods-to-etapi-spec
Add another ETAPI method to the api spec file.
2022-09-17 14:13:31 +02:00
jph
513d1c020c Add another ETAPI method to the api spec file. 2022-09-17 10:47:44 +10:00
zadam
05231bd1c2 stop #workspaceTemplate from being inherited (should have the same special behavior as #template) 2022-09-16 23:03:02 +02:00
zadam
b816773d02 add #workspaceTemplate which works as workspace-scoped template, closes #3137 2022-09-16 22:44:52 +02:00
zadam
3c49ea6cb1 make context sub-menu scrollable, fix #3136 2022-09-16 22:12:09 +02:00
zadam
539eac4be7 Merge pull request #3134 from jph/add-note-content-to-api-spec
Add get note content to ETAPI spec
2022-09-16 21:08:53 +02:00
James Hynes
8a6ead6d86 fix a couple of api shortcomings
* add note content to openapi spec file
* add test for get note content api endpoint
2022-09-16 13:18:01 +10:00
zadam
01a7ed8311 fix zooming in server install 2022-09-15 23:10:54 +02:00
zadam
cf6330dee6 allow deleting notes from note actions button, closes #3131 2022-09-15 23:09:24 +02:00
zadam
6c39b6f548 fix "excludeFromNoteMap" on journal instead of "excludeFromTreeMap" 2022-09-15 00:04:26 +02:00
zadam
e7ef1b86cc zoom buttons in main menu, closes #2894 2022-09-14 23:28:29 +02:00
zadam
3663d56917 api log capture WIP 2022-09-14 16:50:52 +02:00
zadam
135064a18f drag & drop from tree will insert links to notes, closes #227 2022-09-13 23:36:59 +02:00
zadam
7233f58767 flatpak release script fixes 2022-09-12 23:14:00 +02:00
zadam
78238381a7 release 0.55.0-beta 2022-09-12 22:37:41 +02:00
zadam
ca03c41205 flatpak release script should support beta channel 2022-09-12 22:35:22 +02:00
zadam
9b8474a728 Merge branch 'stable'
# Conflicts:
#	package-lock.json
2022-09-12 21:44:49 +02:00
zadam
ecfce409d8 fix "ghost split", closes #3115 2022-09-07 23:39:35 +02:00
zadam
b091e2222e separated editable code buttons into separate widget which also fixes scrolling issue 2022-09-04 23:09:42 +02:00
zadam
e8b8198eb8 added Montserrat-Regular.ttf to fix boldness on mac, closes #3094 2022-09-04 16:50:45 +02:00
zadam
261f1f0bf2 fix electron 2022-09-04 14:01:34 +02:00
zadam
8588ed5eec remove port scanning for an available port #3036 2022-09-04 14:00:39 +02:00
zadam
f161488c13 focus existing window on port conflict, closes #3036 2022-09-04 14:00:34 +02:00
zadam
563808144e small fixes to tray and closing windows 2022-09-04 13:59:58 +02:00
zadam
3c1f826ead add support for the persistent #sortDirection and #sortFoldersFirst (one time UI action exists), closes #3046 2022-09-04 13:59:34 +02:00
zadam
b2a63afc28 limit max imported file size to 250 MiB, #3108 2022-09-03 15:11:03 +02:00
zadam
86d3a695ac fix handling of parenthesis without explicit AND operator, closes #3096 2022-08-28 14:40:24 +02:00
zadam
7f566178d3 Merge pull request #3095 from agentydragon/trilium-docs-noformat
Add some docs to note.js
2022-08-28 13:51:33 +02:00
Rai
4af55d055e revert 2022-08-27 13:46:16 -07:00
Rai
be000be960 Merge branch 'master' into trilium-docs-noformat 2022-08-27 13:45:22 -07:00
Rai
afb6180cce update docs 2022-08-27 13:42:44 -07:00
Rai
d63156a0d6 Add some docs to note.js (for backend scripting docs) 2022-08-27 13:40:01 -07:00
zadam
2556cd5aaa fix share.js in case there's no menu 2022-08-27 21:34:21 +02:00
zadam
7109a12afd Merge branch 'stable'
# Conflicts:
#	bin/release-flatpack.sh
2022-08-27 13:19:29 +02:00
zadam
700e9fd912 fix release-flatpack.sh 2022-08-26 23:52:09 +02:00
zadam
6547b66228 release 0.54.3 2022-08-26 22:16:49 +02:00
zadam
e9090b9154 added a release flatpack script
(cherry picked from commit e70a7bad1a)
2022-08-26 22:09:48 +02:00
zadam
5b73fe949e defensive programming, #3089 2022-08-26 22:08:05 +02:00
zadam
35fab7a23c fixes overwriting attributes after clicking on a relation in the attribute editor, closes #3090 2022-08-26 22:02:40 +02:00
zadam
bf6d79f4ad Merge pull request #3088 from DynamoFox/fix-update-button-if-update-checking-is-disabled
Fix the update to latest version button in the dropdown menu if update checking is disabled
2022-08-24 23:24:19 +02:00
zadam
24286c2a6c remove all alert() usages, fixes #3086 2022-08-24 23:20:05 +02:00
DynamoFox
09641d9465 Fix the update to latest version button in the dropdown menu, now it doesn't appear at all if update checking was disabled 2022-08-24 22:07:04 +02:00
zadam
e70a7bad1a added a release flatpack script 2022-08-23 23:48:13 +02:00
zadam
d386966342 Merge remote-tracking branch 'origin/master' 2022-08-23 22:32:43 +02:00
zadam
09cfaeb9c4 focus autocomplete on new tab even if there are workspaces, fixes #3083 2022-08-23 22:32:27 +02:00
zadam
934b1ad8c6 Merge pull request #3080 from DynamoFox/rate-limit-etapi-login-route
Rate limit the /auth/login route of ETAPI
2022-08-22 19:37:59 +02:00
zadam
80dcb45415 disable compression for electron / desktop builds 2022-08-22 19:29:58 +02:00
zadam
ad8b7f67b1 Merge remote-tracking branch 'origin/master' 2022-08-22 19:27:43 +02:00
zadam
67b8f3206c Merge pull request #3078 from sigaloid/master
Add compression middleware
2022-08-22 19:27:16 +02:00
DynamoFox
b965f77f4a Rate limit the /auth/login route of ETAPI 2022-08-22 11:50:58 +02:00
sigaloid
84fc00465e Fix minor typo 2022-08-20 20:33:10 -04:00
Matt
9b0c8a19f9 Merge branch 'zadam:master' into master 2022-08-20 21:30:54 +00:00
sigaloid
8e7d26bf4f Add compression 2022-08-20 17:30:35 -04:00
zadam
df351a8d09 trilium safe mode now disables GPU usage 2022-08-20 22:39:59 +02:00
zadam
9ce0421ae7 Merge pull request #3075 from sigaloid/master
Filter excludeFromNoteMap from backlinks
2022-08-20 22:31:37 +02:00
sigaloid
c85ec957ec Filter excludeFromNoteMap from backlinks 2022-08-18 23:12:58 -04:00
zadam
e93dd176c0 Merge pull request #3074 from sigaloid/master
Add shareDescription tag for HTML meta tags
2022-08-18 23:11:56 +02:00
sigaloid
10676a8d0c Add shareDescription 2022-08-17 15:18:34 -04:00
zadam
8abcf571e8 fixes for undefined parent note #3066 2022-08-16 23:46:56 +02:00
zadam
78bca2477d fix creating virtual "none" note in becca, closes #3066 2022-08-16 23:38:11 +02:00
zadam
f241bc564c Merge pull request #3065 from sigaloid/master
Add Flatpak to README
2022-08-15 23:46:40 +02:00
sigaloid
65942213de Add Flatpak to README 2022-08-15 12:01:55 -04:00
zadam
28f620d51d update demo document, closes #3061 2022-08-14 15:05:10 +02:00
zadam
aebdbdf8be fix falsy check in setting custom widget positions, closes #3060 2022-08-14 15:00:18 +02:00
zadam
bb3734052a Merge pull request #3058 from eliandoran/bugfix/upload_filename_encoding
Fix UTF-8 file name encoding for uploads (fixes #3013)
2022-08-14 14:53:44 +02:00
zadam
9a691c8227 Merge pull request #3057 from eliandoran/bugfix/max_content_width
Fix max content width not working (fixes #3056)
2022-08-14 14:52:49 +02:00
zadam
3bd2732cee Merge pull request #3059 from eliandoran/bugfix/relation_map_crash
Fix relation map crash on missing inverse pair (fixes #3055)
2022-08-14 14:50:52 +02:00
Elian Doran
ddb57e35f3 Fix relation map crash on missing inverse pair (fixes #3055) 2022-08-14 04:30:00 +03:00
Elian Doran
d1f3ce0957 Fix UTF-8 file name encoding for uploads (fixes #3013) 2022-08-14 04:14:34 +03:00
Elian Doran
d73da33b08 Fix max content width not working (fixes #3056) 2022-08-14 02:43:09 +03:00
zadam
201ef7fcd5 fix "show recent note" button, closes #3051 2022-08-09 21:49:37 +02:00
zadam
5705efc998 fix electron 2022-08-09 21:34:18 +02:00
zadam
2694bcff67 launchbar WIP 2022-08-08 23:13:31 +02:00
zadam
df7c089344 Merge branch 'master' into next55 2022-08-08 20:45:35 +02:00
zadam
6dee1f38f7 Merge pull request #3048 from DaiYuANg/master
add manifest.webmanifest into desktop make pwa install on ipad
2022-08-08 20:28:29 +02:00
DaiYuANg
87e2f50c6d add manifest.webmanifest into desktop make pwa install on ipad 2022-08-08 21:51:04 +08:00
zadam
616e2c1c29 add support for the persistent #sortDirection and #sortFoldersFirst (one time UI action exists), closes #3046 2022-08-07 23:51:23 +02:00
zadam
2335e40262 release 0.54.2 2022-08-07 23:20:59 +02:00
zadam
3a07c5fcc0 release 0.54.2 2022-08-07 23:18:03 +02:00
zadam
3c26e00fe1 launchbar WIP 2022-08-07 15:34:59 +02:00
zadam
fc920becac launchbar WIP 2022-08-07 13:23:03 +02:00
zadam
8d608c3c1c launchbar WIP 2022-08-06 23:49:25 +02:00
zadam
08aa65bddb launchbar WIP 2022-08-06 15:00:56 +02:00
zadam
54900b35dc launchbar WIP 2022-08-06 13:47:27 +02:00
zadam
7696702a2a launchbar WIP 2022-08-05 19:15:28 +02:00
zadam
42cade17cb launchbar WIP 2022-08-05 16:44:26 +02:00
zadam
7565458332 launchbar WIP 2022-08-04 23:00:32 +02:00
zadam
b86dbc088d small fixes to tray and closing windows 2022-08-04 21:19:57 +02:00
zadam
0681ec9057 Merge pull request #3038 from DynamoFox/support-reverse-proxy-trust
Add optional support to trust reverse proxies (via X-Forwarded-For)
2022-08-04 21:14:48 +02:00
DynamoFox
912f79f1af Add optional support to trust reverse proxies (via X-Forwarded-For) 2022-08-04 00:19:54 +02:00
zadam
82c596d1e3 Merge branch 'master' into next55 2022-08-03 22:23:58 +02:00
zadam
b6f1611218 less accented backlinks background (in dark mode esp.) 2022-08-03 19:24:26 +02:00
zadam
869c910801 fix "bulk actions" dialog title 2022-08-03 19:17:13 +02:00
zadam
b3097b59c7 remove port scanning for an available port #3036 2022-08-03 00:19:29 +02:00
zadam
5ec359e929 focus existing window on port conflict, closes #3036 2022-08-02 22:53:06 +02:00
zadam
ffd73c0e57 release 0.54.1-beta 2022-08-02 21:56:34 +02:00
zadam
12af3d05f0 hoisted note should be expanded after tree collapse 2022-08-02 20:38:48 +02:00
zadam
30b2d15f3d fix creating new calendar on each date note request 2022-08-02 18:25:05 +02:00
zadam
23c06ebed8 fix backend script error reporting, closes #3033 2022-08-02 18:15:54 +02:00
zadam
8acd3851b0 cssClass label cannot be applied on the root widget because of note splits, fixes #3032 2022-08-02 17:33:52 +02:00
zadam
1f6222a653 fix notemap resize + upgrade of force-graph 2022-08-02 17:17:27 +02:00
zadam
8a39699acd fix note map with noteId = 'none' 2022-08-02 17:01:49 +02:00
zadam
dff2d3e989 launchbar WIP 2022-08-02 17:01:09 +02:00
zadam
53affed8d3 fix note map with noteId = 'none' 2022-08-02 17:00:47 +02:00
zadam
a316ac5b35 fix docker build 2022-08-02 00:20:08 +02:00
zadam
aed0a8126c release 0.54.0-beta 2022-08-01 22:37:40 +02:00
zadam
edff1be16d added 197 NOOP migration to make sure the old versions don't attempt to process protected notes with 16 byte IV 2022-08-01 22:28:02 +02:00
zadam
0beee408cf fix following links with no href 2022-08-01 22:26:03 +02:00
zadam
e5fdd5128a fix password protected notes rejection 2022-08-01 19:56:09 +02:00
zadam
46deceedc9 optional basic auth for shared notes, closes #2781 2022-07-31 21:45:32 +02:00
zadam
3ebfaec1bc allow per workspace calendars, fixes #2959 2022-07-31 09:33:14 +02:00
zadam
4c93334d90 fix focusing ribbon tabs when using keyboard navigation on the tree 2022-07-30 23:43:20 +02:00
zadam
7c90f1a56d increasing DB and sync version because of encryption IV change 2022-07-30 23:29:30 +02:00
zadam
c727a2bc1b fix error message on removing bulk actions from search, closes #3027 2022-07-30 14:06:25 +02:00
zadam
6c43b92bf1 mermaid export button WIP 2022-07-29 00:32:28 +02:00
zadam
ef6b7a85d5 don't display mermaid if the note is encrypted without protected session 2022-07-28 23:59:41 +02:00
zadam
6d990de450 Merge remote-tracking branch 'origin/stable' 2022-07-28 23:48:05 +02:00
zadam
91bc9eec93 cleanup 2022-07-28 22:44:55 +02:00
zadam
698ffd886d cleanup 2022-07-28 22:44:28 +02:00
zadam
5a37547b37 use 16 bytes IV for newly encrypted data, closes #3017 2022-07-28 22:42:02 +02:00
zadam
80887fd3c1 export notes via ETAPI, #3012 2022-07-24 21:30:29 +02:00
zadam
5444cc2009 floating button container WIP 2022-07-24 14:30:42 +02:00
zadam
b8a89ee52a rename "backlinks.js" as it's not liked by some adblockers, #3003 2022-07-21 21:46:47 +02:00
zadam
bed0db9fa0 prevent zooming the whole app when ctrl + zoom on the canvas note, fixes #3002 2022-07-20 23:39:40 +02:00
zadam
1afa32502f add CSS variables for CKEditor table caption, fixes #2998 2022-07-20 23:22:07 +02:00
zadam
d825a1a45a remove checkForUpdates from login screen 2022-07-20 00:11:12 +02:00
zadam
0e41f9d1bc Merge pull request #3000 from sigaloid/master
Add config setting to disable update check
2022-07-20 00:05:34 +02:00
zadam
0f92468ab2 bootstrap 4.6.2 2022-07-20 00:03:21 +02:00
zadam
f890e9917f add #toc label to control Table of Contents visibility per note, #2985 2022-07-19 23:56:29 +02:00
zadam
8902cb3117 prevent paste on middle click, fixes #2995 2022-07-19 23:41:22 +02:00
zadam
61a0397963 Merge remote-tracking branch 'origin/master' 2022-07-19 23:32:21 +02:00
zadam
8f5983fa01 add jsdocs to note.cloneTo, closes #2996 2022-07-19 23:32:03 +02:00
sigaloid
fb1b6ea34a Fix login setting 2022-07-19 17:08:58 -04:00
sigaloid
cce55eee63 Make updates default checked 2022-07-19 16:59:27 -04:00
sigaloid
20975fc635 Add option to check for updates when setting up server 2022-07-19 16:55:57 -04:00
sigaloid
e42c527a19 Add default setting 2022-07-19 16:23:10 -04:00
sigaloid
500946c10b Fix type 2022-07-19 16:09:59 -04:00
sigaloid
f3662d1048 Add network configuration 2022-07-19 16:01:27 -04:00
zadam
82d71797a7 Merge pull request #2994 from thfrei/excalidraw-v012
wip: Excalidraw Upgrade v0.11-v0.12
2022-07-17 21:09:27 +02:00
Tom Free
e82fa5ee82 better comments for constructor 2022-07-17 14:16:17 +02:00
Tom Free
3e7aa3d762 remove obsolete code, update doc 2022-07-17 14:09:58 +02:00
zadam
57c5b6d61f added an option to define a "min TOC headings", #2985 2022-07-16 00:15:45 +02:00
zadam
e6358afb62 mitigate flickering in note tooltip, #2988 2022-07-15 23:35:17 +02:00
Tom Free
4ca59dcc5c upgrade to excalidraw v0.12, fix breaking changes 2022-07-14 23:49:30 +02:00
zadam
9114b1befb make sure the headings in TOC contain text only, https://github.com/zadam/trilium-web-clipper/issues/42 2022-07-14 23:39:16 +02:00
zadam
52812c27a1 useMaxWidth for mermaid pie widget, fixes #2984 2022-07-14 23:00:35 +02:00
zadam
377922eccf added getTargetNote to froca's attribute, fixes #2981 2022-07-11 23:15:16 +02:00
zadam
0d2a112839 fix build revision in the about dialog, closes #2980 2022-07-11 23:05:03 +02:00
zadam
ea20d23d11 Merge branch 'stable' 2022-07-10 23:47:04 +02:00
zadam
1dfc37704f fix note title escaping in export dialog 2022-07-10 22:32:00 +02:00
zadam
27261683bb added excalidraw mention to README.md 2022-07-10 22:21:55 +02:00
zadam
1e5c18f6ff focus icon search input after showing up, closes #2979 2022-07-10 22:13:21 +02:00
zadam
5cbcf6e6be etapi fix misleading error message 2022-07-10 22:09:13 +02:00
zadam
0c4e5d2a19 find box can be used also on render notes 2022-07-10 22:01:21 +02:00
zadam
570fabdc4a add highlighting to search results, closes #2977 2022-07-10 15:52:02 +02:00
zadam
89a4165c77 fixes in event propagation 2022-07-10 15:01:05 +02:00
zadam
1ad406ced5 electron search is not used anymore 2022-07-10 12:22:52 +02:00
zadam
7cdc181b47 upgrade to KaTeX 0.16.0 2022-07-09 22:35:04 +02:00
zadam
af16a5856a Merge branch 'next54' 2022-07-09 22:30:43 +02:00
zadam
ea3bce25d9 release 0.53.2 2022-07-09 13:40:41 +02:00
zadam
9b4ef6ea5e fix node size in a note map when note has hidden image notes, closes #2965 2022-07-09 13:27:57 +02:00
zadam
c2c724aa00 Merge remote-tracking branch 'origin/stable' 2022-07-08 22:21:41 +02:00
zadam
95bbf5f405 fix TOC widget not finding the heading by index, closes #2962 2022-07-08 22:17:56 +02:00
zadam
12b3302687 sanitize note title && attrs just to be sure 2022-07-06 23:09:16 +02:00
zadam
c575d47f0e Merge remote-tracking branch 'origin/master' 2022-07-06 21:31:57 +02:00
zadam
02affece91 use fenced code block style for markdown export, closes #2963 2022-07-06 21:31:11 +02:00
zadam
2f1a7e2093 Merge pull request #2961 from mwr0007/master
Remove period from left pane toggle button tooltip
2022-07-05 23:31:29 +02:00
zadam
4fc686bbbc sanitize note title 2022-07-05 22:40:41 +02:00
Michael Redman
d1a763feef Remove period from left pane toggle tooltip 2022-07-05 06:06:45 -05:00
zadam
6972ae889a converted relation map buttons to floating pattern 2022-07-03 23:10:13 +02:00
zadam
19c65e240e Merge remote-tracking branch 'origin/master' into next54 2022-07-03 22:38:45 +02:00
zadam
ef49d20470 release 0.53.1-beta 2022-07-01 22:50:19 +02:00
zadam
0d4275a260 fix saving new protected note revisions, closes #2951 2022-07-01 22:49:10 +02:00
zadam
dbf1ac1e9d Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	package-lock.json
#	package.json
#	src/services/build.js
2022-07-01 22:34:19 +02:00
zadam
94867e07df Merge remote-tracking branch 'origin/master' 2022-06-29 22:46:50 +02:00
zadam
33c272e86a fix dragging out tab creating multiple windows, closes #2944 2022-06-29 22:44:17 +02:00
zadam
aa4dade1e5 fix dragging out tab creating multiple windows, closes #2944 2022-06-29 22:38:35 +02:00
zadam
7435cd4dc6 Merge pull request #2943 from vgwidt/master
fix typo on advanced options page
2022-06-29 22:04:44 +02:00
vgwidt
194ae41d19 fix typo on advanced options page 2022-06-24 14:00:32 +09:00
zadam
42e262a1c2 10x speed-up of event propagation 2022-06-23 23:03:35 +02:00
zadam
ae46b3df58 fix typo in the custom widget location 2022-06-23 22:17:47 +02:00
zadam
e51276f532 floating buttons WIP 2022-06-21 23:27:34 +02:00
zadam
2e1bef2df7 fix ctrl+enter navigation for reference links, closes #2932 2022-06-20 23:11:52 +02:00
zadam
6b3077df0e fixed git graph demo to work with latest mermaid 2022-06-19 21:19:58 +02:00
zadam
1434effa22 upgraded mermaid to 9.1.2 2022-06-19 21:16:30 +02:00
zadam
67e69f1940 release 0.53.0-beta 2022-06-19 14:49:48 +02:00
zadam
046db503d3 added excalidraw to the demo document 2022-06-19 14:27:25 +02:00
zadam
9827e30a61 simple dedicated health check endpoint for docker 2022-06-19 14:15:31 +02:00
zadam
e21a1b56fa Merge pull request #2928 from bill88t/master
Add a very basic docker health check
2022-06-19 14:14:22 +02:00
zadam
08e12e7349 no need to create template relation if there is already one owned 2022-06-19 14:06:00 +02:00
zadam
5ed1631a35 resort attributes for display 2022-06-19 12:18:13 +02:00
Bill Sideris
8ac776f305 Slowly making it an oneliner, added line check 2022-06-19 12:39:20 +03:00
zadam
981fac8e50 #template label is not inherited through template since it's meant to mark the template note only 2022-06-19 11:36:29 +02:00
Bill Sideris
8bb8ab96f1 a bit better 2022-06-19 12:23:00 +03:00
Bill Sideris
0b0d1b59b9 update it to check for login 200 2022-06-18 17:21:41 +03:00
Bill Sideris
57609a5952 Add docker health check 2022-06-18 17:10:26 +03:00
zadam
4f86d769be web view fixes + disclaimer 2022-06-18 15:52:09 +02:00
zadam
6cb5144c09 add score to note title matches as opposed to note path, #2927 2022-06-18 14:45:41 +02:00
zadam
aee350b07b small bulk action fixes 2022-06-17 23:12:52 +02:00
zadam
5ca7e39852 fix putting new attribute correctly into becca 2022-06-17 23:04:46 +02:00
zadam
540aba39db vertical navigation in options 2022-06-16 23:00:40 +02:00
zadam
9a8e677baf converted options dialog to new pattern 2022-06-16 22:53:11 +02:00
zadam
c5bc23d511 fixed confirmDeleteNoteBoxWithNote 2022-06-16 21:30:05 +02:00
zadam
7ac8dc6785 converted prompt dialog to new pattern 2022-06-16 21:13:09 +02:00
zadam
049261a8ee scope dialog CSS 2022-06-16 20:20:56 +02:00
zadam
1d037d3f0f converted confirm dialog to new pattern 2022-06-16 20:19:26 +02:00
zadam
b45df29937 prevent pasting notes into search parent note 2022-06-16 20:02:40 +02:00
zadam
ec087ed328 converted info dialog to new pattern 2022-06-16 19:53:33 +02:00
zadam
9707094686 converted delete notes dialog to new pattern 2022-06-16 19:41:29 +02:00
zadam
eb8e5eafb6 converted note revisions to new pattern 2022-06-16 19:29:18 +02:00
zadam
e140daa952 converted protected session password dialog to new pattern 2022-06-16 15:28:51 +02:00
zadam
3255607b09 converted markdown import dialog to new pattern 2022-06-16 15:15:42 +02:00
zadam
36c210d0dd converted export dialog to new pattern 2022-06-16 15:04:57 +02:00
zadam
595e16cc6f converted import dialog to new pattern 2022-06-16 14:21:24 +02:00
zadam
40bbe380d3 converted move to dialog to new pattern 2022-06-16 14:08:33 +02:00
zadam
683b4ac73a converted clone to dialog to new pattern 2022-06-16 14:02:43 +02:00
zadam
e0ad256194 fix add link + note type chooser combo 2022-06-16 13:21:27 +02:00
zadam
0468ca6814 converted add link dialog to new pattern 2022-06-16 11:03:04 +02:00
zadam
6ebf7ae94e converted jump to note dialog to new pattern 2022-06-16 10:42:49 +02:00
zadam
5ccaf8b3b9 fix multiple parents indication on note tree 2022-06-15 23:07:09 +02:00
zadam
0e01c19414 don't show hidden notes in search results 2022-06-15 22:50:22 +02:00
zadam
1347d3fcc2 converted note type chooser dialog to new pattern 2022-06-15 00:10:32 +02:00
zadam
ebd715ca1b converted include note dialog to new pattern 2022-06-14 23:51:16 +02:00
zadam
73574ac890 converted password not set dialog to new pattern 2022-06-14 23:32:16 +02:00
zadam
ca44edd48c converted sort by dialog to new pattern 2022-06-14 23:19:41 +02:00
zadam
312ffc110a converted branch prefix dialog to new pattern 2022-06-14 23:07:42 +02:00
zadam
bc87bf12cf converted backend log dialog to new pattern 2022-06-14 23:00:24 +02:00
zadam
11412a258b converted recent changes dialog to new pattern 2022-06-14 22:55:07 +02:00
zadam
bc35efd565 Merge branch 'stable' 2022-06-14 22:46:58 +02:00
zadam
416a723160 Merge remote-tracking branch 'origin/master' 2022-06-14 22:46:52 +02:00
zadam
10322c5d0f Merge pull request #2920 from st3iny/fix/2919/docker-image-clean-exit
Fix docker image not exiting cleanly
2022-06-14 22:24:18 +02:00
Richard Steinmetz
7775d90b9a Fix docker image not exiting cleanly
Signed-off-by: Richard Steinmetz <richard@steinmetz.cloud>
2022-06-14 10:34:07 +02:00
zadam
f86fb129b6 Merge remote-tracking branch 'origin/master' 2022-06-13 23:18:57 +02:00
zadam
63cabb13b6 Merge pull request #2917 from bill88t/master
Added the USER_UID & USER_GID env variables
2022-06-13 23:17:59 +02:00
zadam
d3ee0aa8a8 Merge branch 'stable'
# Conflicts:
#	src/routes/api/files.js
#	src/routes/api/note_revisions.js
#	src/routes/api/notes.js
#	src/services/image.js
2022-06-13 23:04:54 +02:00
zadam
6256bcde2d note revisions and file properties buttons respect protected session 2022-06-13 23:03:56 +02:00
zadam
4cec856e21 simplified updating note content 2022-06-13 22:38:59 +02:00
Bill Sideris
8a43688a65 Added the USER_UID & USER_GID env variables 2022-06-13 12:43:10 +03:00
zadam
7edcd5d746 Merge remote-tracking branch 'origin/master' 2022-06-13 00:00:24 +02:00
zadam
ec6d93b34f converted help dialog to new pattern 2022-06-13 00:00:15 +02:00
zadam
0c6efb0cb7 Merge pull request #2914 from st3iny/enh/noid/trilium-data-dir-docker-start
Fix TRILIUM_DATA_DIR permissions in start-docker.sh
2022-06-12 23:31:15 +02:00
zadam
f8fd8e47a9 added rename note bulk action 2022-06-12 23:29:11 +02:00
Richard Steinmetz
566111ce82 Fix TRILIUM_DATA_DIR permissions in start-docker.sh
Signed-off-by: Richard Steinmetz <richard@steinmetz.cloud>
2022-06-12 23:25:33 +02:00
zadam
7ba619c71d converted note source dialog to new pattern 2022-06-12 19:38:28 +02:00
zadam
b678d87c80 converted about dialog to new pattern 2022-06-12 14:03:59 +02:00
zadam
4aaa0f8d8c change tree node icon for selected notes to quickly bring up bulk action dialog 2022-06-12 13:57:22 +02:00
zadam
1bfc5fb77f calculate affected counts and take into account includeDescendants when executing 2022-06-12 10:35:30 +02:00
zadam
63f0e441b9 trigger execute bulk actions 2022-06-12 00:05:46 +02:00
zadam
041b4ea442 Merge remote-tracking branch 'origin/master' 2022-06-11 23:29:59 +02:00
zadam
2115b76047 bulk action dialog converted to widget 2022-06-11 23:29:52 +02:00
zadam
117db9f1cc Merge pull request #2910 from sigaloid/master
Add toast messages prior to possibly long operations
2022-06-11 22:15:34 +02:00
sigaloid
b530bc548f Add messages prior to possibly long operations 2022-06-11 13:27:41 -04:00
zadam
8e23c15763 Merge branch 'next53'
# Conflicts:
#	src/services/builtin_attributes.js
2022-06-10 23:02:51 +02:00
zadam
5fdb462ed5 fix activating ribbon tabs after note switch 2022-06-08 23:44:43 +02:00
zadam
7d76fb8bf5 merge fix 2022-06-08 22:52:17 +02:00
zadam
0f7fa7a7b7 Merge branch 'master' into next53
# Conflicts:
#	package-lock.json
#	src/routes/api/search.js
2022-06-08 22:51:18 +02:00
zadam
51bbc23270 Merge branch 'master' into next53 2022-06-06 22:27:21 +02:00
zadam
f9bee7cd4e introduced bulk action groups 2022-06-05 23:36:46 +02:00
zadam
f272238dde fix backend implementation of bulk actions 2022-06-05 23:13:09 +02:00
zadam
433003cf38 fix migration 2022-06-05 22:50:02 +02:00
zadam
773cefe21d refactorings of search actions to bulk actions 2022-06-05 22:46:37 +02:00
zadam
88fa51a34e refactorings of search actions to bulk actions 2022-06-05 22:32:23 +02:00
zadam
4211d0feda Merge branch 'master' into next53 2022-06-05 22:25:14 +02:00
zadam
9ce3e7e7d2 bulk actions WIP 2022-06-03 17:29:08 +02:00
zadam
e1cd09df36 implement shift-click to select notes in between clicked and active note, closes #2647 2022-06-03 09:42:35 +02:00
zadam
27b55eb3ee make openOnFocus=false explicit 2022-06-03 08:07:27 +02:00
zadam
ab0f0c5ced fix debounce webpack 2022-06-02 23:25:59 +02:00
zadam
4837dd050b fix bug when giving focus again to autocomplete input when coming back from note type chooser 2022-06-02 23:21:17 +02:00
zadam
c0c38a4b49 Merge branch 'master' into next53 2022-06-02 22:32:29 +02:00
zadam
93f0596b16 select template when creating note, closes #2813 2022-06-02 14:16:49 +02:00
zadam
b204014a11 create note from template WIP 2022-05-31 23:27:45 +02:00
zadam
98b579524c create note from template WIP 2022-05-31 22:45:57 +02:00
zadam
88586b0f25 Merge branch 'master' into next53 2022-05-31 22:21:29 +02:00
zadam
f252badba6 skeleton for bulk assign attributes 2022-05-30 22:43:20 +02:00
zadam
fe27c80078 added enter/leave protected session into the mobile frontend 2022-05-30 22:32:15 +02:00
zadam
8052574950 rename iframe to web view 2022-05-30 20:59:54 +02:00
zadam
f19adf3ee0 add the ability to sort notes by folders first, closes #2649 2022-05-30 20:50:53 +02:00
zadam
dcf31f8f95 toc fixes 2022-05-30 17:45:59 +02:00
zadam
cce3f9a700 TOC widget WIP 2022-05-29 21:44:26 +02:00
zadam
01155ad535 use webview instead of iframe 2022-05-29 17:42:09 +02:00
zadam
ee217d6306 added iframe note type 2022-05-28 22:19:29 +02:00
dependabot[bot]
102bfcebd0 Bump nanoid from 3.1.30 to 3.3.1
Bumps [nanoid](https://github.com/ai/nanoid) from 3.1.30 to 3.3.1.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.1.30...3.3.1)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-22 20:26:50 +00:00
803 changed files with 51964 additions and 33305 deletions

View File

@@ -7,7 +7,7 @@ body:
attributes:
label: Trilium Version
description: What version of Trilium are you using?
placeholder: 0.48.0-beta
placeholder: 0.57.0-beta
validations:
required: true
- type: dropdown
@@ -44,3 +44,9 @@ body:
description: A clear and concise description of the bug and any additional information.
validations:
required: true
- type: textarea
attributes:
label: Error logs
description: Please provide error logs, see [wiki page](https://github.com/zadam/trilium/wiki/Error-logs) for instructions on how to submit them.
validations:
required: false

1
.gitignore vendored
View File

@@ -11,3 +11,4 @@ cert.crt
server-package.json
.idea/httpRequests/
data/
tmp/

View File

@@ -2,7 +2,7 @@ image:
file: .gitpod.dockerfile
tasks:
- before: nvm install 16.15.0 && nvm use 16.15.0
- before: nvm install 16.19.0 && nvm use 16.19.0
init: npm install
command: npm run start-server

2
.idea/misc.xml generated
View File

@@ -3,7 +3,7 @@
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_16" default="true" project-jdk-name="openjdk-16" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

3
.vscode/launch.json vendored
View File

@@ -9,7 +9,8 @@
"<node_internals>/**"
],
"env": {
"TRILIUM_ENV": "dev"
"TRILIUM_ENV": "dev",
"TRILIUM_DATA_DIR": "./data"
},
"outputCapture": "std",
"program": "${workspaceFolder}/src/www"

13
DockerHealthcheck.sh Executable file
View File

@@ -0,0 +1,13 @@
#!/bin/sh
# Try connecting to /api/health-check using both http and https.
# TODO: we should only be connecting with the actual protocol that is enabled
# TODO: this assumes we use the default port 8080
for proto in http https; do
if wget --spider -S "$proto://127.0.0.1:8080/api/health-check" 2>&1 | awk 'NR==2' | grep -w "HTTP/1.1 200 OK" ; then
exit 0
fi
done
exit 1

View File

@@ -1,9 +1,12 @@
# !!! Don't try to build this Dockerfile directly, run it through bin/build-docker.sh script !!!
FROM node:16.15.0-alpine
FROM node:16.19.0-alpine
# Create app directory
WORKDIR /usr/src/app
# Bundle app source
COPY . .
COPY server-package.json package.json
# Install app dependencies
@@ -18,18 +21,22 @@ RUN set -x \
nasm \
libpng-dev \
python3 \
&& npm install --production \
&& apk del .build-dependencies
&& npm install \
&& apk del .build-dependencies \
&& npm run webpack \
&& npm prune --omit=dev \
&& cp src/public/app/share.js src/public/app-dist/. \
&& cp -r src/public/app/doc_notes src/public/app-dist/. \
&& rm -rf src/public/app
# Some setup tools need to be kept
RUN apk add --no-cache su-exec shadow
# Bundle app source
COPY . .
# Add application user and setup proper volume permissions
RUN adduser -s /bin/false node; exit 0
# Start the application
EXPOSE 8080
CMD [ "./start-docker.sh" ]
HEALTHCHECK CMD sh DockerHealthcheck.sh

View File

@@ -1,9 +1,9 @@
# Trilium笔记
# Trilium Notes
[English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md)
[![Join the chat at https://gitter.im/trilium-notes/Lobby](https://badges.gitter.im/trilium-notes/Lobby.svg)](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
Trilium Notes是一个层的笔记应用程序,专注于建立大型个人知识库。请参阅[屏幕截图](https://github.com/zadam/trilium/wiki/Screenshot-tour)以快速了解:
Trilium Notes 是一个层次化的笔记应用程序,专注于建立大型个人知识库。请参阅[屏幕截图](https://github.com/zadam/trilium/wiki/Screenshot-tour)以快速了解:
![](https://raw.githubusercontent.com/wiki/zadam/trilium/images/screenshot.png)
@@ -14,36 +14,43 @@ Ukraine is currently suffering from Russian aggression, please consider donating
## 特性
* 笔记可以排列成任意深的树。单个笔记可以放在树中的多个位置(请参阅[克隆](https://github.com/zadam/trilium/wiki/Cloning-notes)
* 丰富的所见即所得笔记编辑功能,包括带有markdown[自动格式化功能的](https://github.com/zadam/trilium/wiki/Text-notes#autoformat)表格,图像和[数学](https://github.com/zadam/trilium/wiki/Text-notes#math-support)
* 丰富的所见即所得笔记编辑功能,包括带有 Markdown [自动格式化功能的](https://github.com/zadam/trilium/wiki/Text-notes#autoformat)表格,图像和[数学](https://github.com/zadam/trilium/wiki/Text-notes#math-support)
* 支持编辑[使用源代码的笔记](https://github.com/zadam/trilium/wiki/Code-notes),包括语法高亮显示
* 笔记之间快速[导航](https://github.com/zadam/trilium/wiki/Note-navigation),全文搜索和[笔记挂起](https://github.com/zadam/trilium/wiki/Note-hoisting)
* 笔记之间快速[导航](https://github.com/zadam/trilium/wiki/Note-navigation),全文搜索和[笔记聚焦](https://github.com/zadam/trilium/wiki/Note-hoisting)
* 无缝[笔记版本控制](https://github.com/zadam/trilium/wiki/Note-revisions)
* 笔记[属性](https://github.com/zadam/trilium/wiki/Attributes)可用于笔记组织,查询和高级[脚本编写](https://github.com/zadam/trilium/wiki/Scripts)
* [同步](https://github.com/zadam/trilium/wiki/Synchronization)与自托管同步服务器
* 有一个[第三方提供的同步服务器托管服务](https://trilium.cc/paid-hosting)
* 公开地[分享](https://github.com/zadam/trilium/wiki/Sharing)(发布)笔记到互联网
* 具有按笔记粒度的强大的[笔记加密](https://github.com/zadam/trilium/wiki/Protected-notes)
* 使用自带的 Excalidraw 来绘制图表(笔记类型“画布”)
* [关系图](https://github.com/zadam/trilium/wiki/Relation-map)和[链接图](https://github.com/zadam/trilium/wiki/Link-map),用于可视化笔记及其关系
* [脚本](https://github.com/zadam/trilium/wiki/Scripts)-请参阅[高级展示](https://github.com/zadam/trilium/wiki/Advanced-showcases)
* 可用性和性能均能很好地扩展至超过10万个笔记
* 针对智能手机和平板电脑进行触摸优化的[移动前端](https://github.com/zadam/trilium/wiki/Mobile-frontend)
* [脚本](https://github.com/zadam/trilium/wiki/Scripts) - 请参阅[高级功能展示](https://github.com/zadam/trilium/wiki/Advanced-showcases)
* 在拥有超过 10 万条笔记时仍能保持良好的可用性和性能
* 针对智能手机和平板电脑进行优化的[用于移动设备的前端](https://github.com/zadam/trilium/wiki/Mobile-frontend)
* [夜间主题](https://github.com/zadam/trilium/wiki/Themes)
* [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import)[Markdown导入导出](https://github.com/zadam/trilium/wiki/Markdown)
* [Web Clipper](https://github.com/zadam/trilium/wiki/Web-clipper)轻松保存Web内容
* [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import)[Markdown 导入导出](https://github.com/zadam/trilium/wiki/Markdown)功能
* 使用[网页剪藏](https://github.com/zadam/trilium/wiki/Web-clipper)轻松保存互联网上的内容
## 构建
Trilium是作为桌面应用程序LinuxWindows或服务器上托管的Web应用程序Linux提供的。Mac OS桌面版本可用,但[不受支持](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support)。
Trilium 可以用作桌面应用程序LinuxWindows或服务器Linux上托管的 Web 应用程序。虽然有 macOS 版本的桌面应用程序,但[不受支持](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support)。
* 如果要在桌面上使用Trilium请从[最新版本](https://github.com/zadam/trilium/releases/latest)下载适用于您平台的二进制[版本](https://github.com/zadam/trilium/releases/latest),解压缩该软件包并运行`trilium`可执行文件。
* 如果要在服务器上安装Trilium遵循[此页面](https://github.com/zadam/trilium/wiki/Server-installation)。
* 当前仅支持(经过测试)最新的ChromeFirefox浏览器。
* 如果要在桌面上使用 Trilium请从[最新版本](https://github.com/zadam/trilium/releases/latest)下载适用于您平台的二进制版本,解压缩该软件包并运行`trilium`可执行文件。
* 如果要在服务器上安装 Trilium参考[此页面](https://github.com/zadam/trilium/wiki/Server-installation)。
* 当前仅支持(测试)最近发布的 ChromeFirefox 浏览器。
Trilium 也提供 Flatpak
[<img width="240" src="https://flathub.org/assets/badges/flathub-badge-en.png">](https://flathub.org/apps/details/com.github.zadam.trilium)
## 文档
[有关文档页面的完整列表请参见Wiki。](https://github.com/zadam/trilium/wiki/)
[有关文档页面的完整列表,请参见 Wiki。](https://github.com/zadam/trilium/wiki/)
[中文Wiki在这里](https://github.com/baddate/trilium/wiki/)
* [Wiki 的中文翻译版本](https://github.com/baddate/trilium/wiki/)
您还可以阅读[个人知识库模式](https://github.com/zadam/trilium/wiki/Patterns-of-personal-knowledge-base)以获取有关如何使用Trilium的灵感。
您还可以阅读[个人知识库模式](https://github.com/zadam/trilium/wiki/Patterns-of-personal-knowledge-base),以获取有关如何使用 Trilium 的灵感。
## 贡献
@@ -51,7 +58,7 @@ Trilium是作为桌面应用程序Linux和Windows或服务器上托管的W
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/zadam/trilium)
在本地克隆并运行
者克隆本仓库到本地,并运行
```
npm install
@@ -60,7 +67,15 @@ npm run start-server
## 致谢
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - 市上最好的所见即所得编辑器,互动性强且聆听能力强的团队
* [FancyTree](https://github.com/mar10/fancytree) - 一个非常丰富的关于树的库,强大没有对手。没有它Trilium Notes将不会如此。
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - 市上最好的所见即所得编辑器,拥有互动性强且聆听能力强的团队
* [FancyTree](https://github.com/mar10/fancytree) - 一个非常丰富的关于树的库,强大没有对手。没有它Trilium Notes 将不会如此。
* [CodeMirror](https://github.com/codemirror/CodeMirror) - 支持大量语言的代码编辑器
* [jsPlumb](https://github.com/jsplumb/jsplumb)强大的可视化连接库。- 用于[关系图](https://github.com/zadam/trilium/wiki/Relation-map)和[链接图](https://github.com/zadam/trilium/wiki/Link-map)
* [jsPlumb](https://github.com/jsplumb/jsplumb) - 强大的可视化连接库。用于[关系图](https://github.com/zadam/trilium/wiki/Relation-map)和[链接图](https://github.com/zadam/trilium/wiki/Link-map)
## 捐赠
你可以通过 GitHub Sponsors[PayPal](https://paypal.me/za4am) 或者比特币 (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2) 来捐赠。
## 许可证
本程序是自由软件:你可以再发布本软件和/或修改本软件,只要你遵循 Free Software Foundation 发布的 GNU Affero General Public License 的第三版或者任何(由你选择)更晚的版本。

View File

@@ -7,7 +7,7 @@ Trilium Notes is a hierarchical note taking application with focus on building l
![](https://raw.githubusercontent.com/wiki/zadam/trilium/images/screenshot.png)
Ukraine is currently suffering from Russian aggression, please consider donating to [one of these charities](https://old.reddit.com/r/ukraine/comments/s6g5un/want_to_support_ukraine_heres_a_list_of_charities/).
Ukraine is currently defending itself from Russian aggression, please consider [donating to Ukrainian Army or humanitarian charities](https://standforukraine.com/).
<img src="https://upload.wikimedia.org/wikipedia/commons/4/49/Flag_of_Ukraine.svg" alt="drawing" width="600"/>
@@ -23,6 +23,7 @@ Ukraine is currently suffering from Russian aggression, please consider donating
* there's a [3rd party service for hosting synchronisation server](https://trilium.cc/paid-hosting)
* [Sharing](https://github.com/zadam/trilium/wiki/Sharing) (publishing) notes to public internet
* Strong [note encryption](https://github.com/zadam/trilium/wiki/Protected-notes) with per-note granularity
* Sketching diagrams with built-in Excalidraw (note type "canvas")
* [Relation maps](https://github.com/zadam/trilium/wiki/Relation-map) and [link maps](https://github.com/zadam/trilium/wiki/Link-map) for visualizing notes and their relations
* [Scripting](https://github.com/zadam/trilium/wiki/Scripts) - see [Advanced showcases](https://github.com/zadam/trilium/wiki/Advanced-showcases)
* [REST API](https://github.com/zadam/trilium/wiki/ETAPI) for automation
@@ -40,6 +41,10 @@ Trilium is provided as either desktop application (Linux and Windows) or web app
* If you want to install Trilium on server, follow [this page](https://github.com/zadam/trilium/wiki/Server-installation).
* Currently only recent Chrome and Firefox are supported (tested) browsers.
Trilium is also provided as a Flatpak:
[<img width="240" src="https://flathub.org/assets/badges/flathub-badge-en.png">](https://flathub.org/apps/details/com.github.zadam.trilium)
## Documentation
[See wiki for complete list of documentation pages.](https://github.com/zadam/trilium/wiki/)

View File

@@ -30,6 +30,7 @@ rm -r $BUILD_DIR/swiftshader
cp bin/tpl/anonymize-database.sql $BUILD_DIR/
cp -r dump-db $BUILD_DIR/
rm -rf $BUILD_DIR/dump-db/node_modules
cp bin/tpl/trilium-portable.sh $BUILD_DIR/
chmod 755 $BUILD_DIR/trilium-portable.sh

View File

@@ -26,6 +26,7 @@ mv "./dist/Trilium Notes-darwin-x64" $BUILD_DIR
cp bin/tpl/anonymize-database.sql $BUILD_DIR/
cp -r dump-db $BUILD_DIR/
rm -rf $BUILD_DIR/dump-db/node_modules
echo "Zipping mac x64 electron distribution..."

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
PKG_DIR=dist/trilium-linux-x64-server
NODE_VERSION=16.15.0
NODE_VERSION=16.19.0
if [ "$1" != "DONTCOPY" ]
then
@@ -31,6 +31,7 @@ chmod 755 $PKG_DIR/trilium.sh
cp bin/tpl/anonymize-database.sql $PKG_DIR/
cp -r dump-db $PKG_DIR/
rm -rf $PKG_DIR/dump-db/node_modules
VERSION=`jq -r ".version" package.json`

View File

@@ -28,8 +28,9 @@ rm -r $BUILD_DIR/swiftshader
cp bin/tpl/anonymize-database.sql $BUILD_DIR/
cp -r dump-db $BUILD_DIR/
rm -rf $BUILD_DIR/dump-db/node_modules
cp bin/tpl/trilium-{portable,no-cert-check,safe-mode}.{bat,ps1} $BUILD_DIR/
cp bin/tpl/trilium-{portable,no-cert-check,safe-mode}.bat $BUILD_DIR/
echo "Zipping windows x64 electron distribution..."
VERSION=`jq -r ".version" package.json`

View File

@@ -5,7 +5,7 @@ if [[ $# -eq 0 ]] ; then
exit 1
fi
n exec 16.15.0 npm run webpack
n exec 16.19.0 npm run webpack
DIR=$1
@@ -14,9 +14,6 @@ mkdir $DIR
echo "Copying Trilium to build directory $DIR"
cp -r dump-db $DIR/
rm -rf $DIR/dump-db/node_modules
cp -r images $DIR/
cp -r libraries $DIR/
cp -r src $DIR/
@@ -30,7 +27,7 @@ cp -r electron.js $DIR/
cp webpack-* $DIR/
# run in subshell (so we return to original dir)
(cd $DIR && n exec 16.15.0 npm install --only=prod)
(cd $DIR && n exec 16.19.0 npm install --only=prod)
# cleanup of useless files in dependencies
rm -r $DIR/node_modules/image-q/demo
@@ -48,10 +45,6 @@ find $DIR/node_modules -name demo -exec rm -rf {} \;
find $DIR/libraries -name "*.map" -type f -delete
cp $DIR/src/public/app/share.js $DIR/src/public/app-dist/
cp -r $DIR/src/public/app/doc_notes $DIR/src/public/app-dist/
rm -rf $DIR/src/public/app
sed -i -e 's/app\/desktop.js/app-dist\/desktop.js/g' $DIR/src/views/desktop.ejs
sed -i -e 's/app\/mobile.js/app-dist\/mobile.js/g' $DIR/src/views/mobile.ejs
sed -i -e 's/app\/setup.js/app-dist\/setup.js/g' $DIR/src/views/setup.ejs
sed -i -e 's/app\/share.js/app-dist\/share.js/g' $DIR/src/views/share/*.ejs

57
bin/release-flatpack.sh Executable file
View File

@@ -0,0 +1,57 @@
#!/usr/bin/env bash
if [[ $# -eq 0 ]] ; then
echo "Missing argument of new version"
exit 1
fi
VERSION=$1
if ! [[ ${VERSION} =~ ^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}(-.+)?$ ]] ;
then
echo "Version ${VERSION} isn't in format X.Y.Z"
exit 1
fi
VERSION_DATE=$(git log -1 --format=%aI "v${VERSION}" | cut -c -10)
VERSION_COMMIT=$(git rev-list -n 1 "v${VERSION}")
# expecting the directory at a specific path
cd ~/trilium-flathub || exit
if ! git diff-index --quiet HEAD --; then
echo "There are uncommitted changes"
exit 1
fi
BASE_BRANCH=master
if [[ "$VERSION" == *"beta"* ]]; then
BASE_BRANCH=beta
fi
git switch "${BASE_BRANCH}"
git pull
BRANCH=b${VERSION}
git branch "${BRANCH}"
git switch "${BRANCH}"
echo "Updating files with version ${VERSION}, date ${VERSION_DATE} and commit ${VERSION_COMMIT}"
flatpak-node-generator npm ../trilium/package-lock.json
xmlstarlet ed --inplace --update "/component/releases/release/@version" --value "${VERSION}" --update "/component/releases/release/@date" --value "${VERSION_DATE}" ./com.github.zadam.trilium.metainfo.xml
yq --inplace "(.modules[0].sources[0].tag = \"v${VERSION}\") | (.modules[0].sources[0].commit = \"${VERSION_COMMIT}\")" ./com.github.zadam.trilium.yml
git add ./generated-sources.json
git add ./com.github.zadam.trilium.metainfo.xml
git add ./com.github.zadam.trilium.yml
git commit -m "release $VERSION"
git push --set-upstream origin "${BRANCH}"
gh pr create --fill -B "${BASE_BRANCH}"
gh pr merge --auto --merge --delete-branch

View File

@@ -1,17 +1,17 @@
UPDATE etapi_tokens SET tokenHash = 'API token hash value';
UPDATE notes SET title = 'title' WHERE title NOT IN ('root', 'hidden', 'share');
UPDATE notes SET title = 'title' WHERE title NOT IN ('root', '_hidden', '_share');
UPDATE note_contents SET content = 'text' WHERE content IS NOT NULL;
UPDATE note_revisions SET title = 'title';
UPDATE note_revision_contents SET content = 'text' WHERE content IS NOT NULL;
UPDATE attributes SET name = 'name', value = 'value' WHERE type = 'label' AND name NOT IN('inbox', 'disableVersioning', 'calendarRoot', 'archived', 'excludeFromExport', 'disableInclusion', 'appCss', 'appTheme', 'hidePromotedAttributes', 'readOnly', 'autoReadOnlyDisabled', 'hoistedCssClass', 'cssClass', 'iconClass', 'keyboardShortcut', 'run', 'runOnInstance', 'runAtHour', 'customRequestHandler', 'customResourceProvider', 'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'noteRevisionsWidgetDisabled', 'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass', 'workspaceTabBackgroundColor', 'searchHome', 'hoistedInbox', 'hoistedSearchHome', 'sqlConsoleHome', 'datePattern', 'pageSize', 'viewType', 'mapRootNoteId', 'bookmarked', 'bookmarkFolder', 'sorted', 'top', 'fullContentWidth', 'shareHiddenFromTree', 'shareAlias', 'shareOmitDefaultCss', 'shareRoot', 'internalLink', 'imageLink', 'relationMapLink', 'includeMapLink', 'runOnNoteCreation', 'runOnNoteTitleChange', 'runOnNoteChange', 'runOnChildNoteCreation', 'runOnAttributeCreation', 'runOnAttributeChange', 'template', 'widget', 'renderNote', 'shareCss', 'shareJs', 'shareFavicon');
UPDATE attributes SET name = 'name' WHERE type = 'relation' AND name NOT IN ('inbox', 'disableVersioning', 'calendarRoot', 'archived', 'excludeFromExport', 'disableInclusion', 'appCss', 'appTheme', 'hidePromotedAttributes', 'readOnly', 'autoReadOnlyDisabled', 'hoistedCssClass', 'cssClass', 'iconClass', 'keyboardShortcut', 'run', 'runOnInstance', 'runAtHour', 'customRequestHandler', 'customResourceProvider', 'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'noteRevisionsWidgetDisabled', 'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass', 'workspaceTabBackgroundColor', 'searchHome', 'hoistedInbox', 'hoistedSearchHome', 'sqlConsoleHome', 'datePattern', 'pageSize', 'viewType', 'mapRootNoteId', 'bookmarked', 'bookmarkFolder', 'sorted', 'top', 'fullContentWidth', 'shareHiddenFromTree', 'shareAlias', 'shareOmitDefaultCss', 'shareRoot', 'internalLink', 'imageLink', 'relationMapLink', 'includeMapLink', 'runOnNoteCreation', 'runOnNoteTitleChange', 'runOnNoteChange', 'runOnChildNoteCreation', 'runOnAttributeCreation', 'runOnAttributeChange', 'template', 'widget', 'renderNote', 'shareCss', 'shareJs', 'shareFavicon');
UPDATE attributes SET name = 'name', value = 'value' WHERE type = 'label' AND name NOT IN('inbox', 'disableVersioning', 'calendarRoot', 'archived', 'excludeFromExport', 'disableInclusion', 'appCss', 'appTheme', 'hidePromotedAttributes', 'readOnly', 'autoReadOnlyDisabled', 'cssClass', 'iconClass', 'keyboardShortcut', 'run', 'runOnInstance', 'runAtHour', 'customRequestHandler', 'customResourceProvider', 'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'noteRevisionsWidgetDisabled', 'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass', 'workspaceTabBackgroundColor', 'searchHome', 'workspaceInbox', 'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'pageSize', 'viewType', 'mapRootNoteId', 'bookmarkFolder', 'sorted', 'top', 'fullContentWidth', 'shareHiddenFromTree', 'shareAlias', 'shareOmitDefaultCss', 'shareRoot', 'shareDescription', 'internalLink', 'imageLink', 'relationMapLink', 'includeMapLink', 'runOnNoteCreation', 'runOnNoteTitleChange', 'runOnNoteContentChange', 'runOnNoteChange', 'runOnChildNoteCreation', 'runOnAttributeCreation', 'runOnAttributeChange', 'template', 'widget', 'renderNote', 'shareCss', 'shareJs', 'shareFavicon');
UPDATE attributes SET name = 'name' WHERE type = 'relation' AND name NOT IN ('inbox', 'disableVersioning', 'calendarRoot', 'archived', 'excludeFromExport', 'disableInclusion', 'appCss', 'appTheme', 'hidePromotedAttributes', 'readOnly', 'autoReadOnlyDisabled', 'cssClass', 'iconClass', 'keyboardShortcut', 'run', 'runOnInstance', 'runAtHour', 'customRequestHandler', 'customResourceProvider', 'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'noteRevisionsWidgetDisabled', 'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass', 'workspaceTabBackgroundColor', 'searchHome', 'workspaceInbox', 'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'pageSize', 'viewType', 'mapRootNoteId', 'bookmarkFolder', 'sorted', 'top', 'fullContentWidth', 'shareHiddenFromTree', 'shareAlias', 'shareOmitDefaultCss', 'shareRoot', 'shareDescription', 'internalLink', 'imageLink', 'relationMapLink', 'includeMapLink', 'runOnNoteCreation', 'runOnNoteTitleChange', 'runOnNoteContentChange', 'runOnNoteChange', 'runOnChildNoteCreation', 'runOnAttributeCreation', 'runOnAttributeChange', 'template', 'widget', 'renderNote', 'shareCss', 'shareJs', 'shareFavicon');
UPDATE branches SET prefix = 'prefix' WHERE prefix IS NOT NULL AND prefix != 'recovered';
UPDATE options SET value = 'anonymized' WHERE name IN
('documentId', 'documentSecret', 'encryptedDataKey',
'passwordVerificationHash', 'passwordVerificationSalt',
'passwordDerivedKeySalt', 'username', 'syncServerHost', 'syncProxy')
('documentId', 'documentSecret', 'encryptedDataKey',
'passwordVerificationHash', 'passwordVerificationSalt',
'passwordDerivedKeySalt', 'username', 'syncServerHost', 'syncProxy')
AND value != '';
VACUUM;

View File

@@ -1,5 +1,23 @@
@echo off
:: Try to get powershell to launch Trilium since it deals with UTF-8 characters in current path
:: If there's no powershell available, fallback to unicode enabled command interpreter
WHERE powershell.exe > NUL 2>&1
IF %ERRORLEVEL% NEQ 0 GOTO BATCH ELSE GOTO POWERSHELL
:POWERSHELL
powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo "Set-Item -Path Env:NODE_TLS_REJECT_UNAUTHORIZED -Value 0; ./trilium.exe"
GOTO END
:BATCH
:: Make sure we support UTF-8 characters
chcp 65001
:: Get Current Trilium executable directory and compute data directory
SET DIR=%~dp0
set NODE_TLS_REJECT_UNAUTHORIZED=0
cd %DIR%
WHERE powershell.exe
IF %ERRORLEVEL% NEQ 0 (start trilium.exe) ELSE (powershell.exe ./trilium-no-cert-check.ps1)
start trilium.exe
GOTO END
:END

View File

@@ -1,2 +0,0 @@
Set-Item -Path Env:NODE_TLS_REJECT_UNAUTHORIZED -Value 0
./trilium.exe

View File

@@ -1,5 +1,23 @@
@echo off
:: Try to get powershell to launch Trilium since it deals with UTF-8 characters in current path
:: If there's no powershell available, fallback to unicode enabled command interpreter
WHERE powershell.exe > NUL 2>&1
IF %ERRORLEVEL% NEQ 0 GOTO BATCH ELSE GOTO POWERSHELL
:POWERSHELL
powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo "Set-Item -Path Env:TRILIUM_DATA_DIR -Value './trilium-data'; ./trilium.exe"
GOTO END
:BATCH
:: Make sure we support UTF-8 characters
chcp 65001
:: Get Current Trilium executable directory and compute data directory
SET DIR=%~dp0
SET TRILIUM_DATA_DIR=%DIR%\trilium-data
cd %DIR%
WHERE powershell.exe
IF %ERRORLEVEL% NEQ 0 (start trilium.exe) ELSE (powershell.exe ./trilium-portable.ps1)
start trilium.exe
GOTO END
:END

View File

@@ -1,2 +0,0 @@
Set-Item -Path Env:TRILIUM_DATA_DIR -Value './trilium-data'
./trilium.exe

View File

@@ -1,5 +1,23 @@
@echo off
:: Try to get powershell to launch Trilium since it deals with UTF-8 characters in current path
:: If there's no powershell available, fallback to unicode enabled command interpreter
WHERE powershell.exe > NUL 2>&1
IF %ERRORLEVEL% NEQ 0 GOTO BATCH ELSE GOTO POWERSHELL
:POWERSHELL
powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo "Set-Item -Path Env:TRILIUM_SAFE_MODE -Value 1; ./trilium.exe --disable-gpu"
GOTO END
:BATCH
:: Make sure we support UTF-8 characters
chcp 65001
:: Get Current Trilium executable directory and compute data directory
SET DIR=%~dp0
SET TRILIUM_SAFE_MODE=1
cd %DIR%
WHERE powershell.exe
IF %ERRORLEVEL% NEQ 0 (start trilium.exe) ELSE (powershell.exe ./trilium-safe-mode.ps1)
start trilium.exe --disable-gpu
GOTO END
:END

View File

@@ -1,2 +0,0 @@
Set-Item -Path Env:TRILIUM_SAFE_MODE -Value 1
./trilium.exe

View File

@@ -3,5 +3,5 @@
DIR=`dirname "$0"`
export TRILIUM_SAFE_MODE=1
"$DIR/trilium"
"$DIR/trilium" --disable-gpu

View File

@@ -21,3 +21,9 @@ https=false
# path to certificate (run "bash bin/generate-cert.sh" to generate self-signed certificate). Relevant only if https=true
certPath=
keyPath=
# setting to give trust to reverse proxies, a comma-separated list of trusted rev. proxy IPs can be specified (CIDR notation is permitted),
# alternatively 'true' will make use of the leftmost IP in X-Forwarded-For, ultimately an integer can be used to tell about the number of hops between
# Trilium (which is hop 0) and the first trusted rev. proxy.
# once set, expressjs will use the X-Forwarded-For header set by the rev. proxy to determinate the real IPs of clients.
# expressjs shortcuts are supported: loopback(127.0.0.1/8, ::1/128), linklocal(169.254.0.0/16, fe80::/10), uniquelocal(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7)
trustedReverseProxy=false

View File

@@ -1,11 +1,6 @@
- drop branches.utcDateCreated - not used for anything
- drop options.utcDateCreated - not used for anything
- isDeleted = 0 by default
- rename openTabs to openNoteContexts
- migrate black theme to dark theme
- unify readOnly handling to a single attribute:
* readOnly - like now
* readOnly=auto - like without readOnly (used to override inherited readOnly)
* readOnly=never - like autoReadOnlyDisabled
- remove focusOnAttributesKeyboardShortcut
- rename white theme to "light" theme (it's not completely white and matches well to dark theme)

Binary file not shown.

View File

@@ -1,4 +1,7 @@
CREATE TABLE IF NOT EXISTS "mig_entity_changes" (
DROP TABLE entity_changes;
-- not preserving the data because of https://github.com/zadam/trilium/issues/3447
CREATE TABLE IF NOT EXISTS "entity_changes" (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`entityName` TEXT NOT NULL,
`entityId` TEXT NOT NULL,
@@ -11,13 +14,6 @@ CREATE TABLE IF NOT EXISTS "mig_entity_changes" (
`utcDateChanged` TEXT NOT NULL
);
INSERT INTO mig_entity_changes (id, entityName, entityId, hash, isErased, changeId, componentId, instanceId, isSynced, utcDateChanged)
SELECT id, entityName, entityId, hash, isErased, changeId, '', '', isSynced, utcDateChanged FROM entity_changes;
DROP TABLE entity_changes;
ALTER TABLE mig_entity_changes RENAME TO entity_changes;
CREATE UNIQUE INDEX `IDX_entityChanges_entityName_entityId` ON "entity_changes" (
`entityName`,
`entityId`

View File

@@ -0,0 +1,2 @@
UPDATE attributes SET value = replace(value, 'setLabelValue', 'updateLabelValue') WHERE name = 'action' AND type = 'label';
UPDATE attributes SET value = replace(value, 'setRelationTarget', 'updateRelationTarget') WHERE name = 'action' AND type = 'label';

View File

@@ -0,0 +1 @@
module.exports = () => console.log("NOOP, increased because of protected notes IV change");

View File

@@ -0,0 +1,6 @@
UPDATE branches SET branchId = '_hidden__search' WHERE parentNoteId = 'hidden' AND noteId = 'search' AND isDeleted = 0;
UPDATE branches SET branchId = 'root__globalNoteMap' WHERE parentNoteId = 'singles' AND noteId = 'globalnotemap' AND isDeleted = 0;
UPDATE branches SET branchId = '_hidden__sqlConsole' WHERE parentNoteId = 'hidden' AND noteId = 'sqlconsole' AND isDeleted = 0;
UPDATE branches SET branchId = 'root__hidden' WHERE parentNoteId = 'root' AND noteId = 'hidden' AND isDeleted = 0;
UPDATE branches SET branchId = '_hidden__bulkAction' WHERE parentNoteId = 'hidden' AND noteId = 'bulkaction' AND isDeleted = 0;
UPDATE branches SET branchId = '_hidden__share' WHERE parentNoteId = 'root' AND noteId = 'share' AND isDeleted = 0;

View File

@@ -0,0 +1,53 @@
UPDATE notes SET noteId = '_globalNoteMap', title = 'Note Map' WHERE noteId = 'globalnotemap';
UPDATE note_contents SET noteId = '_globalNoteMap' WHERE noteId = 'globalnotemap';
UPDATE note_revisions SET noteId = '_globalNoteMap' WHERE noteId = 'globalnotemap';
UPDATE branches SET noteId = '_globalNoteMap' WHERE noteId = 'globalnotemap';
UPDATE branches SET parentNoteId = '_globalNoteMap' WHERE parentNoteId = 'globalnotemap';
UPDATE attributes SET noteId = '_globalNoteMap' WHERE noteId = 'globalnotemap';
UPDATE attributes SET value = '_globalNoteMap' WHERE type = 'relation' AND value = 'globalnotemap';
UPDATE entity_changes SET entityId = '_globalNoteMap' WHERE entityId = 'globalnotemap';
UPDATE notes SET noteId = '_bulkAction', title = 'Bulk Action' WHERE noteId = 'bulkaction';
UPDATE note_contents SET noteId = '_bulkAction' WHERE noteId = 'bulkaction';
UPDATE note_revisions SET noteId = '_bulkAction' WHERE noteId = 'bulkaction';
UPDATE branches SET parentNoteId = '_bulkAction' WHERE parentNoteId = 'bulkaction';
UPDATE branches SET noteId = '_bulkAction' WHERE noteId = 'bulkaction';
UPDATE attributes SET noteId = '_bulkAction' WHERE noteId = 'bulkaction';
UPDATE attributes SET value = '_bulkAction' WHERE type = 'relation' AND value = 'bulkaction';
UPDATE entity_changes SET entityId = '_bulkAction' WHERE entityId = 'bulkaction';
UPDATE notes SET noteId = '_sqlConsole', title = 'SQL Console History' WHERE noteId = 'sqlconsole';
UPDATE note_contents SET noteId = '_sqlConsole' WHERE noteId = 'sqlconsole';
UPDATE note_revisions SET noteId = '_sqlConsole' WHERE noteId = 'sqlconsole';
UPDATE branches SET noteId = '_sqlConsole' WHERE noteId = 'sqlconsole';
UPDATE branches SET parentNoteId = '_sqlConsole' WHERE parentNoteId = 'sqlconsole';
UPDATE attributes SET noteId = '_sqlConsole' WHERE noteId = 'sqlconsole';
UPDATE attributes SET value = '_sqlConsole' WHERE type = 'relation' AND value = 'sqlconsole';
UPDATE entity_changes SET entityId = '_sqlConsole' WHERE entityId = 'sqlconsole';
UPDATE notes SET noteId = '_hidden', title = 'Hidden Notes' WHERE noteId = 'hidden';
UPDATE note_contents SET noteId = '_hidden' WHERE noteId = 'hidden';
UPDATE note_revisions SET noteId = '_hidden' WHERE noteId = 'hidden';
UPDATE branches SET noteId = '_hidden', prefix = NULL WHERE noteId = 'hidden';
UPDATE branches SET parentNoteId = '_hidden' WHERE parentNoteId = 'hidden';
UPDATE attributes SET noteId = '_hidden' WHERE noteId = 'hidden';
UPDATE attributes SET value = '_hidden' WHERE type = 'relation' AND value = 'hidden';
UPDATE entity_changes SET entityId = '_hidden' WHERE entityId = 'hidden';
UPDATE notes SET noteId = '_search', title = 'Search History' WHERE noteId = 'search';
UPDATE note_contents SET noteId = '_search' WHERE noteId = 'search';
UPDATE note_revisions SET noteId = '_search' WHERE noteId = 'search';
UPDATE branches SET noteId = '_search' WHERE noteId = 'search';
UPDATE branches SET parentNoteId = '_search' WHERE parentNoteId = 'search';
UPDATE attributes SET noteId = '_search' WHERE noteId = 'search';
UPDATE attributes SET value = '_search' WHERE type = 'relation' AND value = 'search';
UPDATE entity_changes SET entityId = '_search' WHERE entityId = 'search';
UPDATE notes SET noteId = '_share', title = 'Shared Notes' WHERE noteId = 'share';
UPDATE note_contents SET noteId = '_share' WHERE noteId = 'share';
UPDATE note_revisions SET noteId = '_share' WHERE noteId = 'share';
UPDATE branches SET noteId = '_share' WHERE noteId = 'share';
UPDATE branches SET parentNoteId = '_share' WHERE parentNoteId = 'share';
UPDATE attributes SET noteId = '_share' WHERE noteId = 'share';
UPDATE attributes SET value = '_share' WHERE type = 'relation' AND value = 'share';
UPDATE entity_changes SET entityId = '_share' WHERE entityId = 'share';

View File

@@ -0,0 +1,12 @@
module.exports = () => {
const hiddenSubtreeService = require('../../src/services/hidden_subtree');
const cls = require("../../src/services/cls");
const beccaLoader = require("../../src/becca/becca_loader");
cls.init(() => {
beccaLoader.load();
// make sure the hidden subtree exists since the subsequent migrations we will move some existing notes into it (share...)
// in previous releases hidden subtree was created lazily
hiddenSubtreeService.checkHiddenSubtree();
});
};

View File

@@ -0,0 +1,2 @@
DELETE FROM branches WHERE noteId = '_share' AND parentNoteId != 'root' AND parentNoteId != '_hidden'; -- delete all other branches of _share if any
UPDATE branches SET parentNoteId = '_hidden' WHERE noteId = '_share';

View File

@@ -0,0 +1,2 @@
DELETE FROM branches WHERE noteId = '_globalNoteMap' AND parentNoteId != 'singles' AND parentNoteId != '_hidden'; -- make sure there are no clones which would fail at the next line
UPDATE branches SET parentNoteId = '_hidden' WHERE noteId = '_globalNoteMap';

View File

@@ -0,0 +1,6 @@
DELETE FROM branches WHERE noteId = 'singles';
DELETE FROM notes WHERE noteId = 'singles';
DELETE FROM note_contents WHERE noteId = 'singles';
DELETE FROM note_revisions WHERE noteId = 'singles';
DELETE FROM attributes WHERE noteId = 'singles';
DELETE FROM entity_changes WHERE entityId = 'singles';

View File

@@ -0,0 +1,21 @@
module.exports = () => {
const cls = require("../../src/services/cls");
const cloningService = require("../../src/services/cloning");
const beccaLoader = require("../../src/becca/becca_loader");
const becca = require("../../src/becca/becca");
cls.init(() => {
beccaLoader.load();
for (const attr of becca.findAttributes('label','bookmarked')) {
cloningService.toggleNoteInParent(true, attr.noteId, '_lbBookmarks');
attr.markAsDeleted("0204__migrate_bookmarks_to_clones");
}
// bookmarkFolder used to work in 0.57 without the bookmarked label
for (const attr of becca.findAttributes('label','bookmarkFolder')) {
cloningService.toggleNoteInParent(true, attr.noteId, '_lbBookmarks');
}
});
};

View File

@@ -0,0 +1,3 @@
UPDATE notes SET type = 'relationMap' WHERE type = 'relation-map';
UPDATE notes SET type = 'noteMap' WHERE type = 'note-map';
UPDATE notes SET type = 'webView' WHERE type = 'web-view';

View File

@@ -0,0 +1,33 @@
// the history was previously not exposed and the fact they were not cleaned up is rather a side-effect than an intention
module.exports = () => {
const cls = require("../../src/services/cls");
const beccaLoader = require("../../src/becca/becca_loader");
const becca = require("../../src/becca/becca");
cls.init(() => {
beccaLoader.load();
// deleting just branches because they might be cloned (and therefore saved) also outside of the hidden subtree
const searchRoot = becca.getNote('_search');
for (const searchBranch of searchRoot.getChildBranches()) {
const searchNote = searchBranch.getNote();
if (searchNote.type === 'search') {
searchBranch.deleteBranch('0206__delete_search_and_sql_console_history');
}
}
const sqlConsoleRoot = becca.getNote('_sqlConsole');
for (const sqlConsoleBranch of sqlConsoleRoot.getChildBranches()) {
const sqlConsoleNote = sqlConsoleBranch.getNote();
if (sqlConsoleNote.type === 'code' && sqlConsoleNote.mime === 'text/x-sqlite;schema=trilium') {
sqlConsoleBranch.deleteBranch('0206__delete_search_and_sql_console_history');
}
}
});
};

View File

@@ -0,0 +1,2 @@
UPDATE notes SET title = 'SQL Console History' WHERE noteId = '_sqlConsole';
UPDATE notes SET title = 'Search History' WHERE noteId = '_search';

View File

@@ -0,0 +1,13 @@
module.exports = () => {
const cls = require("../../src/services/cls");
const beccaLoader = require("../../src/becca/becca_loader");
const becca = require("../../src/becca/becca");
cls.init(() => {
beccaLoader.load();
for (const label of becca.getNote('_hidden').getLabels('archived')) {
label.markAsDeleted('0208__remove_archived_from_hidden');
}
});
};

View File

@@ -0,0 +1,5 @@
UPDATE attributes SET name = 'workspaceInbox' WHERE type = 'label' AND name = 'hoistedInbox';
UPDATE entity_changes SET entityId = 'workspaceInbox' WHERE entityName = 'attributes' AND entityId = 'hoistedInbox';
UPDATE attributes SET name = 'workspaceSearchHome' WHERE type = 'label' AND name = 'hoistedSearchHome';
UPDATE entity_changes SET entityId = 'workspaceSearchHome' WHERE entityName = 'attributes' AND entityId = 'hoistedSearchHome';

View File

@@ -0,0 +1,24 @@
module.exports = async () => {
const cls = require("../../src/services/cls");
const beccaLoader = require("../../src/becca/becca_loader");
const log = require("../../src/services/log");
const consistencyChecks = require("../../src/services/consistency_checks");
const noteService = require("../../src/services/notes");
await cls.init(async () => {
// precaution for the 0211 migration
noteService.eraseDeletedNotesNow();
beccaLoader.load();
try {
// precaution before running 211 which might produce unique constraint problems if the DB was not consistent
consistencyChecks.runOnDemandChecksWithoutExclusiveLock(true);
}
catch (e) {
// consistency checks might start failing in the future if there's some incompatible migration down the road
// we can optimistically assume the DB is consistent and still continue
log.error(`Consistency checks failed in migration 0210: ${e.message} ${e.stack}`);
}
});
};

View File

@@ -0,0 +1,12 @@
-- case based on isDeleted is needed, otherwise 2 branches (1 deleted, 1 not) might get the same ID
UPDATE entity_changes SET entityId = COALESCE((
SELECT
CASE isDeleted
WHEN 0 THEN parentNoteId || '_' || noteId
WHEN 1 THEN branchId
END
FROM branches WHERE branchId = entityId
), entityId)
WHERE entityName = 'branches' AND isErased = 0;
UPDATE branches SET branchId = parentNoteId || '_' || noteId WHERE isDeleted = 0;

View File

@@ -0,0 +1,21 @@
module.exports = () => {
const cls = require("../../src/services/cls");
const beccaLoader = require("../../src/becca/becca_loader");
const becca = require("../../src/becca/becca");
cls.init(() => {
beccaLoader.load();
const hidden = becca.getNote("_hidden");
for (const noteId of hidden.getSubtreeNoteIds({includeHidden: true})) {
if (noteId.startsWith("_")) { // is "named" note
const note = becca.getNote(noteId);
for (const attr of note.getOwnedAttributes()) {
attr.markAsDeleted("0212__delete_all_attributes_of_named_notes");
}
}
}
});
};

View File

@@ -1,17 +1,14 @@
version: '2.1'
services:
trilium:
build:
context: .
image: zadam/trilium
restart: always
environment:
- TRILIUM_DATA_DIR=/data
- TRILIUM_DATA_DIR=/home/node/trilium-data
ports:
- "8080:8080"
volumes:
- trilium:/data
- trilium:/home/node/trilium-data
volumes:
trilium:

View File

@@ -139,10 +139,576 @@
<h3 class="subsection-title">Members</h3>
<h4 class="name" id="becca"><span class="type-signature">(protected) </span>becca<span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line50">line 50</a>
</li></ul></dd>
</dl>
<h3 class="subsection-title">Methods</h3>
<h4 class="name" id="addEntityChange"><span class="type-signature">(protected) </span>addEntityChange<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line59">line 59</a>
</li></ul></dd>
</dl>
<h4 class="name" id="beforeSaving"><span class="type-signature">(protected) </span>beforeSaving<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line18">line 18</a>
</li></ul></dd>
</dl>
<h4 class="name" id="generateHash"><span class="type-signature">(protected) </span>generateHash<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line30">line 30</a>
</li></ul></dd>
</dl>
<h4 class="name" id="generateIdIfNecessary"><span class="type-signature">(protected) </span>generateIdIfNecessary<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line23">line 23</a>
</li></ul></dd>
</dl>
<h4 class="name" id="getPojoToSave"><span class="type-signature">(protected) </span>getPojoToSave<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line71">line 71</a>
</li></ul></dd>
</dl>
<h4 class="name" id="getUtcDateChanged"><span class="type-signature">(protected) </span>getUtcDateChanged<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line45">line 45</a>
</li></ul></dd>
</dl>
@@ -267,7 +833,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line118">line 118</a>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line125">line 125</a>
</li></ul></dd>
@@ -355,7 +921,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line73">line 73</a>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line80">line 80</a>
</li></ul></dd>
@@ -425,7 +991,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -94,7 +94,7 @@ and relation (representing named relationship between source and target note)</d
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line15">line 15</a>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line16">line 16</a>
</li></ul></dd>
@@ -205,7 +205,70 @@ and relation (representing named relationship between source and target note)</d
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line46">line 46</a>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line47">line 47</a>
</li></ul></dd>
</dl>
<h4 class="name" id="becca"><span class="type-signature">(protected) </span>becca<span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#becca">AbstractEntity#becca</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line50">line 50</a>
</li></ul></dd>
@@ -273,7 +336,7 @@ and relation (representing named relationship between source and target note)</d
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line58">line 58</a>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line59">line 59</a>
</li></ul></dd>
@@ -341,7 +404,7 @@ and relation (representing named relationship between source and target note)</d
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line52">line 52</a>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line53">line 53</a>
</li></ul></dd>
@@ -409,7 +472,7 @@ and relation (representing named relationship between source and target note)</d
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line48">line 48</a>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line49">line 49</a>
</li></ul></dd>
@@ -477,7 +540,7 @@ and relation (representing named relationship between source and target note)</d
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line54">line 54</a>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line55">line 55</a>
</li></ul></dd>
@@ -545,7 +608,7 @@ and relation (representing named relationship between source and target note)</d
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line50">line 50</a>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line51">line 51</a>
</li></ul></dd>
@@ -613,7 +676,7 @@ and relation (representing named relationship between source and target note)</d
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line60">line 60</a>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line61">line 61</a>
</li></ul></dd>
@@ -681,7 +744,7 @@ and relation (representing named relationship between source and target note)</d
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line56">line 56</a>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line57">line 57</a>
</li></ul></dd>
@@ -703,6 +766,362 @@ and relation (representing named relationship between source and target note)</d
<h3 class="subsection-title">Methods</h3>
<h4 class="name" id="addEntityChange"><span class="type-signature">(protected) </span>addEntityChange<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#addEntityChange">AbstractEntity#addEntityChange</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line59">line 59</a>
</li></ul></dd>
</dl>
<h4 class="name" id="beforeSaving"><span class="type-signature">(protected) </span>beforeSaving<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#beforeSaving">AbstractEntity#beforeSaving</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line18">line 18</a>
</li></ul></dd>
</dl>
<h4 class="name" id="generateHash"><span class="type-signature">(protected) </span>generateHash<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#generateHash">AbstractEntity#generateHash</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line30">line 30</a>
</li></ul></dd>
</dl>
<h4 class="name" id="generateIdIfNecessary"><span class="type-signature">(protected) </span>generateIdIfNecessary<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#generateIdIfNecessary">AbstractEntity#generateIdIfNecessary</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line23">line 23</a>
</li></ul></dd>
</dl>
@@ -757,7 +1176,7 @@ and relation (representing named relationship between source and target note)</d
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line114">line 114</a>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line129">line 129</a>
</li></ul></dd>
@@ -808,6 +1227,95 @@ and relation (representing named relationship between source and target note)</d
<h4 class="name" id="getPojoToSave"><span class="type-signature">(protected) </span>getPojoToSave<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#getPojoToSave">AbstractEntity#getPojoToSave</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line71">line 71</a>
</li></ul></dd>
</dl>
@@ -862,7 +1370,7 @@ and relation (representing named relationship between source and target note)</d
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line121">line 121</a>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line142">line 142</a>
</li></ul></dd>
@@ -913,6 +1421,95 @@ and relation (representing named relationship between source and target note)</d
<h4 class="name" id="getUtcDateChanged"><span class="type-signature">(protected) </span>getUtcDateChanged<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#getUtcDateChanged">AbstractEntity#getUtcDateChanged</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line45">line 45</a>
</li></ul></dd>
</dl>
@@ -967,7 +1564,7 @@ and relation (representing named relationship between source and target note)</d
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line136">line 136</a>
<a href="becca_entities_attribute.js.html">becca/entities/attribute.js</a>, <a href="becca_entities_attribute.js.html#line157">line 157</a>
</li></ul></dd>
@@ -1144,7 +1741,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line118">line 118</a>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line125">line 125</a>
</li></ul></dd>
@@ -1237,7 +1834,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line73">line 73</a>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line80">line 80</a>
</li></ul></dd>
@@ -1307,7 +1904,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -160,6 +160,69 @@ from tokenHash and token.</div>
<h4 class="name" id="becca"><span class="type-signature">(protected) </span>becca<span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#becca">AbstractEntity#becca</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line50">line 50</a>
</li></ul></dd>
</dl>
<h4 class="name" id="etapiTokenId"><span class="type-signature"></span>etapiTokenId<span class="type-signature"> :string</span></h4>
@@ -572,6 +635,540 @@ from tokenHash and token.</div>
<h3 class="subsection-title">Methods</h3>
<h4 class="name" id="addEntityChange"><span class="type-signature">(protected) </span>addEntityChange<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#addEntityChange">AbstractEntity#addEntityChange</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line59">line 59</a>
</li></ul></dd>
</dl>
<h4 class="name" id="beforeSaving"><span class="type-signature">(protected) </span>beforeSaving<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#beforeSaving">AbstractEntity#beforeSaving</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line18">line 18</a>
</li></ul></dd>
</dl>
<h4 class="name" id="generateHash"><span class="type-signature">(protected) </span>generateHash<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#generateHash">AbstractEntity#generateHash</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line30">line 30</a>
</li></ul></dd>
</dl>
<h4 class="name" id="generateIdIfNecessary"><span class="type-signature">(protected) </span>generateIdIfNecessary<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#generateIdIfNecessary">AbstractEntity#generateIdIfNecessary</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line23">line 23</a>
</li></ul></dd>
</dl>
<h4 class="name" id="getPojoToSave"><span class="type-signature">(protected) </span>getPojoToSave<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#getPojoToSave">AbstractEntity#getPojoToSave</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line71">line 71</a>
</li></ul></dd>
</dl>
<h4 class="name" id="getUtcDateChanged"><span class="type-signature">(protected) </span>getUtcDateChanged<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#getUtcDateChanged">AbstractEntity#getUtcDateChanged</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line45">line 45</a>
</li></ul></dd>
</dl>
@@ -701,7 +1298,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line118">line 118</a>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line125">line 125</a>
</li></ul></dd>
@@ -794,7 +1391,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line73">line 73</a>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line80">line 80</a>
</li></ul></dd>
@@ -864,7 +1461,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

File diff suppressed because it is too large Load Diff

View File

@@ -155,6 +155,69 @@ It's used for seamless note versioning.</div>
<h4 class="name" id="becca"><span class="type-signature">(protected) </span>becca<span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#becca">AbstractEntity#becca</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line50">line 50</a>
</li></ul></dd>
</dl>
<h4 class="name" id="contentLength"><span class="type-signature"></span>contentLength<span class="type-signature"> :number</span></h4>
@@ -975,6 +1038,362 @@ It's used for seamless note versioning.</div>
<h3 class="subsection-title">Methods</h3>
<h4 class="name" id="addEntityChange"><span class="type-signature">(protected) </span>addEntityChange<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#addEntityChange">AbstractEntity#addEntityChange</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line59">line 59</a>
</li></ul></dd>
</dl>
<h4 class="name" id="beforeSaving"><span class="type-signature">(protected) </span>beforeSaving<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#beforeSaving">AbstractEntity#beforeSaving</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line18">line 18</a>
</li></ul></dd>
</dl>
<h4 class="name" id="generateHash"><span class="type-signature">(protected) </span>generateHash<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#generateHash">AbstractEntity#generateHash</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line30">line 30</a>
</li></ul></dd>
</dl>
<h4 class="name" id="generateIdIfNecessary"><span class="type-signature">(protected) </span>generateIdIfNecessary<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#generateIdIfNecessary">AbstractEntity#generateIdIfNecessary</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line23">line 23</a>
</li></ul></dd>
</dl>
@@ -1029,7 +1448,7 @@ It's used for seamless note versioning.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_note_revision.js.html">becca/entities/note_revision.js</a>, <a href="becca_entities_note_revision.js.html#line79">line 79</a>
<a href="becca_entities_note_revision.js.html">becca/entities/note_revision.js</a>, <a href="becca_entities_note_revision.js.html#line76">line 76</a>
</li></ul></dd>
@@ -1131,7 +1550,7 @@ It's used for seamless note versioning.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_note_revision.js.html">becca/entities/note_revision.js</a>, <a href="becca_entities_note_revision.js.html#line143">line 143</a>
<a href="becca_entities_note_revision.js.html">becca/entities/note_revision.js</a>, <a href="becca_entities_note_revision.js.html#line140">line 140</a>
</li></ul></dd>
@@ -1179,6 +1598,184 @@ It's used for seamless note versioning.</div>
<h4 class="name" id="getPojoToSave"><span class="type-signature">(protected) </span>getPojoToSave<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#getPojoToSave">AbstractEntity#getPojoToSave</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line71">line 71</a>
</li></ul></dd>
</dl>
<h4 class="name" id="getUtcDateChanged"><span class="type-signature">(protected) </span>getUtcDateChanged<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#getUtcDateChanged">AbstractEntity#getUtcDateChanged</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line45">line 45</a>
</li></ul></dd>
</dl>
@@ -1233,7 +1830,7 @@ It's used for seamless note versioning.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_note_revision.js.html">becca/entities/note_revision.js</a>, <a href="becca_entities_note_revision.js.html#line65">line 65</a>
<a href="becca_entities_note_revision.js.html">becca/entities/note_revision.js</a>, <a href="becca_entities_note_revision.js.html#line62">line 62</a>
</li></ul></dd>
@@ -1414,7 +2011,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line118">line 118</a>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line125">line 125</a>
</li></ul></dd>
@@ -1507,7 +2104,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line73">line 73</a>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line80">line 80</a>
</li></ul></dd>
@@ -1577,7 +2174,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -154,6 +154,69 @@
<h4 class="name" id="becca"><span class="type-signature">(protected) </span>becca<span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#becca">AbstractEntity#becca</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line50">line 50</a>
</li></ul></dd>
</dl>
<h4 class="name" id="isSynced"><span class="type-signature"></span>isSynced<span class="type-signature"> :boolean</span></h4>
@@ -430,6 +493,540 @@
<h3 class="subsection-title">Methods</h3>
<h4 class="name" id="addEntityChange"><span class="type-signature">(protected) </span>addEntityChange<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#addEntityChange">AbstractEntity#addEntityChange</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line59">line 59</a>
</li></ul></dd>
</dl>
<h4 class="name" id="beforeSaving"><span class="type-signature">(protected) </span>beforeSaving<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#beforeSaving">AbstractEntity#beforeSaving</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line18">line 18</a>
</li></ul></dd>
</dl>
<h4 class="name" id="generateHash"><span class="type-signature">(protected) </span>generateHash<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#generateHash">AbstractEntity#generateHash</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line30">line 30</a>
</li></ul></dd>
</dl>
<h4 class="name" id="generateIdIfNecessary"><span class="type-signature">(protected) </span>generateIdIfNecessary<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#generateIdIfNecessary">AbstractEntity#generateIdIfNecessary</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line23">line 23</a>
</li></ul></dd>
</dl>
<h4 class="name" id="getPojoToSave"><span class="type-signature">(protected) </span>getPojoToSave<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#getPojoToSave">AbstractEntity#getPojoToSave</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line71">line 71</a>
</li></ul></dd>
</dl>
<h4 class="name" id="getUtcDateChanged"><span class="type-signature">(protected) </span>getUtcDateChanged<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#getUtcDateChanged">AbstractEntity#getUtcDateChanged</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line45">line 45</a>
</li></ul></dd>
</dl>
@@ -559,7 +1156,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line118">line 118</a>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line125">line 125</a>
</li></ul></dd>
@@ -652,7 +1249,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line73">line 73</a>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line80">line 80</a>
</li></ul></dd>
@@ -722,7 +1319,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -154,6 +154,69 @@
<h4 class="name" id="becca"><span class="type-signature">(protected) </span>becca<span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#becca">AbstractEntity#becca</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line50">line 50</a>
</li></ul></dd>
</dl>
<h4 class="name" id="noteId"><span class="type-signature"></span>noteId<span class="type-signature"> :string</span></h4>
@@ -362,6 +425,540 @@
<h3 class="subsection-title">Methods</h3>
<h4 class="name" id="addEntityChange"><span class="type-signature">(protected) </span>addEntityChange<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#addEntityChange">AbstractEntity#addEntityChange</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line59">line 59</a>
</li></ul></dd>
</dl>
<h4 class="name" id="beforeSaving"><span class="type-signature">(protected) </span>beforeSaving<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#beforeSaving">AbstractEntity#beforeSaving</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line18">line 18</a>
</li></ul></dd>
</dl>
<h4 class="name" id="generateHash"><span class="type-signature">(protected) </span>generateHash<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#generateHash">AbstractEntity#generateHash</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line30">line 30</a>
</li></ul></dd>
</dl>
<h4 class="name" id="generateIdIfNecessary"><span class="type-signature">(protected) </span>generateIdIfNecessary<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#generateIdIfNecessary">AbstractEntity#generateIdIfNecessary</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line23">line 23</a>
</li></ul></dd>
</dl>
<h4 class="name" id="getPojoToSave"><span class="type-signature">(protected) </span>getPojoToSave<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#getPojoToSave">AbstractEntity#getPojoToSave</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line71">line 71</a>
</li></ul></dd>
</dl>
<h4 class="name" id="getUtcDateChanged"><span class="type-signature">(protected) </span>getUtcDateChanged<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-overrides">Overrides:</dt>
<dd class="tag-overrides"><ul class="dummy"><li>
<a href="AbstractEntity.html#getUtcDateChanged">AbstractEntity#getUtcDateChanged</a>
</li></ul></dd>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line45">line 45</a>
</li></ul></dd>
</dl>
@@ -491,7 +1088,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line118">line 118</a>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line125">line 125</a>
</li></ul></dd>
@@ -584,7 +1181,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line73">line 73</a>
<a href="becca_entities_abstract_entity.js.html">becca/entities/abstract_entity.js</a>, <a href="becca_entities_abstract_entity.js.html#line80">line 80</a>
</li></ul></dd>
@@ -654,7 +1251,7 @@ This is a low level method, for notes and branches use `note.deleteNote()` and '
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -42,21 +42,24 @@ let becca = null;
* Base class for all backend entities.
*/
class AbstractEntity {
/** @protected */
beforeSaving() {
this.generateIdIfNecessary();
}
/** @protected */
generateIdIfNecessary() {
if (!this[this.constructor.primaryKeyName]) {
this[this.constructor.primaryKeyName] = utils.newEntityId();
}
}
/** @protected */
generateHash(isDeleted = false) {
let contentToHash = "";
for (const propertyName of this.constructor.hashedProperties) {
contentToHash += "|" + this[propertyName];
contentToHash += `|${this[propertyName]}`;
}
if (isDeleted) {
@@ -66,10 +69,12 @@ class AbstractEntity {
return utils.hash(contentToHash).substr(0, 10);
}
/** @protected */
getUtcDateChanged() {
return this.utcDateModified || this.utcDateCreated;
}
/** @protected */
get becca() {
if (!becca) {
becca = require('../becca');
@@ -78,6 +83,7 @@ class AbstractEntity {
return becca;
}
/** @protected */
addEntityChange(isDeleted = false) {
entityChangesService.addEntityChange({
entityName: this.constructor.entityName,
@@ -89,6 +95,7 @@ class AbstractEntity {
});
}
/** @protected */
getPojoToSave() {
return this.getPojo();
}
@@ -202,7 +209,7 @@ module.exports = AbstractEntity;
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -33,6 +33,7 @@ const AbstractEntity = require("./abstract_entity");
const sql = require("../../services/sql");
const dateUtils = require("../../services/date_utils");
const promotedAttributeDefinitionParser = require("../../services/promoted_attribute_definition_parser");
const {sanitizeAttributeName} = require("../../services/sanitize_attribute_name");
/**
* Attribute is an abstract concept which has two real uses - label (key - value pair)
@@ -113,6 +114,20 @@ class Attribute extends AbstractEntity {
}
}
validate() {
if (!["label", "relation"].includes(this.type)) {
throw new Error(`Invalid attribute type '${this.type}' in attribute '${this.attributeId}' of note '${this.noteId}'`);
}
if (!this.name?.trim()) {
throw new Error(`Invalid empty name in attribute '${this.attributeId}' of note '${this.noteId}'`);
}
if (this.type === 'relation' &amp;&amp; !(this.value in this.becca.notes)) {
throw new Error(`Cannot save relation '${this.name}' of note '${this.noteId}' since it target not existing note '${this.value}'.`);
}
}
get isAffectingSubtree() {
return this.isInheritable
|| (this.type === 'relation' &amp;&amp; this.name === 'template');
@@ -140,7 +155,13 @@ class Attribute extends AbstractEntity {
* @returns {Note|null}
*/
getNote() {
return this.becca.getNote(this.noteId);
const note = this.becca.getNote(this.noteId);
if (!note) {
throw new Error(`Note '${this.noteId}' of attribute '${this.attributeId}', type '${this.type}', name '${this.name}' does not exist.`);
}
return note;
}
/**
@@ -184,11 +205,11 @@ class Attribute extends AbstractEntity {
}
beforeSaving() {
if (!this.value) {
if (this.type === 'relation') {
throw new Error(`Cannot save relation ${this.name} since it does not target any note.`);
}
this.validate();
this.name = sanitizeAttributeName(this.name);
if (!this.value) {
// null value isn't allowed
this.value = "";
}
@@ -253,7 +274,7 @@ module.exports = Attribute;
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -30,17 +30,19 @@
const Note = require('./note');
const AbstractEntity = require("./abstract_entity");
const sql = require("../../services/sql");
const dateUtils = require("../../services/date_utils");
const utils = require("../../services/utils.js");
const TaskContext = require("../../services/task_context.js");
const cls = require("../../services/cls.js");
const log = require("../../services/log.js");
const utils = require("../../services/utils");
const TaskContext = require("../../services/task_context");
const cls = require("../../services/cls");
const log = require("../../services/log");
/**
* Branch represents a relationship between a child note and its parent note. Trilium allows a note to have multiple
* parents.
*
* Note that you should not rely on the branch's identity, since it can change easily with a note's move.
* Always check noteId instead.
*
* @extends AbstractEntity
*/
class Branch extends AbstractEntity {
@@ -98,21 +100,22 @@ class Branch extends AbstractEntity {
this.becca.childParentToBranch[`${this.noteId}-${this.parentNoteId}`] = this;
const childNote = this.childNote;
if (!childNote.parentBranches.includes(this)) {
childNote.parentBranches.push(this);
}
if (this.branchId === 'root') {
return;
}
const childNote = this.childNote;
const parentNote = this.parentNote;
if (!childNote.parents.includes(parentNote)) {
childNote.parents.push(parentNote);
}
if (!childNote.parentBranches.includes(this)) {
childNote.parentBranches.push(this);
}
if (!parentNote.children.includes(childNote)) {
parentNote.children.push(childNote);
}
@@ -132,9 +135,9 @@ class Branch extends AbstractEntity {
return this.childNote;
}
/** @returns {Note} */
/** @returns {Note|undefined} - root branch will have undefined parent, all other branches have to have a parent note */
get parentNote() {
if (!(this.parentNoteId in this.becca.notes)) {
if (!(this.parentNoteId in this.becca.notes) &amp;&amp; this.parentNoteId !== 'none') {
// entities can come out of order in sync/import, create skeleton which will be filled later
this.becca.addNote(this.parentNoteId, new Note({noteId: this.parentNoteId}));
}
@@ -146,6 +149,19 @@ class Branch extends AbstractEntity {
return !(this.branchId in this.becca.branches);
}
/**
* Branch is weak when its existence should not hinder deletion of its note.
* As a result, note with only weak branches should be immediately deleted.
* An example is shared or bookmarked clones - they are created automatically and exist for technical reasons,
* not as user-intended actions. From user perspective, they don't count as real clones and for the purpose
* of deletion should not act as a clone.
*
* @returns {boolean}
*/
get isWeak() {
return ['_share', '_lbBookmarks'].includes(this.parentNoteId);
}
/**
* Delete a branch. If this is a last note's branch, delete the note as well.
*
@@ -165,6 +181,18 @@ class Branch extends AbstractEntity {
taskContext.increaseProgressCount();
const note = this.getNote();
if (!taskContext.noteDeletionHandlerTriggered) {
const parentBranches = note.getParentBranches();
if (parentBranches.length === 1 &amp;&amp; parentBranches[0] === this) {
// needs to be run before branches and attributes are deleted and thus attached relations disappear
const handlers = require("../../services/handlers");
handlers.runAttachedRelations(note, 'runOnNoteDeletion', note);
}
}
if (this.branchId === 'root'
|| this.noteId === 'root'
|| this.noteId === cls.getHoistedNoteId()) {
@@ -174,17 +202,22 @@ class Branch extends AbstractEntity {
this.markAsDeleted(deleteId);
const note = this.getNote();
const notDeletedBranches = note.getParentBranches();
const notDeletedBranches = note.getStrongParentBranches();
if (notDeletedBranches.length === 0) {
for (const weakBranch of note.getParentBranches()) {
weakBranch.markAsDeleted(deleteId);
}
for (const childBranch of note.getChildBranches()) {
childBranch.deleteBranch(deleteId, taskContext);
}
// first delete children and then parent - this will show up better in recent changes
log.info("Deleting note " + note.noteId);
log.info(`Deleting note ${note.noteId}`);
this.becca.notes[note.noteId].isBeingDeleted = true;
for (const attribute of note.getOwnedAttributes()) {
attribute.markAsDeleted(deleteId);
@@ -205,9 +238,15 @@ class Branch extends AbstractEntity {
beforeSaving() {
if (this.notePosition === undefined || this.notePosition === null) {
// TODO finding new position can be refactored into becca
const maxNotePos = sql.getValue('SELECT MAX(notePosition) FROM branches WHERE parentNoteId = ? AND isDeleted = 0', [this.parentNoteId]);
this.notePosition = maxNotePos === null ? 0 : maxNotePos + 10;
let maxNotePos = 0;
for (const childBranch of this.parentNote.getChildBranches()) {
if (maxNotePos &lt; childBranch.notePosition &amp;&amp; childBranch.noteId !== '_hidden') {
maxNotePos = childBranch.notePosition;
}
}
this.notePosition = maxNotePos + 10;
}
if (!this.isExpanded) {
@@ -262,7 +301,7 @@ module.exports = Branch;
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -120,7 +120,7 @@ module.exports = EtapiToken;
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -36,9 +36,10 @@ const dateUtils = require('../../services/date_utils');
const entityChangesService = require('../../services/entity_changes');
const AbstractEntity = require("./abstract_entity");
const NoteRevision = require("./note_revision");
const TaskContext = require("../../services/task_context.js");
const optionService = require("../../services/options.js");
const noteRevisionService = require("../../services/note_revisions.js");
const TaskContext = require("../../services/task_context");
const dayjs = require("dayjs");
const utc = require('dayjs/plugin/utc');
dayjs.extend(utc)
const LABEL = 'label';
const RELATION = 'relation';
@@ -99,6 +100,8 @@ class Note extends AbstractEntity {
this.utcDateCreated = utcDateCreated || dateUtils.utcNowDateTime();
/** @type {string} */
this.utcDateModified = utcDateModified;
/** @type {boolean} - set during the deletion operation, before it is completed (removed from becca completely) */
this.isBeingDeleted = false;
// ------ Derived attributes ------
@@ -114,13 +117,17 @@ class Note extends AbstractEntity {
}
init() {
/** @type {Branch[]} */
/** @type {Branch[]}
* @private */
this.parentBranches = [];
/** @type {Note[]} */
/** @type {Note[]}
* @private */
this.parents = [];
/** @type {Note[]} */
/** @type {Note[]}
* @private*/
this.children = [];
/** @type {Attribute[]} */
/** @type {Attribute[]}
* @private */
this.ownedAttributes = [];
/** @type {Attribute[]|null}
@@ -130,7 +137,8 @@ class Note extends AbstractEntity {
* @private*/
this.inheritableAttributeCache = null;
/** @type {Attribute[]} */
/** @type {Attribute[]}
* @private*/
this.targetRelations = [];
this.becca.addNote(this.noteId, this);
@@ -144,16 +152,19 @@ class Note extends AbstractEntity {
/**
* size of the content in bytes
* @type {int|null}
* @private
*/
this.contentSize = null;
/**
* size of the content and note revision contents in bytes
* @type {int|null}
* @private
*/
this.noteSize = null;
/**
* number of note revisions for this note
* @type {int|null}
* @private
*/
this.revisionCount = null;
}
@@ -173,6 +184,15 @@ class Note extends AbstractEntity {
return this.parentBranches;
}
/**
* Returns &lt;i>strong&lt;/i> (as opposed to &lt;i>weak&lt;/i>) parent branches. See isWeak for details.
*
* @returns {Branch[]}
*/
getStrongParentBranches() {
return this.getParentBranches().filter(branch => !branch.isWeak);
}
/**
* @returns {Branch[]}
* @deprecated use getParentBranches() instead
@@ -219,7 +239,7 @@ class Note extends AbstractEntity {
return undefined;
}
else {
throw new Error("Cannot find note content for noteId=" + this.noteId);
throw new Error(`Cannot find note content for noteId=${this.noteId}`);
}
}
@@ -255,6 +275,22 @@ class Note extends AbstractEntity {
WHERE noteId = ?`, [this.noteId]);
}
get dateCreatedObj() {
return this.dateCreated === null ? null : dayjs(this.dateCreated);
}
get utcDateCreatedObj() {
return this.utcDateCreated === null ? null : dayjs.utc(this.utcDateCreated);
}
get dateModifiedObj() {
return this.dateModified === null ? null : dayjs(this.dateModified);
}
get utcDateModifiedObj() {
return this.utcDateModified === null ? null : dayjs.utc(this.utcDateModified);
}
/** @returns {*} */
getJsonContent() {
const content = this.getContent();
@@ -296,7 +332,7 @@ class Note extends AbstractEntity {
sql.upsert("note_contents", "noteId", pojo);
const hash = utils.hash(this.noteId + "|" + pojo.content.toString());
const hash = utils.hash(`${this.noteId}|${pojo.content.toString()}`);
entityChangesService.addEntityChange({
entityName: 'note_contents',
@@ -324,7 +360,7 @@ class Note extends AbstractEntity {
/** @returns {boolean} true if this note is JavaScript (code or attachment) */
isJavaScript() {
return (this.type === "code" || this.type === "file")
return (this.type === "code" || this.type === "file" || this.type === 'launcher')
&amp;&amp; (this.mime.startsWith("application/javascript")
|| this.mime === "application/x-javascript"
|| this.mime === "text/javascript");
@@ -364,6 +400,8 @@ class Note extends AbstractEntity {
* @returns {Attribute[]} all note's attributes, including inherited ones
*/
getAttributes(type, name) {
this.__validateTypeName(type, name);
this.__getAttributes([]);
if (type &amp;&amp; name) {
@@ -376,10 +414,12 @@ class Note extends AbstractEntity {
return this.__attributeCache.filter(attr => attr.name === name);
}
else {
return this.__attributeCache.slice();
// a bit unsafe to return the original array, but defensive copy would be costly
return this.__attributeCache;
}
}
/** @private */
__getAttributes(path) {
if (path.includes(this.noteId)) {
return [];
@@ -402,7 +442,11 @@ class Note extends AbstractEntity {
const templateNote = this.becca.notes[ownedAttr.value];
if (templateNote) {
templateAttributes.push(...templateNote.__getAttributes(newPath));
templateAttributes.push(
...templateNote.__getAttributes(newPath)
// template attr is used as a marker for templates, but it's not meant to be inherited
.filter(attr => !(attr.type === 'label' &amp;&amp; (attr.name === 'template' || attr.name === 'workspacetemplate')))
);
}
}
}
@@ -431,7 +475,10 @@ class Note extends AbstractEntity {
return this.__attributeCache;
}
/** @returns {Attribute[]} */
/**
* @private
* @returns {Attribute[]}
*/
__getInheritableAttributes(path) {
if (path.includes(this.noteId)) {
return [];
@@ -444,8 +491,31 @@ class Note extends AbstractEntity {
return this.inheritableAttributeCache;
}
hasAttribute(type, name) {
return !!this.getAttributes().find(attr => attr.type === type &amp;&amp; attr.name === name);
__validateTypeName(type, name) {
if (type &amp;&amp; type !== 'label' &amp;&amp; type !== 'relation') {
throw new Error(`Unrecognized attribute type '${type}'. Only 'label' and 'relation' are possible values.`);
}
if (name) {
const firstLetter = name.charAt(0);
if (firstLetter === '#' || firstLetter === '~') {
throw new Error(`Detect '#' or '~' in the attribute's name. In the API, attribute names should be set without these characters.`);
}
}
}
/**
* @param type
* @param name
* @param [value]
* @returns {boolean}
*/
hasAttribute(type, name, value = null) {
return !!this.getAttributes().find(attr =>
attr.type === type
&amp;&amp; attr.name === name
&amp;&amp; (value === undefined || value === null || attr.value === value)
);
}
getAttributeCaseInsensitive(type, name, value) {
@@ -466,27 +536,31 @@ class Note extends AbstractEntity {
/**
* @param {string} name - label name
* @param {string} [value] - label value
* @returns {boolean} true if label exists (including inherited)
*/
hasLabel(name) { return this.hasAttribute(LABEL, name); }
hasLabel(name, value) { return this.hasAttribute(LABEL, name, value); }
/**
* @param {string} name - label name
* @param {string} [value] - label value
* @returns {boolean} true if label exists (excluding inherited)
*/
hasOwnedLabel(name) { return this.hasOwnedAttribute(LABEL, name); }
hasOwnedLabel(name, value) { return this.hasOwnedAttribute(LABEL, name, value); }
/**
* @param {string} name - relation name
* @param {string} [value] - relation value
* @returns {boolean} true if relation exists (including inherited)
*/
hasRelation(name) { return this.hasAttribute(RELATION, name); }
hasRelation(name, value) { return this.hasAttribute(RELATION, name, value); }
/**
* @param {string} name - relation name
* @param {string} [value] - relation value
* @returns {boolean} true if relation exists (excluding inherited)
*/
hasOwnedRelation(name) { return this.hasOwnedAttribute(RELATION, name); }
hasOwnedRelation(name, value) { return this.hasOwnedAttribute(RELATION, name, value); }
/**
* @param {string} name - label name
@@ -539,10 +613,11 @@ class Note extends AbstractEntity {
/**
* @param {string} type - attribute type (label, relation, etc.)
* @param {string} name - attribute name
* @param {string} [value] - attribute value
* @returns {boolean} true if note has an attribute with given type and name (excluding inherited)
*/
hasOwnedAttribute(type, name) {
return !!this.getOwnedAttribute(type, name);
hasOwnedAttribute(type, name, value) {
return !!this.getOwnedAttribute(type, name, value);
}
/**
@@ -627,17 +702,18 @@ class Note extends AbstractEntity {
}
/**
* @param {string} [type] - (optional) attribute type to filter
* @param {string} [name] - (optional) attribute name to filter
* @param {string|null} [type] - (optional) attribute type to filter
* @param {string|null} [name] - (optional) attribute name to filter
* @param {string|null} [value] - (optional) attribute value to filter
* @returns {Attribute[]} note's "owned" attributes - excluding inherited ones
*/
getOwnedAttributes(type, name) {
// it's a common mistake to include # or ~ into attribute name
if (name &amp;&amp; ["#", "~"].includes(name[0])) {
name = name.substr(1);
}
getOwnedAttributes(type = null, name = null, value = null) {
this.__validateTypeName(type, name);
if (type &amp;&amp; name) {
if (type &amp;&amp; name &amp;&amp; value !== undefined &amp;&amp; value !== null) {
return this.ownedAttributes.filter(attr => attr.type === type &amp;&amp; attr.name === name &amp;&amp; attr.value === value);
}
else if (type &amp;&amp; name) {
return this.ownedAttributes.filter(attr => attr.type === type &amp;&amp; attr.name === name);
}
else if (type) {
@@ -656,8 +732,8 @@ class Note extends AbstractEntity {
*
* This method can be significantly faster than the getAttribute()
*/
getOwnedAttribute(type, name) {
const attrs = this.getOwnedAttributes(type, name);
getOwnedAttribute(type, name, value = null) {
const attrs = this.getOwnedAttributes(type, name, value);
return attrs.length > 0 ? attrs[0] : null;
}
@@ -674,10 +750,12 @@ class Note extends AbstractEntity {
// this is done so that non-search &amp; non-archived paths are always explored as first when looking for note path
sortParents() {
this.parentBranches.sort((a, b) =>
a.branchId.startsWith('virt-')
|| a.parentNote.hasInheritableOwnedArchivedLabel() ? 1 : -1);
a.branchId.startsWith('virt-') // FIXME: search virtual notes appear only in froca so this is probably not necessary
|| a.parentNote?.hasInheritableOwnedArchivedLabel() ? 1 : -1);
this.parents = this.parentBranches.map(branch => branch.parentNote);
this.parents = this.parentBranches
.map(branch => branch.parentNote)
.filter(note => !!note);
}
/**
@@ -689,22 +767,22 @@ class Note extends AbstractEntity {
*/
getFlatText() {
if (!this.flatTextCache) {
this.flatTextCache = this.noteId + ' ' + this.type + ' ' + this.mime + ' ';
this.flatTextCache = `${this.noteId} ${this.type} ${this.mime} `;
for (const branch of this.parentBranches) {
if (branch.prefix) {
this.flatTextCache += branch.prefix + ' ';
this.flatTextCache += `${branch.prefix} `;
}
}
this.flatTextCache += this.title + ' ';
this.flatTextCache += `${this.title} `;
for (const attr of this.getAttributes()) {
// it's best to use space as separator since spaces are filtered from the search string by the tokenization into words
this.flatTextCache += (attr.type === 'label' ? '#' : '~') + attr.name;
this.flatTextCache += `${attr.type === 'label' ? '#' : '~'}${attr.name}`;
if (attr.value) {
this.flatTextCache += '=' + attr.value;
this.flatTextCache += `=${attr.value}`;
}
this.flatTextCache += ' ';
@@ -813,30 +891,93 @@ class Note extends AbstractEntity {
return Array.from(set);
}
/** @returns {Note[]} */
getSubtreeNotes(includeArchived = true) {
const noteSet = new Set();
/** @return {Note[]} */
getSearchResultNotes() {
if (this.type !== 'search') {
return [];
}
try {
const searchService = require("../../services/search/services/search");
const {searchResultNoteIds} = searchService.searchFromNote(this);
const becca = this.becca;
return searchResultNoteIds
.map(resultNoteId => becca.notes[resultNoteId])
.filter(note => !!note);
}
catch (e) {
log.error(`Could not resolve search note ${this.noteId}: ${e.message}`);
return [];
}
}
/**
* @returns {{notes: Note[], relationships: Array.&lt;{parentNoteId: string, childNoteId: string}>}}
*/
getSubtree({includeArchived = true, includeHidden = false, resolveSearch = false} = {}) {
const noteSet = new Set();
const relationships = []; // list of tuples parentNoteId -> childNoteId
function resolveSearchNote(searchNote) {
try {
for (const resultNote of searchNote.getSearchResultNotes()) {
addSubtreeNotesInner(resultNote, searchNote);
}
}
catch (e) {
log.error(`Could not resolve search note ${searchNote?.noteId}: ${e.message}`);
}
}
function addSubtreeNotesInner(note, parentNote = null) {
if (note.noteId === '_hidden' &amp;&amp; !includeHidden) {
return;
}
if (parentNote) {
// this needs to happen first before noteSet check to include all clone relationships
relationships.push({
parentNoteId: parentNote.noteId,
childNoteId: note.noteId
});
}
if (noteSet.has(note)) {
return;
}
function addSubtreeNotesInner(note) {
if (!includeArchived &amp;&amp; note.isArchived) {
return;
}
noteSet.add(note);
for (const childNote of note.children) {
addSubtreeNotesInner(childNote);
if (note.type === 'search') {
if (resolveSearch) {
resolveSearchNote(note);
}
}
else {
for (const childNote of note.children) {
addSubtreeNotesInner(childNote, note);
}
}
}
addSubtreeNotesInner(this);
return Array.from(noteSet);
return {
notes: Array.from(noteSet),
relationships
};
}
/** @returns {String[]} */
getSubtreeNoteIds(includeArchived = true) {
return this.getSubtreeNotes(includeArchived).map(note => note.noteId);
getSubtreeNoteIds({includeArchived = true, resolveSearch = false} = {}) {
return this.getSubtree({includeArchived, resolveSearch})
.notes
.map(note => note.noteId);
}
getDescendantNoteIds() {
@@ -928,6 +1069,10 @@ class Note extends AbstractEntity {
return false;
}
isInHiddenSubtree() {
return this.noteId === '_hidden' || this.hasAncestor('_hidden');
}
getTargetRelations() {
return this.targetRelations;
}
@@ -1010,7 +1155,7 @@ class Note extends AbstractEntity {
const attributes = this.getOwnedAttributes();
const attr = attributes.find(attr => attr.type === type &amp;&amp; attr.name === name);
value = value !== null &amp;&amp; value !== undefined ? value.toString() : "";
value = value?.toString() || "";
if (attr) {
if (attr.value !== value) {
@@ -1048,6 +1193,13 @@ class Note extends AbstractEntity {
}
/**
* Adds a new attribute to this note. The attribute is saved and returned.
* See addLabel, addRelation for more specific methods.
*
* @param {string} type - attribute type (label / relation)
* @param {string} name - name of the attribute, not including the leading ~/#
* @param {string} [value] - value of the attribute - text for labels, target note ID for relations; optional.
*
* @return {Attribute}
*/
addAttribute(type, name, value = "", isInheritable = false, position = 1000) {
@@ -1063,10 +1215,27 @@ class Note extends AbstractEntity {
}).save();
}
/**
* Adds a new label to this note. The label attribute is saved and returned.
*
* @param {string} name - name of the label, not including the leading #
* @param {string} [value] - text value of the label; optional
*
* @return {Attribute}
*/
addLabel(name, value = "", isInheritable = false) {
return this.addAttribute(LABEL, name, value, isInheritable);
}
/**
* Adds a new relation to this note. The relation attribute is saved and
* returned.
*
* @param {string} name - name of the relation, not including the leading ~
* @param {string} value - ID of the target note of the relation
*
* @return {Attribute}
*/
addRelation(name, targetNoteId, isInheritable = false) {
return this.addAttribute(RELATION, name, targetNoteId, isInheritable);
}
@@ -1148,6 +1317,10 @@ class Note extends AbstractEntity {
return this.searchNotesInSubtree(searchString)[0];
}
/**
* @param parentNoteId
* @returns {{success: boolean, message: string}}
*/
cloneTo(parentNoteId) {
const cloningService = require("../../services/cloning");
@@ -1163,6 +1336,10 @@ class Note extends AbstractEntity {
* @param {TaskContext} [taskContext]
*/
deleteNote(deleteId, taskContext) {
if (this.isDeleted) {
return;
}
if (!deleteId) {
deleteId = utils.randomString(10);
}
@@ -1171,6 +1348,11 @@ class Note extends AbstractEntity {
taskContext = new TaskContext('no-progress-reporting');
}
// needs to be run before branches and attributes are deleted and thus attached relations disappear
const handlers = require("../../services/handlers");
handlers.runAttachedRelations(this, 'runOnNoteDeletion', this);
taskContext.noteDeletionHandlerTriggered = true;
for (const branch of this.getParentBranches()) {
branch.deleteBranch(deleteId, taskContext);
}
@@ -1190,8 +1372,16 @@ class Note extends AbstractEntity {
}
}
isLaunchBarConfig() {
return this.type === 'launcher' || ['_lbRoot', '_lbAvailableLaunchers', '_lbVisibleLaunchers'].includes(this.noteId);
}
isOptions() {
return this.noteId.startsWith("options");
}
get isDeleted() {
return !(this.noteId in this.becca.notes);
return !(this.noteId in this.becca.notes) || this.isBeingDeleted;
}
/**
@@ -1212,7 +1402,7 @@ class Note extends AbstractEntity {
title: this.title,
type: this.type,
mime: this.mime,
isProtected: false, // will be fixed in the protectNoteRevisions() call
isProtected: this.isProtected,
utcDateLastEdited: this.utcDateModified > contentMetadata.utcDateModified
? this.utcDateModified
: contentMetadata.utcDateModified,
@@ -1222,7 +1412,7 @@ class Note extends AbstractEntity {
? this.dateModified
: contentMetadata.dateModified,
dateCreated: dateUtils.localNowDateTime()
}).save();
}, true).save();
noteRevision.setContent(content);
@@ -1287,7 +1477,7 @@ module.exports = Note;
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -47,7 +47,7 @@ class NoteRevision extends AbstractEntity {
static get primaryKeyName() { return "noteRevisionId"; }
static get hashedProperties() { return ["noteRevisionId", "noteId", "title", "isProtected", "dateLastEdited", "dateCreated", "utcDateLastEdited", "utcDateCreated", "utcDateModified"]; }
constructor(row) {
constructor(row, titleDecrypted = false) {
super();
/** @type {string} */
@@ -75,13 +75,10 @@ class NoteRevision extends AbstractEntity {
/** @type {number} */
this.contentLength = row.contentLength;
if (this.isProtected) {
if (protectedSessionService.isProtectedSessionAvailable()) {
this.title = protectedSessionService.decryptString(this.title);
}
else {
this.title = "[protected]";
}
if (this.isProtected &amp;&amp; !titleDecrypted) {
this.title = protectedSessionService.isProtectedSessionAvailable()
? protectedSessionService.decryptString(this.title)
: "[protected]";
}
}
@@ -96,8 +93,8 @@ class NoteRevision extends AbstractEntity {
/*
* Note revision content has quite special handling - it's not a separate entity, but a lazily loaded
* part of NoteRevision entity with it's own sync. Reason behind this hybrid design is that
* content can be quite large and it's not necessary to load it / fill memory for any note access even
* part of NoteRevision entity with its own sync. Reason behind this hybrid design is that
* content can be quite large, and it's not necessary to load it / fill memory for any note access even
* if we don't need a content, especially for bulk operations like search.
*
* This is the same approach as is used for Note's content.
@@ -112,7 +109,7 @@ class NoteRevision extends AbstractEntity {
return undefined;
}
else {
throw new Error("Cannot find note revision content for noteRevisionId=" + this.noteRevisionId);
throw new Error(`Cannot find note revision content for noteRevisionId=${this.noteRevisionId}`);
}
}
@@ -155,7 +152,7 @@ class NoteRevision extends AbstractEntity {
sql.upsert("note_revision_contents", "noteRevisionId", pojo);
const hash = utils.hash(this.noteRevisionId + "|" + pojo.content.toString());
const hash = utils.hash(`${this.noteRevisionId}|${pojo.content.toString()}`);
entityChangesService.addEntityChange({
entityName: 'note_revision_contents',
@@ -238,7 +235,7 @@ module.exports = NoteRevision;
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -89,7 +89,7 @@ module.exports = Option;
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -77,7 +77,7 @@ module.exports = RecentNote;
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -237,7 +237,7 @@
<td class="description last">text, code, file, image, search, book, relation-map, canvas - MANDATORY</td>
<td class="description last">text, code, file, image, search, book, relationMap, canvas - MANDATORY</td>
</tr>
@@ -391,7 +391,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#line208">line 208</a>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line212">line 212</a>
</li></ul></dd>
@@ -579,7 +579,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#line169">line 169</a>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line173">line 173</a>
</li></ul></dd>
@@ -767,7 +767,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#line229">line 229</a>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line233">line 233</a>
</li></ul></dd>
@@ -1053,7 +1053,635 @@
<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#line236">line 236</a>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line240">line 240</a>
</li></ul></dd>
</dl>
<h4 class="name" id="CreateOrUpdateLauncher">CreateOrUpdateLauncher</h4>
<h5>Type:</h5>
<ul>
<li>
<span class="param-type">Object</span>
</li>
</ul>
<h5 class="subsection-title">Properties:</h5>
<table class="props">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>id</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
</td>
<td class="default">
</td>
<td class="description last">id of the launcher, only alphanumeric at least 6 characters long</td>
</tr>
<tr>
<td class="name"><code>type</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
</td>
<td class="default">
</td>
<td class="description last">one of
* "note" - activating the launcher will navigate to the target note (specified in targetNoteId param)
* "script" - activating the launcher will execute the script (specified in scriptNoteId param)
* "customWidget" - the launcher will be rendered with a custom widget (specified in widgetNoteId param)</td>
</tr>
<tr>
<td class="name"><code>title</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
</td>
<td class="default">
</td>
<td class="description last"></td>
</tr>
<tr>
<td class="name"><code>isVisible</code></td>
<td class="type">
<span class="param-type">boolean</span>
</td>
<td class="attributes">
&lt;optional><br>
</td>
<td class="default">
false
</td>
<td class="description last">if true, will be created in the "Visible launchers", otherwise in "Available launchers"</td>
</tr>
<tr>
<td class="name"><code>icon</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
&lt;optional><br>
</td>
<td class="default">
</td>
<td class="description last">name of the boxicon to be used (e.g. "bx-time")</td>
</tr>
<tr>
<td class="name"><code>keyboardShortcut</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
&lt;optional><br>
</td>
<td class="default">
</td>
<td class="description last">will activate the target note/script upon pressing, e.g. "ctrl+e"</td>
</tr>
<tr>
<td class="name"><code>targetNoteId</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
&lt;optional><br>
</td>
<td class="default">
</td>
<td class="description last">for type "note"</td>
</tr>
<tr>
<td class="name"><code>scriptNoteId</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
&lt;optional><br>
</td>
<td class="default">
</td>
<td class="description last">for type "script"</td>
</tr>
<tr>
<td class="name"><code>widgetNoteId</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
&lt;optional><br>
</td>
<td class="default">
</td>
<td class="description last">for type "customWidget"</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#line487">line 487</a>
</li></ul></dd>
</dl>
<h4 class="name" id="SortConfig">SortConfig</h4>
<h5>Type:</h5>
<ul>
<li>
<span class="param-type">Object</span>
</li>
</ul>
<h5 class="subsection-title">Properties:</h5>
<table class="props">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>sortBy</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
&lt;optional><br>
</td>
<td class="default">
title
</td>
<td class="description last">'title', 'dateCreated', 'dateModified' or a label name
see https://github.com/zadam/trilium/wiki/Sorting for details.</td>
</tr>
<tr>
<td class="name"><code>reverse</code></td>
<td class="type">
<span class="param-type">boolean</span>
</td>
<td class="attributes">
&lt;optional><br>
</td>
<td class="default">
false
</td>
<td class="description last"></td>
</tr>
<tr>
<td class="name"><code>foldersFirst</code></td>
<td class="type">
<span class="param-type">boolean</span>
</td>
<td class="attributes">
&lt;optional><br>
</td>
<td class="default">
false
</td>
<td class="description last"></td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line400">line 400</a>
</li></ul></dd>
@@ -1089,7 +1717,7 @@
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -56,7 +56,7 @@
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -28,8 +28,6 @@
<header>
</header>
<article>
@@ -38,6 +36,50 @@
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line3">line 3</a>
</li></ul></dd>
</dl>
</div>
@@ -208,7 +250,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line355">line 355</a>
<a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line361">line 361</a>
</li></ul></dd>
@@ -388,7 +430,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line346">line 346</a>
<a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line352">line 352</a>
</li></ul></dd>
@@ -590,7 +632,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line336">line 336</a>
<a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line342">line 342</a>
</li></ul></dd>
@@ -792,7 +834,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line312">line 312</a>
<a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line318">line 318</a>
</li></ul></dd>
@@ -994,7 +1036,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line323">line 323</a>
<a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line329">line 329</a>
</li></ul></dd>
@@ -1196,7 +1238,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line302">line 302</a>
<a href="services_sql.js.html">services/sql.js</a>, <a href="services_sql.js.html#line308">line 308</a>
</li></ul></dd>
@@ -1258,7 +1300,7 @@
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -42,6 +42,10 @@ const appInfo = require('./app_info');
const searchService = require('./search/services/search');
const SearchContext = require("./search/search_context");
const becca = require("../becca/becca");
const ws = require("./ws");
const SpacedUpdate = require("./spaced_update");
const specialNotesService = require("./special_notes");
const branchService = require("./branches.js");
/**
* This is the main backend API interface for scripts. It's published in the local "api" object.
@@ -238,7 +242,7 @@ function BackendScriptApi(currentNote, apiParams) {
* @property {string} parentNoteId - MANDATORY
* @property {string} title - MANDATORY
* @property {string|buffer} content - MANDATORY
* @property {string} type - text, code, file, image, search, book, relation-map, canvas - MANDATORY
* @property {string} type - text, code, file, image, search, book, relationMap, canvas - MANDATORY
* @property {string} mime - value is derived from default mimes for type
* @property {boolean} isProtected - default is false
* @property {boolean} isExpanded - default is false
@@ -316,12 +320,34 @@ function BackendScriptApi(currentNote, apiParams) {
});
};
this.logMessages = {};
this.logSpacedUpdates = {};
/**
* Log given message to trilium logs.
* Log given message to trilium logs and log pane in UI
*
* @param message
*/
this.log = message => log.info(message);
this.log = message => {
log.info(message);
const {noteId} = this.startNote;
this.logMessages[noteId] = this.logMessages[noteId] || [];
this.logSpacedUpdates[noteId] = this.logSpacedUpdates[noteId] || new SpacedUpdate(() => {
const messages = this.logMessages[noteId];
this.logMessages[noteId] = [];
ws.sendMessageToAllClients({
type: 'api-log-messages',
noteId,
messages
});
}, 100);
this.logMessages[noteId].push(message);
this.logSpacedUpdates[noteId].scheduleUpdate();
};
/**
* Returns root note of the calendar.
@@ -336,6 +362,7 @@ function BackendScriptApi(currentNote, apiParams) {
*
* @method
* @param {string} date in YYYY-MM-DD format
* @param {Note} [rootNote] - specify calendar root note, normally leave empty to use default calendar
* @returns {Note|null}
* @deprecated use getDayNote instead
*/
@@ -346,6 +373,7 @@ function BackendScriptApi(currentNote, apiParams) {
*
* @method
* @param {string} date in YYYY-MM-DD format
* @param {Note} [rootNote] - specify calendar root note, normally leave empty to use default calendar
* @returns {Note|null}
*/
this.getDayNote = dateNoteService.getDayNote;
@@ -354,6 +382,7 @@ function BackendScriptApi(currentNote, apiParams) {
* Returns today's day note. If such note doesn't exist, it is created.
*
* @method
* @param {Note} [rootNote] - specify calendar root note, normally leave empty to use default calendar
* @returns {Note|null}
*/
this.getTodayNote = dateNoteService.getTodayNote;
@@ -363,7 +392,8 @@ function BackendScriptApi(currentNote, apiParams) {
*
* @method
* @param {string} date in YYYY-MM-DD format
* @param {object} options - "startOfTheWeek" - either "monday" (default) or "sunday"
* @param {object} [options] - "startOfTheWeek" - either "monday" (default) or "sunday"
* @param {Note} [rootNote] - specify calendar root note, normally leave empty to use default calendar
* @returns {Note|null}
*/
this.getWeekNote = dateNoteService.getWeekNote;
@@ -373,6 +403,7 @@ function BackendScriptApi(currentNote, apiParams) {
*
* @method
* @param {string} date in YYYY-MM format
* @param {Note} [rootNote] - specify calendar root note, normally leave empty to use default calendar
* @returns {Note|null}
*/
this.getMonthNote = dateNoteService.getMonthNote;
@@ -382,16 +413,40 @@ function BackendScriptApi(currentNote, apiParams) {
*
* @method
* @param {string} year in YYYY format
* @param {Note} [rootNote] - specify calendar root note, normally leave empty to use default calendar
* @returns {Note|null}
*/
this.getYearNote = dateNoteService.getYearNote;
/**
* @method
* @deprecated - use sortNotes instead
* @param {string} parentNoteId - this note's child notes will be sorted
*/
this.sortNotesByTitle = parentNoteId => treeService.sortNotes(parentNoteId);
/**
* @typedef {Object} SortConfig
* @property {string} [sortBy=title] - 'title', 'dateCreated', 'dateModified' or a label name
* see https://github.com/zadam/trilium/wiki/Sorting for details.
* @property {boolean} [reverse=false]
* @property {boolean} [foldersFirst=false]
*/
/**
* Sort child notes of a given note.
*
* @method
* @param {string} parentNoteId - this note's child notes will be sorted
* @param {SortConfig} [sortConfig]
*/
this.sortNotes = (parentNoteId, sortConfig = {}) => treeService.sortNotes(
parentNoteId,
sortConfig.sortBy || "title",
!!sortConfig.reverse,
!!sortConfig.foldersFirst
);
/**
* This method finds note by its noteId and prefix and either sets it to the given parentNoteId
* or removes the branch (if parentNoteId is not given).
@@ -448,13 +503,93 @@ function BackendScriptApi(currentNote, apiParams) {
* @method
* @deprecated - this is now no-op since all the changes should be gracefully handled per widget
*/
this.refreshTree = () => {};
this.refreshTree = () => {
console.warn("api.refreshTree() is a NO-OP and can be removed from your script.")
};
/**
* @return {{syncVersion, appVersion, buildRevision, dbVersion, dataDirectory, buildDate}|*} - object representing basic info about running Trilium version
*/
this.getAppInfo = () => appInfo
/**
* @typedef {Object} CreateOrUpdateLauncher
* @property {string} id - id of the launcher, only alphanumeric at least 6 characters long
* @property {string} type - one of
* * "note" - activating the launcher will navigate to the target note (specified in targetNoteId param)
* * "script" - activating the launcher will execute the script (specified in scriptNoteId param)
* * "customWidget" - the launcher will be rendered with a custom widget (specified in widgetNoteId param)
* @property {string} title
* @property {boolean} [isVisible=false] - if true, will be created in the "Visible launchers", otherwise in "Available launchers"
* @property {string} [icon] - name of the boxicon to be used (e.g. "bx-time")
* @property {string} [keyboardShortcut] - will activate the target note/script upon pressing, e.g. "ctrl+e"
* @property {string} [targetNoteId] - for type "note"
* @property {string} [scriptNoteId] - for type "script"
* @property {string} [widgetNoteId] - for type "customWidget"
*/
/**
* Creates a new launcher to the launchbar. If the launcher (id) already exists, it will be updated.
*
* @param {CreateOrUpdateLauncher} opts
*/
this.createOrUpdateLauncher = opts => {
if (!opts.id) { throw new Error("ID is a mandatory parameter for api.createOrUpdateLauncher(opts)"); }
if (!opts.id.match(/[a-z0-9]{6,1000}/i)) { throw new Error(`ID must be an alphanumeric string at least 6 characters long.`); }
if (!opts.type) { throw new Error("Launcher Type is a mandatory parameter for api.createOrUpdateLauncher(opts)"); }
if (!["note", "script", "customWidget"].includes(opts.type)) { throw new Error(`Given launcher type '${opts.type}'`); }
if (!opts.title?.trim()) { throw new Error("Title is a mandatory parameter for api.createOrUpdateLauncher(opts)"); }
if (opts.type === 'note' &amp;&amp; !opts.targetNoteId) { throw new Error("targetNoteId is mandatory for launchers of type 'note'"); }
if (opts.type === 'script' &amp;&amp; !opts.scriptNoteId) { throw new Error("scriptNoteId is mandatory for launchers of type 'script'"); }
if (opts.type === 'customWidget' &amp;&amp; !opts.widgetNoteId) { throw new Error("widgetNoteId is mandatory for launchers of type 'customWidget'"); }
const parentNoteId = !!opts.isVisible ? '_lbVisibleLaunchers' : '_lbAvailableLaunchers';
const noteId = 'al_' + opts.id;
const launcherNote =
becca.getNote(opts.id) ||
specialNotesService.createLauncher({
noteId: noteId,
parentNoteId: parentNoteId,
launcherType: opts.type,
}).note;
if (launcherNote.title !== opts.title) {
launcherNote.title = opts.title;
launcherNote.save();
}
if (launcherNote.getParentBranches().length === 1) {
const branch = launcherNote.getParentBranches()[0];
if (branch.parentNoteId !== parentNoteId) {
branchService.moveBranchToNote(branch, parentNoteId);
}
}
if (opts.type === 'note') {
launcherNote.setRelation('target', opts.targetNoteId);
} else if (opts.type === 'script') {
launcherNote.setRelation('script', opts.scriptNoteId);
} else if (opts.type === 'customWidget') {
launcherNote.setRelation('widget', opts.widgetNoteId);
} else {
throw new Error(`Unrecognized launcher type '${opts.type}'`);
}
if (opts.keyboardShortcut) {
launcherNote.setLabel('keyboardShortcut', opts.keyboardShortcut);
} else {
launcherNote.removeLabel('keyboardShortcut');
}
if (opts.icon) {
launcherNote.setLabel('iconClass', `bx ${opts.icon}`);
} else {
launcherNote.removeLabel('keyboardShortcut');
}
};
/**
* This object contains "at your risk" and "no BC guarantees" objects for advanced use cases.
*
@@ -482,7 +617,7 @@ module.exports = BackendScriptApi;
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -56,14 +56,20 @@ const LOG_ALL_QUERIES = false;
function insert(tableName, rec, replace = false) {
const keys = Object.keys(rec);
if (keys.length === 0) {
log.error("Can't insert empty object into table " + tableName);
log.error(`Can't insert empty object into table ${tableName}`);
return;
}
const columns = keys.join(", ");
const questionMarks = keys.map(p => "?").join(", ");
const query = "INSERT " + (replace ? "OR REPLACE" : "") + " INTO " + tableName + "(" + columns + ") VALUES (" + questionMarks + ")";
const query = `INSERT
${replace ? "OR REPLACE" : ""} INTO
${tableName}
(
${columns}
)
VALUES (${questionMarks})`;
const res = execute(query, Object.values(rec));
@@ -77,13 +83,13 @@ function replace(tableName, rec) {
function upsert(tableName, primaryKey, rec) {
const keys = Object.keys(rec);
if (keys.length === 0) {
log.error("Can't upsert empty object into table " + tableName);
log.error(`Can't upsert empty object into table ${tableName}`);
return;
}
const columns = keys.join(", ");
const questionMarks = keys.map(colName => "@" + colName).join(", ");
const questionMarks = keys.map(colName => `@${colName}`).join(", ");
const updateMarks = keys.map(colName => `${colName} = @${colName}`).join(", ");
@@ -270,9 +276,9 @@ function transactional(func) {
return ret;
}
catch (e) {
const entityChanges = cls.getAndClearEntityChangeIds();
const entityChangeIds = cls.getAndClearEntityChangeIds();
if (entityChanges.length > 0) {
if (entityChangeIds.length > 0) {
log.info("Transaction rollback dirtied the becca, forcing reload.");
require('../becca/becca_loader').load();
@@ -300,7 +306,7 @@ function fillParamList(paramIds, truncate = true) {
}
// doing it manually to avoid this showing up on the sloq query list
const s = stmt(`INSERT INTO param_list VALUES ` + paramIds.map(paramId => `(?)`).join(','), paramIds);
const s = stmt(`INSERT INTO param_list VALUES ${paramIds.map(paramId => `(?)`).join(',')}`, paramIds);
s.run(paramIds);
}
@@ -404,7 +410,7 @@ module.exports = {
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -727,6 +727,108 @@ and relation (representing named relationship between source and target note)</d
<h4 class="name" id="getTargetNote"><span class="type-signature">(async) </span>getTargetNote<span class="signature">()</span><span class="type-signature"> &rarr; {Promise.&lt;<a href="NoteShort.html">NoteShort</a>>}</span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_attribute.js.html">entities/attribute.js</a>, <a href="entities_attribute.js.html#line37">line 37</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">Promise.&lt;<a href="NoteShort.html">NoteShort</a>></span>
</dd>
</dl>
@@ -742,13 +844,13 @@ and relation (representing named relationship between source and target note)</d
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li><li><a href="module.exports.html">exports</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -1056,13 +1056,13 @@ parents.</div>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li><li><a href="module.exports.html">exports</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

File diff suppressed because it is too large Load Diff

View File

@@ -775,13 +775,13 @@
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li><li><a href="module.exports.html">exports</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

File diff suppressed because it is too large Load Diff

View File

@@ -61,8 +61,19 @@ class Attribute {
return this.froca.notes[this.noteId];
}
/** @returns {Promise&lt;NoteShort>} */
async getTargetNote() {
const targetNoteId = this.targetNoteId;
return await this.froca.getNote(targetNoteId, true);
}
get targetNoteId() { // alias
return this.type === 'relation' ? this.value : undefined;
if (this.type !== 'relation') {
throw new Error(`Attribute ${this.attributeId} is not a relation`);
}
return this.value;
}
get isAutoLink() {
@@ -104,13 +115,13 @@ export default Attribute;
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li><li><a href="module.exports.html">exports</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -80,6 +80,12 @@ class Branch {
get toString() {
return `Branch(branchId=${this.branchId})`;
}
get pojo() {
const pojo = {...this};
delete pojo.froca;
return pojo;
}
}
export default Branch;
@@ -93,13 +99,13 @@ export default Branch;
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li><li><a href="module.exports.html">exports</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -76,13 +76,13 @@ export default NoteComplement;
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li><li><a href="module.exports.html">exports</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -31,6 +31,8 @@ import noteAttributeCache from "../services/note_attribute_cache.js";
import ws from "../services/ws.js";
import options from "../services/options.js";
import froca from "../services/froca.js";
import protectedSessionHolder from "../services/protected_session_holder.js";
import cssClassManager from "../services/css_class_manager.js";
const LABEL = 'label';
const RELATION = 'relation';
@@ -41,11 +43,15 @@ const NOTE_TYPE_ICONS = {
"code": "bx bx-code",
"render": "bx bx-extension",
"search": "bx bx-file-find",
"relation-map": "bx bx-map-alt",
"relationMap": "bx bx-map-alt",
"book": "bx bx-book",
"note-map": "bx bx-map-alt",
"noteMap": "bx bx-map-alt",
"mermaid": "bx bx-selection",
"canvas": "bx bx-pen"
"canvas": "bx bx-pen",
"webView": "bx bx-globe-alt",
"launcher": "bx bx-link",
"doc": "bx bxs-file-doc",
"contentWidget": "bx bxs-widget"
};
/**
@@ -141,7 +147,7 @@ class NoteShort {
async getContent() {
// we're not caching content since these objects are in froca and as such pretty long lived
const note = await server.get("notes/" + this.noteId);
const note = await server.get(`notes/${this.noteId}`);
return note.content;
}
@@ -290,7 +296,11 @@ class NoteShort {
const templateNote = this.froca.notes[templateAttr.value];
if (templateNote &amp;&amp; templateNote.noteId !== this.noteId) {
attrArrs.push(templateNote.__getCachedAttributes(newPath));
attrArrs.push(
templateNote.__getCachedAttributes(newPath)
// template attr is used as a marker for templates, but it's not meant to be inherited
.filter(attr => !(attr.type === 'label' &amp;&amp; (attr.name === 'template' || attr.name === 'workspacetemplate')))
);
}
}
@@ -310,7 +320,7 @@ class NoteShort {
}
isRoot() {
return this.noted
return this.noteId === 'root';
}
getAllNotePaths(encounteredNoteIds = null) {
@@ -362,7 +372,7 @@ class NoteShort {
isInHoistedSubTree: path.includes(hoistedNotePath),
isArchived: path.find(noteId => froca.notes[noteId].hasLabel('archived')),
isSearch: path.find(noteId => froca.notes[noteId].type === 'search'),
isHidden: path.includes("hidden")
isHidden: path.includes('_hidden')
}));
notePaths.sort((a, b) => {
@@ -372,6 +382,8 @@ class NoteShort {
return a.isSearch ? 1 : -1;
} else if (a.isArchived !== b.isArchived) {
return a.isArchived ? 1 : -1;
} else if (a.isHidden !== b.isHidden) {
return a.isHidden ? 1 : -1;
} else {
return a.notePath.length - b.notePath.length;
}
@@ -381,6 +393,8 @@ class NoteShort {
}
__filterAttrs(attributes, type, name) {
this.__validateTypeName(type, name);
if (!type &amp;&amp; !name) {
return attributes;
} else if (type &amp;&amp; name) {
@@ -398,6 +412,19 @@ class NoteShort {
return attrs.filter(attr => attr.isInheritable);
}
__validateTypeName(type, name) {
if (type &amp;&amp; type !== 'label' &amp;&amp; type !== 'relation') {
throw new Error(`Unrecognized attribute type '${type}'. Only 'label' and 'relation' are possible values.`);
}
if (name) {
const firstLetter = name.charAt(0);
if (firstLetter === '#' || firstLetter === '~') {
throw new Error(`Detect '#' or '~' in the attribute's name. In the API, attribute names should be set without these characters.`);
}
}
}
/**
* @param {string} [name] - label name to filter
* @returns {Attribute[]} all note's labels (attributes with type label), including inherited ones
@@ -427,7 +454,7 @@ class NoteShort {
else if (this.noteId === 'root') {
return "bx bx-chevrons-right";
}
if (this.noteId === 'share') {
if (this.noteId === '_share') {
return "bx bx-share-alt";
}
else if (this.type === 'text') {
@@ -446,6 +473,11 @@ class NoteShort {
}
}
getColorClass() {
const color = this.getLabelValue("color");
return cssClassManager.createClassForColor(color);
}
isFolder() {
return this.type === 'search'
|| this.getFilteredChildBranches().length > 0;
@@ -663,13 +695,18 @@ class NoteShort {
return [];
}
return this.getAttributes()
const promotedAttrs = this.getAttributes()
.filter(attr => attr.isDefinition())
.filter(attr => {
const def = attr.getDefinition();
return def &amp;&amp; def.isPromoted;
});
// attrs are not resorted if position changes after initial load
promotedAttrs.sort((a, b) => a.position &lt; b.position ? -1 : 1);
return promotedAttrs;
}
hasAncestor(ancestorNoteId, visitedNoteIds = null) {
@@ -701,6 +738,10 @@ class NoteShort {
return false;
}
isInHiddenSubtree() {
return this.noteId === '_hidden' || this.hasAncestor('_hidden');
}
/**
* @deprecated NOOP
*/
@@ -764,7 +805,7 @@ class NoteShort {
/** @returns {boolean} true if this note is JavaScript (code or attachment) */
isJavaScript() {
return (this.type === "code" || this.type === "file")
return (this.type === "code" || this.type === "file" || this.type === 'launcher')
&amp;&amp; (this.mime.startsWith("application/javascript")
|| this.mime === "application/x-javascript"
|| this.mime === "text/javascript");
@@ -801,10 +842,10 @@ class NoteShort {
if (env === "frontend") {
const bundleService = (await import("../services/bundle.js")).default;
await bundleService.getAndExecuteBundle(this.noteId);
return await bundleService.getAndExecuteBundle(this.noteId);
}
else if (env === "backend") {
await server.post('script/run/' + this.noteId);
const resp = await server.post(`script/run/${this.noteId}`);
}
else {
throw new Error(`Unrecognized env type ${env} for note ${this.noteId}`);
@@ -823,13 +864,25 @@ class NoteShort {
continue;
}
if (parentNote.noteId === 'share' || parentNote.isShared()) {
if (parentNote.noteId === '_share' || parentNote.isShared()) {
return true;
}
}
return false;
}
isContentAvailable() {
return !this.isProtected || protectedSessionHolder.isProtectedSessionAvailable()
}
isLaunchBarConfig() {
return this.type === 'launcher' || ['_lbRoot', '_lbAvailableLaunchers', '_lbVisibleLaunchers'].includes(this.noteId);
}
isOptions() {
return this.noteId.startsWith("options");
}
}
export default NoteShort;
@@ -843,13 +896,13 @@ export default NoteShort;
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li><li><a href="module.exports.html">exports</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -156,7 +156,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="widgets_collapsible_widget.js.html">widgets/collapsible_widget.js</a>, <a href="widgets_collapsible_widget.js.html#line34">line 34</a>
<a href="widgets_collapsible_widget.js.html">widgets/collapsible_widget.js</a>, <a href="widgets_collapsible_widget.js.html#line37">line 37</a>
</li></ul></dd>
@@ -194,7 +194,7 @@
<h4 class="name" id="ToolbarButtonOptions">ToolbarButtonOptions</h4>
<h4 class="name" id="AddButtonToToolbarOptions">AddButtonToToolbarOptions</h4>
@@ -241,6 +241,38 @@
<tbody>
<tr>
<td class="name"><code>id</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
&lt;optional><br>
</td>
<td class="description last">id of the button, used to identify the old instances of this button to be replaced
ID is optional because of BC, but not specifying it is deprecated. ID can be alphanumeric only.</td>
</tr>
<tr>
<td class="name"><code>title</code></td>
@@ -395,7 +427,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="services_frontend_script_api.js.html">services/frontend_script_api.js</a>, <a href="services_frontend_script_api.js.html#line124">line 124</a>
<a href="services_frontend_script_api.js.html">services/frontend_script_api.js</a>, <a href="services_frontend_script_api.js.html#line108">line 108</a>
</li></ul></dd>
@@ -425,13 +457,13 @@
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li><li><a href="module.exports.html">exports</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -50,13 +50,13 @@
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li><li><a href="module.exports.html">exports</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -0,0 +1,170 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Class: exports</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Class: exports</h1>
<section>
<header>
<h2><span class="attribs"><span class="type-signature"></span></span>exports<span class="signature">()</span><span class="type-signature"></span></h2>
<div class="class-description">TODO: rename, it's not collapsible anymore</div>
</header>
<article>
<div class="container-overview">
<h2>Constructor</h2>
<h4 class="name" id="exports"><span class="type-signature"></span>new exports<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="widgets_collapsible_widget.js.html">widgets/collapsible_widget.js</a>, <a href="widgets_collapsible_widget.js.html#line15">line 15</a>
</li></ul></dd>
</dl>
</div>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li><li><a href="module.exports.html">exports</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>

View File

@@ -37,10 +37,11 @@ import dateNotesService from './date_notes.js';
import searchService from './search.js';
import CollapsibleWidget from '../widgets/collapsible_widget.js';
import ws from "./ws.js";
import appContext from "./app_context.js";
import appContext from "../components/app_context.js";
import NoteContextAwareWidget from "../widgets/note_context_aware_widget.js";
import NoteContextCachingWidget from "../widgets/note_context_caching_widget.js";
import BasicWidget from "../widgets/basic_widget.js";
import SpacedUpdate from "./spaced_update.js";
import shortcutService from "./shortcuts.js";
/**
* This is the main frontend API interface for scripts. It's published in the local "api" object.
@@ -49,8 +50,6 @@ import BasicWidget from "../widgets/basic_widget.js";
* @hideconstructor
*/
function FrontendScriptApi(startNote, currentNote, originEntity = null, $container = null) {
const $pluginButtons = $("#plugin-buttons");
/** @property {jQuery} container of all the rendered script content */
this.$container = $container;
@@ -67,24 +66,9 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain
/** @property {CollapsibleWidget} */
this.CollapsibleWidget = CollapsibleWidget;
/**
* @property {NoteContextAwareWidget}
* @deprecated use NoteContextAwareWidget instead
*/
this.TabAwareWidget = NoteContextAwareWidget;
/** @property {NoteContextAwareWidget} */
this.NoteContextAwareWidget = NoteContextAwareWidget;
/**
* @property {NoteContextCachingWidget}
* @deprecated use NoteContextCachingWidget instead
*/
this.TabCachingWidget = NoteContextCachingWidget;
/** @property {NoteContextAwareWidget} */
this.NoteContextCachingWidget = NoteContextCachingWidget;
/** @property {BasicWidget} */
this.BasicWidget = BasicWidget;
@@ -150,7 +134,9 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain
};
/**
* @typedef {Object} ToolbarButtonOptions
* @typedef {Object} AddButtonToToolbarOptions
* @property {string} [id] - id of the button, used to identify the old instances of this button to be replaced
* ID is optional because of BC, but not specifying it is deprecated. ID can be alphanumeric only.
* @property {string} title
* @property {string} [icon] - name of the boxicon to be used (e.g. "time" for "bx-time" icon)
* @property {function} action - callback handling the click on the button
@@ -158,48 +144,19 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain
*/
/**
* Adds new button the the plugin area.
* Adds a new launcher to the launchbar. If the launcher (id) already exists, it will be updated.
*
* @param {ToolbarButtonOptions} opts
* @deprecated you can now create/modify launchers in the top-left Menu -> Configure Launchbar
* for special needs there's also backend API's createOrUpdateLauncher()
* @param {AddButtonToToolbarOptions} opts
*/
this.addButtonToToolbar = opts => {
const buttonId = "toolbar-button-" + opts.title.replace(/\s/g, "-");
this.addButtonToToolbar = async opts => {
console.warn("api.addButtonToToolbar() has been deprecated since v0.58 and may be removed in the future. Use Menu -> Configure Launchbar to create/update launchers instead.");
let button;
if (utils.isMobile()) {
$('#plugin-buttons-placeholder').remove();
button = $('&lt;a class="dropdown-item" href="#">')
.on('click', () => {
setTimeout(() => $pluginButtons.dropdown('hide'), 0);
});
const {action, ...reqBody} = opts;
reqBody.action = action.toString();
if (opts.icon) {
button.append($("&lt;span>").addClass("bx bx-" + opts.icon))
.append("&amp;nbsp;");
}
button.append($("&lt;span>").text(opts.title));
} else {
button = $('&lt;span class="button-widget icon-action bx" data-toggle="tooltip" title="" data-placement="right">&lt;/span>')
.addClass("bx bx-" + (opts.icon || "question-mark"));
button.attr("title", opts.title);
button.tooltip({html: true});
}
button = button.on('click', opts.action);
button.attr('id', buttonId);
if ($("#" + buttonId).replaceWith(button).length === 0) {
$pluginButtons.append(button);
}
if (opts.shortcut) {
utils.bindGlobalShortcut(opts.shortcut, opts.action);
button.attr("title", "Shortcut " + opts.shortcut);
}
await server.put('special-notes/api-script-launcher', reqBody);
};
function prepareParams(params) {
@@ -209,7 +166,7 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain
return params.map(p => {
if (typeof p === "function") {
return "!@#Function: " + p.toString();
return `!@#Function: ${p.toString()}`;
}
else {
return p;
@@ -245,7 +202,7 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain
return ret.executionResult;
}
else {
throw new Error("server error: " + ret.error);
throw new Error(`server error: ${ret.error}`);
}
};
@@ -380,7 +337,7 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain
* @param {boolean} [params.showTooltip=true] - enable/disable tooltip on the link
* @param {boolean} [params.showNotePath=false] - show also whole note's path as part of the link
* @param {boolean} [params.showNoteIcon=false] - show also note icon before the title
* @param {string} [title=] - custom link tile with note's title as default
* @param {string} [params.title=] - custom link tile with note's title as default
*/
this.createNoteLink = linkService.createNoteLink;
@@ -593,8 +550,10 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain
* @method
* @param {string} keyboardShortcut - e.g. "ctrl+shift+a"
* @param {function} handler
* @param {string} [namespace] - specify namespace of the handler for the cases where call for bind may be repeated.
* If a handler with this ID exists, it's replaced by the new handler.
*/
this.bindGlobalShortcut = utils.bindGlobalShortcut;
this.bindGlobalShortcut = shortcutService.bindGlobalShortcut;
/**
* Trilium runs in backend and frontend process, when something is changed on the backend from script,
@@ -622,6 +581,33 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain
* @returns {string} random string
*/
this.randomString = utils.randomString;
this.logMessages = {};
this.logSpacedUpdates = {};
/**
* Log given message to the log pane in UI
*
* @param message
*/
this.log = message => {
const {noteId} = this.startNote;
message = `${utils.now()}: ${message}`;
console.log(`Script ${noteId}: ${message}`);
this.logMessages[noteId] = this.logMessages[noteId] || [];
this.logSpacedUpdates[noteId] = this.logSpacedUpdates[noteId] || new SpacedUpdate(() => {
const messages = this.logMessages[noteId];
this.logMessages[noteId] = [];
appContext.triggerEvent("apiLogMessages", {noteId, messages});
}, 100);
this.logMessages[noteId].push(message);
this.logSpacedUpdates[noteId].scheduleUpdate();
};
}
export default FrontendScriptApi;
@@ -635,13 +621,13 @@ export default FrontendScriptApi;
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li><li><a href="module.exports.html">exports</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -37,6 +37,9 @@ const WIDGET_TPL = `
&lt;/div>
&lt;/div>`;
/**
* TODO: rename, it's not collapsible anymore
*/
export default class CollapsibleWidget extends NoteContextAwareWidget {
get widgetTitle() { return "Untitled widget"; }
@@ -45,7 +48,7 @@ export default class CollapsibleWidget extends NoteContextAwareWidget {
doRender() {
this.$widget = $(WIDGET_TPL);
this.contentSized();
this.$widget.find('[data-target]').attr('data-target', "#" + this.componentId);
this.$widget.find('[data-target]').attr('data-target', `#${this.componentId}`);
this.$bodyWrapper = this.$widget.find('.body-wrapper');
this.$bodyWrapper.attr('id', this.componentId); // for toggle to work we need id
@@ -60,10 +63,6 @@ export default class CollapsibleWidget extends NoteContextAwareWidget {
/** for overriding */
async doRenderBody() {}
isExpanded() {
return this.$bodyWrapper.hasClass("show");
}
}
</code></pre>
</article>
@@ -75,13 +74,13 @@ export default class CollapsibleWidget extends NoteContextAwareWidget {
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Attribute.html">Attribute</a></li><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteComplement.html">NoteComplement</a></li><li><a href="NoteShort.html">NoteShort</a></li><li><a href="module.exports.html">exports</a></li></ul><h3>Global</h3><ul><li><a href="global.html#doRenderBody">doRenderBody</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -6,7 +6,7 @@ It is meant as a last resort solution when the standard mean to access your data
## Installation
This tool requires node.js, testing has been done on 16.15.0, but it will probably work on other versions as well.
This tool requires node.js, testing has been done on 16.18.0, but it will probably work on other versions as well.
```
npm install

View File

@@ -2,7 +2,7 @@
const yargs = require('yargs/yargs')
const { hideBin } = require('yargs/helpers')
const dumpService = require("./inc/dump.js");
const dumpService = require("./inc/dump");
yargs(hideBin(process.argv))
.command('$0 <path_to_document> <target_directory>', 'dump the contents of document.db into the target directory', (yargs) => {

View File

@@ -1,6 +1,6 @@
const crypto = require("crypto");
const sql = require("./sql.js");
const decryptService = require("./decrypt.js");
const sql = require("./sql");
const decryptService = require("./decrypt");
function getDataKey(password) {
if (!password) {

View File

@@ -48,7 +48,7 @@ function decrypt(key, cipherText, ivLength = 13) {
}
catch (e) {
// recovery from https://github.com/zadam/trilium/issues/510
if (e.message && e.message.includes("WRONG_FINAL_BLOCK_LENGTH")) {
if (e.message?.includes("WRONG_FINAL_BLOCK_LENGTH") || e.message?.includes("wrong final block length")) {
log.info("Caught WRONG_FINAL_BLOCK_LENGTH, returning cipherText instead");
return cipherText;

View File

@@ -1,9 +1,9 @@
const fs = require("fs");
const sanitize = require("sanitize-filename");
const sql = require("./sql.js");
const decryptService = require("./decrypt.js");
const dataKeyService = require("./data_key.js");
const extensionService = require("./extension.js");
const sql = require("./sql");
const decryptService = require("./decrypt");
const dataKeyService = require("./data_key");
const extensionService = require("./extension");
function dumpDocument(documentPath, targetPath, options) {
const stats = {

View File

@@ -387,9 +387,12 @@
}
},
"node_modules/minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
"integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/mkdirp-classic": {
"version": "0.5.3",
@@ -1163,9 +1166,9 @@
"integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="
},
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
"integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g=="
},
"mkdirp-classic": {
"version": "0.5.3",

View File

@@ -1,6 +1,6 @@
'use strict';
const {app, globalShortcut} = require('electron');
const {app, globalShortcut, BrowserWindow} = require('electron');
const sqlInit = require('./src/services/sql_init');
const appIconService = require('./src/services/app_icon');
const windowService = require('./src/services/window');
@@ -13,12 +13,12 @@ appIconService.installLocalAppIcon();
require('electron-dl')({ saveAs: true });
// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
else if (process.platform === 'win32') {
app.exit(0); // attempt to fix the issue when app.quite() won't terminate processes on windows
app.quit()
}
});
@@ -27,10 +27,18 @@ app.on('ready', async () => {
// if db is not initialized -> setup process
// if db is initialized, then we need to wait until the migration process is finished
if (await sqlInit.isDbInitialized()) {
if (sqlInit.isDbInitialized()) {
await sqlInit.dbReady;
await windowService.createMainWindow();
await windowService.createMainWindow(app);
if (process.platform === 'darwin') {
app.on('activate', async () => {
if (BrowserWindow.getAllWindows().length === 0) {
await windowService.createMainWindow(app);
}
});
}
tray.createTray();
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2015-2021 Aniket Suvarna
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -520,7 +520,174 @@
border-radius: 50%;
}
.bxs-balloon:before {
content: "\eb60";
}
.bxs-castle:before {
content: "\eb79";
}
.bxs-coffee-bean:before {
content: "\eb92";
}
.bxs-objects-horizontal-center:before {
content: "\ebab";
}
.bxs-objects-horizontal-left:before {
content: "\ebc4";
}
.bxs-objects-horizontal-right:before {
content: "\ebdd";
}
.bxs-objects-vertical-bottom:before {
content: "\ebf6";
}
.bxs-objects-vertical-center:before {
content: "\ef40";
}
.bxs-objects-vertical-top:before {
content: "\ef41";
}
.bxs-pear:before {
content: "\ef42";
}
.bxs-shield-minus:before {
content: "\ef43";
}
.bxs-shield-plus:before {
content: "\ef44";
}
.bxs-shower:before {
content: "\ef45";
}
.bxs-sushi:before {
content: "\ef46";
}
.bxs-universal-access:before {
content: "\ef47";
}
.bx-child:before {
content: "\ef48";
}
.bx-horizontal-left:before {
content: "\ef49";
}
.bx-horizontal-right:before {
content: "\ef4a";
}
.bx-objects-horizontal-center:before {
content: "\ef4b";
}
.bx-objects-horizontal-left:before {
content: "\ef4c";
}
.bx-objects-horizontal-right:before {
content: "\ef4d";
}
.bx-objects-vertical-bottom:before {
content: "\ef4e";
}
.bx-objects-vertical-center:before {
content: "\ef4f";
}
.bx-objects-vertical-top:before {
content: "\ef50";
}
.bx-rfid:before {
content: "\ef51";
}
.bx-shield-minus:before {
content: "\ef52";
}
.bx-shield-plus:before {
content: "\ef53";
}
.bx-shower:before {
content: "\ef54";
}
.bx-sushi:before {
content: "\ef55";
}
.bx-universal-access:before {
content: "\ef56";
}
.bx-vertical-bottom:before {
content: "\ef57";
}
.bx-vertical-top:before {
content: "\ef58";
}
.bxl-graphql:before {
content: "\ef59";
}
.bxl-typescript:before {
content: "\ef5a";
}
.bxs-color:before {
content: "\ef39";
}
.bx-reflect-horizontal:before {
content: "\ef3a";
}
.bx-reflect-vertical:before {
content: "\ef3b";
}
.bx-color:before {
content: "\ef3c";
}
.bxl-mongodb:before {
content: "\ef3d";
}
.bxl-postgresql:before {
content: "\ef3e";
}
.bxl-deezer:before {
content: "\ef3f";
}
.bxs-hard-hat:before {
content: "\ef2a";
}
.bxs-home-alt-2:before {
content: "\ef2b";
}
.bxs-cheese:before {
content: "\ef2c";
}
.bx-home-alt-2:before {
content: "\ef2d";
}
.bx-hard-hat:before {
content: "\ef2e";
}
.bx-cheese:before {
content: "\ef2f";
}
.bx-cart-add:before {
content: "\ef30";
}
.bx-cart-download:before {
content: "\ef31";
}
.bx-no-signal:before {
content: "\ef32";
}
.bx-signal-1:before {
content: "\ef33";
}
.bx-signal-2:before {
content: "\ef34";
}
.bx-signal-3:before {
content: "\ef35";
}
.bx-signal-4:before {
content: "\ef36";
}
.bx-signal-5:before {
content: "\ef37";
}
.bxl-xing:before {
content: "\ef38";
}
.bxl-meta:before {
content: "\ef27";
}
@@ -2436,7 +2603,7 @@
content: "\eb5f";
}
.bx-menu-alt-left:before {
content: "\eb60";
content: "\ef5b";
}
.bx-menu-alt-right:before {
content: "\eb61";
@@ -2511,7 +2678,7 @@
content: "\eb78";
}
.bx-message-rounded-edit:before {
content: "\eb79";
content: "\ef5c";
}
.bx-message-rounded-error:before {
content: "\eb7a";
@@ -2586,7 +2753,7 @@
content: "\eb91";
}
.bx-mobile-vibration:before {
content: "\eb92";
content: "\ef5d";
}
.bx-money:before {
content: "\eb93";
@@ -2661,7 +2828,7 @@
content: "\ebaa";
}
.bx-paper-plane:before {
content: "\ebab";
content: "\ef61";
}
.bx-paragraph:before {
content: "\ebac";
@@ -2736,7 +2903,7 @@
content: "\ebc3";
}
.bx-pointer:before {
content: "\ebc4";
content: "\ef5e";
}
.bx-poll:before {
content: "\ebc5";
@@ -2811,7 +2978,7 @@
content: "\ebdc";
}
.bx-reply:before {
content: "\ebdd";
content: "\ef5f";
}
.bx-reply-all:before {
content: "\ebde";
@@ -2886,7 +3053,7 @@
content: "\ebf5";
}
.bx-screenshot:before {
content: "\ebf6";
content: "\ef60";
}
.bx-search:before {
content: "\ebf7";

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

Some files were not shown because too many files have changed in this diff Show More