Compare commits

...

1219 Commits

Author SHA1 Message Date
zadam
5bdfb6e11f release 0.44.0-beta 2020-09-03 23:26:51 +02:00
zadam
11c63b7778 remove test as build step 2020-09-03 23:26:36 +02:00
zadam
befec48506 release 0.44.0-bet 2020-09-03 23:25:23 +02:00
zadam
15d94e91db fix note autocomplete for non-recent notes 2020-09-03 22:37:51 +02:00
zadam
7787fa1758 small promoted attrs style tweaks 2020-09-03 22:22:21 +02:00
zadam
0bd9b849b2 fix problems with updating note in note cache when entities are coming out of order (e.g. sync) 2020-09-03 21:37:06 +02:00
zadam
918e827d91 fix potential null in mime or type in note cache 2020-09-03 17:51:37 +02:00
zadam
42ecc0e15b use just note title in note autocomplete input field 2020-09-03 17:38:11 +02:00
zadam
a37fa0cb3f don't use   for attributes since it (duh) prevents line breaking in case of inherited attributes 2020-09-02 23:16:56 +02:00
zadam
647863b489 escape will close the attribute dialog and cancel changes 2020-09-02 16:40:19 +02:00
zadam
e8114fcc4f fixes in attr detail positioning 2020-09-02 16:06:35 +02:00
zadam
0745d9ec0b fix attr help tooltip appearing only the second time 2020-09-01 23:47:56 +02:00
zadam
5e75d2380a fix error after confirming mention relation name 2020-09-01 23:43:09 +02:00
zadam
32c88c7481 keyboard shortcuts for focusing the attributes, adding a new label and relation 2020-09-01 23:18:28 +02:00
zadam
0aef99b98e attr detail automatically focuses the name input and allows saving with ctrl+enter. 2020-09-01 22:47:36 +02:00
zadam
bf548f9d38 fix Jump To search input restoration 2020-09-01 00:05:19 +02:00
zadam
a15f8d7e11 small fixes 2020-08-31 23:13:39 +02:00
zadam
574b71de63 remember last search in Jump To dialog when searching soon after the previous search 2020-08-31 21:00:23 +02:00
zadam
408ed8dbf0 fix "search in fulltext" button on "jump to note" dialog. 2020-08-31 20:46:55 +02:00
zadam
98f1bc51a5 Merge remote-tracking branch 'origin/stable' 2020-08-30 23:53:24 +02:00
zadam
f3efb22a50 extra search tests 2020-08-30 23:42:24 +02:00
zadam
5fd58def11 small refactorings 2020-08-30 23:19:55 +02:00
zadam
b793f8cb88 search will also look for type and mime by default 2020-08-30 23:12:49 +02:00
zadam
058edcfe15 fixed promoted attribute display 2020-08-30 22:39:15 +02:00
zadam
5d500de527 performance monitoring on frontend in dev environment 2020-08-30 22:29:38 +02:00
zadam
81207f3d27 updated demo document with scripts adjusted to syncified DB access 2020-08-29 23:33:15 +02:00
zadam
21575d862b attempt to fix consistency issue bug which caused synced note_contents to have NULL content when original is empty string 2020-08-29 23:08:53 +02:00
zadam
9359f05335 fix "edited notes on a day" for deleted notes 2020-08-29 22:22:24 +02:00
zadam
7fb22d41a0 allow disabling authentication for server version, closes #1132 2020-08-29 00:11:50 +02:00
zadam
2823bf3488 disable toggling navigation buttons because of rare performance issues 2020-08-28 23:49:24 +02:00
zadam
172f3689fa optimization of search 2020-08-28 23:20:22 +02:00
zadam
5a8c3f6a2b removed forgotten console.logs 2020-08-28 22:52:57 +02:00
zadam
416b7088c5 fix update/delete queries in SQL console 2020-08-28 22:04:35 +02:00
zadam
3f69a3c572 fix parsing attributes with non-breakable space 2020-08-28 16:00:30 +02:00
zadam
268910ed3b fix positioning of attr detail popup for smaller windows 2020-08-28 15:38:04 +02:00
zadam
8259b4a32c close down dropdown menus on click + smaller tweaks 2020-08-28 14:52:38 +02:00
zadam
9873dd1242 fix creating new note 2020-08-28 14:29:20 +02:00
zadam
f4266754d8 release 0.43.4 2020-08-27 23:58:58 +02:00
zadam
30e84321f9 fixes to build 2020-08-27 23:54:02 +02:00
zadam
020a8766c8 Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	src/public/app/widgets/note_tree.js
2020-08-27 23:25:10 +02:00
zadam
dc288fb18c Merge remote-tracking branch 'origin/stable' into stable 2020-08-27 23:22:58 +02:00
zadam
26dfa1ffdb activate PDF preview also in server build, fixes #1208 2020-08-27 23:22:36 +02:00
zadam
d4e1900f89 cleanup of useless files when building release artifacts 2020-08-27 23:04:00 +02:00
zadam
4cd1a0ee7d fix note cache for out of order synced entities 2020-08-27 22:37:57 +02:00
zadam
355780c595 sync fixes 2020-08-27 22:11:17 +02:00
zadam
ef996f3919 bug fixes 2020-08-27 22:03:56 +02:00
zadam
445902d081 ckeditor 22 2020-08-27 15:24:23 +02:00
zadam
31d85ed8cc fixes and tweaks - readonly bar is smaller and on the right 2020-08-27 14:54:56 +02:00
zadam
c8af250caa Merge remote-tracking branch 'origin/master' 2020-08-27 12:47:29 +02:00
zadam
b7b13c1d8b make migration more robust for cases where attribute definitions don't contain valid values, closes #1207 2020-08-27 12:44:49 +02:00
zadam
b05b9196a0 fix build with better-sqlite3 binaries 2020-08-26 23:51:30 +02:00
zadam
fbe3995398 fixed tree hotkeys 2020-08-26 22:12:01 +02:00
zadam
6aa61ca306 initializing note tree synchronously 2020-08-26 16:50:16 +02:00
zadam
87161cfe0d fix issues with note tree 2020-08-25 23:25:15 +02:00
zadam
6a3e27eb62 smaller refactorings in note_tree 2020-08-24 23:33:27 +02:00
zadam
b7947a40ea binaries for better-sqlite3, downgrage to electron 9 since build on windows doesn't for 2020-08-24 20:26:52 +02:00
zadam
1d813c82e4 display attribute help on the attr detail during editing 2020-08-23 23:38:05 +02:00
zadam
46e373e822 "smart" date values can now freely contain whitespaces 2020-08-23 21:53:50 +02:00
zadam
a6c79c934c fix global menu button and extra window 2020-08-22 23:07:52 +02:00
zadam
08c612c876 fixed builds for linux desktop 2020-08-22 23:07:31 +02:00
zadam
ed6181a85e added in-editor help for editing attributes 2020-08-21 23:08:53 +02:00
zadam
0533b95562 Merge remote-tracking branch 'origin/master' 2020-08-20 23:15:45 +02:00
zadam
5b4826fd08 extra tests for escaping 2020-08-20 23:15:38 +02:00
zadam
60e213433b Merge remote-tracking branch 'origin/stable' 2020-08-20 15:45:57 +02:00
zadam
153de63f4d update note title in link map when note is renamed 2020-08-20 15:45:33 +02:00
zadam
4d4d9f2000 small fixes to saved search 2020-08-20 15:28:28 +02:00
zadam
0b38e24185 fixes to saved search 2020-08-20 15:23:24 +02:00
zadam
d037420acb note. prefix also separates fulltext tokens from expression tokens 2020-08-20 13:53:15 +02:00
zadam
20b4b059e3 fix jsdoc 2020-08-20 12:00:57 +02:00
zadam
28ebca1268 Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	package-lock.json
#	package.json
#	src/services/image.js
2020-08-20 11:56:03 +02:00
zadam
a89629b3de add fallback when resizing image fails, closes #1190 2020-08-20 11:34:14 +02:00
zadam
eec850c11f fix toggle sidebar issues, closes #1196 2020-08-20 11:14:27 +02:00
zadam
52e0f838a9 fulltext now ignores archived notes like it used to in the old implementation 2020-08-20 00:15:08 +02:00
zadam
d1f70efdb4 Merge remote-tracking branch 'origin/master' 2020-08-19 23:01:00 +02:00
zadam
5b1e229d7d added note.text + tests 2020-08-19 23:00:51 +02:00
zadam
5c55278c59 attr detail small visual tweaks 2020-08-19 18:05:07 +02:00
zadam
3c224e80ee fix opening links in attr detail 2020-08-19 17:59:55 +02:00
zadam
5741b380f0 fixed script support 2020-08-18 23:32:50 +02:00
zadam
7335844ae3 updated DB schmea 2020-08-18 22:37:23 +02:00
zadam
53c361945b fix setting mime after import + cleanup of old search code 2020-08-18 22:20:47 +02:00
zadam
03d7ee9abb compatibility with existing scripts 2020-08-18 21:32:45 +02:00
zadam
3670fbff49 frontend validation of attribute name + other changes and fixes 2020-08-17 23:54:18 +02:00
zadam
f24e27dadd autocollapse notes after period of inactivity + some other changes, #1192 2020-08-17 20:58:34 +02:00
zadam
53b39e2e82 many changes related to #1192:
- use CSS contain wherever possible to reduce subtrees of forced reflows
- reduced dependency between note and note_contents updates which will reduce number of updates to components
- optimization of "many rows" querying
2020-08-16 22:57:48 +02:00
zadam
c20577909c simplified and more consistent link handling, also fixes #1191 2020-08-15 22:30:40 +02:00
zadam
a87b710626 attribute fixes 2020-08-15 21:24:17 +02:00
zadam
625483a8f2 fixes 2020-08-15 00:06:26 +02:00
zadam
121c819b79 fix sizing of toast since bootstrap 4.5.1 2020-08-14 23:53:37 +02:00
zadam
77a3bdce1f related notes get updated as user types in the attr detail dialog 2020-08-14 23:00:15 +02:00
zadam
827f8b42a0 Merge remote-tracking branch 'origin/stable' 2020-08-14 22:34:17 +02:00
zadam
b815e10ff3 add running tests into the build process 2020-08-14 22:30:01 +02:00
zadam
c2789bf355 use relative paths for fonts in steel blue in demo document, closes #1187 2020-08-14 21:04:18 +02:00
zadam
e8d63b5647 add "search in note" to "note actions" menu, #1184 2020-08-14 20:58:19 +02:00
zadam
53c6542af6 Merge remote-tracking branch 'origin/master' 2020-08-14 00:11:35 +02:00
zadam
d9c246f8a7 fixes for promoted attribute multiplicity 2020-08-14 00:11:26 +02:00
dependabot[bot]
803694d113 Bump lodash from 4.17.15 to 4.17.20 (#1189)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.20.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.20)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-13 23:29:27 +02:00
zadam
f6f9f0d2c0 ability to remove attribute with mouse + other tweaks 2020-08-13 23:23:57 +02:00
zadam
47a9516ada Merge remote-tracking branch 'origin/stable' 2020-08-13 00:00:05 +02:00
zadam
bd8b83898f Merge remote-tracking branch 'origin/stable' into stable 2020-08-12 23:59:42 +02:00
zadam
97109efb6c fix attribute cache invalidation 2020-08-12 23:59:33 +02:00
zadam
b4d9fdaeda fix attribute cache invalidation 2020-08-12 23:58:32 +02:00
zadam
1810116a34 attribute fixes 2020-08-12 23:39:05 +02:00
Jody
3e89855aa3 Add web app manifest (#1174)
* Add web app manifest, link to new manifest on mobile template.

* Remove duplicate manifest entry.
2020-08-12 21:39:12 +02:00
zadam
eaac65142f tweaks in attr list sizing 2020-08-12 21:36:43 +02:00
zadam
ae909d1079 fix saving & refreshing attributes across compoments 2020-08-12 00:02:19 +02:00
zadam
935e5de493 small fixes related to inherited attributes 2020-08-11 22:52:17 +02:00
zadam
8d0df6ddb9 Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	db/demo.zip
#	src/services/notes.js
#	src/services/request.js
2020-08-10 23:45:17 +02:00
zadam
3b148eb6f8 fixed demo document to correctly show included notes 2020-08-10 23:42:06 +02:00
zadam
4e8d1dac67 fixes for rendering PDF previews e.g. in include note 2020-08-10 23:39:17 +02:00
zadam
7779fd1dfe synchronize the removal of the selection in cuttonote to make it more predictable 2020-08-10 22:42:57 +02:00
zadam
960d7dede3 add scrolling margins, #1181 2020-08-09 23:20:57 +02:00
zadam
e663d7da1b updated schema for entity_changes table 2020-08-09 22:44:53 +02:00
zadam
02cc52af66 small improvements and fixes 2020-08-06 23:55:17 +02:00
zadam
f60af1f05e small improvements and fixes 2020-08-06 00:06:42 +02:00
zadam
224fbdc8cd small improvements to text preview in file notes 2020-08-04 22:06:25 +02:00
zadam
8561201abc invalidate note complement cache quickly after load 2020-08-04 21:57:08 +02:00
zadam
3c1a809276 external links should open only in new window, not in the original window, closes #1171 2020-08-04 20:42:32 +02:00
zadam
ddf0a89e1f bootstrap 4.5.1 2020-08-04 20:39:16 +02:00
zadam
4b101baf00 CKEditor 21 content styles 2020-08-03 23:36:33 +02:00
zadam
782127dd91 fix noproxy handling for image downloading 2020-08-03 23:33:44 +02:00
zadam
7900622f38 refactored "sync" table to "entity_changes" - more changes 2020-08-02 23:43:39 +02:00
zadam
864271d5ef refactored "sync" table to "entity_changes" 2020-08-02 23:27:48 +02:00
zadam
5a5ea4f474 fix filling sync table after demo document import 2020-08-02 22:53:57 +02:00
zadam
749791f6d1 fixed CSP after upgrade to helmet 4 2020-08-02 22:26:02 +02:00
zadam
5ca3e9a0bc fixed db migrations after merge from stable 2020-08-02 20:44:46 +02:00
zadam
f4a4e746bf Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	libraries/ckeditor/ckeditor.js.map
#	package.json
#	src/routes/api/login.js
#	src/routes/api/sync.js
#	src/routes/index.js
#	src/services/app_info.js
#	src/services/sync.js
2020-08-02 20:41:22 +02:00
zadam
4fc8bace94 support horizontal line, closes #1164 2020-08-01 23:41:30 +02:00
zadam
47a22f6e8d release 0.43.3 2020-07-31 23:34:05 +02:00
zadam
17d7ff3ff1 small improvements to sync table handling 2020-07-31 00:08:01 +02:00
zadam
3582013a33 import of initial demo document sets sync.isSynced incorrectly to always 0, #1163 2020-07-31 00:07:38 +02:00
zadam
95bbdb3b6b CKEditor 21 2020-07-29 23:34:49 +02:00
zadam
e1dd933ec0 Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	src/services/options_init.js
2020-07-28 23:50:54 +02:00
zadam
8a57960c6e tweaks in sync timeout handling 2020-07-28 23:29:12 +02:00
zadam
a7b62b30cb fix image resizing after save/update/import 2020-07-28 00:26:47 +02:00
zadam
c9cbc2db02 import fixes 2020-07-27 23:40:14 +02:00
zadam
c92526372c Merge remote-tracking branch 'origin/stable' 2020-07-26 23:47:31 +02:00
zadam
5f4a84d967 fix extracting base64 inline images from HTML, fixes #1159 2020-07-26 23:47:06 +02:00
zadam
ef59810f89 Merge remote-tracking branch 'origin/stable' 2020-07-26 22:58:54 +02:00
zadam
099e90ed64 fix extracting base64 inline images from HTML, fixes #1159 2020-07-26 22:58:22 +02:00
zadam
9b15437ff6 attr detail sizing 2020-07-26 00:09:53 +02:00
zadam
a3a2f1a2b4 autocompletes for attribute detail 2020-07-26 00:04:34 +02:00
zadam
3261fea67f added promotedAttributesExpanded option 2020-07-25 23:32:46 +02:00
zadam
b19589033d individual panes of attribute list are now opened correctly 2020-07-25 23:24:48 +02:00
zadam
2217c5a3e0 promoted attributes are now part of attr list and also responsive 2020-07-25 00:06:49 +02:00
zadam
b60efbbf5a Merge remote-tracking branch 'origin/master' 2020-07-24 23:14:38 +02:00
zadam
e9bfe4521e bug fixes 2020-07-24 23:14:31 +02:00
MeIchthys
79d9d79055 Minor gramatical changes (#1162)
* Minor gramatical change

change "delete also" to "also delete"

* Minor gramatical change

change "once more" to "confirmation"

* Minor gramatical changes

add "a" before some nouns.

* Minor gramatical/spelling fixes

* Minor gramatical changes

* Convert to singular action descriptions

change "changes" to "change" 
change "switches" to "switch"
change "copies" to "copy" 
etc.

* Minor gramatical changes
2020-07-24 22:03:39 +02:00
zadam
a36022d8c1 fixes 2020-07-24 00:02:15 +02:00
zadam
0eb77e43e2 full text search uses in-memory search even for unprotected notes and preprocesses content with tag stripping 2020-07-23 23:38:38 +02:00
zadam
e1d4be814f toggle to expand/collapse attr list is saved and propagated across tabs 2020-07-23 22:31:06 +02:00
zadam
aa4a645670 adding a button to the detail to explicitly save changes. 2020-07-23 00:19:50 +02:00
zadam
2c9565b4b3 fixes to update from detail to editor 2020-07-22 23:58:01 +02:00
zadam
c5cc6b91c1 label and relation definition are now displayed without prefixes in the attr detail view 2020-07-22 23:42:58 +02:00
zadam
3109233d4f better reporting for search parsing errors 2020-07-22 22:52:15 +02:00
zadam
60e8bd98b9 improvements to lexer and its tests 2020-07-21 23:42:59 +02:00
zadam
32ecb43b5c search refactoring 2020-07-21 00:01:07 +02:00
zadam
f03e4bc7d7 detect attempts to compare between labels (only with constants is possible) 2020-07-20 23:27:30 +02:00
zadam
4e5ddaf7d1 fix inQuotes + tests 2020-07-19 23:23:48 +02:00
zadam
35469f6f2d lexer now marks "in quotes" tokens 2020-07-19 23:19:45 +02:00
zadam
4c7b1d6543 shortcut negation syntax 2020-07-19 15:25:24 +02:00
zadam
df69b1d8dd attr detail handles label/relation definition updates 2020-07-18 23:45:28 +02:00
zadam
9d46c7253b fixes in saving 2020-07-18 00:20:24 +02:00
zadam
a94ae81c30 split out attribute_editor widget, WIP 2020-07-17 23:55:59 +02:00
zadam
9f527f0330 split out attribute_editor widget, WIP 2020-07-17 00:08:28 +02:00
zadam
68d8b1c8a9 rename note_attributes widget to attribute_list 2020-07-16 23:12:10 +02:00
zadam
0ab9d02434 fancytree 2.36.0 2020-07-15 22:40:58 +02:00
zadam
3d324b954d fix checking affected notes when modified attribute's owning note is not loaded into cache, #803 2020-07-15 22:36:27 +02:00
zadam
f028b88cce Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	package.json
#	src/routes/api/clipper.js
2020-07-15 00:11:26 +02:00
zadam
64dc522b27 infrastructure for editing attribute definitions 2020-07-15 00:09:37 +02:00
zadam
3d02f82c77 add label/relation from menu 2020-07-14 23:29:37 +02:00
zadam
528418aecb parsing and setting isInheritable flag 2020-07-13 23:27:23 +02:00
zadam
5dd73562da add new attr wip 2020-07-13 00:27:21 +02:00
zadam
62cacf85ed setting the relation target note 2020-07-13 00:15:00 +02:00
zadam
443f389d73 release 0.43.2 2020-07-11 23:58:59 +02:00
zadam
08edc521e4 fix visibility of hyper-link in repeatedly opened dialog 2020-07-11 23:50:38 +02:00
zadam
f54f6d09b0 fix declaring global variables on the setup page, closes #1071 2020-07-11 23:19:24 +02:00
zadam
3219441fdf fallback for missing parsed title, closes trilium-web-clipper/issues/16 2020-07-11 23:05:28 +02:00
zadam
1c97310e92 correctly parsing the click position 2020-07-10 22:39:16 +02:00
zadam
0ecb2f3662 WIP 2020-07-09 23:59:27 +02:00
zadam
055db32510 removed tar import 2020-07-09 21:46:33 +02:00
zadam
054420225f added experimental "save" button 2020-07-09 00:07:14 +02:00
zadam
448a3254a3 small tweaks 2020-07-08 23:51:47 +02:00
zadam
b2c0eaeaf8 Merge remote-tracking branch 'origin/stable' 2020-07-08 23:14:26 +02:00
zadam
1b0a2b41da added tab and shift-tab shortcuts for indent/outdent, closes #978 2020-07-08 21:57:09 +02:00
zadam
50b976990c click on inherited attr will also bring up the attribute detail widget 2020-07-05 23:53:55 +02:00
zadam
9f2545395d better value matching regex 2020-07-04 11:14:11 +02:00
zadam
67bffbf30b consistency checks will now fix incorrectly named attributes 2020-07-04 11:02:05 +02:00
zadam
51dae378a3 more cleanup 2020-07-04 10:29:17 +02:00
zadam
a0b3bc858d removed attributes dialog 2020-07-04 10:18:01 +02:00
zadam
2e24111c2b wip 2020-07-04 00:40:41 +02:00
zadam
69d529ada1 wip 2020-07-04 00:20:23 +02:00
zadam
bfa69a3dc3 closing of attr detail 2020-07-03 22:27:45 +02:00
zadam
5b862c3d29 Merge remote-tracking branch 'origin/stable' 2020-07-02 23:21:17 +02:00
zadam
dee4083bf3 improve request logging 2020-07-02 23:15:37 +02:00
zadam
18749092ff sql_init/migration fixes 2020-07-02 22:57:17 +02:00
zadam
c4cc48dfc9 fixed initial demo import 2020-07-02 21:08:18 +02:00
zadam
ef847b9904 fix search results 2020-07-02 20:19:09 +02:00
zadam
3e189d5c10 fixes 2020-07-01 23:50:33 +02:00
zadam
46d3160da4 removed detail.css, added to individual type widgets 2020-07-01 23:35:00 +02:00
zadam
78a2c1753e consistency checks fixes 2020-07-01 22:42:59 +02:00
zadam
f0b608ddec non-intrusive logging of sync errors 2020-07-01 21:33:52 +02:00
zadam
582429e762 updated content styles 2020-07-01 21:03:51 +02:00
zadam
bf073690e0 fixing promoted attributes 2020-07-01 00:02:13 +02:00
zadam
c012620338 removed now unused image minifying binaries 2020-06-30 23:41:13 +02:00
zadam
5e18e7dc67 html sanitize imported notes, #1137 2020-06-30 23:37:06 +02:00
zadam
51f094f87f image handling consistency fixes 2020-06-28 23:10:45 +02:00
zadam
262a4fa3c7 removed image minification using imagemin because of constant platform related issues 2020-06-28 22:36:42 +02:00
zadam
c778e87683 wip 2020-06-27 00:40:35 +02:00
zadam
dd62b306fd refactored attr detail into separate widget 2020-06-26 22:17:39 +02:00
zadam
1f05638609 attribute progress 2020-06-25 23:56:06 +02:00
zadam
92e49214c7 more attribute mockups (inherited attributes) 2020-06-24 23:56:39 +02:00
zadam
9615e25a67 fix merge problems 2020-06-24 22:29:53 +02:00
zadam
a574fce13f Merge remote-tracking branch 'origin/stable' into syncification
# Conflicts:
#	package-lock.json
#	package.json
#	src/routes/custom.js
#	src/services/import/single.js
2020-06-24 22:08:31 +02:00
zadam
238df0fb40 fix SVG single file import as image and not as file, closes #1114 2020-06-24 21:47:50 +02:00
zadam
89356918f1 fix unescaped HTML in the tree node title, closes #1127 2020-06-24 21:07:55 +02:00
zadam
263b65997c hide "type around" controls in printed PDF, closes #1129 2020-06-24 20:44:00 +02:00
zadam
2b757bfccd upgrade ckeditor to 20.0.0 2020-06-24 16:17:39 +02:00
zadam
99d66ea89f mockup of hidable attributes 2020-06-24 00:02:54 +02:00
zadam
c78ca4c9db fixed triggers to sort children of notes with "sorted" label, closes #1126 2020-06-23 22:03:01 +02:00
zadam
b245b249d3 got rid of simple-node-logger in favor of simple custom logger 2020-06-23 13:38:27 +02:00
zadam
a0395e9866 release 0.43.1 2020-06-23 10:11:17 +02:00
zadam
89aa4fbc73 electron 9.0.5 2020-06-23 10:10:59 +02:00
zadam
74a7802088 fix custom resource handler, closes #1125 2020-06-22 23:13:53 +02:00
zadam
a89b6711d1 refactored code to not depend on external elements, #1120 2020-06-22 22:28:45 +02:00
zadam
b2549b2834 Merge remote-tracking branch 'origin/stable' into stable 2020-06-22 22:00:22 +02:00
zadam
959c4cbe64 removed icon tooltip again 2020-06-22 22:00:08 +02:00
Shon Ramamurthy
d03d3603d2 Add optional support for note title tooltips under note tree widget (#1120)
* Add support for note title tooltips under note tree widget

This change adds an option to set the 'tooltip' configuration of the
Fancytree component. This allows tooltips containing the note title to
be displayed when a hover is performed over a note title in the tree
widget.

* Revert DB Upgrade

The db upgrade is reverted as this is not required for options.

* Simplify boolean option comparison

With this change, the existing 'is(key)' method is used to perform
tooltip enable option boolean comparison.

* Display tooltip only on center-pane overlap - Experimental

With this change, a straight-forward method to detect HTML element
overlap has been identified (source:
https://gist.github.com/jtsternberg/c272d7de5b967cec2d3d). It is now
possible to detect whether the center-pane element overlaps with the
Fancytree node title-bar. Using this approach we now have a rough
implementation which only displays a note-title tooltip when there is a
center-pane overlap.

At this stage, this change is experimental and the following needs to be
further addressed,
 - Register the 'mouseenter' event handler in an appropriate place. The
   current placement of this event handler is only for testing.
 - This change is now enabled by default. It needs to be seen whether it
   would still make sense to disable it via an option.

* Remove option to set tooltip

With this change, the tooltip options menu item has been removed as it
becomes relevant to have this feature enabled by default.

* Revert further changes related to the options menu

Further changes are rolled back which was earlier related to the tooltip
options setting. Some of these were missed in the previous commit.

* Remove debug logging

Remove debug logging and unnecessary line breaks.

* Move note-title tooltip handler under note_tree.js

With this change, we move the definition for the note-title tooltip
handler inside 'note_tree.js'. Registration is done inside
'side_pane_toggles.js' as we would need the handler to detect the
'center-pane' element first before detecting collisions.
2020-06-22 21:58:58 +02:00
zadam
22302e8200 attrs WIP 2020-06-21 23:41:51 +02:00
zadam
f117ae4915 fix sending sync rows via WebSocket after transaction is committed 2020-06-21 13:44:47 +02:00
zadam
c34a9b96e4 further simplification - now using better-sqlite3 native transaction API 2020-06-21 13:33:56 +02:00
zadam
f0acfaf147 simplification of transaction handling 2020-06-21 13:15:36 +02:00
zadam
e1c2573778 add tooltip to fancytree node icon, #1120 2020-06-21 12:47:24 +02:00
zadam
56d6384ae1 added protected note full text search 2020-06-20 23:46:49 +02:00
zadam
5f699cc28c converted most dynamic SQL queries into prepared statement to avoid excessive statement caching 2020-06-20 23:24:34 +02:00
zadam
969f31dde2 fixed backup and anonymization with better-sqlite3 2020-06-20 23:09:34 +02:00
zadam
027afab6b1 fix DB setup 2020-06-20 21:42:41 +02:00
zadam
6207203b35 wip 2020-06-20 13:18:03 +02:00
zadam
88348c560c syncification 2020-06-20 12:31:38 +02:00
zadam
30062d687f Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	libraries/ckeditor/ckeditor.js
#	libraries/ckeditor/ckeditor.js.map
2020-06-20 09:40:11 +02:00
zadam
ffc96ad6b2 parser status indication 2020-06-20 09:39:44 +02:00
zadam
2af2b45062 fix keyboard shortcut for print this note, #1118 2020-06-20 00:04:31 +02:00
zadam
eabe4775bd fix click handler of links inside included note 2020-06-19 23:20:52 +02:00
zadam
da9b321aa0 allow mouse interactions in ckeditor widgets, fixes #1117 2020-06-19 22:24:57 +02:00
zadam
7b0aa7ab0b parser status indication 2020-06-18 23:53:57 +02:00
zadam
f700e6e12b use standard search to find notes with same attrs 2020-06-18 22:28:18 +02:00
zadam
a87e59cecb WIP of attribute view on click 2020-06-18 12:52:16 +02:00
zadam
a04aa6fd36 version updates 2020-06-18 09:12:30 +02:00
zadam
a7d9870846 Merge remote-tracking branch 'origin/better-sqlite3'
# Conflicts:
#	libraries/ckeditor/ckeditor.js
#	libraries/ckeditor/ckeditor.js.map
#	package-lock.json
#	package.json
#	src/public/app/services/utils.js
#	src/public/app/widgets/type_widgets/editable_text.js
#	src/services/utils.js
2020-06-18 09:03:09 +02:00
zadam
c18d8d2d1b add back lost edited notes widget, closes #1115 2020-06-18 08:56:23 +02:00
zadam
f745e21e0d use better-sqlite3 2020-06-17 23:03:46 +02:00
zadam
5f2361ebd5 release 0.43.0-beta 2020-06-15 23:26:12 +02:00
zadam
9791dab97d recent changes sorting fixes, closes #1099 2020-06-15 23:22:11 +02:00
zadam
85d986534d fix enforcing node's http requests for sync 2020-06-15 18:24:43 +02:00
zadam
00faf758e8 fixes and polish 2020-06-15 17:56:53 +02:00
zadam
6ba2e5cf73 add word count widget to the demo document (plus cleanup of external links) 2020-06-14 16:29:29 +02:00
zadam
fb3876d28b promoted attr selection using autocomplete will trigger change event to save it, closes #699 2020-06-14 16:04:00 +02:00
zadam
fb975849b9 small API additions 2020-06-14 14:30:57 +02:00
zadam
16fef78344 add API method to force refresh of included notes, closes #1106 2020-06-14 10:50:08 +02:00
zadam
e0b4b369dc transaction handling fixes 2020-06-14 00:35:53 +02:00
zadam
0df7851214 fix sync 2020-06-13 22:34:15 +02:00
zadam
5d47c2b23e opening transactions only on write operations which enforces exclusive lock only there to improve concurrency, custom handling of sync request timeouts, #1093, #1018 2020-06-13 10:23:36 +02:00
zadam
d09b021487 add time limit to frontend update 2020-06-11 00:13:56 +02:00
zadam
910bda860c fix delete note function just work one time, closes #1101 2020-06-10 23:43:59 +02:00
zadam
2d92b4931a fix ctrl+click opening the link twice/thrice, closes #1094 2020-06-10 00:10:27 +02:00
zadam
212b719ee9 better detection of changes in attributes and how they affect notes 2020-06-09 22:59:22 +02:00
zadam
1db892d22f return the ability to hide archived notes, closes #1095 2020-06-08 23:15:49 +02:00
zadam
535dcb6d12 release 0.42.7 2020-06-08 10:43:12 +02:00
zadam
4426362799 cleanup sqlite to make the distributed archives smaller 2020-06-08 10:42:40 +02:00
zadam
2c609e8136 promoted attributes widget is now auto-updating, fixes #700 2020-06-08 00:29:52 +02:00
zadam
11b73b79ed refresh promoted attributes when change detected 2020-06-07 23:57:10 +02:00
zadam
28dc6b93ca lock CPU info for perf context 2020-06-07 23:56:51 +02:00
zadam
e70c862e72 fix import 2020-06-07 23:55:55 +02:00
zadam
b3e66d5a83 fixed command line anonymization 2020-06-07 10:45:41 +02:00
zadam
e8cd821e57 futrther improvements to anonymization 2020-06-07 10:20:48 +02:00
zadam
401a3f0ecb add info on read only notes, #1088 2020-06-06 18:46:45 +02:00
zadam
e73dffad0b parse incomplete attrs 2020-06-06 12:56:24 +02:00
zadam
ef1d062745 attribute parser preserves indexes from original string 2020-06-06 10:39:27 +02:00
zadam
f245d51746 basic saving of attributes in the widget 2020-06-05 17:25:14 +02:00
zadam
be7ac74235 better fallback for resolving filenames of binary attachments 2020-06-05 10:40:35 +02:00
zadam
ad48b59893 no need to reload whole subtree while moving notes 2020-06-05 00:07:45 +02:00
zadam
e817acba4e fix template attribute cycle in note cache 2020-06-04 23:58:31 +02:00
zadam
4ae965c5cb Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	src/public/app/widgets/collapsible_widgets/note_info.js
2020-06-04 22:37:04 +02:00
zadam
58fa0832f6 fix focusing title after creating a note 2020-06-04 21:44:34 +02:00
zadam
1502b9ce66 prevent attribute inheritance cycle via template, closes #1077 2020-06-04 12:27:41 +02:00
zadam
ed9fbae65d attribute parser and tests WIP 2020-06-04 00:04:57 +02:00
zadam
01a7af965c refactoring of es6 test skeleton 2020-06-03 17:28:57 +02:00
zadam
99120be46d skeleton of first tests 2020-06-03 17:11:03 +02:00
zadam
915b1d1a45 Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	libraries/ckeditor/ckeditor.js
#	libraries/ckeditor/ckeditor.js.map
#	package-lock.json
#	package.json
#	src/public/app/widgets/type_widgets/editable_text.js
2020-06-03 16:25:45 +02:00
zadam
e68aed2057 Merge remote-tracking branch 'origin/master' 2020-06-03 16:24:52 +02:00
zadam
eedeaca37d wip 2020-06-03 16:24:41 +02:00
zadam
7307ca385f release 0.42.6 2020-06-03 14:30:07 +02:00
zadam
c1fd9825aa fix backup 2020-06-03 12:16:16 +02:00
zadam
9de7d3fc53 fix unloading protected session after clicking on a button, closes #1078 2020-06-03 11:47:30 +02:00
zadam
3c5db844ba fix tree focusing issues 2020-06-03 11:06:45 +02:00
zadam
e7330c1104 more anonymization 2020-06-03 09:55:05 +02:00
zadam
ec4586b164 fix reference link implementation, closes #1069 2020-06-02 23:54:33 +02:00
zadam
91e5f24798 fix db anonymization 2020-06-02 23:13:55 +02:00
zadam
38723e0189 release 0.42.5 2020-05-31 23:33:30 +02:00
zadam
8c88ce6f65 fix moving/cloning notes broken in 0.42.4, closes #1066 2020-05-31 22:33:02 +02:00
Adam Coyne
0def5f9a63 Add a VSCode debug configuration matching the start-server npm script (#1061) 2020-05-31 12:40:53 +02:00
zadam
4d22959e28 release 0.42.4 2020-05-31 10:33:12 +02:00
zadam
50a28d8c51 the node you start dragging should be included even if not selected 2020-05-31 10:32:35 +02:00
zadam
e25b633ec4 better error logging in backup 2020-05-31 10:24:59 +02:00
Adam Coyne
ac10701b55 Add import option to replace underscores with spaces in note names (#1064) 2020-05-30 23:15:00 +02:00
zadam
75bd395669 fix extra refresh because of duplicated sync event, closes #1063 2020-05-30 22:35:18 +02:00
zadam
5e353a5612 improved drag & drop 2020-05-30 10:30:21 +02:00
Adam Coyne
c0cd321118 Fix import error (#1060)
* Fix access to attributes on undefined noteMeta

* Remove .markdown extension from imported page titles
2020-05-30 10:09:10 +02:00
zadam
d65624d8d2 Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	libraries/ckeditor/ckeditor.js
#	libraries/ckeditor/ckeditor.js.map
2020-05-29 22:29:28 +02:00
zadam
6b359b7796 return 401 when auth request is out of sync, closes #1056 2020-05-29 22:06:36 +02:00
zadam
13f9d037dc safer backup to file using VACUUM INTO + possibility to explicitly ask for backup now 2020-05-29 21:55:08 +02:00
zadam
1911d64c1c fix long filename overflowing, closes #1052 2020-05-29 20:36:48 +02:00
Ionuț Staicu
1c388c9805 cross platform compatibility (#1051) 2020-05-29 12:01:20 +02:00
zadam
6a957eff17 added autocompletes for labels, relations 2020-05-28 23:59:08 +02:00
zadam
5aaa429203 WIP of new attribute widget 2020-05-28 00:17:13 +02:00
zadam
d4c3f1b3f2 upgrade to ckeditor 19.1.0 2020-05-27 22:08:06 +02:00
zadam
ae934720bc Merge branch 'm43' 2020-05-27 00:09:51 +02:00
zadam
753c181979 Merge remote-tracking branch 'origin/stable' 2020-05-27 00:09:40 +02:00
zadam
55b210d7c5 added not() expression 2020-05-27 00:09:19 +02:00
zadam
dc2d5a0a79 fix fulltext content search 2020-05-26 23:25:13 +02:00
zadam
c753f228ac more tests & fixes 2020-05-25 23:39:34 +02:00
zadam
a1a744bb00 order & limit implementation WIP 2020-05-25 00:25:47 +02:00
zadam
077d19b44b Create SECURITY.md 2020-05-24 19:34:52 +02:00
zadam
b5627b138a integrate new search into the main global search 2020-05-24 09:30:08 +02:00
zadam
cb4d0624b5 put session directory into data dir to avoid conflict of multiple instances on a single server, fixes #1033 2020-05-24 00:21:20 +02:00
zadam
e2490f9975 faster implementation of ancestors 2020-05-23 23:57:59 +02:00
zadam
9ede77aead added ancestor 2020-05-23 23:44:55 +02:00
zadam
8ce2afff8a more tests 2020-05-23 22:18:06 +02:00
zadam
a2e1fb35b8 tests for note properties 2020-05-23 20:52:55 +02:00
zadam
bb03a8714a more tests 2020-05-23 18:42:32 +02:00
zadam
ae772288e2 support for long syntax of labels and relations 2020-05-23 18:13:35 +02:00
zadam
355ffd3d02 added querying by relation's properties 2020-05-23 12:27:44 +02:00
zadam
3d12341ff1 added querying by children 2020-05-23 10:36:49 +02:00
zadam
4ea934509e implemented property based access + parent 2020-05-23 10:25:22 +02:00
zadam
3db84daf94 fix hiding autocompletes after closing tab, closes #1034 2020-05-22 19:30:21 +02:00
zadam
714881ad99 more search tests + numeric label comparison 2020-05-22 19:08:06 +02:00
zadam
ee053b9fdf basic search tests 2020-05-22 09:38:30 +02:00
zadam
cd48135394 refactoring to allow unit tests of the whole search subsystem 2020-05-21 14:05:56 +02:00
zadam
a06662f4ce fuzzy search for values as well 2020-05-21 13:45:18 +02:00
zadam
2e6395ad88 prefix match for autocomplete attribute search 2020-05-21 12:05:12 +02:00
zadam
75d8627f1c refactoring to ParserContext 2020-05-21 11:46:01 +02:00
zadam
a8d12f723f fix highlighting 2020-05-21 11:18:15 +02:00
zadam
08dbf90a8c hide body during startup to reduce flicker 2020-05-21 09:42:25 +02:00
zadam
32dde426fd apply new query parsing to note autocomplete 2020-05-21 00:39:17 +02:00
zadam
b26100479d parser tests added 2020-05-20 23:20:39 +02:00
zadam
faf4daa577 shadow on hover for title bar buttons 2020-05-20 19:14:07 +02:00
zadam
2526715aa4 release 0.42.3 2020-05-20 08:54:55 +02:00
zadam
04c573e212 set default executors 2020-05-20 08:54:37 +02:00
zadam
99aa481ace refactoring for testing parser 2020-05-20 00:03:33 +02:00
zadam
ef37bc1a99 Merge remote-tracking branch 'origin/stable' into m43
# Conflicts:
#	.idea/dataSources.xml
2020-05-19 23:20:32 +02:00
zadam
58f4f5d1e6 fix deadlock after "cut to note", closes #1030 2020-05-19 22:58:08 +02:00
zadam
b72dc977e6 parens handler + parser in progress 2020-05-19 00:00:35 +02:00
zadam
81bf84f2de lexer fixes + tests 2020-05-17 23:14:24 +02:00
zadam
fa5d982a55 fix exporting root note, closes #1024 2020-05-17 21:07:54 +02:00
zadam
e77e0ce675 lexer impl WIP + test 2020-05-17 19:43:37 +02:00
zadam
32eaafd024 note cache fixes after refactoring 2020-05-17 10:11:19 +02:00
zadam
60c2049729 note cache refactoring WIP 2020-05-17 09:48:24 +02:00
zadam
dcd371b5b1 note cache breakup into classes, WIP 2020-05-16 23:12:29 +02:00
zadam
e3071e630a note cache refactoring WIP 2020-05-16 22:11:09 +02:00
zadam
78ea0b4ba9 refactoring ... 2020-05-15 23:50:36 +02:00
zadam
f07025f741 start of note cache expression implementation 2020-05-15 11:04:55 +02:00
zadam
5f1f65a3c2 fuction reorganization 2020-05-14 23:21:48 +02:00
zadam
a3e2369599 add also content fulltext 2020-05-14 23:11:59 +02:00
zadam
1ec446137d fulltext also searches for branch prefixes 2020-05-14 21:30:36 +02:00
zadam
108afe8896 fix incorrect processing of sync rows, closes #1019 2020-05-14 13:08:06 +02:00
zadam
a287bb59ea note cache fixes for created notes 2020-05-13 23:06:13 +02:00
zadam
7992f32d34 note cache refactoring 2020-05-13 14:42:16 +02:00
zadam
b07accfd9d note cache refactoring + handling entity changes 2020-05-13 10:47:22 +02:00
zadam
ccb5f3ee18 searching now works correctly in inherited attributes 2020-05-13 00:01:10 +02:00
zadam
29e6b63f82 Merge remote-tracking branch 'origin/master' into m43 2020-05-12 21:15:54 +02:00
zadam
2818854c4b Merge remote-tracking branch 'origin/stable' 2020-05-12 21:15:32 +02:00
zadam
d75b770fb9 update of bootstrap to 4.5.0 2020-05-12 20:17:51 +02:00
zadam
37da0adb8a release 0.42.2 2020-05-12 16:46:45 +02:00
zadam
13117d2e68 Merge remote-tracking branch 'origin/stable' 2020-05-12 13:41:06 +02:00
zadam
4f50864ec8 better UX when deleting notes - focus in note tree is moved to the next/previous note 2020-05-12 13:40:42 +02:00
zadam
30b9ef8604 fix tab title of deleted note 2020-05-12 12:45:32 +02:00
zadam
b063b4c528 read only view images should not overflow 2020-05-12 12:28:59 +02:00
zadam
b51f5ac6fd Merge remote-tracking branch 'origin/stable' 2020-05-12 10:59:02 +02:00
zadam
e08b0141a4 when expanding/collpasing, set the flag also to the tree cache 2020-05-12 10:52:07 +02:00
zadam
9d8b8e26a1 attach extension to download file if note present 2020-05-12 10:28:31 +02:00
zadam
cb70109ee7 fix creating new promoted attributes, closes #1008
(cherry picked from commit 2e0fb8aaf1)
2020-05-12 00:00:59 +02:00
zadam
2e0fb8aaf1 fix creating new promoted attributes, closes #1008 2020-05-11 23:57:39 +02:00
zadam
ac4e6077bd Merge remote-tracking branch 'origin/stable' 2020-05-11 23:23:59 +02:00
zadam
8e8fa48241 ws update 2020-05-11 23:23:18 +02:00
zadam
e541abbd60 disable hiding the body to not hide the noscript element 2020-05-11 22:44:10 +02:00
Naveen M V
940a70adc5 Fix regex bug (#1005)
(cherry picked from commit 9a662f76da)
2020-05-11 22:06:39 +02:00
Naveen M V
9a662f76da Fix regex bug (#1005) 2020-05-11 22:06:22 +02:00
zadam
88e8eb7e9c fixed context menu positioning when scaling is active 2020-05-11 20:08:55 +02:00
zadam
b365c186a1 fixed clicking on links in read only view 2020-05-11 19:38:14 +02:00
zadam
15bc9dce1c search overhaul WIP 2020-05-10 23:27:53 +02:00
zadam
552fc5261a new note cache WIP 2020-05-09 23:42:26 +02:00
zadam
83c9e6e846 Merge branch 'master' into m43 2020-05-09 20:17:26 +02:00
zadam
2e837642e2 create note directly from mention linking 2020-05-09 14:25:27 +02:00
zadam
c70a842bc6 Merge remote-tracking branch 'origin/stable' 2020-05-08 23:44:51 +02:00
zadam
d20415c979 bind global menu item "Open SQL console" to the logic to create such a note 2020-05-08 23:39:46 +02:00
zadam
c3438e0f3f implemented SQL console as a type of code note 2020-05-08 22:22:43 +02:00
zadam
64c9734f05 transform setup.js to the webpacked version in the build 2020-05-08 20:50:53 +02:00
zadam
48c843c087 fix setup on server edition 2020-05-08 10:24:57 +02:00
zadam
1bb895bb83 Merge remote-tracking branch 'origin/stable' 2020-05-07 23:36:11 +02:00
zadam
0e4eec10b9 added "restore this revision" button 2020-05-07 23:34:13 +02:00
zadam
a3661cb763 fix display of buttons for revisions when there is none 2020-05-07 23:14:21 +02:00
zadam
115879ec4a fix note revisions displaying wrong tooltip 2020-05-07 23:02:46 +02:00
zadam
f1ce0c7774 Merge branch 'm43-2'
# Conflicts:
#	src/public/app/services/app_context.js
#	src/public/app/widgets/run_script_buttons.js
2020-05-07 20:57:22 +02:00
zadam
df11b076bc release 0.42.1 2020-05-06 23:24:13 +02:00
MeIchthys
54ecd2ee75 Prevent td text from overlapping th text (#1002)
This makes all of the Note Info sections more consistent with each other. It prevents overlapping of text when the window is displayed in a small-width environment.
2020-05-06 23:12:28 +02:00
zadam
2369bcf9fc fixes for image download 2020-05-06 23:11:34 +02:00
zadam
5d8808a2ad fix renaming existing attributes + added new label autoReadOnlyDisabled to control automatic setting to readOnly mode 2020-05-06 21:41:14 +02:00
zadam
62b993f06f fix closing tab by mouse 2020-05-06 21:24:51 +02:00
zadam
8aa5608085 fix "Render note" and "Execute script" buttons + refactoring around data-trigger-command handling 2020-05-06 00:00:14 +02:00
zadam
b452d7e5c5 Merge remote-tracking branch 'origin/stable' 2020-05-06 00:00:01 +02:00
zadam
a0f8caeccd added SQLite (Trilium) mime type 2020-05-05 23:59:26 +02:00
zadam
edb9bc9229 fix "Render note" and "Execute script" buttons + refactoring around data-trigger-command handling 2020-05-05 23:58:52 +02:00
zadam
9b9d6d86d0 remove debugging console.log 2020-05-05 22:51:53 +02:00
zadam
7f2755d4a0 refresh button state change on note update 2020-05-05 22:18:09 +02:00
zadam
3b268cc8eb fix selecting note title after creation, closes #997 2020-05-05 21:42:18 +02:00
zadam
768ac83e14 Merge branch 'master' into m43 2020-05-05 19:38:42 +02:00
zadam
6dfe335707 added global menu item to open new empty window + some refactoring 2020-05-05 19:30:03 +02:00
zadam
c7125d2b50 createNoteAfter should have saveSelection: false 2020-05-05 19:09:01 +02:00
zadam
e8a33a5ee7 fix note title not updating when changing the title 2020-05-05 18:56:12 +02:00
zadam
deb0b24c4c release 0.42.0-beta 2020-05-04 21:59:14 +02:00
zadam
cafcb67a8a remove dangling autocompletes after closing the tab 2020-05-04 21:58:40 +02:00
zadam
4c6e9480e4 revert #980 because of performance issues 2020-05-04 21:49:03 +02:00
zadam
109bead1c7 removed unnecessary async/awaits 2020-05-04 10:19:11 +02:00
zadam
ae1220b970 remove debug 2020-05-04 10:04:50 +02:00
zadam
b89a2df462 fix image being redownloaded from localhost 2020-05-04 10:03:54 +02:00
zadam
8b5536ee3a note title widget and protected session entering fixes 2020-05-03 22:49:20 +02:00
zadam
647790885d downgrade sqlite3 library which has issues with electron build 2020-05-03 21:27:24 +02:00
zadam
227c3e4dcc fixes for offline downloading of images 2020-05-03 14:33:59 +02:00
zadam
4eb2407c73 fix folder icon for hidden included images 2020-05-03 13:59:49 +02:00
zadam
43e12fbea2 small fixes for collapse/expand 2020-05-03 13:52:12 +02:00
zadam
2a3091f788 reimplemented expand/collapse differently for better performance 2020-05-03 13:15:08 +02:00
zadam
742df25bc2 collapse/expand only folder notes 2020-05-03 09:49:56 +02:00
zadam
7ac2206e9b start of search overhaul 2020-05-03 09:18:57 +02:00
zadam
9be1d1f697 add note attribute cache to speed up tree loading 2020-05-02 18:19:41 +02:00
zadam
ed52f93bbb tree settings popup fixes 2020-05-02 13:52:02 +02:00
zadam
3466a19397 protection against recursive expansion of search notes 2020-05-02 12:16:48 +02:00
zadam
fe53e2351c basic implementation of note tree's config 2020-05-02 00:28:40 +02:00
zadam
5c35b870eb added titles with full date time including timezone offset also to note revisions dialog/widget 2020-05-01 00:01:53 +02:00
zadam
90d091aedb make note tree initial load non-lazy 2020-04-30 23:58:34 +02:00
zadam
0a05a40186 fix expand subtree's conflict with auto-lazy loading 2020-04-30 23:09:25 +02:00
zadam
7482ed063b Merge remote-tracking branch 'origin/stable' 2020-04-29 23:27:39 +02:00
zadam
70e343f2fc fix showing deleted notes in "recent changes" dialog, closes #994 2020-04-29 23:25:34 +02:00
zadam
358f3a7291 implement "expand subtree" contet menu, closes #993 2020-04-29 23:13:05 +02:00
zadam
6161b1c193 Merge remote-tracking branch 'origin/stable' 2020-04-29 22:27:46 +02:00
zadam
94b57dadd7 removed link context menu on JS-only links 2020-04-29 22:27:22 +02:00
zadam
81fbefb9cd added scripts for running trilium as "portable" 2020-04-29 21:55:57 +02:00
zadam
6d6695e3a9 ckeditor 19 2020-04-29 17:29:32 +02:00
zadam
4c308ad68f moved protected note switch to "note actions", added shadow to protected note title 2020-04-29 00:01:07 +02:00
zadam
989a003d2f borderless title bar buttons 2020-04-28 21:55:54 +02:00
zadam
ccdb41841e release 0.41.6 2020-04-27 23:46:48 +02:00
zadam
0a94622413 fix drag and drop in the tree, closes #984 2020-04-27 23:39:10 +02:00
zadam
5769587305 experimental hiding of images if they are included in the parent note 2020-04-27 23:27:45 +02:00
zadam
ffbfccb701 extra window now works in browsers too 2020-04-27 22:29:39 +02:00
zadam
56ce23fc36 fix collapsing of note revisions 2020-04-27 22:13:32 +02:00
zadam
cba7e5a59f fix collapsing of note revisions 2020-04-27 21:44:25 +02:00
zadam
86cf8f3202 fix download/export 2020-04-27 20:58:31 +02:00
zadam
907cdd8fcb fixes for extra window 2020-04-26 23:11:52 +02:00
zadam
7ea53d468e use local dates in the recent changes 2020-04-26 14:39:13 +02:00
zadam
586d6b4557 in web version use local client time instead of server time for recording dateModified etc. 2020-04-26 14:26:57 +02:00
zadam
8f68ff1932 tweaks for the code preview 2020-04-26 12:06:54 +02:00
zadam
a1ea2c9115 read only code notes WIP 2020-04-26 11:38:30 +02:00
zadam
e8ce81a133 organize widgets a bit 2020-04-26 09:40:02 +02:00
zadam
aff12950f0 Merge remote-tracking branch 'origin/master' into m42
# Conflicts:
#	src/public/app/services/app_context.js
2020-04-25 23:53:19 +02:00
zadam
75c58cbf79 refactored layouts for extra window 2020-04-25 23:52:13 +02:00
zadam
87a1e98fa2 default search should look also into attribute names and values, #980 2020-04-25 22:10:56 +02:00
zadam
d1eacbb574 more robust entering protected session and the following protection of a note 2020-04-25 17:15:57 +02:00
zadam
71d248cd87 touch protected session during note update 2020-04-25 11:09:07 +02:00
zadam
ac608b9334 small text changes 2020-04-24 21:21:22 +02:00
zadam
32020d78b5 prototype for new app window 2020-04-23 23:08:15 +02:00
zadam
ff853c7d0a implement lazy loading of tabs which speeds up especially initial startup with many tabs 2020-04-22 23:09:35 +02:00
zadam
8526cb2315 added collapsible widgets to the docs 2020-04-21 23:14:55 +02:00
zadam
dc89f72e75 fix display of text notes in note revisions 2020-04-21 22:59:37 +02:00
zadam
657ff16267 fix build webpack 2020-04-20 23:14:50 +02:00
zadam
ed759f5585 release 0.41.5 2020-04-20 22:40:02 +02:00
zadam
a86177bb59 release 0.41.5 2020-04-20 22:39:23 +02:00
zadam
9f1b3cc892 note paths widget has context menu too 2020-04-20 22:38:37 +02:00
zadam
8473f72ec8 fix support of multiple languages for spellchecking + list all available languages, closes #974 2020-04-20 22:26:31 +02:00
zadam
666d202a3a deps updates 2020-04-19 09:42:10 +02:00
zadam
988fae50cb fix help links and displayed shortcuts, closes #971 2020-04-18 11:14:09 +02:00
zadam
98bbd17920 release 0.41.4-beta 2020-04-15 23:00:13 +02:00
zadam
dadcc93ae3 focus and select title after creating a note 2020-04-15 22:06:52 +02:00
zadam
48e19d0149 fix webpack buidl 2020-04-15 21:49:36 +02:00
zadam
f97c9e3619 release 0.41.3-beta 2020-04-14 22:19:56 +02:00
zadam
61167f6646 make sure to close sqlite connection on exit 2020-04-14 22:15:55 +02:00
zadam
29cec8112e fix setup of new document, closes #966 2020-04-14 21:57:42 +02:00
zadam
48aadc8309 fix parsing of includeNote, closes #963 2020-04-13 18:12:41 +02:00
zadam
b2508db9af release 0.41.2-beta 2020-04-13 10:30:11 +02:00
zadam
87510fd72b include note styling changes 2020-04-13 10:13:03 +02:00
zadam
339f212e4c added webpack 2020-04-12 14:22:51 +02:00
zadam
3c311cd2a4 loading indicator and optimisations for mobile 2020-04-11 22:06:04 +02:00
zadam
b5bf581bd9 don't select tree node when dragging 2020-04-11 15:09:38 +02:00
zadam
242f139be4 allow specifying include note widget size 2020-04-11 11:49:58 +02:00
zadam
6c76d862d2 fix creating link with selection -> must by hyper link, closes #959 2020-04-11 09:47:19 +02:00
zadam
62bc05134e sqlite upgrade 2020-04-09 21:20:14 +02:00
zadam
50d3928dd5 release 0.41.1-beta 2020-04-08 22:10:55 +02:00
zadam
44d641617e fix relation map in demo document 2020-04-08 22:09:32 +02:00
zadam
f3b84e5185 use ckeditor content styles also for read only notes, tooltips and book notes 2020-04-08 21:38:11 +02:00
zadam
34b8979016 make note paths work better with hoisted note 2020-04-08 20:38:50 +02:00
zadam
6c188982b3 added some logging 2020-04-08 11:07:38 +02:00
zadam
1175a8ee49 display last noteId in the note path widget as well 2020-04-08 10:19:15 +02:00
zadam
9c04ef9fb7 note path widget tweaks 2020-04-08 10:13:11 +02:00
zadam
6cc3e3cdf6 note paths is now on the left side and showing current path 2020-04-07 22:53:03 +02:00
zadam
f8bd55374f support for included notes and reference links also in read only text views 2020-04-07 21:28:40 +02:00
zadam
3ccb1c6ac1 refactoring to editable_text 2020-04-07 21:04:28 +02:00
zadam
d34d265d01 API docs update 2020-04-07 19:19:20 +02:00
zadam
c063f75f48 fix ZIP import of notes with included note 2020-04-06 22:46:11 +02:00
zadam
2d1f3b7633 renamed text preview to read only text 2020-04-06 22:21:09 +02:00
zadam
3772d97dfa basic text preview implemented 2020-04-06 22:08:54 +02:00
zadam
5c0355718f repository has now first level cache 2020-04-06 20:59:04 +02:00
zadam
081693f263 not generating externalLink labels anymore since there can be too many and benefit is too small 2020-04-05 16:06:13 +02:00
zadam
8d312515dd small fixes 2020-04-05 15:35:01 +02:00
zadam
7bd05415fa revert fancytree upgrade which caused some issues (tree duplication) 2020-04-05 12:56:25 +02:00
zadam
8d7687f354 fix copying template's content, closes #943 2020-04-05 12:28:16 +02:00
zadam
42128c007f fix "search in subtree", closes #941 2020-04-04 22:49:30 +02:00
zadam
dfb97d64f7 fix showing promoted notes, closes #944 2020-04-04 22:40:32 +02:00
zadam
b1bed18331 significantly faster sync with transactions 2020-04-04 21:49:57 +02:00
zadam
ae50c9847d sync refactorings, added logging for performance tracking 2020-04-04 14:57:19 +02:00
zadam
6201dd70a0 small fixes in consistency_checks 2020-04-04 09:46:49 +02:00
zadam
451c408063 small fixes 2020-04-03 19:34:22 +02:00
zadam
3bbb213f82 fixes for web clipper 2020-04-02 22:55:11 +02:00
zadam
bab657e43d release 0.41.0-beta 2020-03-31 22:12:31 +02:00
zadam
4b24d9562c fix visibility of panels after startup with hidden state 2020-03-31 22:09:05 +02:00
zadam
a73739d03e small fixes 2020-03-31 21:47:15 +02:00
zadam
4485650cbc library upgrades 2020-03-31 20:52:41 +02:00
zadam
58f610b2c6 fix mobile frontend 2020-03-29 23:10:45 +02:00
zadam
5024454914 better activation behavior when move notes 2020-03-29 22:54:14 +02:00
zadam
ca0e36ea81 fix render type non-scrolling 2020-03-29 22:27:05 +02:00
zadam
c9b2ff05e9 book notes don't display images as separate children if the image is included in the parent text note, #892 2020-03-29 22:15:09 +02:00
zadam
0973498fe9 small fixes 2020-03-29 20:37:40 +02:00
zadam
189202b1f6 added context menu "recent changes in subtree" 2020-03-29 19:43:04 +02:00
zadam
cc298b1e7a recent changes respect hoisted note state 2020-03-29 19:37:34 +02:00
zadam
f8bd6183bf fix default document 2020-03-29 18:53:32 +02:00
zadam
ef60cb5395 fix placing notes onto relation map by drag & drop 2020-03-29 18:49:30 +02:00
zadam
b10c083560 check for images happens before other methods in utils.isHtmlEmpty() 2020-03-29 17:11:44 +02:00
zadam
8eeb395523 updated sqlite binaries from linux & mac 2020-03-29 17:06:35 +02:00
zadam
084882a50e fixes in ckeditor build 2020-03-29 15:58:18 +02:00
zadam
7c04521e9c Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	src/public/javascripts/mobile.js
#	src/public/stylesheets/mobile.css
2020-03-29 15:41:27 +02:00
zadam
0a0de7312c release 0.40.7 2020-03-28 20:58:20 +01:00
zadam
37255243f7 allow user to see their username in the options #934 2020-03-28 19:55:02 +01:00
zadam
b4b22d9353 workaround for overflowing component wrapper in landscape mobile frontend, fixes #933 2020-03-28 19:39:14 +01:00
zadam
d3eb640aa2 fix upload image from mobile frontend, closes #931 2020-03-28 19:25:19 +01:00
zadam
78d431387b updated win64 sqlite binary 2020-03-27 21:47:22 +01:00
zadam
c4bc53da59 updates to the demo document 2020-03-26 22:22:18 +01:00
zadam
34de8fb874 improved reference link handling 2020-03-26 20:40:15 +01:00
zadam
5a6ab68144 added a progress screen for setup of a new document 2020-03-26 17:47:56 +01:00
zadam
c4e5b35187 changed demo.tar to demo.zip 2020-03-26 17:05:17 +01:00
zadam
2e55d544f1 db setup fixes 2020-03-26 16:59:40 +01:00
zadam
b778985b5e minor fixes and upgrades 2020-03-26 16:21:17 +01:00
zadam
f9a79fa00f improvements and logging to local image storage 2020-03-25 21:01:42 +01:00
zadam
ef61e22f1f local image storage fixes 2020-03-25 18:21:55 +01:00
zadam
8a92786012 save paste images locally WIP 2020-03-25 11:28:44 +01:00
zadam
a856463173 correctly handle clicks on reference links 2020-03-23 20:18:54 +01:00
zadam
cb168218fb proper handling of deleted notes 2020-03-23 16:39:03 +01:00
zadam
978575498c reference insertion is now immediate 2020-03-23 12:31:10 +01:00
zadam
8584de27ab mentions also insert reference links 2020-03-22 18:27:13 +01:00
zadam
a36d6bf9be add link dialog now allows switching between reference link and normal hyperlink 2020-03-22 11:41:00 +01:00
zadam
9b17e9976e basic implementation of reference link functionality 2020-03-21 21:04:34 +01:00
zadam
d927865cbd fix import zip corner case where there are 2 independent notes with the same name 2020-03-21 15:14:44 +01:00
zadam
6de0b19569 add image through "include note" will just insert image instead of standard include note element, #922 2020-03-21 10:38:27 +01:00
zadam
84d7097b1a Merge remote-tracking branch 'origin/stable' 2020-03-21 10:05:15 +01:00
zadam
8ccc48c25d images in include note should have max 100% width, #922 2020-03-21 09:52:13 +01:00
zadam
438da7cfbb two pass import from zip file to guarantee that meta file is loaded before other files are process 2020-03-20 22:13:29 +01:00
zadam
af5c4b5859 zip import using yazl 2020-03-20 21:57:16 +01:00
zadam
04360381b6 reimplement export with yazl 2020-03-20 16:55:35 +01:00
zadam
45e2dc96fb export subtrees in ZIP instead of TAR format because of more widespread support (especially unicode) 2020-03-19 20:07:27 +01:00
zadam
ff426fc1fc added more placement points for custom widgets 2020-03-19 17:15:14 +01:00
zadam
6dfc2755e7 ckeditor 18 2020-03-19 16:29:48 +01:00
zadam
789f12ac8f Merge remote-tracking branch 'origin/stable' 2020-03-19 09:44:00 +01:00
zadam
9a1a76605a fix OPML export of book notes, closes #919 2020-03-19 09:42:41 +01:00
zadam
debce78c7f load ancestors and templates when receiving sync from backend 2020-03-19 09:18:36 +01:00
zadam
48c57c7ce7 always keep all the ancestors in the cache WIP 2020-03-18 22:42:29 +01:00
zadam
4a89df7ebf always keep all the ancestors in the tree WIP 2020-03-18 22:35:54 +01:00
zadam
6295a1825d fixes in setting/opening tabs 2020-03-18 10:08:16 +01:00
zadam
280955b3a2 fix events from keyboard shortcuts 2020-03-17 22:49:43 +01:00
zadam
72cc54a83f fixed global create new day note 2020-03-17 21:39:26 +01:00
zadam
c3b44b9a91 fixed & improved history navigation - context menu now indicates current, "future" and "past" items 2020-03-17 21:15:57 +01:00
zadam
8a9875ecfa fix filling or targetRelations during backend2frontend sync 2020-03-17 18:38:49 +01:00
zadam
9230b07adb focus created note 2020-03-17 12:48:09 +01:00
zadam
5a6066dcd1 fix "create note after" keyboard shortcut 2020-03-17 12:28:02 +01:00
zadam
d4d54c5f01 fix createNoteInto keyboard shortcut 2020-03-17 11:28:41 +01:00
zadam
141d4593ca fix loading of custom widgets 2020-03-16 23:25:52 +01:00
zadam
a7ddc33b6d sorting of widgets 2020-03-16 22:14:18 +01:00
zadam
173030e02e basic support for custom widgets 2020-03-16 21:16:09 +01:00
zadam
8ae78a9e23 Create FUNDING.yml 2020-03-16 08:25:20 +01:00
zadam
babc27f824 update dayjs 2020-03-16 08:21:53 +01:00
zadam
2c7eb723d5 fix note hoisting 2020-03-15 22:11:42 +01:00
zadam
40247a591e fix delete shortcut in note tree and protect notes recursively 2020-03-15 22:09:48 +01:00
zadam
3a4d32f163 fix clone-to, move-to keyboard shortcuts 2020-03-15 21:52:04 +01:00
zadam
7f2c859b94 fix detail font size setting 2020-03-15 21:40:26 +01:00
zadam
a5764c269f pdf preview is now also available in include note, book etc. 2020-03-15 21:35:43 +01:00
zadam
6a1bfdeab9 fix autobook switching back to text 2020-03-15 21:31:25 +01:00
zadam
6de0f75931 fix switching notes in the passive tabs 2020-03-15 18:57:03 +01:00
zadam
fcf72262bd Merge remote-tracking branch 'origin/stable' 2020-03-15 18:23:21 +01:00
zadam
114017147f fix load results isEmpty method 2020-03-15 17:18:50 +01:00
zadam
a717ee00fb release 0.40.6 2020-03-15 11:21:43 +01:00
zadam
f5e27278ab fix migration script to preserve sync IDs 2020-03-15 11:19:30 +01:00
zadam
2cc0442ef2 fix new tab open hiding 2020-03-15 11:08:16 +01:00
zadam
687a466a35 Merge remote-tracking branch 'origin/stable' 2020-03-15 09:57:57 +01:00
zadam
20c24e26cc added entity constructors for "content" tables 2020-03-14 21:09:07 +01:00
zadam
3bafc396fc fix consistency checks 2020-03-14 13:13:27 +01:00
zadam
08606f7d88 Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	src/services/sync_table.js
2020-03-14 12:58:47 +01:00
zadam
3fa3e912a4 not sending ping to clients after every sync addition, only after commit which significantly speeds up imports 2020-03-14 12:39:55 +01:00
zadam
44219e7ccc do not load the note content during ENEX import again since it's already available 2020-03-13 22:23:44 +01:00
zadam
48abd765c6 fix sync issues 2020-03-11 22:43:20 +01:00
zadam
2d38706ba8 wip 2020-03-10 23:33:39 +01:00
zadam
8d45662bee clear history in the code mirror after setting a value, closes #766 2020-03-10 22:51:44 +01:00
zadam
dc4024b6de Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	src/public/javascripts/services/note_detail_code.js
2020-03-10 22:51:02 +01:00
zadam
5b67854cbe clear history in the code mirror after setting a value, closes #766 2020-03-10 22:48:21 +01:00
zadam
72745aca29 fix unnecessary scroll to parent when opening new tab 2020-03-10 22:25:57 +01:00
zadam
e6e41adad0 fix backend to frontend sync with waitForSyncId() 2020-03-10 21:33:03 +01:00
zadam
bcbf1b79c3 fixed waitForSync 2020-03-09 22:32:26 +01:00
zadam
1d78432df4 Merge remote-tracking branch 'origin/stable' 2020-03-09 22:16:43 +01:00
zadam
c6d912dcb7 sync only changes with isSynced = true 2020-03-09 21:34:03 +01:00
zadam
eb287917c1 set sync.isSynced correctly 2020-03-09 21:28:41 +01:00
zadam
da53c1eaa8 updated schema.sql 2020-03-09 21:23:11 +01:00
zadam
c67613a557 Merge remote-tracking branch 'origin/stable' 2020-03-09 21:00:38 +01:00
zadam
0ca107ff48 fix event listener for resize 2020-03-09 21:00:31 +01:00
zadam
73bf2dcb02 added isSynced to sync table to allow forward compatibility with 0.41 2020-03-09 20:56:43 +01:00
zadam
719f10981e fix sync 2020-03-08 22:00:12 +01:00
zadam
1774f48d07 fix sync 2020-03-08 21:59:19 +01:00
zadam
deb67d6275 release 0.40.5 2020-03-08 21:05:52 +01:00
zadam
bafd829ff6 updated electron 9.0 binary dependencies 2020-03-08 20:17:28 +01:00
zadam
e7aa84435b render PDF preview in electron for pdf notes 2020-03-08 18:06:24 +01:00
zadam
493d088d80 better back/forward navigation 2020-03-08 17:17:18 +01:00
zadam
5f4d963580 better back/forward navigation WIP 2020-03-08 11:41:42 +01:00
zadam
5114f3f782 fixes after merge 2020-03-08 09:38:49 +01:00
zadam
53f5df4e88 Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	src/public/javascripts/desktop.js
#	src/public/stylesheets/style.css
#	src/views/details/image.ejs
#	src/views/details/relation_map.ejs
2020-03-08 09:26:34 +01:00
zadam
e4039ea5e1 fixed printing relation map 2020-03-08 09:24:03 +01:00
zadam
95fef8d2e5 fixes after merge 2020-03-07 22:29:49 +01:00
zadam
7105b61aab Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	src/public/javascripts/desktop.js
#	src/views/desktop.ejs
#	src/views/mobile.ejs
2020-03-07 22:21:55 +01:00
zadam
78a50be663 don't print control buttons 2020-03-07 22:18:12 +01:00
zadam
3d3ad3b99b include themes.css for printing to have default CSS variables available 2020-03-07 22:14:07 +01:00
zadam
0d9cdcac85 load appropriate styles for printing book notes, closes #899 2020-03-07 22:01:34 +01:00
zadam
c4f7bb37db removed sidebar widget settings 2020-03-07 21:34:39 +01:00
zadam
81ec85083a link map widget always rendered centered map 2020-03-07 20:41:03 +01:00
zadam
62da383623 only one update 2020-03-07 15:01:48 +01:00
zadam
8513e0201c collapsed state is now synchronized across tab-cached instances 2020-03-07 14:31:25 +01:00
zadam
abd60581be right pane is now scrollable 2020-03-07 14:18:58 +01:00
zadam
aff02184f8 removed last tab should activate second to last 2020-03-07 13:57:31 +01:00
zadam
8909d175d0 event fixes 2020-03-07 13:40:46 +01:00
zadam
091eb8f791 event fixes WIP 2020-03-06 23:34:39 +01:00
zadam
e10d23289e event fixes WIP 2020-03-06 22:17:07 +01:00
zadam
26599f057c collapsible widget remember their collapsed state 2020-03-01 20:49:11 +01:00
zadam
4e0e2e8926 fixes in side pane toggling 2020-03-01 20:11:40 +01:00
zadam
9c631e4398 Merge remote-tracking branch 'origin/master' into m41
# Conflicts:
#	.idea/dataSources/a2c75661-f9e2-478f-a69f-6a9409e69997.xml
#	src/public/stylesheets/desktop.css
2020-03-01 19:20:08 +01:00
zadam
687539cc95 fix zen mode 2020-03-01 19:16:30 +01:00
zadam
03e0c98066 migrated desktop CSS to the desktop layout 2020-03-01 19:06:26 +01:00
zadam
77f358b846 migrated mobile CSS to the mobile layout 2020-03-01 18:57:13 +01:00
zadam
4c82e882e0 bit better right pane layout 2020-03-01 18:47:20 +01:00
zadam
0f4ba43463 mobile frontend is working again 2020-03-01 15:19:16 +01:00
zadam
f15239c006 mobile layout fixes 2020-03-01 12:50:02 +01:00
zadam
ed1b5e3843 mobile layout fixes 2020-03-01 12:05:10 +01:00
zadam
607bdfef92 mobile global buttons 2020-03-01 11:53:02 +01:00
zadam
4f744564f2 start of mobile layout 2020-03-01 11:04:42 +01:00
zadam
f64b343d8d ref 2020-03-01 10:41:23 +01:00
zadam
47b803920b keep body hidden until rendered 2020-02-29 22:13:54 +01:00
zadam
8888d04878 fixes 2020-02-29 22:04:46 +01:00
zadam
49398f5374 refactoring of component event system + little docs 2020-02-29 19:43:19 +01:00
zadam
95d1952896 wip 2020-02-29 16:26:46 +01:00
zadam
3ab2b41e8c open links in new tab without activation 2020-02-29 15:00:35 +01:00
zadam
e5155130e7 ckeditor with table/cell properties 2020-02-29 14:32:26 +01:00
zadam
724ba352e6 refactored existing context menus 2020-02-29 13:03:05 +01:00
zadam
1239293435 spell check context menu 2020-02-29 11:28:30 +01:00
zadam
16f42dd4ab use electron 8 spellchecker instead of electron-spellchecker, WIP 2020-02-28 22:07:08 +01:00
zadam
350331e2ef fix 500px constant height of relation maps, closes #882 2020-02-28 15:20:54 +01:00
zadam
a2d6a5c3e9 fixes 2020-02-28 11:46:35 +01:00
zadam
cb35284d37 wip 2020-02-28 00:31:12 +01:00
zadam
2af37640d8 small refactoring of search code 2020-02-28 00:11:34 +01:00
zadam
4bd298a55b refactor data-kb-command 2020-02-27 23:12:22 +01:00
zadam
cd4b1235a7 wip 2020-02-27 14:35:12 +01:00
zadam
5e3c85f891 fix issues 2020-02-27 12:41:15 +01:00
zadam
b2a3e1cc04 fixed double refresh of note detail 2020-02-27 12:26:42 +01:00
zadam
d71763aedb title row spacing 2020-02-27 10:08:21 +01:00
zadam
368d0c55da refactoring of layout finished 2020-02-27 10:03:14 +01:00
zadam
637010577b layout changes WIP 2020-02-27 00:58:10 +01:00
zadam
7bcae9981b unified/simplified protecting notes & subtree 2020-02-26 16:37:17 +01:00
zadam
3752cf8cba layout fixes 2020-02-25 19:19:10 +01:00
zadam
7270bf287d fixes and right pane layout changes 2020-02-25 16:31:44 +01:00
zadam
d821ea4095 fix closing all tabs except current 2020-02-25 12:32:21 +01:00
zadam
41d1d83dc2 fix showing/hiding of type widgets 2020-02-25 12:24:37 +01:00
zadam
a2fe110400 unified global variable handling between mobile and desktop 2020-02-25 11:02:59 +01:00
zadam
fdc99bb6f9 adapt merged changes from master 2020-02-25 10:47:49 +01:00
zadam
36eac6badd Merge remote-tracking branch 'origin/master' into m41
# Conflicts:
#	src/public/javascripts/mobile.js
#	src/public/stylesheets/style.css
2020-02-25 09:42:27 +01:00
zadam
7cac2521ef fix css class handling 2020-02-25 09:40:49 +01:00
zadam
e8a9e49e9e release 0.40.4 2020-02-24 22:59:22 +01:00
zadam
fb55cdaea6 release 0.40.4 2020-02-24 22:58:18 +01:00
zadam
b9b2cc8364 make sure $rendered is always jquery object 2020-02-24 22:55:12 +01:00
zadam
8dfdd090f5 use note's css class also in book and included note, closes #879 2020-02-24 22:46:27 +01:00
zadam
fe7705524a fix include note in mobile frontend, closes #878 2020-02-24 22:37:45 +01:00
zadam
8e77d729e5 ckeditor 17 2020-02-20 17:01:18 +01:00
zadam
2b1b7774f8 make images in text notes rendered responsively in a book, fixes #871 2020-02-19 22:24:31 +01:00
zadam
2d58019d6e allow to setup web version as a sync client 2020-02-19 22:10:40 +01:00
zadam
fe31f08c0d show setup window if DB is not initialized 2020-02-19 22:09:49 +01:00
zadam
d9fb36a9a6 fixes 2020-02-19 22:09:02 +01:00
zadam
52f4876f2d camelCase keyboard action names 2020-02-19 20:54:14 +01:00
zadam
ad7a55d305 always autofix note_contents.content = NULL sync issue after note erasion 2020-02-19 19:51:36 +01:00
zadam
2e3534dfb7 small fixes 2020-02-18 22:16:20 +01:00
zadam
d288c1b052 small fixes 2020-02-17 22:47:50 +01:00
zadam
f2cf361acf small fixes 2020-02-17 22:38:46 +01:00
zadam
e7af24c139 small fixes 2020-02-17 22:14:39 +01:00
zadam
9797942b8e small cleanups 2020-02-17 19:42:52 +01:00
zadam
32d60a7eb9 refactored tree context menu to reduce duplication 2020-02-16 22:56:40 +01:00
zadam
4330dc47a0 converted tree_keybindings.js into proper commands 2020-02-16 22:14:28 +01:00
zadam
8ca9ad3497 fixes 2020-02-16 20:09:59 +01:00
zadam
a679fedb58 refactored keyboard actions into commands 2020-02-16 19:54:11 +01:00
zadam
880f4ad711 renamed Listener() to Event() 2020-02-16 19:23:49 +01:00
zadam
e000fb4579 appContext is now component 2020-02-16 19:21:17 +01:00
zadam
22c042e21f remove appContext as copied dependency across components 2020-02-16 18:11:32 +01:00
zadam
2c3f07521d fixes 2020-02-16 11:22:37 +01:00
zadam
e06f3ef97e refactorings for add link and include note 2020-02-16 10:50:48 +01:00
zadam
7e41a2750c refactored KB handling and add link dialog 2020-02-15 22:12:05 +01:00
zadam
b2a48a1f3a fix clone notes dialog 2020-02-15 18:41:32 +01:00
zadam
e1bf4dcbc9 basic executor / command mechanism 2020-02-15 10:41:21 +01:00
zadam
6d847d22d3 components now track their parent 2020-02-15 09:43:47 +01:00
zadam
9337564075 boxicons 2.0.5 2020-02-15 09:16:23 +01:00
zadam
2fa41b44c5 fix branch prefix dialog 2020-02-14 21:21:47 +01:00
zadam
8d2c2202fa refactoring and fixes for saved note 2020-02-14 20:18:09 +01:00
zadam
380bb0cd01 fix deleting 2020-02-12 22:25:52 +01:00
zadam
789f62267c changes in note detail handling 2020-02-12 22:09:25 +01:00
zadam
25553c9e67 simplification of sync event API 2020-02-12 20:31:31 +01:00
zadam
81a54cd4a0 messaging now uses mutex so each component processes only single message at each time 2020-02-12 20:07:04 +01:00
zadam
1d2fc773c2 fix for delete note sync etc. 2020-02-10 20:57:56 +01:00
zadam
7767edd82f fixes 2020-02-09 22:31:52 +01:00
zadam
99ea238c3f frontend sync fixes 2020-02-09 21:53:10 +01:00
zadam
826c434630 fixes in closing tabs and elsewhere 2020-02-09 21:13:05 +01:00
zadam
4401a8e1e8 Merge branch 'master' into m41
# Conflicts:
#	src/public/javascripts/dialogs/add_link.js
#	src/public/javascripts/dialogs/export.js
#	src/public/javascripts/dialogs/import.js
#	src/public/javascripts/dialogs/note_info.js
#	src/public/javascripts/services/search_notes.js
2020-02-09 18:54:56 +01:00
zadam
4ce4ac9584 release 0.40.3 2020-02-09 10:48:23 +01:00
zadam
88bd65c679 external links are also parsed and label is created for them, closes #851 2020-02-09 10:45:07 +01:00
zadam
9eab3026bb display advanced item in the tree context menu in the middle to avoid being hidden, closes #853 2020-02-09 10:15:35 +01:00
zadam
7abaedbf31 add possibility to change clipper parent to a fixed note instead of day notes, fixes #854 2020-02-09 10:12:02 +01:00
zadam
402718d293 return focus to the previously focused element after closing the dialog, fixes #861 2020-02-09 10:00:13 +01:00
zadam
990a84c202 Merge remote-tracking branch 'origin/master' 2020-02-09 08:38:47 +01:00
zadam
d8e181a828 Merge branch 'stable'
# Conflicts:
#	package.json
#	src/services/build.js
2020-02-09 08:38:29 +01:00
zadam
4ec671d199 fixes in enabling / disabling widgets in runtime 2020-02-08 21:54:39 +01:00
zadam
9f4a514562 fix setting path 2020-02-08 21:23:42 +01:00
zadam
18ee239362 fixes 2020-02-08 20:53:07 +01:00
zadam
08687b76ea fix title bar buttons visibility 2020-02-08 18:25:07 +01:00
zadam
60d07a6871 fix duplicated cached widgets 2020-02-08 17:44:34 +01:00
zadam
81f4966a1a fixes, cleaned up noise in the developer console 2020-02-08 10:40:58 +01:00
zadam
9acf723a9a fixes 2020-02-07 22:19:35 +01:00
zadam
47f7f5f4d9 refactoring 2020-02-07 21:43:02 +01:00
zadam
14d6372bd8 moved tab related stuff to tab manager from app context 2020-02-07 21:08:55 +01:00
zadam
6d912c4897 removed dependency on note tree widget from app context 2020-02-07 20:56:49 +01:00
zadam
62e1284790 untangled tabrow dependencies 2020-02-06 22:39:31 +01:00
zadam
d79ae261e1 refactored layout out of app context 2020-02-06 21:47:31 +01:00
zadam
92f6558e55 the whole view is now composed from a single root widget 2020-02-06 21:16:02 +01:00
zadam
8d49249ed7 fix lazy initialization of the sidebar 2020-02-06 20:04:43 +01:00
zadam
d1bb62c40e fixes 2020-02-05 22:46:20 +01:00
zadam
42017fde5f refactored access to options on frontend 2020-02-05 22:08:45 +01:00
zadam
786bbbc160 sidebars are now represented as widgets 2020-02-04 22:46:17 +01:00
zadam
0cc013c13f left sidebar can now be also collapsible 2020-02-04 20:42:40 +01:00
zadam
c5475765e5 disable --disable-gpu flag 2020-02-03 22:41:01 +01:00
zadam
9ea91f821c update to electron 8 2020-02-03 22:23:23 +01:00
zadam
b757dfcf79 various fixes and small refactorings 2020-02-03 21:56:45 +01:00
zadam
44ddcdd852 various widget optimizations for faster note switching 2020-02-03 21:16:33 +01:00
zadam
66204811cf refactored note creation methods into a separate service 2020-02-03 20:07:34 +01:00
zadam
822a8509b3 fix 2020-02-02 22:33:50 +01:00
zadam
9f62490a75 refactorings of note creation code 2020-02-02 22:32:44 +01:00
zadam
b63ecba695 clean up tree service WIP 2020-02-02 22:04:28 +01:00
zadam
d5ae3802d1 various widget refactorings 2020-02-02 21:16:20 +01:00
zadam
7c6cd63a53 various widget refactorings 2020-02-02 20:02:08 +01:00
zadam
62a80ef016 standard widget => collapsible widget 2020-02-02 18:46:50 +01:00
zadam
27ab55d26a fixed switch between autobook and text 2020-02-02 11:44:08 +01:00
zadam
34150e7177 fix inserting link 2020-02-02 11:14:44 +01:00
zadam
b946599320 Merge remote-tracking branch 'origin/master' into m41
# Conflicts:
#	src/public/javascripts/services/tree.js
2020-02-02 10:45:27 +01:00
zadam
3cd4be4e48 removed note detail service 2020-02-02 10:41:43 +01:00
zadam
96e2b9bc18 fix tree keyboard shortcuts propagating outside of tree 2020-02-02 10:10:37 +01:00
jasontan056
adb8caa8a2 Fix corner case preventing notes from being created before ckeditor is initialized (#849)
* Pass deleteId to deleteBranch in ensureNoteIsAbsentFromParent

* Add checks for whether window.cutToNote is defined.

* check ckEditor initialized.
2020-02-02 09:28:19 +01:00
zadam
0054a32dc7 treecache now manages reloading when starting protected session 2020-02-01 22:29:32 +01:00
zadam
513ce1a183 Merge branch 'master' into m41
# Conflicts:
#	src/public/javascripts/services/sidebar.js
#	src/public/javascripts/services/tab_context.js
#	src/public/javascripts/services/tree.js
2020-02-01 20:01:30 +01:00
zadam
9f38ea6ee7 update tab title upon its change 2020-02-01 19:25:37 +01:00
zadam
0e13678f7c note complement is now loaded through tree cache 2020-02-01 18:29:18 +01:00
zadam
f0cbca2838 lazy loading of note complement 2020-02-01 11:33:31 +01:00
zadam
f6f7836b8e renamed notefull to notecomplement 2020-02-01 11:15:58 +01:00
zadam
7651c53363 release 0.40.2 2020-02-01 10:17:51 +01:00
zadam
0f25c8a95f autobook should not be active on the mobile interface 2020-02-01 10:17:03 +01:00
zadam
1a49894adf fix tree loading on mobile interface, closes #839 2020-02-01 10:04:18 +01:00
zadam
bd8c078fb9 Merge remote-tracking branch 'origin/master' 2020-02-01 09:30:14 +01:00
zadam
6e060b87b8 fix date parsing in local timezone, closes #845 2020-02-01 09:29:56 +01:00
jasontan056
2375b170ba Pass deleteId to deleteBranch in ensureNoteIsAbsentFromParent (#846) 2020-02-01 09:05:23 +01:00
zadam
eeedb91ef7 sync are sent upon DB commit 2020-01-31 22:32:24 +01:00
zadam
05b51c0f68 frontend sync through websocket 2020-01-31 20:52:31 +01:00
zadam
8bf794f13b wip 2020-01-30 22:38:31 +01:00
zadam
48b401164a wip 2020-01-29 22:32:22 +01:00
zadam
b65631be7e tree change listener and others 2020-01-29 21:38:58 +01:00
zadam
439b45b0b8 refactored entity reloading 2020-01-29 20:14:02 +01:00
zadam
976b2aa6f5 got rid of "origParentNoteId" since it's not needed anymore 2020-01-28 22:39:44 +01:00
zadam
88213c1bbd attributes are now updated only if their type and name does not change, in case of relation not even value must change. If they do, the old attribute is deleted and new is created instead 2020-01-28 22:37:06 +01:00
zadam
d2e3aedf7f moving notes across parents now deletes the old branch and creates new which makes detecting changes much easier 2020-01-28 22:15:33 +01:00
zadam
368d3b1b97 wip 2020-01-28 21:54:28 +01:00
zadam
9301679707 wip 2020-01-27 22:58:03 +01:00
zadam
865f7e1ee1 fix propagating note reloads 2020-01-27 20:07:33 +01:00
zadam
c243d2e85c sync changes wip 2020-01-26 11:41:40 +01:00
zadam
97a35d6fba wip 2020-01-26 10:42:24 +01:00
zadam
3f0974d3d2 smaller fixes 2020-01-25 18:29:32 +01:00
zadam
48a7c0235f fixed iconClass and cssClass 2020-01-25 14:48:53 +01:00
zadam
ac7d5f2e81 fixes, separation of notefull from noteshort 2020-01-25 14:37:12 +01:00
zadam
516e6c35da fixes 2020-01-25 13:46:55 +01:00
zadam
7cad386a56 frontend attribute cache refactoring WIP 2020-01-25 13:27:23 +01:00
zadam
60c908cd63 frontend attribute cache refactoring WIP 2020-01-25 11:52:45 +01:00
zadam
52a907651e reduce unnecessary tab activation events 2020-01-25 10:25:06 +01:00
zadam
3254b551d8 merged tree utils into tree service 2020-01-25 09:56:08 +01:00
zadam
7a62d1636b fixes 2020-01-24 22:30:17 +01:00
zadam
7d9b720ea8 fix note switching in current tab 2020-01-24 21:15:40 +01:00
zadam
ba500a3a80 fixes 2020-01-24 20:15:53 +01:00
zadam
606d5afcab refactoring of note detail API 2020-01-24 17:54:47 +01:00
zadam
4b66765cc1 refactoring 2020-01-24 15:44:24 +01:00
zadam
8651e47118 small fixes 2020-01-22 22:29:55 +01:00
zadam
34bc02965f book and search fixes 2020-01-22 22:05:28 +01:00
zadam
eacefeb08b converted remaining type widgets 2020-01-22 21:38:00 +01:00
zadam
11a61325f9 removed last global keyboard handlers 2020-01-22 20:48:56 +01:00
zadam
370c63986d converting more keyboard shortcuts 2020-01-22 19:41:19 +01:00
zadam
d103b16d9a updated generate-cert script, #835 2020-01-22 19:12:03 +01:00
zadam
c63bb7ce8a converted more keyboard actions 2020-01-21 22:54:16 +01:00
zadam
af5c623671 simplification of triggering events from links 2020-01-21 22:08:41 +01:00
zadam
55d1f9e9f0 import & export fixed 2020-01-21 21:43:23 +01:00
zadam
96a7b4e45e fix dialogs 2020-01-21 20:54:00 +01:00
zadam
c83ca78565 keyboard handlers for dialogs 2020-01-20 22:35:52 +01:00
zadam
c5eac8f438 keyboard handlers for tabs 2020-01-20 20:51:22 +01:00
zadam
9bc1f5af45 WIP 2020-01-19 22:05:45 +01:00
zadam
423a70d102 saving note detail 2020-01-19 21:40:23 +01:00
zadam
562c729ed6 more refactorings 2020-01-19 21:24:14 +01:00
zadam
0760dc742b refactored tab activation 2020-01-19 21:12:53 +01:00
zadam
1098d75ce0 synchronous events, updating title works fully 2020-01-19 20:18:02 +01:00
zadam
bd8e5f255b wip 2020-01-19 19:33:35 +01:00
zadam
8da094cd3c events for updating title (no saving yet) 2020-01-19 18:05:06 +01:00
zadam
44dc3c28de Merge branch 'master' into m41 2020-01-19 17:29:45 +01:00
zadam
828cce0d78 release 0.40.1 2020-01-19 15:45:06 +01:00
zadam
49c0d3199d progress 2020-01-19 15:44:18 +01:00
zadam
416d733510 got rid of .renderTo(), tab caching widgets use hidden marker element 2020-01-19 15:36:42 +01:00
zadam
6de4914ea6 extracted widgets from note title 2020-01-19 13:19:40 +01:00
zadam
9f1e777e6d introduction of refreshWithNote 2020-01-19 11:37:24 +01:00
zadam
adb9ce5e93 empty widget type works 2020-01-19 11:20:02 +01:00
zadam
746181689f component => type widget refactoring 2020-01-19 11:03:34 +01:00
zadam
a99c016818 file note layout tweaks 2020-01-19 10:29:21 +01:00
zadam
37f279fab0 Merge branch 'master' into m41
# Conflicts:
#	src/public/javascripts/services/entrypoints.js
2020-01-19 09:30:38 +01:00
zadam
ab535bf147 fixes of the new CopyWithoutFormatting 2020-01-19 09:25:35 +01:00
Heniker
1876664dfb add hotkey to copy contents with line breaks, fixes #349 (#831) 2020-01-19 09:16:36 +01:00
zadam
1690248e24 migration script to fix contentLength = -1 in new notes 2020-01-19 09:08:33 +01:00
zadam
cbeb8ea17e fix setting contentLength 2020-01-19 09:03:26 +01:00
zadam
e355b449c4 code and file note types now sort of work now as well 2020-01-19 09:02:18 +01:00
zadam
4fdea77c57 fix setting contentLength 2020-01-19 09:01:51 +01:00
zadam
9a13edd490 release 0.39.6 2020-01-18 20:52:14 +01:00
zadam
6d276582cb switching notes and tabs now work for most widgets 2020-01-18 20:49:49 +01:00
zadam
493730dff6 working note type and note paths widgets 2020-01-18 19:46:30 +01:00
zadam
b00a9f4415 progress 2020-01-18 18:01:16 +01:00
zadam
b25c1d6fa8 Merge branch 'master' into m41 2020-01-18 09:25:18 +01:00
zadam
c9113ae752 Merge branch 'stable' 2020-01-18 09:24:39 +01:00
zadam
0ec11d29ba fix creating root calendar note when missing, #752 2020-01-18 08:59:46 +01:00
zadam
a6cd25071e more robust handling of sync error, fixes #830 2020-01-18 08:48:36 +01:00
zadam
97b13ae91d refactroring WIP 2020-01-16 22:44:36 +01:00
zadam
0178232f26 more tab row refactoring 2020-01-15 22:35:15 +01:00
zadam
cc138ef9f8 more tab row refactoring 2020-01-15 22:27:52 +01:00
zadam
1552c3804d tab row refactoring WIP 2020-01-15 22:11:30 +01:00
zadam
7963de0abc continuing refactoring 2020-01-15 21:36:01 +01:00
zadam
f98a20928c widgetized standard toolbar 2020-01-15 20:10:54 +01:00
zadam
209b1610f6 widgetizing tab pane 2020-01-15 19:40:17 +01:00
zadam
bd0f7d3680 move components 2020-01-14 21:52:18 +01:00
zadam
f852e1de81 removed sidebar code 2020-01-14 21:48:19 +01:00
zadam
c9770573b2 converting sidebar widgets to normal widgets 2020-01-14 21:23:32 +01:00
zadam
23701219e1 added TabCachingWidget 2020-01-14 20:27:40 +01:00
zadam
c9bc4ad108 widgetizing note detail WIP 2020-01-13 21:48:44 +01:00
zadam
8b9c235465 widgetizing promoted attributes 2020-01-13 20:25:56 +01:00
zadam
20fdeee048 better error handling for search notes 2020-01-13 19:35:06 +01:00
zadam
657d01da95 fix 2020-01-12 23:05:31 +01:00
zadam
17e2627a34 more refactoring ... 2020-01-12 23:03:55 +01:00
zadam
bf7541bfb9 more refactoring ... 2020-01-12 20:15:05 +01:00
zadam
9d81bf030d tab row widgetizing 2020-01-12 19:05:09 +01:00
zadam
f25d735b9d further tab management moved to app context 2020-01-12 12:48:17 +01:00
zadam
4d16018f6c fixes 2020-01-12 12:37:44 +01:00
zadam
5e11840137 moved tab management to app context 2020-01-12 12:30:30 +01:00
zadam
61474defff widgetizing tree WIP 2020-01-12 11:15:23 +01:00
zadam
b12e38c231 widgetizing tree WIP 2020-01-12 10:35:33 +01:00
zadam
d1f679ab90 refactoring clipboard WIP 2020-01-12 09:57:28 +01:00
zadam
0f8a7bad06 moved tree initialization into the widget 2020-01-12 09:12:13 +01:00
zadam
9e031dcd60 start of the refactoring to widget system 2020-01-11 21:19:56 +01:00
zadam
51c3f98dde pane rename 2020-01-11 18:33:43 +01:00
zadam
a79a063d17 release 0.40.0-beta 2020-01-11 09:54:31 +01:00
zadam
5e91b1b5e0 package updates 2020-01-11 09:50:05 +01:00
zadam
7877443fb4 Merge branch 'stable' 2020-01-11 09:41:42 +01:00
zadam
759e47bfcf using included note should create a relation, closes #820 2020-01-10 21:41:00 +01:00
zadam
67bdffb27b expose text editor instance and method to add text to editor, closes #819 2020-01-10 20:10:17 +01:00
zadam
3386dace3b provide context menu in text editor also with disabled spellcheck 2020-01-10 19:56:27 +01:00
zadam
f3a2e2cbde Merge branch 'stable' 2020-01-08 21:39:17 +01:00
zadam
3cf3fc13b9 release 0.39.5 2020-01-08 21:01:24 +01:00
zadam
2b69abf8ab fix filter parser for >=, <=, *=* 2020-01-08 20:23:41 +01:00
zadam
3e49a7dbfa all consistency checkers have now fixers 2020-01-08 19:28:22 +01:00
zadam
4c7c3105e8 Merge branch 'stable'
# Conflicts:
#	src/services/notes.js
2020-01-07 22:29:54 +01:00
zadam
f782d2bef9 don't empty script area on save 2020-01-07 22:29:15 +01:00
zadam
ccaa9eae3a fix context submenus, closes #810 2020-01-07 20:53:41 +01:00
zadam
24c5388e0c protection against text note initialization race conditions 2020-01-07 19:48:26 +01:00
zadam
1cd2711097 Merge branch 'stable' 2020-01-05 20:02:19 +01:00
zadam
f0dfe7d552 release 0.39.4 2020-01-04 22:01:20 +01:00
zadam
3b8b4da149 task context progress fixes 2020-01-04 21:59:28 +01:00
zadam
2150619d62 activateNewNote does not reload whole tree anymore 2020-01-04 21:53:49 +01:00
zadam
acb76e0630 added notification to empty book notes otherwise they look suspiciously empty 2020-01-04 21:24:39 +01:00
zadam
fdb46f9329 fallback image saving without optimization will still compress image 2020-01-04 20:10:30 +01:00
zadam
ca587cccf6 book note type has automatically empty mime type 2020-01-04 19:34:01 +01:00
zadam
571772069a force SQLite to choose particular index for attribute search since it sometimes led to very inefficient query plans 2020-01-04 19:22:16 +01:00
zadam
79e7762c72 indent data notes 2020-01-04 18:44:54 +01:00
zadam
d025cfee1b empty note with just included note should be saved, closes #807 2020-01-04 13:22:07 +01:00
zadam
7793552443 fix display of show sidebar button 2020-01-04 10:05:03 +01:00
zadam
f377a84fa1 hide/show button z-index tweak 2020-01-04 09:21:42 +01:00
zadam
b8f2797abf better behavior of note info widget in tight width 2020-01-04 09:04:08 +01:00
zadam
54d89a9f47 allow configuring the time period before deleted notes are erased (and changed the default to 7 days) 2020-01-03 22:32:49 +01:00
zadam
1699646b39 fix undelete info messages 2020-01-03 21:32:41 +01:00
zadam
94a0a31f17 refactoring of tree handling to recommended fancytree 2020-01-03 21:15:45 +01:00
zadam
10219fb9dd Merge branch 'stable' 2020-01-03 20:13:13 +01:00
zadam
50431dd55a hide "show/hide sidebar" button in zen mode, fixes #805 2020-01-03 20:12:19 +01:00
zadam
17b23d92ef delete/undelete fixes 2020-01-03 13:41:44 +01:00
zadam
14f3c783f2 undelete note WIP 2020-01-03 13:14:43 +01:00
zadam
c1d0a1e07b undelete note WIP 2020-01-03 10:48:36 +01:00
zadam
1d3608b7bf fix recent note dialog for deleted notes 2020-01-03 09:04:38 +01:00
zadam
d0c655f66a fix removeAttribute to take into account attribute name, closes #804 2020-01-03 08:55:13 +01:00
zadam
ac75fd2ca3 focus and activate should work together 2020-01-02 19:07:50 +01:00
zadam
3b98428c8c change order of execution to mitigate race conditions 2020-01-02 19:03:54 +01:00
zadam
7d877d0fef release 0.39.3 2020-01-02 10:43:41 +01:00
zadam
cb79f2c7eb updated ckeditor build to support cuttonote 2020-01-02 10:38:29 +01:00
zadam
547a5714ae fancytree 2.34.0 2020-01-01 23:13:49 +01:00
zadam
82420fe5f6 reactivate "cut to note", closes #795 2020-01-01 22:59:51 +01:00
zadam
395913d1bb API docs update 2020-01-01 22:03:27 +01:00
zadam
f3a29b55ba remove @child🧒sorted label from calendar root in demo document since currently @sorted is added automatically in the code, closes #799 2020-01-01 20:58:59 +01:00
zadam
232321f3a4 fix searching multi-valued attributes, closes #800 2020-01-01 20:49:26 +01:00
zadam
51dddb0bbb fix scrolling behavior in firefox 2020-01-01 19:57:57 +01:00
zadam
8b9bf6e46f expand to note to be able to activate note 2020-01-01 19:46:27 +01:00
zadam
631a75deec release 0.39.2-beta 2019-12-30 19:48:54 +01:00
zadam
3f1d0e5872 small template refactoring 2019-12-30 19:46:48 +01:00
zadam
0fe91d0184 include note feature 2019-12-30 19:32:45 +01:00
zadam
2f711a12f8 added "include note" widget to text notes, WIP 2019-12-29 23:46:40 +01:00
zadam
64f32ba38f fix zen mode with new layout, closes #794 2019-12-29 20:48:24 +01:00
zadam
7db4859fb9 Merge remote-tracking branch 'origin/master' 2019-12-29 10:19:11 +01:00
zadam
eee9fcae5c set timeout for the initial sync seed request 2019-12-29 10:19:00 +01:00
zadam
9c4a976342 added some statistic scripts to demo document 2019-12-28 21:52:35 +01:00
zadam
e4a09c6207 fix left pane scrolling, closes #788 2019-12-28 21:37:13 +01:00
zadam
d467db2227 unify API for creating note links 2019-12-28 21:10:02 +01:00
zadam
b8d6ff0542 reset file inputs to allow reuploading the same file again 2019-12-28 19:29:52 +01:00
zadam
a9b8e65c9b force scrolling when width of the content overflows 2019-12-28 19:18:44 +01:00
zadam
bb8b563ece relaunch app after successful sync 2019-12-28 12:55:53 +01:00
zadam
05a8ffb944 small fixes 2019-12-28 10:28:12 +01:00
zadam
2502646a64 release 0.39.1-beta 2019-12-27 21:21:57 +01:00
zadam
3d95d69f80 styling hack for the design to look correct in both FF and chrome 2019-12-27 21:18:14 +01:00
zadam
df751f5d67 fix icon 2019-12-27 21:11:56 +01:00
zadam
4f06b6de78 fix registration of global shortcuts, fixes #786 2019-12-27 20:28:27 +01:00
zadam
d2177cd517 fix detection of desktop build in setup page, closes #787 2019-12-27 20:22:46 +01:00
zadam
0affcf5ad2 move electron-installer-debian to optional dependencies since it can't be installed on windows, #783 2019-12-26 10:02:55 +01:00
zadam
7a416b107b fix electron dep issue in the server version, closes #784 2019-12-25 19:38:28 +01:00
zadam
1ff124dab7 release 0.39.0-beta 2019-12-25 12:18:52 +01:00
zadam
4cb511bad0 fix import with style.css 2019-12-25 12:09:49 +01:00
zadam
73c8d145fa tar export fixes + added code block example to the demo document 2019-12-25 11:56:55 +01:00
zadam
ab79f24729 added content style to tar html export as well 2019-12-25 11:34:45 +01:00
zadam
cec71f65b3 load ckeditor content style for printing to have more similar look to the in-editor, #782 2019-12-25 10:59:45 +01:00
zadam
f75c008154 more sync recovery fixes 2019-12-24 17:49:44 +01:00
zadam
474baa7d95 sync recovery fixes 2019-12-24 16:00:31 +01:00
zadam
a155b6e8d5 create separate window for setup and then main window 2019-12-24 14:42:03 +01:00
zadam
229974e543 added option to enable native title bar (disabled by default) 2019-12-24 12:10:32 +01:00
zadam
6fc19bfb93 Merge branch 'stable' 2019-12-24 11:55:27 +01:00
zadam
ccaa108faa release 0.38.3 2019-12-24 10:51:51 +01:00
zadam
0a72383495 make opening new links from ckeditor more consistent for internal and external links, closes #779 2019-12-24 10:49:16 +01:00
zadam
d389100611 properly cleanup sidebar content after closing tab 2019-12-23 21:46:37 +01:00
zadam
ea7257a5b2 cleaned up experimental attribute pane 2019-12-23 21:13:56 +01:00
zadam
0ebc947fbd visual tweaks 2019-12-23 21:05:47 +01:00
zadam
c89514f9bb saving size and visibility state of the panes 2019-12-23 20:34:29 +01:00
zadam
e0368e395c removed left and right sidebar sizing options 2019-12-23 19:45:59 +01:00
zadam
6986c201dd removed hideTabRowForOneTab option 2019-12-23 19:39:48 +01:00
zadam
bcf163f8a1 css alignment 2019-12-23 17:12:17 +01:00
zadam
15aaead7b9 show/hide switcher for the sidebar 2019-12-23 16:48:34 +01:00
zadam
d29c5c4758 sidebar pulled outside of the tab content and added splitter 2019-12-23 15:50:24 +01:00
zadam
81e2baeee5 blur title buttons after clicking 2019-12-23 13:46:26 +01:00
zadam
4cececafc9 added title bar buttons 2019-12-23 13:34:54 +01:00
zadam
7c8e7a3f4b frameless design with tabs on top, split for left panel 2019-12-23 11:52:45 +01:00
zadam
613d5f93e8 convert css grid design to flex based one 2019-12-23 08:52:57 +01:00
zadam
4f5b23fbf8 tar file export now sets mtime to tar records based on utcDateCreated of a note, closes #487 2019-12-22 10:57:55 +01:00
zadam
a37b9cfc7b steel blue tweaks in demo document 2019-12-21 15:48:36 +01:00
zadam
2bc18bc214 use main border color for tab border 2019-12-21 15:37:51 +01:00
zadam
f31a998c5d path list contains a button to add a new path, closes #611 2019-12-21 13:55:13 +01:00
zadam
5552917533 Merge branch 'stable' 2019-12-21 13:39:12 +01:00
zadam
a9702aa6a2 fix empty checkbox visibility, closes #775 2019-12-21 12:37:24 +01:00
zadam
d1941cc650 Merge branch 'stable' 2019-12-20 21:00:30 +01:00
zadam
f98fa4098f clearer WS error message 2019-12-20 20:17:58 +01:00
zadam
5350496ed4 fix creating note from global ctrl+alt+p shortcut, closes #773 2019-12-20 20:13:21 +01:00
zadam
b62d79044a fix creating note from relation map, closes #771 2019-12-20 19:02:52 +01:00
zadam
0db3722ec2 package updates 2019-12-20 18:04:05 +01:00
zadam
d47403c0e7 implemented sync hash check recovery process 2019-12-18 22:58:30 +01:00
zadam
77311954a1 added sectors for contect check computation 2019-12-18 22:24:13 +01:00
zadam
b7cf4fe96b more general filter parsing 2019-12-18 20:51:48 +01:00
zadam
6d9b702d4c Merge branch 'master' into stable 2019-12-18 20:49:24 +01:00
zadam
6e4c30571c release 0.38.2 2019-12-18 20:21:06 +01:00
zadam
5988776b7e styling of active button 2019-12-18 20:16:11 +01:00
zadam
384da60953 fix regex for parsing out the filters 2019-12-18 19:56:53 +01:00
zadam
21fab412cb sync error mitigation 2019-12-17 22:17:03 +01:00
zadam
eb4dfbad92 sync fixes 2019-12-16 22:47:07 +01:00
zadam
aff9ce97ee small sync fixes 2019-12-16 22:00:44 +01:00
zadam
b0a3f828fb release 0.38.1-beta 2019-12-10 23:09:02 +01:00
zadam
76f5736255 update demo document 2019-12-10 23:08:50 +01:00
zadam
a82066d899 ability to define a keyboard shortcut for paste markdown, closes #761 2019-12-10 23:04:18 +01:00
zadam
45c5287d53 protection against note switching race conditions 2019-12-10 22:35:24 +01:00
zadam
dce54c7af3 run consistency checks on demand 2019-12-10 22:03:00 +01:00
zadam
ee15db0ae1 for title/content search does not make sense to search for protected notes 2019-12-10 21:40:53 +01:00
zadam
c48dbb0913 more debugging info for problems after sync 2019-12-10 21:31:24 +01:00
zadam
882ebdbd8f revert unicode regex since it's still not supported by ff 2019-12-09 23:08:32 +01:00
zadam
6f32d6fabe new mechanism to wait for sync after interaction with backend in Script API using api.waitForMaxKnownSyncId() 2019-12-09 23:07:45 +01:00
zadam
1e123f2390 sql console tweaks 2019-12-09 21:31:38 +01:00
zadam
b29155775e Merge branch 'stable'
# Conflicts:
#	package-lock.json
2019-12-09 20:23:22 +01:00
zadam
b821ed28fc refactor mention setup 2019-12-09 20:09:55 +01:00
zadam
fdb8959aa1 move mime types loading to avoid race conditions 2019-12-09 20:06:36 +01:00
zadam
7554cb057b support unicode characters in filters without quotes, fixes #757 2019-12-09 19:38:48 +01:00
zadam
fab959539a ability to run multiple queries (and get multiple result sets) from SQL console 2019-12-08 11:20:44 +01:00
zadam
afe44a6fe8 Merge branch 'stable' 2019-12-08 10:37:19 +01:00
zadam
7ed526beb7 fix clipper, closes #752 2019-12-08 09:41:31 +01:00
zadam
af695802e3 codeNotesMimeTypes option has not been created for new documents, fixes #755 2019-12-08 09:12:42 +01:00
zadam
156f040880 added "backend log" dialog 2019-12-05 21:25:36 +01:00
zadam
cf6f04defb better port error logging 2019-12-04 22:59:26 +01:00
zadam
a890b91079 release 0.38.0-beta 2019-12-04 22:40:31 +01:00
zadam
e0aabe4f9c fix docs 2019-12-04 22:40:20 +01:00
zadam
01cd9d8fb3 ckeditor 16 with code blocks plugin 2019-12-04 21:21:07 +01:00
zadam
af10f0f52a API docs updates 2019-12-03 22:53:17 +01:00
zadam
aa5ede5039 Merge branch 'stable' 2019-12-03 22:52:37 +01:00
zadam
21e77c83fc release 0.37.8 2019-12-03 22:31:20 +01:00
zadam
b0310e34e2 fix CSS loading from subdomain, #741 2019-12-03 22:13:02 +01:00
zadam
9812b9c272 (mostly) backwards compatible .createNote() backend API 2019-12-03 21:31:46 +01:00
zadam
92d5f91aa6 Merge branch 'stable' 2019-12-03 20:33:42 +01:00
zadam
b0368c7f17 Merge remote-tracking branch 'origin/master' 2019-12-03 20:32:01 +01:00
zadam
8e1f8c869b new @parentCount virtual search attribute, closes #738 2019-12-03 20:31:34 +01:00
nil0x42
4688cda493 [DOC] createNewNote(): Add missing render type (#740) 2019-12-03 19:49:27 +01:00
zadam
761c51069a use max-height for promoted attributes, #739 2019-12-03 19:47:53 +01:00
zadam
4dc285d84f serve favicon from relative path 2019-12-03 19:31:58 +01:00
zadam
0e2f8b5734 don't set date modified on erasing 2019-12-03 19:10:40 +01:00
zadam
a1402c7c66 release 0.37.7 2019-12-02 23:09:42 +01:00
zadam
6ba3e5ab7f backport fix from master to avoid doubled attributes inherited from multiple paths 2019-12-02 23:07:19 +01:00
zadam
f740e52ebf correctly respect label @disableVersioning
(cherry picked from commit dc063983ea)
2019-12-02 23:06:06 +01:00
zadam
e9454e4db7 fix SQL console scrolling
(cherry picked from commit 749bb90713)
2019-12-02 23:05:05 +01:00
zadam
749bb90713 fix SQL console scrolling 2019-12-02 23:04:22 +01:00
zadam
eb8c296e62 attempt to make updating clients via websocket faster 2019-12-02 22:27:06 +01:00
zadam
dc063983ea correctly respect label @disableVersioning 2019-12-02 20:21:52 +01:00
zadam
2595c3ac31 fix attribute loading CTE + don't duplicate attributes in case of cloning, fixes #735 2019-12-02 20:10:10 +01:00
zadam
9cb8bc5dd8 generate document now creates note revisions as well 2019-12-02 19:52:58 +01:00
zadam
3b690f5456 mini optimizations 2019-12-01 15:01:09 +01:00
zadam
7ef2e7769f added index to source_ids 2019-12-01 14:39:24 +01:00
zadam
4c07ac4c4c optimized edited notes on day query 2019-12-01 14:30:59 +01:00
zadam
35cd7f3261 optimization of recursive CTE attribute query 2019-12-01 13:29:39 +01:00
zadam
8c3e2e5eb7 better placement of slow query detection 2019-12-01 12:51:47 +01:00
zadam
d57caee0d3 drop unnecessary indexes 2019-12-01 12:38:07 +01:00
zadam
6e83980784 aligning frontend attributes API with the backend one 2019-12-01 12:22:22 +01:00
zadam
295af1f43e adding file length limit to tar export 2019-12-01 11:49:14 +01:00
zadam
ed2afe5c20 Merge branch 'stable' 2019-12-01 11:32:33 +01:00
zadam
bfc7570e14 don't convert MD to HTML if "import markdown as text" is not selected, closes #733 2019-12-01 11:27:22 +01:00
zadam
d9b9d730bb moving from inherited attribute queries to owned one where it makes sense 2019-12-01 11:10:04 +01:00
zadam
ba8a8dca7b adding more "owned" attribute methods to Note entity 2019-12-01 10:57:28 +01:00
zadam
29eb5a8435 Merge branch 'stable'
# Conflicts:
#	src/services/notes.js
#	src/tools/generate_document.js
2019-12-01 10:32:30 +01:00
zadam
5de92171a7 use owned attributes where it's a better fit 2019-12-01 10:28:05 +01:00
zadam
29c5e394ab generate document now creates also labels and relations 2019-12-01 10:20:18 +01:00
zadam
07b3d11fe5 fix generate new document script 2019-12-01 09:19:16 +01:00
zadam
67663fba50 fixes 2019-11-30 11:36:36 +01:00
zadam
995ebbf577 removed foreign keys PRAGMAs since foreign key constraints are not used anymore 2019-11-30 10:41:53 +01:00
zadam
d0e6be3e0c entity stat as part of consistency checks 2019-11-30 09:15:08 +01:00
zadam
01370a5968 fix anonymization according to latest schema 2019-11-29 21:42:24 +01:00
zadam
6c561b5764 rename API .createNote() to .createNewNote() to allow future backwards compatibility 2019-11-28 22:35:55 +01:00
zadam
2953f1bdb8 adding some standard classes for tree items 2019-11-28 22:05:27 +01:00
zadam
1c057cac75 small script API additions 2019-11-27 23:07:10 +01:00
zadam
0415efd33b create year/month/date labels/relation only when the note is created 2019-11-27 19:42:10 +01:00
zadam
e58dc829f5 bootstrap 4.4.0 2019-11-27 18:59:42 +01:00
zadam
90d10c1ff3 Merge branch 'stable'
# Conflicts:
#	package-lock.json
#	src/public/javascripts/services/tree_context_menu.js
#	src/services/import/enex.js
2019-11-27 18:54:49 +01:00
zadam
5b30291601 release 0.37.6 2019-11-26 22:50:08 +01:00
zadam
5193f073e9 if there's no updated field use created #725 2019-11-26 22:47:54 +01:00
zadam
6c7d8a9667 preserve dateCreated and dateModified in ENEX import, fixes #725 2019-11-26 22:02:21 +01:00
zadam
5e9bedd903 fixed sidebar switch in the options dialog 2019-11-26 20:46:49 +01:00
zadam
e712990c03 don't remove active tab after deleting note to preserve tab state, fixes #727 2019-11-26 20:42:34 +01:00
zadam
91487b338a make the context menu scrollable when exceeding total window height, closes #723 2019-11-26 19:55:52 +01:00
zadam
3ff24d53e5 fix decrypting note titles on the server installation, closes #724 2019-11-26 19:49:52 +01:00
zadam
94c904fb40 fix context menu over root, closes #726 2019-11-26 19:42:47 +01:00
zadam
5f258fbbbf release 0.37.5 2019-11-25 22:46:15 +01:00
zadam
56c7b7f5bd API docs update 2019-11-25 22:45:09 +01:00
zadam
bf9ad976b9 fixing non-root path issues, #404 2019-11-25 21:44:46 +01:00
zadam
19206d1e0d backend API note creation updates 2019-11-25 21:24:41 +01:00
zadam
420be6d8c6 fix demo document relation map and shortcuts before db initialization 2019-11-24 22:42:54 +01:00
zadam
dbd2040bee shortcut fixes 2019-11-24 22:15:33 +01:00
zadam
1e979d71c7 changed note selection in tree using keyboard - now only sibling nodes are selected 2019-11-24 22:01:10 +01:00
zadam
6bbd4c59bc reduce flicker of "create new day note" 2019-11-24 21:40:50 +01:00
zadam
3a54d00e2b added shortcut filter in the options dialog 2019-11-24 20:20:13 +01:00
zadam
499c9a7381 separated some context menu items into "advanced" 2019-11-24 20:00:54 +01:00
zadam
cd139bdd76 note can be activated through 'keyboardShortcut' label 2019-11-24 18:32:18 +01:00
zadam
60c3b5cccc Merge remote-tracking branch 'origin/master' 2019-11-24 14:10:19 +01:00
zadam
540f9f933a update demo.tar with correct system links 2019-11-24 14:10:11 +01:00
Benoit Stahl
a59943094e this input is text (#719) 2019-11-24 10:44:09 +01:00
zadam
c400a7143c reorganization of shortcuts in the options 2019-11-24 10:40:18 +01:00
zadam
1f37d00e42 updating also shortcuts in element titles 2019-11-24 10:14:30 +01:00
zadam
d21e824343 binding remaining actions 2019-11-24 09:50:19 +01:00
zadam
ff3f0ee0a0 Merge branch 'stable' 2019-11-23 23:07:07 +01:00
zadam
01ff34b5d4 moving edit branch prefix, search in subtree and toggle note hoisting to global entrypoints instead of being tree specific 2019-11-23 23:06:25 +01:00
zadam
0cde7ede24 updated note menu with current shortcuts 2019-11-23 22:56:35 +01:00
zadam
92cb723d0c updated inapp help with current shortcuts 2019-11-23 22:17:08 +01:00
zadam
e4bec265c1 system links (internal, image, relation map) should follow camelCase convention used for other attributes 2019-11-23 20:54:49 +01:00
zadam
434d8ef48c added extra autofixers for completely missing note_contents or note_revision_contents row 2019-11-23 19:56:52 +01:00
zadam
c8ba07a4ae fix migration script in case of not fully consistent database (missing note_contents for note). closes #717 2019-11-23 11:13:57 +01:00
zadam
4da6234911 Merge branch 'stable' 2019-11-22 22:59:08 +01:00
zadam
38e7649ac3 release 0.37.4 2019-11-22 22:38:03 +01:00
zadam
ff0245f05f dynamically translating kbd based on actions 2019-11-22 22:35:59 +01:00
zadam
7a2c7edd7e allow multiple instances of @in operator, closes #716 2019-11-22 21:17:46 +01:00
zadam
98c81faedb Merge branch 'stable' 2019-11-22 20:36:47 +01:00
zadam
cfb850acb2 download fixes for the sub-domain web deployment 2019-11-22 20:35:17 +01:00
zadam
a16aaf7a81 fix setup on non-root paths #404 2019-11-22 20:24:49 +01:00
zadam
465c3b87a7 tree keyboard shortcuts 2019-11-21 22:24:07 +01:00
zadam
0e5028acd3 support global shortcuts with global: prefix 2019-11-21 21:12:07 +01:00
zadam
00c295e4bf upgrade to electron 8.0.0-beta.3 2019-11-21 19:36:34 +01:00
zadam
7084ed4fb1 Merge branch 'stable' 2019-11-20 23:11:21 +01:00
zadam
587134c2f8 separators and fixes 2019-11-20 23:10:41 +01:00
zadam
5fac2c7633 saving options keyboard shortcuts 2019-11-20 22:48:32 +01:00
zadam
08a518479b keyboard shortcuts options pane 2019-11-20 21:35:18 +01:00
zadam
522f71cb91 fix tree clipboard 2019-11-20 19:24:23 +01:00
zadam
bcdfb47939 Merge branch 'stable' 2019-11-19 23:34:35 +01:00
zadam
667471e7bb toggle zen mode in the global menu 2019-11-19 23:33:07 +01:00
zadam
d357943ebb release 0.37.3 2019-11-19 23:05:54 +01:00
zadam
07043fb177 switch search in subtree to ctrl+shift+s to stay consistent with ctrl+s 2019-11-19 23:04:43 +01:00
zadam
3c4ec7fe1a keyboard shortcuts WIP 2019-11-19 23:02:54 +01:00
zadam
1f8d382b1f added "search in subtree" context menu, #534 2019-11-19 21:11:20 +01:00
zadam
4bd7438fca shortcuts WIP 2019-11-19 20:53:04 +01:00
zadam
0ae9c8da17 Merge branch 'stable' 2019-11-19 19:32:49 +01:00
zadam
61e8cbbcba add log for content hash failures 2019-11-19 19:07:14 +01:00
zadam
86c5dd6494 fix recent changes, closes #713 2019-11-19 19:02:16 +01:00
zadam
f921562346 Merge branch 'm38'
# Conflicts:
#	docs/backend_api/Note.html
#	docs/frontend_api/NoteShort.html
#	src/services/import/enex.js
2019-11-18 23:26:29 +01:00
zadam
c5acb7fc9b release 0.37.2 2019-11-18 23:04:09 +01:00
zadam
643d9077fc configurable keyboard shortcuts WIP 2019-11-18 23:01:31 +01:00
zadam
b4709e8ee5 "distraction free mode" renamed to more standard "zen mode" 2019-11-18 19:32:27 +01:00
zadam
a1181623b7 hide sidebar button styling 2019-11-17 11:58:05 +01:00
zadam
73a6c66379 header styling changes 2019-11-17 11:39:06 +01:00
zadam
1d5daa8dfd action icons now have hover border as well 2019-11-17 11:30:11 +01:00
zadam
834e1f7253 fix activating tab when app was closed last time with "new tab" 2019-11-17 10:24:06 +01:00
zadam
c141f4b2c0 tab row styling change 2019-11-17 10:22:26 +01:00
zadam
1a87190f43 added IN operator to search, closes #534 2019-11-17 09:07:35 +01:00
zadam
a1262aaaf3 release 0.37.1-beta 2019-11-16 19:09:52 +01:00
zadam
1838f097e5 added getAllNotePaths, fixes #708 2019-11-16 19:07:32 +01:00
zadam
95d0ad1cad simpler ENEX parsing 2019-11-16 18:13:00 +01:00
zadam
767aaa18f4 fix OPML import 2019-11-16 18:04:13 +01:00
zadam
8a7228146c simpler ENEX parsing 2019-11-16 17:56:49 +01:00
zadam
f9b5e473f2 added missing options 2019-11-16 17:03:18 +01:00
zadam
3d294c5163 refactoring of note creation APIs WIP 2019-11-16 17:00:22 +01:00
zadam
60231de0ed refactoring of note creation APIs WIP 2019-11-16 12:28:47 +01:00
zadam
35e9df6170 fixes in the handling of cssClass and iconClass when working with newly created / single note 2019-11-16 11:23:28 +01:00
zadam
13c0411533 refactoring of note creation APIs WIP 2019-11-16 11:09:52 +01:00
zadam
c5e040c4a4 updated demo document with icon classes 2019-11-16 09:57:19 +01:00
zadam
e00ab5dbf9 new "iconClass" property on note_short, now together with cssClass respecting template relationship, #707 2019-11-16 08:59:27 +01:00
zadam
95c37cfdd1 release 0.37.0-beta 2019-11-14 23:12:28 +01:00
zadam
de02e9e889 redesign of createNote APIs, WIP 2019-11-14 23:10:56 +01:00
zadam
e143becb7a styling changes 2019-11-14 20:27:28 +01:00
zadam
c0eb30472e note and note_content has been needlesly updated when utcDateModified has been the same 2019-11-13 22:33:19 +01:00
zadam
8b320bb85f force note sync now really forces update on other instances by updating utcDateModified 2019-11-13 22:32:14 +01:00
zadam
d93b9b8a23 force note sync now syncs also note revision contents and attributes 2019-11-13 21:53:04 +01:00
zadam
69b53fdfb3 expander styling again 2019-11-13 21:46:52 +01:00
zadam
920d71a5a6 small fixes 2019-11-13 20:28:14 +01:00
zadam
d4a277321c styling of mobile expanders 2019-11-13 19:38:34 +01:00
zadam
4068691078 better expander positioning 2019-11-12 23:02:47 +01:00
zadam
86d7e139a4 correctly handle 0 notes to erase 2019-11-12 22:26:25 +01:00
zadam
44add751b2 fix horizontal wrap of pre elements 2019-11-12 22:22:49 +01:00
zadam
c49c69f824 fix migration script 2019-11-12 21:32:35 +01:00
zadam
7bd1d8feb4 fix setting isErased after note migration 2019-11-11 23:37:46 +01:00
zadam
4ba7e74b58 fix note revision's isErased initial value after migration 2019-11-11 23:26:46 +01:00
zadam
4cda661c1b add move to dialog 2019-11-11 22:57:51 +01:00
zadam
5b4a2bd71c Merge branch 'stable'
# Conflicts:
#	src/entities/note.js
2019-11-11 20:43:00 +01:00
zadam
a808e12d31 fix .setAttribute in stable, #703 2019-11-11 20:42:03 +01:00
zadam
1f3f9a4037 release 0.36.5 2019-11-10 22:20:54 +01:00
zadam
77ac8df1e6 keyboard shortcut ctrl+shift+c for "clone to..." dialog 2019-11-10 22:19:22 +01:00
zadam
b53e2a3570 clone to notes now has overview of notes to clone and is available from context menu 2019-11-10 22:06:43 +01:00
zadam
7539e6a616 Merge branch 'stable'
# Conflicts:
#	src/services/consistency_checks.js
2019-11-10 21:35:11 +01:00
zadam
b5a0cadcf4 fix showing up of render note help view if no renderNote relations have been found 2019-11-10 21:34:15 +01:00
zadam
b8db842788 added frontend API methods to refresh tabs 2019-11-10 19:34:15 +01:00
zadam
dea5195223 fix setNoteToParent and deprecate it 2019-11-10 19:29:51 +01:00
zadam
c3ea2ae1b3 added new auto fixers to consistency checks 2019-11-10 14:16:12 +01:00
zadam
1fddd6f318 added non-autoFix variants to fixer methods 2019-11-10 11:43:33 +01:00
zadam
466a4802b6 introduced 'autoFixConsistencyIssues' option to control whether consistency issues should be auto fixed or note 2019-11-10 11:25:41 +01:00
zadam
8f2d2b189c Merge branch 'stable' 2019-11-10 11:24:08 +01:00
zadam
0837cabb41 fix module name for prompt dialog, fixes #698 2019-11-10 10:10:49 +01:00
zadam
5646218be8 release 0.36.4 2019-11-09 21:19:34 +01:00
zadam
169551c6a8 note revisions as a bootstrap list instead of <select> 2019-11-09 20:59:49 +01:00
zadam
3a1c80c189 refactoring of legacy js events 2019-11-09 17:45:22 +01:00
zadam
31bcc037f1 refactoring of legacy js events 2019-11-09 17:39:48 +01:00
zadam
179d530ea9 note revision sync fix 2019-11-09 16:51:51 +01:00
zadam
da92809299 Merge branch 'stable' 2019-11-09 15:33:04 +01:00
zadam
c2ebd4b308 show notes in a book including their prefix, closes #695 2019-11-09 15:31:47 +01:00
zadam
9b24ae0600 erasing note revisions 2019-11-09 15:21:14 +01:00
zadam
7cd75cebfc fix icons in context menu 2019-11-09 13:32:06 +01:00
zadam
664485ccd5 file revisions preview 2019-11-09 13:01:05 +01:00
zadam
60ac1a04f4 uploading new file revisions 2019-11-09 11:58:52 +01:00
zadam
7c7beb5502 added contentLength to note entity 2019-11-09 09:36:08 +01:00
zadam
5aa5ec3af1 downloading note revisions 2019-11-09 08:53:13 +01:00
zadam
58a857cf79 note revisions for images, WIP 2019-11-08 23:09:57 +01:00
zadam
712f67e983 uploading new image revisions, WIP 2019-11-08 22:34:30 +01:00
zadam
3149dff880 Merge branch 'stable' 2019-11-08 19:11:18 +01:00
zadam
d58e98e361 fix not being able to rename a note when in auto-book mode, closes #694 2019-11-07 23:25:58 +01:00
zadam
744855d4f5 linking notes through CKEditor mentiones 2019-11-07 22:43:01 +01:00
zadam
8a9f2ff1d8 Merge remote-tracking branch 'origin/master' 2019-11-07 20:09:57 +01:00
zadam
f539aedd25 Merge branch 'stable' 2019-11-07 20:09:40 +01:00
zadam
05547845cb including confirm and prompt dialog to mobile frontend to allow deleting notes, closes #689 2019-11-07 19:58:40 +01:00
zadam
9b905563c3 fix ensureNoteIsAbsentFromParent, closes #691 2019-11-07 19:51:38 +01:00
zadam
894c888d87 including ckeditor mentions plugin for easy linking 2019-11-06 22:58:32 +01:00
zadam
34d4274032 separate cloning dialog 2019-11-05 23:11:25 +01:00
zadam
b685d7ffb5 simplification of "add link" dialog 2019-11-05 22:40:44 +01:00
zadam
d87c469fbb Merge branch 'stable' 2019-11-05 22:28:27 +01:00
zadam
d8730f1722 release 0.36.3 2019-11-05 21:49:16 +01:00
zadam
72fda89360 fix loading of the search note results 2019-11-05 21:47:22 +01:00
zadam
7075842954 expose bindGlobalShortcut to frontend script API 2019-11-05 21:26:54 +01:00
zadam
a2c78e2c5c disabling link map animation, closes #684 2019-11-05 20:59:20 +01:00
zadam
9c9ef1c7b4 added more careful handling of search note operations, fixes #683 2019-11-04 22:41:06 +01:00
zadam
df40accdd4 fix bug when context menu sometimes does not show up, closes #682 2019-11-04 20:20:21 +01:00
zadam
b67aa99b86 small fixes in context menu item visibility 2019-11-04 19:37:03 +01:00
zadam
5ecb881cec options template is handled directly in the option classes which fixes multiple binding of elements inside options dialog 2019-11-03 19:06:22 +01:00
zadam
fcb6a06d68 fix refreshing notes after import / delete
(cherry picked from commit 5b5ab0b044)
2019-11-03 18:34:07 +01:00
zadam
5b5ab0b044 fix refreshing notes after import / delete 2019-11-03 18:33:43 +01:00
zadam
ab04bde5fb options UI for image quality 2019-11-03 17:59:11 +01:00
zadam
c9e4261930 options for basic image quality control 2019-11-03 11:43:04 +01:00
zadam
9ea8209d4e separating some options to "startup" options which allows not creating new DB version for each new option 2019-11-03 10:43:40 +01:00
zadam
56e50cc850 boxicons 2019-11-02 13:50:17 +01:00
zadam
fc87bcf10c using boxicons instead of jam icons WIP 2019-11-02 12:17:00 +01:00
zadam
b471d51cb4 reloading of notes in tree cache when attribute changes 2019-11-02 08:04:22 +01:00
zadam
b7b583ff04 use decryptString() 2019-11-02 07:50:23 +01:00
zadam
475fddeec1 fixes 2019-11-01 23:05:33 +01:00
zadam
2af86927b0 added flag for the erased notes 2019-11-01 22:09:51 +01:00
zadam
2e58e32112 note revision sync and other fixes 2019-11-01 20:00:56 +01:00
zadam
5c05963bd9 Merge branch 'stable' 2019-11-01 19:21:55 +01:00
zadam
4e5e3e4675 note revisions changes WIP 2019-11-01 19:21:48 +01:00
zadam
cf53cbf1dd moving out note revision content into separate table, refactoring, WIP 2019-10-31 21:58:34 +01:00
553 changed files with 53826 additions and 29437 deletions

3
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,3 @@
# These are supported funding model platforms
github: [zadam]

1
.gitignore vendored
View File

@@ -1,6 +1,7 @@
.DS_Store
node_modules/
dist/
src/public/app-dist/
npm-debug.log
yarn-error.log
*.db

3
.idea/.gitignore generated vendored
View File

@@ -2,4 +2,5 @@
/workspace.xml
# Datasource local storage ignored files
/dataSources.local.xml
/dataSources.local.xml
/dataSources/

7
.idea/dataSources.xml generated
View File

@@ -1,14 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="document.db" uuid="a2c75661-f9e2-478f-a69f-6a9409e69997">
<data-source source="LOCAL" name="document.db" uuid="4e69c96a-8a2b-43f5-9b40-d1608f75f7a4">
<driver-ref>sqlite.xerial</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/../trilium-data/document.db</jdbc-url>
<driver-properties>
<property name="enable_load_extension" value="true" />
</driver-properties>
<jdbc-url>jdbc:sqlite:$USER_HOME$/trilium-data/document.db</jdbc-url>
</data-source>
</component>
</project>

View File

@@ -1,590 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<dataSource name="document.db">
<database-model serializer="dbm" dbms="SQLITE" family-id="SQLITE" format-version="4.16">
<root id="1">
<ServerVersion>3.25.1</ServerVersion>
</root>
<schema id="2" parent="1" name="main">
<Current>1</Current>
</schema>
<collation id="3" parent="1" name="BINARY"/>
<collation id="4" parent="1" name="NOCASE"/>
<collation id="5" parent="1" name="RTRIM"/>
<table id="6" parent="2" name="api_tokens"/>
<table id="7" parent="2" name="attributes"/>
<table id="8" parent="2" name="branches"/>
<table id="9" parent="2" name="event_log"/>
<table id="10" parent="2" name="note_contents"/>
<table id="11" parent="2" name="note_revisions"/>
<table id="12" parent="2" name="notes"/>
<table id="13" parent="2" name="options"/>
<table id="14" parent="2" name="recent_notes"/>
<table id="15" parent="2" name="source_ids"/>
<table id="16" parent="2" name="sqlite_master">
<System>1</System>
</table>
<table id="17" parent="2" name="sqlite_sequence">
<System>1</System>
</table>
<table id="18" parent="2" name="sync"/>
<column id="19" parent="6" name="apiTokenId">
<Position>1</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="20" parent="6" name="token">
<Position>2</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="21" parent="6" name="utcDateCreated">
<Position>3</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="22" parent="6" name="isDeleted">
<Position>4</Position>
<DataType>INT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>0</DefaultExpression>
</column>
<column id="23" parent="6" name="hash">
<Position>5</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&quot;&quot;</DefaultExpression>
</column>
<index id="24" parent="6" name="sqlite_autoindex_api_tokens_1">
<NameSurrogate>1</NameSurrogate>
<ColNames>apiTokenId</ColNames>
<Unique>1</Unique>
</index>
<key id="25" parent="6">
<ColNames>apiTokenId</ColNames>
<Primary>1</Primary>
<UnderlyingIndexName>sqlite_autoindex_api_tokens_1</UnderlyingIndexName>
</key>
<column id="26" parent="7" name="attributeId">
<Position>1</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="27" parent="7" name="noteId">
<Position>2</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="28" parent="7" name="type">
<Position>3</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="29" parent="7" name="name">
<Position>4</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="30" parent="7" name="value">
<Position>5</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&apos;&apos;</DefaultExpression>
</column>
<column id="31" parent="7" name="position">
<Position>6</Position>
<DataType>INT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>0</DefaultExpression>
</column>
<column id="32" parent="7" name="utcDateCreated">
<Position>7</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="33" parent="7" name="utcDateModified">
<Position>8</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="34" parent="7" name="isDeleted">
<Position>9</Position>
<DataType>INT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="35" parent="7" name="hash">
<Position>10</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&quot;&quot;</DefaultExpression>
</column>
<column id="36" parent="7" name="isInheritable">
<Position>11</Position>
<DataType>int|0s</DataType>
<DefaultExpression>0</DefaultExpression>
</column>
<index id="37" parent="7" name="sqlite_autoindex_attributes_1">
<NameSurrogate>1</NameSurrogate>
<ColNames>attributeId</ColNames>
<Unique>1</Unique>
</index>
<index id="38" parent="7" name="IDX_attributes_noteId_index">
<ColNames>noteId</ColNames>
</index>
<index id="39" parent="7" name="IDX_attributes_name_value">
<ColNames>name
value</ColNames>
</index>
<index id="40" parent="7" name="IDX_attributes_name_index">
<ColNames>name</ColNames>
</index>
<index id="41" parent="7" name="IDX_attributes_value_index">
<ColNames>value</ColNames>
</index>
<key id="42" parent="7">
<ColNames>attributeId</ColNames>
<Primary>1</Primary>
<UnderlyingIndexName>sqlite_autoindex_attributes_1</UnderlyingIndexName>
</key>
<column id="43" parent="8" name="branchId">
<Position>1</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="44" parent="8" name="noteId">
<Position>2</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="45" parent="8" name="parentNoteId">
<Position>3</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="46" parent="8" name="notePosition">
<Position>4</Position>
<DataType>INTEGER|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="47" parent="8" name="prefix">
<Position>5</Position>
<DataType>TEXT|0s</DataType>
</column>
<column id="48" parent="8" name="isExpanded">
<Position>6</Position>
<DataType>BOOLEAN|0s</DataType>
</column>
<column id="49" parent="8" name="isDeleted">
<Position>7</Position>
<DataType>INTEGER|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>0</DefaultExpression>
</column>
<column id="50" parent="8" name="utcDateModified">
<Position>8</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="51" parent="8" name="utcDateCreated">
<Position>9</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="52" parent="8" name="hash">
<Position>10</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&quot;&quot;</DefaultExpression>
</column>
<index id="53" parent="8" name="sqlite_autoindex_branches_1">
<NameSurrogate>1</NameSurrogate>
<ColNames>branchId</ColNames>
<Unique>1</Unique>
</index>
<index id="54" parent="8" name="IDX_branches_noteId_parentNoteId">
<ColNames>noteId
parentNoteId</ColNames>
</index>
<index id="55" parent="8" name="IDX_branches_noteId">
<ColNames>noteId</ColNames>
</index>
<index id="56" parent="8" name="IDX_branches_parentNoteId">
<ColNames>parentNoteId</ColNames>
</index>
<key id="57" parent="8">
<ColNames>branchId</ColNames>
<Primary>1</Primary>
<UnderlyingIndexName>sqlite_autoindex_branches_1</UnderlyingIndexName>
</key>
<column id="58" parent="9" name="eventId">
<Position>1</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="59" parent="9" name="noteId">
<Position>2</Position>
<DataType>TEXT|0s</DataType>
</column>
<column id="60" parent="9" name="comment">
<Position>3</Position>
<DataType>TEXT|0s</DataType>
</column>
<column id="61" parent="9" name="utcDateCreated">
<Position>4</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<index id="62" parent="9" name="sqlite_autoindex_event_log_1">
<NameSurrogate>1</NameSurrogate>
<ColNames>eventId</ColNames>
<Unique>1</Unique>
</index>
<key id="63" parent="9">
<ColNames>eventId</ColNames>
<Primary>1</Primary>
<UnderlyingIndexName>sqlite_autoindex_event_log_1</UnderlyingIndexName>
</key>
<column id="64" parent="10" name="noteId">
<Position>1</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="65" parent="10" name="content">
<Position>2</Position>
<DataType>TEXT|0s</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="66" parent="10" name="hash">
<Position>3</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&quot;&quot;</DefaultExpression>
</column>
<column id="67" parent="10" name="utcDateModified">
<Position>4</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<index id="68" parent="10" name="sqlite_autoindex_note_contents_1">
<NameSurrogate>1</NameSurrogate>
<ColNames>noteId</ColNames>
<Unique>1</Unique>
</index>
<key id="69" parent="10">
<ColNames>noteId</ColNames>
<Primary>1</Primary>
<UnderlyingIndexName>sqlite_autoindex_note_contents_1</UnderlyingIndexName>
</key>
<column id="70" parent="11" name="noteRevisionId">
<Position>1</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="71" parent="11" name="noteId">
<Position>2</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="72" parent="11" name="title">
<Position>3</Position>
<DataType>TEXT|0s</DataType>
</column>
<column id="73" parent="11" name="content">
<Position>4</Position>
<DataType>TEXT|0s</DataType>
</column>
<column id="74" parent="11" name="isProtected">
<Position>5</Position>
<DataType>INT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>0</DefaultExpression>
</column>
<column id="75" parent="11" name="utcDateModifiedFrom">
<Position>6</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="76" parent="11" name="utcDateModifiedTo">
<Position>7</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="77" parent="11" name="dateModifiedFrom">
<Position>8</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="78" parent="11" name="dateModifiedTo">
<Position>9</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="79" parent="11" name="type">
<Position>10</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&apos;&apos;</DefaultExpression>
</column>
<column id="80" parent="11" name="mime">
<Position>11</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&apos;&apos;</DefaultExpression>
</column>
<column id="81" parent="11" name="hash">
<Position>12</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&quot;&quot;</DefaultExpression>
</column>
<index id="82" parent="11" name="sqlite_autoindex_note_revisions_1">
<NameSurrogate>1</NameSurrogate>
<ColNames>noteRevisionId</ColNames>
<Unique>1</Unique>
</index>
<index id="83" parent="11" name="IDX_note_revisions_noteId">
<ColNames>noteId</ColNames>
</index>
<index id="84" parent="11" name="IDX_note_revisions_dateModifiedFrom">
<ColNames>utcDateModifiedFrom</ColNames>
</index>
<index id="85" parent="11" name="IDX_note_revisions_dateModifiedTo">
<ColNames>utcDateModifiedTo</ColNames>
</index>
<key id="86" parent="11">
<ColNames>noteRevisionId</ColNames>
<Primary>1</Primary>
<UnderlyingIndexName>sqlite_autoindex_note_revisions_1</UnderlyingIndexName>
</key>
<column id="87" parent="12" name="noteId">
<Position>1</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="88" parent="12" name="title">
<Position>2</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&quot;note&quot;</DefaultExpression>
</column>
<column id="89" parent="12" name="isProtected">
<Position>3</Position>
<DataType>INT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>0</DefaultExpression>
</column>
<column id="90" parent="12" name="type">
<Position>4</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&apos;text&apos;</DefaultExpression>
</column>
<column id="91" parent="12" name="mime">
<Position>5</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&apos;text/html&apos;</DefaultExpression>
</column>
<column id="92" parent="12" name="hash">
<Position>6</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&quot;&quot;</DefaultExpression>
</column>
<column id="93" parent="12" name="isDeleted">
<Position>7</Position>
<DataType>INT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>0</DefaultExpression>
</column>
<column id="94" parent="12" name="dateCreated">
<Position>8</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="95" parent="12" name="dateModified">
<Position>9</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="96" parent="12" name="utcDateCreated">
<Position>10</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="97" parent="12" name="utcDateModified">
<Position>11</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<index id="98" parent="12" name="sqlite_autoindex_notes_1">
<NameSurrogate>1</NameSurrogate>
<ColNames>noteId</ColNames>
<Unique>1</Unique>
</index>
<key id="99" parent="12">
<ColNames>noteId</ColNames>
<Primary>1</Primary>
<UnderlyingIndexName>sqlite_autoindex_notes_1</UnderlyingIndexName>
</key>
<column id="100" parent="13" name="name">
<Position>1</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="101" parent="13" name="value">
<Position>2</Position>
<DataType>TEXT|0s</DataType>
</column>
<column id="102" parent="13" name="isSynced">
<Position>3</Position>
<DataType>INTEGER|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>0</DefaultExpression>
</column>
<column id="103" parent="13" name="hash">
<Position>4</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&quot;&quot;</DefaultExpression>
</column>
<column id="104" parent="13" name="utcDateCreated">
<Position>5</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="105" parent="13" name="utcDateModified">
<Position>6</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<index id="106" parent="13" name="sqlite_autoindex_options_1">
<NameSurrogate>1</NameSurrogate>
<ColNames>name</ColNames>
<Unique>1</Unique>
</index>
<key id="107" parent="13">
<ColNames>name</ColNames>
<Primary>1</Primary>
<UnderlyingIndexName>sqlite_autoindex_options_1</UnderlyingIndexName>
</key>
<column id="108" parent="14" name="noteId">
<Position>1</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="109" parent="14" name="notePath">
<Position>2</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="110" parent="14" name="hash">
<Position>3</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&quot;&quot;</DefaultExpression>
</column>
<column id="111" parent="14" name="utcDateCreated">
<Position>4</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="112" parent="14" name="isDeleted">
<Position>5</Position>
<DataType>INT|0s</DataType>
</column>
<index id="113" parent="14" name="sqlite_autoindex_recent_notes_1">
<NameSurrogate>1</NameSurrogate>
<ColNames>noteId</ColNames>
<Unique>1</Unique>
</index>
<key id="114" parent="14">
<ColNames>noteId</ColNames>
<Primary>1</Primary>
<UnderlyingIndexName>sqlite_autoindex_recent_notes_1</UnderlyingIndexName>
</key>
<column id="115" parent="15" name="sourceId">
<Position>1</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="116" parent="15" name="utcDateCreated">
<Position>2</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<index id="117" parent="15" name="sqlite_autoindex_source_ids_1">
<NameSurrogate>1</NameSurrogate>
<ColNames>sourceId</ColNames>
<Unique>1</Unique>
</index>
<key id="118" parent="15">
<ColNames>sourceId</ColNames>
<Primary>1</Primary>
<UnderlyingIndexName>sqlite_autoindex_source_ids_1</UnderlyingIndexName>
</key>
<column id="119" parent="16" name="type">
<Position>1</Position>
<DataType>text|0s</DataType>
</column>
<column id="120" parent="16" name="name">
<Position>2</Position>
<DataType>text|0s</DataType>
</column>
<column id="121" parent="16" name="tbl_name">
<Position>3</Position>
<DataType>text|0s</DataType>
</column>
<column id="122" parent="16" name="rootpage">
<Position>4</Position>
<DataType>int|0s</DataType>
</column>
<column id="123" parent="16" name="sql">
<Position>5</Position>
<DataType>text|0s</DataType>
</column>
<column id="124" parent="17" name="name">
<Position>1</Position>
</column>
<column id="125" parent="17" name="seq">
<Position>2</Position>
</column>
<column id="126" parent="18" name="id">
<Position>1</Position>
<DataType>INTEGER|0s</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>1</SequenceIdentity>
</column>
<column id="127" parent="18" name="entityName">
<Position>2</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="128" parent="18" name="entityId">
<Position>3</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="129" parent="18" name="sourceId">
<Position>4</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="130" parent="18" name="utcSyncDate">
<Position>5</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<index id="131" parent="18" name="IDX_sync_entityName_entityId">
<ColNames>entityName
entityId</ColNames>
<Unique>1</Unique>
</index>
<index id="132" parent="18" name="IDX_sync_utcSyncDate">
<ColNames>utcSyncDate</ColNames>
</index>
<key id="133" parent="18">
<ColNames>id</ColNames>
<Primary>1</Primary>
</key>
</database-model>
</dataSource>

View File

@@ -1,2 +0,0 @@
#n:main
!<md> [0, 0, null, null, -2147483648, -2147483648]

View File

@@ -1,6 +1,7 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="JSUnfilteredForInLoop" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
<option name="processCode" value="true" />
<option name="processLiterals" value="true" />

1
.idea/vcs.xml generated
View File

@@ -2,5 +2,6 @@
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
</component>
</project>

18
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,18 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "start-server",
"skipFiles": [
"<node_internals>/**"
],
"env": {
"TRILIUM_ENV": "dev"
},
"outputCapture": "std",
"program": "${workspaceFolder}/src/www"
}
]
}

View File

@@ -1,4 +1,4 @@
FROM node:12.13.0-alpine
FROM node:12.16.3-alpine
# Create app directory
WORKDIR /usr/src/app

View File

@@ -8,7 +8,7 @@ Trilium Notes is a hierarchical note taking application with focus on building l
## Features
* Notes can be arranged into arbitrarily deep tree. Single note can be placed into multiple places in the tree (see [cloning](https://github.com/zadam/trilium/wiki/Cloning-notes))
* Rich WYSIWYG note editing including e.g. tables and images with markdown [autoformat](https://github.com/zadam/trilium/wiki/Text-editor#autoformat)
* Rich WYSIWYG note editing including e.g. tables and images with markdown [autoformat](https://github.com/zadam/trilium/wiki/Text-notes#autoformat)
* Support for editing [notes with source code](https://github.com/zadam/trilium/wiki/Code-notes), including syntax highlighting
* Fast and easy [navigation between notes](https://github.com/zadam/trilium/wiki/Note-navigation), full text search and [note hoisting](https://github.com/zadam/trilium/wiki/Note-hoisting)
* Seamless [note versioning](https://github.com/zadam/trilium/wiki/Note-revisions)

13
SECURITY.md Normal file
View File

@@ -0,0 +1,13 @@
# Security Policy
## Supported Versions
In the (still active) 0.X phase of the project only the latest stable minor release is getting bugfixes (including security ones).
So e.g. if the latest stable version is 0.42.3 and the latest beta version is 0.43.0-beta, then 0.42 line will still get security fixes but older versions (like 0.41.X) won't get any fixes.
Description above is a general rule and may be altered on case by case basis.
## Reporting a Vulnerability
You can report low severity vulnerabilities as GitHub issues, more severe vulnerabilities should be reported to the email zadam.apps@gmail.com

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -7,15 +7,11 @@ then
./bin/copy-trilium.sh $SRC_DIR
fi
rm -r $SRC_DIR/src/public/app-dist/*.mobile.*
echo "Copying required linux-x64 binaries"
rm -r $SRC_DIR/node_modules/sqlite3/lib/binding/*
rm -r $SRC_DIR/node_modules/pngquant-bin/vendor/*
rm -r $SRC_DIR/node_modules/@felixrieseberg/spellchecker/build/Release/*
cp -r bin/deps/linux-x64/sqlite/* $SRC_DIR/node_modules/sqlite3/lib/binding/
cp bin/deps/linux-x64/image/pngquant $SRC_DIR/node_modules/pngquant-bin/vendor/
cp bin/deps/linux-x64/spellchecker/* $SRC_DIR/node_modules/@felixrieseberg/spellchecker/build/Release/
cp -r bin/better-sqlite3/linux-desktop-better_sqlite3.node $SRC_DIR/node_modules/better-sqlite3/build/Release/better_sqlite3.node
./node_modules/.bin/electron-packager $SRC_DIR --asar --out=dist --executable-name=trilium --platform=linux --arch=x64 --overwrite
@@ -29,6 +25,9 @@ cp images/app-icons/png/128x128.png $BUILD_DIR/icon.png
# removing software WebGL binaries because they are pretty huge and not necessary
rm -r $BUILD_DIR/swiftshader
cp bin/tpl/portable-trilium.sh $BUILD_DIR/
chmod 755 $BUILD_DIR/portable-trilium.sh
echo "Packaging linux x64 electron distribution..."
VERSION=`jq -r ".version" package.json`
@@ -38,4 +37,4 @@ tar cJf trilium-linux-x64-${VERSION}.tar.xz trilium-linux-x64
cd ..
bin/build-debian.sh
bin/build-debian.sh

View File

@@ -9,19 +9,9 @@ fi
echo "Copying required mac binaries"
rm -r $SRC_DIR/node_modules/sqlite3/lib/binding/*
rm -r $SRC_DIR/node_modules/mozjpeg/vendor/*
rm -r $SRC_DIR/node_modules/pngquant-bin/vendor/*
rm -r $SRC_DIR/node_modules/giflossy/vendor/*
rm -r $SRC_DIR/node_modules/@felixrieseberg/spellchecker/build/Release/*
rm -r $SRC_DIR/node_modules/keyboard-layout/build/Release/*
cp -r bin/better-sqlite3/mac-better_sqlite3.node $SRC_DIR/node_modules/better-sqlite3/build/Release/better_sqlite3.node
cp -r bin/deps/mac-x64/sqlite/* $SRC_DIR/node_modules/sqlite3/lib/binding/
cp bin/deps/mac-x64/image/cjpeg $SRC_DIR/node_modules/mozjpeg/vendor/
cp bin/deps/mac-x64/image/pngquant $SRC_DIR/node_modules/pngquant-bin/vendor/
cp bin/deps/mac-x64/image/gifsicle $SRC_DIR/node_modules/giflossy/vendor/
cp bin/deps/mac-x64/spellchecker/* $SRC_DIR/node_modules/@felixrieseberg/spellchecker/build/Release/
cp bin/deps/mac-x64/keyboard-layout-manager.node $SRC_DIR/node_modules/keyboard-layout/build/Release/
rm -r $SRC_DIR/src/public/app-dist/*.mobile.*
./node_modules/.bin/electron-packager $SRC_DIR --asar --out=dist --executable-name=trilium --platform=darwin --arch=x64 --overwrite --icon=images/app-icons/mac/icon.icns

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
PKG_DIR=dist/trilium-linux-x64-server
NODE_VERSION=12.13.0
NODE_VERSION=12.18.3
if [ "$1" != "DONTCOPY" ]
then
@@ -16,11 +16,12 @@ cd ..
mv dist/node-v${NODE_VERSION}-linux-x64 $PKG_DIR/node
rm -r $PKG_DIR/node/lib/node_modules/npm
rm -r $PKG_DIR/node/include/node
rm -r $PKG_DIR/node_modules/electron*
rm -r $PKG_DIR/node_modules/sqlite3/lib/binding/*
cp -r ./bin/deps/linux-x64/sqlite/node* $PKG_DIR/node_modules/sqlite3/lib/binding/
cp -r bin/better-sqlite3/linux-server-better_sqlite3.node $PKG_DIR/node_modules/better-sqlite3/build/Release/better_sqlite3.node
printf "#!/bin/sh\n./node/bin/node src/www" > $PKG_DIR/trilium.sh
chmod 755 $PKG_DIR/trilium.sh

View File

@@ -9,20 +9,9 @@ fi
echo "Copying required windows binaries"
rm -r $SRC_DIR/node_modules/sqlite3/lib/binding/*
rm -r $SRC_DIR/node_modules/mozjpeg/vendor/*
rm -r $SRC_DIR/node_modules/pngquant-bin/vendor/*
rm -r $SRC_DIR/node_modules/giflossy/vendor/*
rm -r $SRC_DIR/node_modules/@felixrieseberg/spellchecker/build/Release/*
rm -r $SRC_DIR/node_modules/keyboard-layout/build/Release/*
rm -r $SRC_DIR/node_modules/cld/build/Release/*
cp -r bin/better-sqlite3/win-better_sqlite3.node $SRC_DIR/node_modules/better-sqlite3/build/Release/better_sqlite3.node
cp -r bin/deps/win-x64/sqlite/* $SRC_DIR/node_modules/sqlite3/lib/binding/
cp bin/deps/win-x64/image/cjpeg.exe $SRC_DIR/node_modules/mozjpeg/vendor/
cp bin/deps/win-x64/image/pngquant.exe $SRC_DIR/node_modules/pngquant-bin/vendor/
cp bin/deps/win-x64/image/gifsicle.exe $SRC_DIR/node_modules/giflossy/vendor/
cp bin/deps/win-x64/spellchecker/* $SRC_DIR/node_modules/@felixrieseberg/spellchecker/build/Release/
cp bin/deps/win-x64/keyboard-layout-manager.node $SRC_DIR/node_modules/keyboard-layout/build/Release/
rm -r $SRC_DIR/src/public/app-dist/*.mobile.*
./node_modules/.bin/electron-packager $SRC_DIR --asar --out=dist --executable-name=trilium --platform=win32 --arch=x64 --overwrite --icon=images/app-icons/win/icon.ico
@@ -34,6 +23,8 @@ mv "./dist/Trilium Notes-win32-x64" $BUILD_DIR
# removing software WebGL binaries because they are pretty huge and not necessary
rm -r $BUILD_DIR/swiftshader
cp bin/tpl/portable-trilium.bat $BUILD_DIR/
echo "Zipping windows x64 electron distribution..."
VERSION=`jq -r ".version" package.json`

View File

@@ -5,6 +5,8 @@ if [[ $# -eq 0 ]] ; then
exit 1
fi
npm run webpack
DIR=$1
rm -rf $DIR
@@ -22,11 +24,27 @@ cp -r README.md $DIR/
cp -r LICENSE $DIR/
cp -r config-sample.ini $DIR/
cp -r electron.js $DIR/
cp webpack-* $DIR/
# run in subshell (so we return to original dir)
(cd $DIR && npm install --only=prod)
rm -r $DIR/node_modules/cld/deps
# cleanup of useless files in dependencies
rm -r $DIR/node_modules/image-q/demo
rm -r $DIR/node_modules/better-sqlite3/deps/sqlite3.tar.gz
rm -r $DIR/node_modules/@jimp/plugin-print/fonts
rm -r $DIR/node_modules/jimp/browser
rm -r $DIR/node_modules/jimp/fonts
# delete all tests (there are often large images as test file for jimp etc.)
find $DIR/node_modules -name test -exec rm -rf {} \;
find $DIR/node_modules -name docs -exec rm -rf {} \;
find $DIR/node_modules -name demo -exec rm -rf {} \;
find $DIR/libraries -name "*.map" -type f -delete
find $DIR/libraries -name "hunspell.lib" -type f -delete
rm -r $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

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -12,5 +12,4 @@ fi
mkdir -p "$DIR"
cd "$DIR"
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 2000 -nodes
openssl req -newkey rsa:4096 -x509 -sha256 -days 3650 -nodes -out cert.crt -keyout key.key

View File

@@ -0,0 +1,4 @@
SET DIR=%~dp0
SET TRILIUM_DATA_DIR=%DIR%\trilium-data
cd %DIR%
start trilium.exe

7
bin/tpl/portable-trilium.sh Executable file
View File

@@ -0,0 +1,7 @@
#!/usr/bin/env sh
DIR=`dirname "$0"`
export TRILIUM_DATA_DIR="$DIR/trilium-data"
"$DIR/trilium"

View File

@@ -2,10 +2,16 @@
# Instance name can be used to distinguish between different instances
instanceName=
# set to true to allow using Trilium without authentication (makes sense for server build only, desktop build doesn't need password)
noAuthentication=false
# Disable automatically generating desktop icon
# noDesktopIcon=true
[Network]
# host setting is relevant only for web deployments - set the host on which the server will listen
# host=0.0.0.0
# port setting is relevant only for web deployments, desktop builds run on random free port
# port setting is relevant only for web deployments, desktop builds run on a fixed port (changeable with TRILIUM_PORT environment variable)
port=8080
# true for TLS/SSL/HTTPS (secure), false for HTTP (unsecure).
https=false

Binary file not shown.

BIN
db/demo.zip Normal file

Binary file not shown.

View File

@@ -1,4 +1,4 @@
const syncTableService = require('../../src/services/sync_table');
const syncTableService = require('../../src/services/entity_changes.js');
// options has not been filled so far which caused problems with clean-slate sync.
module.exports = async () => await syncTableService.fillAllSyncRows();
module.exports = async () => await syncTableService.fillAllSyncRows();

View File

@@ -1,5 +1,5 @@
const syncTableService = require('../../src/services/sync_table');
const syncTableService = require('../../src/services/entity_changes.js');
module.exports = async () => {
await syncTableService.fillAllSyncRows();
};
};

View File

@@ -0,0 +1,36 @@
CREATE TABLE IF NOT EXISTS "note_revisions_mig" (`noteRevisionId` TEXT NOT NULL PRIMARY KEY,
`noteId` TEXT NOT NULL,
`title` TEXT,
`contentLength` INT NOT NULL,
`isProtected` INT NOT NULL DEFAULT 0,
`utcDateLastEdited` TEXT NOT NULL,
`utcDateCreated` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
`dateLastEdited` TEXT NOT NULL,
`dateCreated` TEXT NOT NULL,
type TEXT DEFAULT '' NOT NULL,
mime TEXT DEFAULT '' NOT NULL,
hash TEXT DEFAULT '' NOT NULL);
CREATE TABLE IF NOT EXISTS "note_revision_contents" (`noteRevisionId` TEXT NOT NULL PRIMARY KEY,
`content` TEXT,
hash TEXT DEFAULT '' NOT NULL,
`utcDateModified` TEXT NOT NULL);
INSERT INTO note_revision_contents (noteRevisionId, content, hash, utcDateModified)
SELECT noteRevisionId, content, hash, utcDateModifiedTo FROM note_revisions;
INSERT INTO note_revisions_mig (noteRevisionId, noteId, title, contentLength, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, type, mime, hash)
SELECT noteRevisionId, noteId, title, COALESCE(LENGTH(content), 0), isProtected, utcDateModifiedFrom, utcDateModifiedTo, utcDateModifiedTo, dateModifiedFrom, dateModifiedTo, type, mime, hash FROM note_revisions;
DROP TABLE note_revisions;
ALTER TABLE note_revisions_mig RENAME TO note_revisions;
CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (`noteId`);
CREATE INDEX `IDX_note_revisions_utcDateCreated` ON `note_revisions` (`utcDateCreated`);
CREATE INDEX `IDX_note_revisions_utcDateLastEdited` ON `note_revisions` (`utcDateLastEdited`);
CREATE INDEX `IDX_note_revisions_dateCreated` ON `note_revisions` (`dateCreated`);
CREATE INDEX `IDX_note_revisions_dateLastEdited` ON `note_revisions` (`dateLastEdited`);
INSERT INTO sync (entityName, entityId, sourceId, utcSyncDate)
SELECT 'note_revision_contents', entityId, sourceId, utcSyncDate FROM sync WHERE entityName = 'note_revisions';

View File

@@ -0,0 +1,31 @@
CREATE TABLE IF NOT EXISTS "notes_mig" (
`noteId` TEXT NOT NULL,
`title` TEXT NOT NULL DEFAULT "note",
`isProtected` INT NOT NULL DEFAULT 0,
`type` TEXT NOT NULL DEFAULT 'text',
`mime` TEXT NOT NULL DEFAULT 'text/html',
`hash` TEXT DEFAULT "" NOT NULL,
`isDeleted` INT NOT NULL DEFAULT 0,
`isErased` INT NOT NULL DEFAULT 0,
`dateCreated` TEXT NOT NULL,
`dateModified` TEXT NOT NULL,
`utcDateCreated` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
PRIMARY KEY(`noteId`));
INSERT INTO notes_mig (noteId, title, isProtected, type, mime, hash, isDeleted, isErased, dateCreated, dateModified, utcDateCreated, utcDateModified)
SELECT noteId, title, isProtected, type, mime, hash, isDeleted, 0, dateCreated, dateModified, utcDateCreated, utcDateModified FROM notes;
DROP TABLE notes;
ALTER TABLE notes_mig RENAME TO notes;
UPDATE notes SET isErased = 1 WHERE isDeleted = 1
AND 1=(SELECT CASE WHEN content IS NULL THEN 1 ELSE 0 END FROM note_contents WHERE note_contents.noteId = notes.noteId);
CREATE INDEX `IDX_notes_isDeleted` ON `notes` (`isDeleted`);
CREATE INDEX `IDX_notes_title` ON `notes` (`title`);
CREATE INDEX `IDX_notes_type` ON `notes` (`type`);
CREATE INDEX `IDX_notes_dateCreated` ON `notes` (`dateCreated`);
CREATE INDEX `IDX_notes_dateModified` ON `notes` (`dateModified`);
CREATE INDEX `IDX_notes_utcDateModified` ON `notes` (`utcDateModified`);
CREATE INDEX `IDX_notes_utcDateCreated` ON `notes` (`utcDateCreated`);

View File

@@ -0,0 +1,34 @@
CREATE TABLE IF NOT EXISTS "notes_mig" (
`noteId` TEXT NOT NULL,
`title` TEXT NOT NULL DEFAULT "note",
`contentLength` INT NOT NULL,
`isProtected` INT NOT NULL DEFAULT 0,
`type` TEXT NOT NULL DEFAULT 'text',
`mime` TEXT NOT NULL DEFAULT 'text/html',
`hash` TEXT DEFAULT "" NOT NULL,
`isDeleted` INT NOT NULL DEFAULT 0,
`isErased` INT NOT NULL DEFAULT 0,
`dateCreated` TEXT NOT NULL,
`dateModified` TEXT NOT NULL,
`utcDateCreated` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
PRIMARY KEY(`noteId`));
INSERT INTO notes_mig (noteId, title, contentLength, isProtected, type, mime, hash, isDeleted, isErased, dateCreated, dateModified, utcDateCreated, utcDateModified)
SELECT noteId, title, -1, isProtected, type, mime, hash, isDeleted, isErased, dateCreated, dateModified, utcDateCreated, utcDateModified FROM notes;
DROP TABLE notes;
ALTER TABLE notes_mig RENAME TO notes;
UPDATE notes SET contentLength = COALESCE((SELECT COALESCE(LENGTH(content), 0) FROM note_contents WHERE note_contents.noteId = notes.noteId), -1);
CREATE INDEX `IDX_notes_isDeleted` ON `notes` (`isDeleted`);
CREATE INDEX `IDX_notes_title` ON `notes` (`title`);
CREATE INDEX `IDX_notes_type` ON `notes` (`type`);
CREATE INDEX `IDX_notes_dateCreated` ON `notes` (`dateCreated`);
CREATE INDEX `IDX_notes_dateModified` ON `notes` (`dateModified`);
CREATE INDEX `IDX_notes_utcDateModified` ON `notes` (`utcDateModified`);
CREATE INDEX `IDX_notes_utcDateCreated` ON `notes` (`utcDateCreated`);
-- should be OK since sync protocol changes so all instances must upgrade
UPDATE attributes SET isDeleted = 1 WHERE name = 'fileSize';

View File

@@ -0,0 +1,28 @@
CREATE TABLE IF NOT EXISTS "note_revisions_mig" (`noteRevisionId` TEXT NOT NULL PRIMARY KEY,
`noteId` TEXT NOT NULL,
`title` TEXT,
`contentLength` INT NOT NULL,
`isErased` INT NOT NULL DEFAULT 0,
`isProtected` INT NOT NULL DEFAULT 0,
`utcDateLastEdited` TEXT NOT NULL,
`utcDateCreated` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
`dateLastEdited` TEXT NOT NULL,
`dateCreated` TEXT NOT NULL,
type TEXT DEFAULT '' NOT NULL,
mime TEXT DEFAULT '' NOT NULL,
hash TEXT DEFAULT '' NOT NULL);
INSERT INTO note_revisions_mig (noteRevisionId, noteId, title, contentLength, isErased, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, type, mime, hash)
SELECT noteRevisionId, noteId, title, contentLength, 0, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, type, mime, hash FROM note_revisions;
DROP TABLE note_revisions;
ALTER TABLE note_revisions_mig RENAME TO note_revisions;
UPDATE note_revisions SET isErased = (SELECT isErased FROM notes WHERE notes.noteId = note_revisions.noteId);
CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (`noteId`);
CREATE INDEX `IDX_note_revisions_utcDateCreated` ON `note_revisions` (`utcDateCreated`);
CREATE INDEX `IDX_note_revisions_utcDateLastEdited` ON `note_revisions` (`utcDateLastEdited`);
CREATE INDEX `IDX_note_revisions_dateCreated` ON `note_revisions` (`dateCreated`);
CREATE INDEX `IDX_note_revisions_dateLastEdited` ON `note_revisions` (`dateLastEdited`);

View File

@@ -0,0 +1,3 @@
UPDATE attributes SET name = 'internalLink' WHERE name = 'internal-link';
UPDATE attributes SET name = 'imageLink' WHERE name = 'image-link';
UPDATE attributes SET name = 'relationMapLink' WHERE name = 'relation-map-link';

View File

@@ -0,0 +1,5 @@
DROP INDEX IF EXISTS IDX_attributes_name_index;
DROP INDEX IF EXISTS IDX_branches_noteId;
CREATE INDEX IDX_source_ids_utcDateCreated
on source_ids (utcDateCreated);

View File

@@ -0,0 +1,81 @@
CREATE TABLE IF NOT EXISTS "notes_mig" (
`noteId` TEXT NOT NULL,
`title` TEXT NOT NULL DEFAULT "note",
`contentLength` INT NOT NULL,
`isProtected` INT NOT NULL DEFAULT 0,
`type` TEXT NOT NULL DEFAULT 'text',
`mime` TEXT NOT NULL DEFAULT 'text/html',
`hash` TEXT DEFAULT "" NOT NULL,
`isDeleted` INT NOT NULL DEFAULT 0,
`deleteId` TEXT DEFAULT NULL,
`isErased` INT NOT NULL DEFAULT 0,
`dateCreated` TEXT NOT NULL,
`dateModified` TEXT NOT NULL,
`utcDateCreated` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
PRIMARY KEY(`noteId`));
INSERT INTO notes_mig (noteId, title, contentLength, isProtected, type, mime, hash, isDeleted, isErased, dateCreated, dateModified, utcDateCreated, utcDateModified)
SELECT noteId, title, -1, isProtected, type, mime, hash, isDeleted, isErased, dateCreated, dateModified, utcDateCreated, utcDateModified FROM notes;
DROP TABLE notes;
ALTER TABLE notes_mig RENAME TO notes;
CREATE INDEX `IDX_notes_isDeleted` ON `notes` (`isDeleted`);
CREATE INDEX `IDX_notes_title` ON `notes` (`title`);
CREATE INDEX `IDX_notes_type` ON `notes` (`type`);
CREATE INDEX `IDX_notes_dateCreated` ON `notes` (`dateCreated`);
CREATE INDEX `IDX_notes_dateModified` ON `notes` (`dateModified`);
CREATE INDEX `IDX_notes_utcDateModified` ON `notes` (`utcDateModified`);
CREATE INDEX `IDX_notes_utcDateCreated` ON `notes` (`utcDateCreated`);
CREATE TABLE IF NOT EXISTS "branches_mig" (
`branchId` TEXT NOT NULL,
`noteId` TEXT NOT NULL,
`parentNoteId` TEXT NOT NULL,
`notePosition` INTEGER NOT NULL,
`prefix` TEXT,
`isExpanded` INTEGER NOT NULL DEFAULT 0,
`isDeleted` INTEGER NOT NULL DEFAULT 0,
`deleteId` TEXT DEFAULT NULL,
`utcDateModified` TEXT NOT NULL,
utcDateCreated TEXT NOT NULL,
hash TEXT DEFAULT "" NOT NULL,
PRIMARY KEY(`branchId`));
INSERT INTO branches_mig (branchId, noteId, parentNoteId, notePosition, prefix, isExpanded, isDeleted, utcDateModified, utcDateCreated, hash)
SELECT branchId, noteId, parentNoteId, notePosition, prefix, isExpanded, isDeleted, utcDateModified, utcDateCreated, hash FROM branches;
DROP TABLE branches;
ALTER TABLE branches_mig RENAME TO branches;
CREATE INDEX `IDX_branches_noteId_parentNoteId` ON `branches` (`noteId`,`parentNoteId`);
CREATE INDEX IDX_branches_parentNoteId ON branches (parentNoteId);
CREATE TABLE IF NOT EXISTS "attributes_mig"
(
attributeId TEXT not null primary key,
noteId TEXT not null,
type TEXT not null,
name TEXT not null,
value TEXT default '' not null,
position INT default 0 not null,
utcDateCreated TEXT not null,
utcDateModified TEXT not null,
isDeleted INT not null,
`deleteId` TEXT DEFAULT NULL,
hash TEXT default "" not null,
isInheritable int DEFAULT 0 NULL);
INSERT INTO attributes_mig (attributeId, noteId, type, name, value, position, utcDateCreated, utcDateModified, isDeleted, hash, isInheritable)
SELECT attributeId, noteId, type, name, value, position, utcDateCreated, utcDateModified, isDeleted, hash, isInheritable FROM attributes;
DROP TABLE attributes;
ALTER TABLE attributes_mig RENAME TO attributes;
CREATE INDEX IDX_attributes_name_value
on attributes (name, value);
CREATE INDEX IDX_attributes_noteId_index
on attributes (noteId);
CREATE INDEX IDX_attributes_value_index
on attributes (value);

View File

@@ -0,0 +1 @@
UPDATE notes SET contentLength = COALESCE((SELECT COALESCE(LENGTH(content), 0) FROM note_contents WHERE note_contents.noteId = notes.noteId), -1);

View File

@@ -0,0 +1,22 @@
CREATE TABLE IF NOT EXISTS "sync_mig" (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`entityName` TEXT NOT NULL,
`entityId` TEXT NOT NULL,
`sourceId` TEXT NOT NULL,
`isSynced` INTEGER default 0 not null,
`utcSyncDate` TEXT NOT NULL);
INSERT INTO sync_mig (id, entityName, entityId, sourceId, isSynced, utcSyncDate)
SELECT id, entityName, entityId, sourceId, 1, utcSyncDate FROM sync;
DROP TABLE sync;
ALTER TABLE sync_mig RENAME TO sync;
CREATE UNIQUE INDEX `IDX_sync_entityName_entityId` ON `sync` (
`entityName`,
`entityId`
);
CREATE INDEX `IDX_sync_utcSyncDate` ON `sync` (
`utcSyncDate`
);

View File

@@ -0,0 +1,4 @@
UPDATE sync SET isSynced = 1 WHERE entityName != 'options' OR (
entityName = 'options'
AND 1 = (SELECT isSynced FROM options WHERE name = sync.entityId)
)

View File

@@ -0,0 +1,2 @@
UPDATE attributes SET type = 'label', name = 'label:' || name WHERE type = 'label-definition';
UPDATE attributes SET type = 'label', name = 'relation:' || name WHERE type = 'relation-definition';

View File

@@ -0,0 +1,79 @@
const sql = require('../../src/services/sql');
module.exports = () => {
for (const attr of sql.getRows("SELECT * FROM attributes WHERE name LIKE 'label:%'")) {
let obj;
try {
obj = JSON.parse(attr.value);
}
catch (e) {
console.log(`Parsing attribute definition "${attr.value}" of ${attr.attributeId} failed with error "${e.message}", setting to default value.`);
sql.execute('UPDATE attributes SET value = ? WHERE attributeId = ?',
["multi,text", attr.attributeId]);
continue;
}
const tokens = [];
if (obj.isPromoted) {
tokens.push('promoted');
}
if (obj.multiplicityType === 'singlevalue') {
tokens.push('single');
} else if (obj.multiplicityType === 'multivalue') {
tokens.push('multi');
}
if (obj.labelType) {
tokens.push(obj.labelType);
}
if (obj.numberPrecision) {
tokens.push('precision='+obj.numberPrecision);
}
const newValue = tokens.join(',');
sql.execute('UPDATE attributes SET value = ? WHERE attributeId = ?', [newValue, attr.attributeId]);
}
for (const attr of sql.getRows("SELECT * FROM attributes WHERE name LIKE 'relation:%'")) {
let obj;
try {
obj = JSON.parse(attr.value);
}
catch (e) {
console.log(`Parsing attribute definition "${attr.value}" of ${attr.attributeId} failed with error "${e.message}", setting to default value.`);
sql.execute('UPDATE attributes SET value = ? WHERE attributeId = ?',
["multi", attr.attributeId]);
continue;
}
const tokens = [];
if (obj.isPromoted) {
tokens.push('promoted');
}
if (obj.multiplicityType === 'singlevalue') {
tokens.push('single');
} else if (obj.multiplicityType === 'multivalue') {
tokens.push('multi');
}
if (obj.inverseRelation) {
tokens.push('inverse=' + obj.inverseRelation);
}
const newValue = tokens.join(',');
sql.execute('UPDATE attributes SET value = ? WHERE attributeId = ?', [newValue, attr.attributeId]);
}
};

View File

@@ -0,0 +1 @@
DROP TABLE source_ids;

View File

@@ -0,0 +1 @@
ALTER TABLE sync RENAME TO entity_changes;

View File

@@ -0,0 +1,22 @@
CREATE TABLE IF NOT EXISTS "mig_entity_changes" (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`entityName` TEXT NOT NULL,
`entityId` TEXT NOT NULL,
`sourceId` TEXT NOT NULL,
`isSynced` INTEGER default 0 not null,
`utcChangedDate` TEXT NOT NULL);
INSERT INTO mig_entity_changes (id, entityName, entityId, sourceId, isSynced, utcChangedDate)
SELECT id, entityName, entityId, sourceId, isSynced, utcSyncDate 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`
);
CREATE INDEX `IDX_entityChanges_utcChangedDate` ON "entity_changes" (
`utcChangedDate`
);

View File

@@ -0,0 +1,55 @@
CREATE TABLE IF NOT EXISTS "notes_mig" (
`noteId` TEXT NOT NULL,
`title` TEXT NOT NULL DEFAULT "note",
`isProtected` INT NOT NULL DEFAULT 0,
`type` TEXT NOT NULL DEFAULT 'text',
`mime` TEXT NOT NULL DEFAULT 'text/html',
`hash` TEXT DEFAULT "" NOT NULL,
`isDeleted` INT NOT NULL DEFAULT 0,
`deleteId` TEXT DEFAULT NULL,
`isErased` INT NOT NULL DEFAULT 0,
`dateCreated` TEXT NOT NULL,
`dateModified` TEXT NOT NULL,
`utcDateCreated` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
PRIMARY KEY(`noteId`));
INSERT INTO notes_mig (noteId, title, isProtected, type, mime, hash, isDeleted, deleteId, isErased, dateCreated, dateModified, utcDateCreated, utcDateModified)
SELECT noteId, title, isProtected, type, mime, hash, isDeleted, deleteId, isErased, dateCreated, dateModified, utcDateCreated, utcDateModified FROM notes;
DROP TABLE notes;
ALTER TABLE notes_mig RENAME TO notes;
CREATE INDEX `IDX_notes_isDeleted` ON `notes` (`isDeleted`);
CREATE INDEX `IDX_notes_title` ON `notes` (`title`);
CREATE INDEX `IDX_notes_type` ON `notes` (`type`);
CREATE INDEX `IDX_notes_dateCreated` ON `notes` (`dateCreated`);
CREATE INDEX `IDX_notes_dateModified` ON `notes` (`dateModified`);
CREATE INDEX `IDX_notes_utcDateModified` ON `notes` (`utcDateModified`);
CREATE INDEX `IDX_notes_utcDateCreated` ON `notes` (`utcDateCreated`);
CREATE TABLE IF NOT EXISTS "note_revisions_mig" (`noteRevisionId` TEXT NOT NULL PRIMARY KEY,
`noteId` TEXT NOT NULL,
`title` TEXT,
`isErased` INT NOT NULL DEFAULT 0,
`isProtected` INT NOT NULL DEFAULT 0,
`utcDateLastEdited` TEXT NOT NULL,
`utcDateCreated` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
`dateLastEdited` TEXT NOT NULL,
`dateCreated` TEXT NOT NULL,
type TEXT DEFAULT '' NOT NULL,
mime TEXT DEFAULT '' NOT NULL,
hash TEXT DEFAULT '' NOT NULL);
INSERT INTO note_revisions_mig (noteRevisionId, noteId, title, isErased, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, type, mime, hash)
SELECT noteRevisionId, noteId, title, isErased, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, type, mime, hash FROM note_revisions;
DROP TABLE note_revisions;
ALTER TABLE note_revisions_mig RENAME TO note_revisions;
CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (`noteId`);
CREATE INDEX `IDX_note_revisions_utcDateCreated` ON `note_revisions` (`utcDateCreated`);
CREATE INDEX `IDX_note_revisions_utcDateLastEdited` ON `note_revisions` (`utcDateLastEdited`);
CREATE INDEX `IDX_note_revisions_dateCreated` ON `note_revisions` (`dateCreated`);
CREATE INDEX `IDX_note_revisions_dateLastEdited` ON `note_revisions` (`dateLastEdited`);

View File

@@ -0,0 +1,20 @@
CREATE TABLE IF NOT EXISTS "note_contents_mig" (
`noteId` TEXT NOT NULL,
`content` TEXT NULL DEFAULT NULL,
`hash` TEXT DEFAULT "" NOT NULL,
`dateModified` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
PRIMARY KEY(`noteId`)
);
INSERT INTO note_contents_mig (noteId, content, hash, dateModified, utcDateModified)
SELECT noteId,
content,
hash,
(SELECT dateModified FROM notes WHERE noteId = note_contents.noteId),
utcDateModified
FROM note_contents;
DROP TABLE note_contents;
ALTER TABLE note_contents_mig RENAME TO note_contents;

View File

@@ -0,0 +1 @@
DELETE FROM options WHERE name = 'keyboardShortcutsActivateParentNote';

View File

@@ -1,27 +1,3 @@
CREATE TABLE IF NOT EXISTS "sync" (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`entityName` TEXT NOT NULL,
`entityId` TEXT NOT NULL,
`sourceId` TEXT NOT NULL,
`utcSyncDate` TEXT NOT NULL);
CREATE TABLE IF NOT EXISTS "source_ids" (
`sourceId` TEXT NOT NULL,
`utcDateCreated` TEXT NOT NULL,
PRIMARY KEY(`sourceId`)
);
CREATE TABLE IF NOT EXISTS "note_revisions" (
`noteRevisionId` TEXT NOT NULL PRIMARY KEY,
`noteId` TEXT NOT NULL,
`title` TEXT,
`content` TEXT,
`isProtected` INT NOT NULL DEFAULT 0,
`utcDateModifiedFrom` TEXT NOT NULL,
`utcDateModifiedTo` TEXT NOT NULL,
`dateModifiedFrom` TEXT NOT NULL,
`dateModifiedTo` TEXT NOT NULL,
type TEXT DEFAULT '' NOT NULL,
mime TEXT DEFAULT '' NOT NULL,
hash TEXT DEFAULT "" NOT NULL);
CREATE TABLE IF NOT EXISTS "api_tokens"
(
apiTokenId TEXT PRIMARY KEY NOT NULL,
@@ -38,64 +14,6 @@ CREATE TABLE IF NOT EXISTS "options"
utcDateCreated TEXT not null,
utcDateModified TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS "attributes"
(
attributeId TEXT not null primary key,
noteId TEXT not null,
type TEXT not null,
name TEXT not null,
value TEXT default '' not null,
position INT default 0 not null,
utcDateCreated TEXT not null,
utcDateModified TEXT not null,
isDeleted INT not null,
hash TEXT default "" not null,
isInheritable int DEFAULT 0 NULL);
CREATE TABLE IF NOT EXISTS "notes" (
`noteId` TEXT NOT NULL,
`title` TEXT NOT NULL DEFAULT "note",
`isProtected` INT NOT NULL DEFAULT 0,
`type` TEXT NOT NULL DEFAULT 'text',
`mime` TEXT NOT NULL DEFAULT 'text/html',
`hash` TEXT DEFAULT "" NOT NULL,
`isDeleted` INT NOT NULL DEFAULT 0,
`dateCreated` TEXT NOT NULL,
`dateModified` TEXT NOT NULL,
`utcDateCreated` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
PRIMARY KEY(`noteId`)
);
CREATE UNIQUE INDEX `IDX_sync_entityName_entityId` ON `sync` (
`entityName`,
`entityId`
);
CREATE INDEX `IDX_sync_utcSyncDate` ON `sync` (
`utcSyncDate`
);
CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (
`noteId`
);
CREATE INDEX `IDX_note_revisions_dateModifiedFrom` ON `note_revisions` (
`utcDateModifiedFrom`
);
CREATE INDEX `IDX_note_revisions_dateModifiedTo` ON `note_revisions` (
`utcDateModifiedTo`
);
CREATE INDEX IDX_attributes_name_value
on attributes (name, value);
CREATE INDEX IDX_attributes_name_index
on attributes (name);
CREATE INDEX IDX_attributes_noteId_index
on attributes (noteId);
CREATE INDEX IDX_attributes_value_index
on attributes (value);
CREATE TABLE IF NOT EXISTS "note_contents" (
`noteId` TEXT NOT NULL,
`content` TEXT NULL DEFAULT NULL,
`hash` TEXT DEFAULT "" NOT NULL,
`utcDateModified` TEXT NOT NULL,
PRIMARY KEY(`noteId`)
);
CREATE TABLE recent_notes
(
noteId TEXT not null primary key,
@@ -104,6 +22,10 @@ CREATE TABLE recent_notes
utcDateCreated TEXT not null,
isDeleted INT
);
CREATE TABLE IF NOT EXISTS "note_revision_contents" (`noteRevisionId` TEXT NOT NULL PRIMARY KEY,
`content` TEXT,
hash TEXT DEFAULT '' NOT NULL,
`utcDateModified` TEXT NOT NULL);
CREATE TABLE IF NOT EXISTS "branches" (
`branchId` TEXT NOT NULL,
`noteId` TEXT NOT NULL,
@@ -112,10 +34,92 @@ CREATE TABLE IF NOT EXISTS "branches" (
`prefix` TEXT,
`isExpanded` INTEGER NOT NULL DEFAULT 0,
`isDeleted` INTEGER NOT NULL DEFAULT 0,
`deleteId` TEXT DEFAULT NULL,
`utcDateModified` TEXT NOT NULL,
utcDateCreated TEXT NOT NULL,
hash TEXT DEFAULT "" NOT NULL,
PRIMARY KEY(`branchId`));
CREATE INDEX `IDX_branches_noteId` ON `branches` (`noteId`);
CREATE INDEX `IDX_branches_noteId_parentNoteId` ON `branches` (`noteId`,`parentNoteId`);
CREATE INDEX IDX_branches_parentNoteId ON branches (parentNoteId);
CREATE TABLE IF NOT EXISTS "attributes"
(
attributeId TEXT not null primary key,
noteId TEXT not null,
type TEXT not null,
name TEXT not null,
value TEXT default '' not null,
position INT default 0 not null,
utcDateCreated TEXT not null,
utcDateModified TEXT not null,
isDeleted INT not null,
`deleteId` TEXT DEFAULT NULL,
hash TEXT default "" not null,
isInheritable int DEFAULT 0 NULL);
CREATE INDEX IDX_attributes_name_value
on attributes (name, value);
CREATE INDEX IDX_attributes_noteId_index
on attributes (noteId);
CREATE INDEX IDX_attributes_value_index
on attributes (value);
CREATE TABLE IF NOT EXISTS "entity_changes" (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`entityName` TEXT NOT NULL,
`entityId` TEXT NOT NULL,
`sourceId` TEXT NOT NULL,
`isSynced` INTEGER default 0 not null,
`utcChangedDate` TEXT NOT NULL);
CREATE UNIQUE INDEX `IDX_entityChanges_entityName_entityId` ON "entity_changes" (
`entityName`,
`entityId`
);
CREATE INDEX `IDX_entityChanges_utcChangedDate` ON "entity_changes" (
`utcChangedDate`
);
CREATE TABLE IF NOT EXISTS "notes" (
`noteId` TEXT NOT NULL,
`title` TEXT NOT NULL DEFAULT "note",
`isProtected` INT NOT NULL DEFAULT 0,
`type` TEXT NOT NULL DEFAULT 'text',
`mime` TEXT NOT NULL DEFAULT 'text/html',
`hash` TEXT DEFAULT "" NOT NULL,
`isDeleted` INT NOT NULL DEFAULT 0,
`deleteId` TEXT DEFAULT NULL,
`isErased` INT NOT NULL DEFAULT 0,
`dateCreated` TEXT NOT NULL,
`dateModified` TEXT NOT NULL,
`utcDateCreated` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
PRIMARY KEY(`noteId`));
CREATE INDEX `IDX_notes_isDeleted` ON `notes` (`isDeleted`);
CREATE INDEX `IDX_notes_title` ON `notes` (`title`);
CREATE INDEX `IDX_notes_type` ON `notes` (`type`);
CREATE INDEX `IDX_notes_dateCreated` ON `notes` (`dateCreated`);
CREATE INDEX `IDX_notes_dateModified` ON `notes` (`dateModified`);
CREATE INDEX `IDX_notes_utcDateModified` ON `notes` (`utcDateModified`);
CREATE INDEX `IDX_notes_utcDateCreated` ON `notes` (`utcDateCreated`);
CREATE TABLE IF NOT EXISTS "note_revisions" (`noteRevisionId` TEXT NOT NULL PRIMARY KEY,
`noteId` TEXT NOT NULL,
`title` TEXT,
`isErased` INT NOT NULL DEFAULT 0,
`isProtected` INT NOT NULL DEFAULT 0,
`utcDateLastEdited` TEXT NOT NULL,
`utcDateCreated` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
`dateLastEdited` TEXT NOT NULL,
`dateCreated` TEXT NOT NULL,
type TEXT DEFAULT '' NOT NULL,
mime TEXT DEFAULT '' NOT NULL,
hash TEXT DEFAULT '' NOT NULL);
CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (`noteId`);
CREATE INDEX `IDX_note_revisions_utcDateCreated` ON `note_revisions` (`utcDateCreated`);
CREATE INDEX `IDX_note_revisions_utcDateLastEdited` ON `note_revisions` (`utcDateLastEdited`);
CREATE INDEX `IDX_note_revisions_dateCreated` ON `note_revisions` (`dateCreated`);
CREATE INDEX `IDX_note_revisions_dateLastEdited` ON `note_revisions` (`dateLastEdited`);
CREATE TABLE IF NOT EXISTS "note_contents" (
`noteId` TEXT NOT NULL,
`content` TEXT NULL DEFAULT NULL,
`hash` TEXT DEFAULT "" NOT NULL,
`dateModified` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
PRIMARY KEY(`noteId`)
);

View File

@@ -28,7 +28,7 @@
<header>
<h2><span class="attribs"><span class="type-signature"></span></span>ApiToken<span class="signature">(apiTokenId, token, isDeleted, utcDateCreated)</span><span class="type-signature"></span></h2>
<h2><span class="attribs"><span class="type-signature"></span></span>ApiToken<span class="signature">()</span><span class="type-signature"></span></h2>
<div class="class-description">ApiToken is an entity representing token used to authenticate against Trilium API from client applications. Currently used only by Trilium Sender.</div>
@@ -45,7 +45,7 @@
<h4 class="name" id="ApiToken"><span class="type-signature"></span>new ApiToken<span class="signature">(apiTokenId, token, isDeleted, utcDateCreated)</span><span class="type-signature"></span></h4>
<h4 class="name" id="ApiToken"><span class="type-signature"></span>new ApiToken<span class="signature">()</span><span class="type-signature"></span></h4>
@@ -60,10 +60,15 @@
<h5>Parameters:</h5>
<h5 class="subsection-title">Properties:</h5>
<table class="params">
<table class="props">
<thead>
<tr>
@@ -180,8 +185,6 @@
<dl class="details">
@@ -290,7 +293,7 @@
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -28,7 +28,7 @@
<header>
<h2><span class="attribs"><span class="type-signature"></span></span>Attribute<span class="signature">(attributeId, noteId, type, name, value, position, isInheritable, isDeleted, utcDateCreated, utcDateModified)</span><span class="type-signature"></span></h2>
<h2><span class="attribs"><span class="type-signature"></span></span>Attribute<span class="signature">()</span><span class="type-signature"></span></h2>
<div class="class-description">Attribute is key value pair owned by a note.</div>
@@ -45,7 +45,7 @@
<h4 class="name" id="Attribute"><span class="type-signature"></span>new Attribute<span class="signature">(attributeId, noteId, type, name, value, position, isInheritable, isDeleted, utcDateCreated, utcDateModified)</span><span class="type-signature"></span></h4>
<h4 class="name" id="Attribute"><span class="type-signature"></span>new Attribute<span class="signature">()</span><span class="type-signature"></span></h4>
@@ -60,10 +60,15 @@
<h5>Parameters:</h5>
<h5 class="subsection-title">Properties:</h5>
<table class="params">
<table class="props">
<thead>
<tr>
@@ -267,6 +272,32 @@
<tr>
<td class="name"><code>deleteId</code></td>
<td class="type">
<span class="param-type">string</span>
|
<span class="param-type">null</span>
</td>
<td class="description last">ID identifying delete transaction</td>
</tr>
<tr>
<td class="name"><code>utcDateCreated</code></td>
@@ -318,8 +349,6 @@
<dl class="details">
@@ -349,7 +378,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_attribute.js.html">entities/attribute.js</a>, <a href="entities_attribute.js.html#line29">line 29</a>
<a href="entities_attribute.js.html">entities/attribute.js</a>, <a href="entities_attribute.js.html#line30">line 30</a>
</li></ul></dd>
@@ -464,7 +493,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_attribute.js.html">entities/attribute.js</a>, <a href="entities_attribute.js.html#line46">line 46</a>
<a href="entities_attribute.js.html">entities/attribute.js</a>, <a href="entities_attribute.js.html#line47">line 47</a>
</li></ul></dd>
@@ -566,7 +595,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_attribute.js.html">entities/attribute.js</a>, <a href="entities_attribute.js.html#line57">line 57</a>
<a href="entities_attribute.js.html">entities/attribute.js</a>, <a href="entities_attribute.js.html#line54">line 54</a>
</li></ul></dd>
@@ -668,7 +697,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_attribute.js.html">entities/attribute.js</a>, <a href="entities_attribute.js.html#line76">line 76</a>
<a href="entities_attribute.js.html">entities/attribute.js</a>, <a href="entities_attribute.js.html#line69">line 69</a>
</li></ul></dd>
@@ -738,7 +767,7 @@
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -351,69 +351,6 @@
<h4 class="name" id="refreshTree"><span class="type-signature"></span>refreshTree<span class="type-signature"></span></h4>
<div class="description">
Trigger tree refresh in all connected clients. This is required when some tree change happens in
the backend.
</div>
<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#line312">line 312</a>
</li></ul></dd>
</dl>
<h4 class="name" id="startNote"><span class="type-signature"></span>startNote<span class="type-signature"></span></h4>
@@ -534,6 +471,375 @@ the backend.
<h4 class="name" id="createDataNote"><span class="type-signature"></span>createDataNote<span class="signature">(parentNoteId, title, content)</span><span class="type-signature"> &rarr; {Promise.&lt;{note: <a href="Note.html">Note</a>, branch: <a href="Branch.html">Branch</a>}>}</span></h4>
<div class="description">
Create data note - data in this context means object serializable to JSON. Created note will be of type 'code' and
JSON MIME type. See also createNewNote() for more options.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>parentNoteId</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last"></td>
</tr>
<tr>
<td class="name"><code>title</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last"></td>
</tr>
<tr>
<td class="name"><code>content</code></td>
<td class="type">
<span class="param-type">object</span>
</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#line204">line 204</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">Promise.&lt;{note: <a href="Note.html">Note</a>, branch: <a href="Branch.html">Branch</a>}></span>
</dd>
</dl>
<h4 class="name" id="createNewNote"><span class="type-signature"></span>createNewNote<span class="signature">(params<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Promise.&lt;{note: <a href="Note.html">Note</a>, branch: <a href="Branch.html">Branch</a>}>}</span></h4>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>params</code></td>
<td class="type">
<span class="param-type"><a href="global.html#CreateNewNoteParams">CreateNewNoteParams</a></span>
</td>
<td class="attributes">
&lt;optional><br>
</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#line231">line 231</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
object contains newly created entities note and branch
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">Promise.&lt;{note: <a href="Note.html">Note</a>, branch: <a href="Branch.html">Branch</a>}></span>
</dd>
</dl>
<h4 class="name" id="createNote"><span class="type-signature"></span>createNote<span class="signature">(parentNoteId, title, content<span class="signature-attributes">opt</span>, extraOptions<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Promise.&lt;{note: <a href="Note.html">Note</a>, branch: <a href="Branch.html">Branch</a>}>}</span></h4>
@@ -748,6 +1054,8 @@ the backend.
<dt class="important tag-deprecated">Deprecated:</dt><dd><ul class="dummy"><li>please use createNote() API method instead</li></ul></dd>
@@ -760,7 +1068,7 @@ the backend.
<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#line198">line 198</a>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line259">line 259</a>
</li></ul></dd>
@@ -818,7 +1126,7 @@ the backend.
<h4 class="name" id="createNoteAndRefresh"><span class="type-signature"></span>createNoteAndRefresh<span class="signature">(parentNoteId, title, content<span class="signature-attributes">opt</span>, extraOptions<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Promise.&lt;{note: <a href="Note.html">Note</a>, branch: <a href="Branch.html">Branch</a>}>}</span></h4>
<h4 class="name" id="createTextNote"><span class="type-signature"></span>createTextNote<span class="signature">(parentNoteId, title, content)</span><span class="type-signature"> &rarr; {Promise.&lt;{note: <a href="Note.html">Note</a>, branch: <a href="Branch.html">Branch</a>}>}</span></h4>
@@ -826,7 +1134,7 @@ the backend.
<div class="description">
Creates new note according to given params and force all connected clients to refresh their tree.
Create text note. See also createNewNote() for more options.
</div>
@@ -850,12 +1158,8 @@ the backend.
<th>Type</th>
<th>Attributes</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
@@ -879,22 +1183,10 @@ the backend.
</td>
<td class="attributes">
</td>
<td class="default">
</td>
<td class="description last">create new note under this parent</td>
<td class="description last"></td>
</tr>
@@ -914,19 +1206,7 @@ the backend.
</td>
<td class="attributes">
</td>
<td class="default">
</td>
<td class="description last"></td>
@@ -949,62 +1229,7 @@ the backend.
</td>
<td class="attributes">
&lt;optional><br>
</td>
<td class="default">
""
</td>
<td class="description last"></td>
</tr>
<tr>
<td class="name"><code>extraOptions</code></td>
<td class="type">
<span class="param-type"><a href="global.html#CreateNoteExtraOptions">CreateNoteExtraOptions</a></span>
</td>
<td class="attributes">
&lt;optional><br>
</td>
<td class="default">
{}
</td>
<td class="description last"></td>
@@ -1048,7 +1273,7 @@ the backend.
<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#line211">line 211</a>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line188">line 188</a>
</li></ul></dd>
@@ -1076,10 +1301,6 @@ the backend.
<h5>Returns:</h5>
<div class="param-desc">
object contains newly created entities note and branch
</div>
<dl>
@@ -1533,7 +1754,7 @@ the backend.
<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#line317">line 317</a>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line398">line 398</a>
</li></ul></dd>
@@ -1997,7 +2218,7 @@ the backend.
<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#line241">line 241</a>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line315">line 315</a>
</li></ul></dd>
@@ -2765,7 +2986,7 @@ if some action needs to happen on only one specific instance.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line260">line 260</a>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line342">line 342</a>
</li></ul></dd>
@@ -3418,7 +3639,113 @@ if some action needs to happen on only one specific instance.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line232">line 232</a>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line306">line 306</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">Promise.&lt;(<a href="Note.html">Note</a>|null)></span>
</dd>
</dl>
<h4 class="name" id="getTodayNote"><span class="type-signature"></span>getTodayNote<span class="signature">()</span><span class="type-signature"> &rarr; {Promise.&lt;(<a href="Note.html">Note</a>|null)>}</span></h4>
<div class="description">
Returns today's day note. If such note doesn't exist, it is created.
</div>
<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#line323">line 323</a>
</li></ul></dd>
@@ -3596,7 +3923,7 @@ if some action needs to happen on only one specific instance.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line251">line 251</a>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line333">line 333</a>
</li></ul></dd>
@@ -3751,7 +4078,7 @@ if some action needs to happen on only one specific instance.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line269">line 269</a>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line351">line 351</a>
</li></ul></dd>
@@ -3901,7 +4228,93 @@ if some action needs to happen on only one specific instance.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line224">line 224</a>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line298">line 298</a>
</li></ul></dd>
</dl>
<h4 class="name" id="refreshTree"><span class="type-signature"></span>refreshTree<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="important tag-deprecated">Deprecated:</dt><dd><ul class="dummy"><li>- this is now no-op since all the changes should be gracefully handled per widget</li></ul></dd>
<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#line393">line 393</a>
</li></ul></dd>
@@ -4249,7 +4662,7 @@ if some action needs to happen on only one specific instance.
<h4 class="name" id="setNoteToParent"><span class="type-signature"></span>setNoteToParent<span class="signature">(noteId, prefix, parentNoteId<span class="signature-attributes">opt</span>)</span><span class="type-signature"></span></h4>
<h4 class="name" id="setNoteToParent"><span class="type-signature"></span>setNoteToParent<span class="signature">(noteId, prefix, parentNoteId)</span><span class="type-signature"></span></h4>
@@ -4284,8 +4697,6 @@ This method looks similar to toggleNoteInParent() but differs because we're look
<th>Type</th>
<th>Attributes</th>
@@ -4311,14 +4722,6 @@ This method looks similar to toggleNoteInParent() but differs because we're look
</td>
<td class="attributes">
</td>
@@ -4342,14 +4745,6 @@ This method looks similar to toggleNoteInParent() but differs because we're look
</td>
<td class="attributes">
</td>
@@ -4367,22 +4762,15 @@ This method looks similar to toggleNoteInParent() but differs because we're look
<span class="param-type">string</span>
|
<span class="param-type">null</span>
</td>
<td class="attributes">
&lt;optional><br>
</td>
@@ -4415,6 +4803,8 @@ This method looks similar to toggleNoteInParent() but differs because we're look
<dt class="important tag-deprecated">Deprecated:</dt><dd><ul class="dummy"><li>- this method is pretty confusing and serves specialized purpose only</li></ul></dd>
@@ -4427,7 +4817,7 @@ This method looks similar to toggleNoteInParent() but differs because we're look
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line289">line 289</a>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line372">line 372</a>
</li></ul></dd>
@@ -4560,7 +4950,7 @@ This method looks similar to toggleNoteInParent() but differs because we're look
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line276">line 276</a>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line358">line 358</a>
</li></ul></dd>
@@ -4935,7 +5325,7 @@ transactional by default.
<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#line302">line 302</a>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line385">line 385</a>
</li></ul></dd>
@@ -5009,7 +5399,7 @@ transactional by default.
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -28,7 +28,7 @@
<header>
<h2><span class="attribs"><span class="type-signature"></span></span>Branch<span class="signature">(branchId, noteId, parentNoteId, notePosition, prefix, isExpanded, isDeleted, utcDateModified, utcDateCreated)</span><span class="type-signature"></span></h2>
<h2><span class="attribs"><span class="type-signature"></span></span>Branch<span class="signature">()</span><span class="type-signature"></span></h2>
<div class="class-description">Branch represents note's placement in the tree - it's essentially pair of noteId and parentNoteId.
Each note can have multiple (at least one) branches, meaning it can be placed into multiple places in the tree.</div>
@@ -46,7 +46,7 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
<h4 class="name" id="Branch"><span class="type-signature"></span>new Branch<span class="signature">(branchId, noteId, parentNoteId, notePosition, prefix, isExpanded, isDeleted, utcDateModified, utcDateCreated)</span><span class="type-signature"></span></h4>
<h4 class="name" id="Branch"><span class="type-signature"></span>new Branch<span class="signature">()</span><span class="type-signature"></span></h4>
@@ -61,10 +61,15 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
<h5>Parameters:</h5>
<h5 class="subsection-title">Properties:</h5>
<table class="params">
<table class="props">
<thead>
<tr>
@@ -245,6 +250,32 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
<tr>
<td class="name"><code>deleteId</code></td>
<td class="type">
<span class="param-type">string</span>
|
<span class="param-type">null</span>
</td>
<td class="description last">ID identifying delete transaction</td>
</tr>
<tr>
<td class="name"><code>utcDateModified</code></td>
@@ -296,8 +327,6 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
<dl class="details">
@@ -327,7 +356,7 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line30">line 30</a>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line25">line 25</a>
</li></ul></dd>
@@ -394,7 +423,7 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
<h4 class="name" id="getNote"><span class="type-signature">(async) </span>getNote<span class="signature">()</span><span class="type-signature"> &rarr; {<a href="Note.html">Note</a>|null}</span></h4>
<h4 class="name" id="getNote"><span class="type-signature">(async) </span>getNote<span class="signature">()</span><span class="type-signature"> &rarr; {Promise.&lt;(<a href="Note.html">Note</a>|null)>}</span></h4>
@@ -442,7 +471,7 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line38">line 38</a>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line32">line 32</a>
</li></ul></dd>
@@ -478,10 +507,109 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
</dt>
<dd>
<span class="param-type"><a href="Note.html">Note</a></span>
|
<span class="param-type">Promise.&lt;(<a href="Note.html">Note</a>|null)></span>
<span class="param-type">null</span>
</dd>
</dl>
<h4 class="name" id="getParentNote"><span class="type-signature">(async) </span>getParentNote<span class="signature">()</span><span class="type-signature"> &rarr; {Promise.&lt;(<a href="Note.html">Note</a>|null)>}</span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line37">line 37</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">Promise.&lt;(<a href="Note.html">Note</a>|null)></span>
</dd>
@@ -515,7 +643,7 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -28,7 +28,7 @@
<header>
<h2><span class="attribs"><span class="type-signature"></span></span>NoteRevision<span class="signature">(noteRevisionId, noteId, type, mime, title, content, isProtected, dateModifiedFrom, dateModifiedTo, utcDateModifiedFrom, utcDateModifiedTo)</span><span class="type-signature"></span></h2>
<h2><span class="attribs"><span class="type-signature"></span></span>NoteRevision<span class="signature">()</span><span class="type-signature"></span></h2>
<div class="class-description">NoteRevision represents snapshot of note's title and content at some point in the past. It's used for seamless note versioning.</div>
@@ -45,7 +45,7 @@
<h4 class="name" id="NoteRevision"><span class="type-signature"></span>new NoteRevision<span class="signature">(noteRevisionId, noteId, type, mime, title, content, isProtected, dateModifiedFrom, dateModifiedTo, utcDateModifiedFrom, utcDateModifiedTo)</span><span class="type-signature"></span></h4>
<h4 class="name" id="NoteRevision"><span class="type-signature"></span>new NoteRevision<span class="signature">()</span><span class="type-signature"></span></h4>
@@ -60,10 +60,15 @@
<h5>Parameters:</h5>
<h5 class="subsection-title">Properties:</h5>
<table class="params">
<table class="props">
<thead>
<tr>
@@ -200,13 +205,36 @@
<tr>
<td class="name"><code>content</code></td>
<td class="name"><code>contentLength</code></td>
<td class="type">
<span class="param-type">string</span>
<span class="param-type">int</span>
</td>
<td class="description last"></td>
</tr>
<tr>
<td class="name"><code>isErased</code></td>
<td class="type">
<span class="param-type">boolean</span>
@@ -229,7 +257,7 @@
<td class="type">
<span class="param-type">string</span>
<span class="param-type">boolean</span>
@@ -246,7 +274,7 @@
<tr>
<td class="name"><code>dateModifiedFrom</code></td>
<td class="name"><code>dateLastEdited</code></td>
<td class="type">
@@ -269,7 +297,7 @@
<tr>
<td class="name"><code>dateModifiedTo</code></td>
<td class="name"><code>dateCreated</code></td>
<td class="type">
@@ -292,7 +320,7 @@
<tr>
<td class="name"><code>utcDateModifiedFrom</code></td>
<td class="name"><code>utcDateLastEdited</code></td>
<td class="type">
@@ -315,7 +343,30 @@
<tr>
<td class="name"><code>utcDateModifiedTo</code></td>
<td class="name"><code>utcDateCreated</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last"></td>
</tr>
<tr>
<td class="name"><code>utcDateModified</code></td>
<td class="type">
@@ -341,8 +392,6 @@
<dl class="details">
@@ -372,7 +421,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_revision.js.html">entities/note_revision.js</a>, <a href="entities_note_revision.js.html#line29">line 29</a>
<a href="entities_note_revision.js.html">entities/note_revision.js</a>, <a href="entities_note_revision.js.html#line35">line 35</a>
</li></ul></dd>
@@ -431,6 +480,320 @@
<h3 class="subsection-title">Methods</h3>
<h4 class="name" id="getContent"><span class="type-signature">(async) </span>getContent<span class="signature">()</span><span class="type-signature"> &rarr; {Promise.&lt;*>}</span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_revision.js.html">entities/note_revision.js</a>, <a href="entities_note_revision.js.html#line69">line 69</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">Promise.&lt;*></span>
</dd>
</dl>
<h4 class="name" id="isStringNote"><span class="type-signature"></span>isStringNote<span class="signature">()</span><span class="type-signature"> &rarr; {boolean}</span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_revision.js.html">entities/note_revision.js</a>, <a href="entities_note_revision.js.html#line55">line 55</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
true if the note has string content (not binary)
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">boolean</span>
</dd>
</dl>
<h4 class="name" id="setContent"><span class="type-signature">(async) </span>setContent<span class="signature">()</span><span class="type-signature"> &rarr; {Promise}</span></h4>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_revision.js.html">entities/note_revision.js</a>, <a href="entities_note_revision.js.html#line105">line 105</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">Promise</span>
</dd>
</dl>
@@ -451,7 +814,7 @@
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -28,7 +28,7 @@
<header>
<h2><span class="attribs"><span class="type-signature"></span></span>Option<span class="signature">(name, value, isSynced, utcDateModified, utcDateCreated)</span><span class="type-signature"></span></h2>
<h2><span class="attribs"><span class="type-signature"></span></span>Option<span class="signature">()</span><span class="type-signature"></span></h2>
<div class="class-description">Option represents name-value pair, either directly configurable by the user or some system property.</div>
@@ -45,7 +45,7 @@
<h4 class="name" id="Option"><span class="type-signature"></span>new Option<span class="signature">(name, value, isSynced, utcDateModified, utcDateCreated)</span><span class="type-signature"></span></h4>
<h4 class="name" id="Option"><span class="type-signature"></span>new Option<span class="signature">()</span><span class="type-signature"></span></h4>
@@ -60,10 +60,15 @@
<h5>Parameters:</h5>
<h5 class="subsection-title">Properties:</h5>
<table class="params">
<table class="props">
<thead>
<tr>
@@ -203,8 +208,6 @@
<dl class="details">
@@ -313,7 +316,7 @@
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -28,7 +28,7 @@
<header>
<h2><span class="attribs"><span class="type-signature"></span></span>RecentNote<span class="signature">(noteId, notePath, isDeleted, utcDateModified)</span><span class="type-signature"></span></h2>
<h2><span class="attribs"><span class="type-signature"></span></span>RecentNote<span class="signature">()</span><span class="type-signature"></span></h2>
<div class="class-description">RecentNote represents recently visited note.</div>
@@ -45,7 +45,7 @@
<h4 class="name" id="RecentNote"><span class="type-signature"></span>new RecentNote<span class="signature">(noteId, notePath, isDeleted, utcDateModified)</span><span class="type-signature"></span></h4>
<h4 class="name" id="RecentNote"><span class="type-signature"></span>new RecentNote<span class="signature">()</span><span class="type-signature"></span></h4>
@@ -60,10 +60,15 @@
<h5>Parameters:</h5>
<h5 class="subsection-title">Properties:</h5>
<table class="params">
<table class="props">
<thead>
<tr>
@@ -180,8 +185,6 @@
<dl class="details">
@@ -290,7 +293,7 @@
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -34,10 +34,10 @@ const dateUtils = require('../services/date_utils');
/**
* ApiToken is an entity representing token used to authenticate against Trilium API from client applications. Currently used only by Trilium Sender.
*
* @param {string} apiTokenId - primary key
* @param {string} token
* @param {boolean} isDeleted - true if API token is deleted
* @param {string} utcDateCreated
* @property {string} apiTokenId - primary key
* @property {string} token
* @property {boolean} isDeleted - true if API token is deleted
* @property {string} utcDateCreated
*
* @extends Entity
*/
@@ -75,7 +75,7 @@ module.exports = ApiToken;</code></pre>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -36,16 +36,17 @@ const sql = require('../services/sql');
/**
* Attribute is key value pair owned by a note.
*
* @param {string} attributeId
* @param {string} noteId
* @param {string} type
* @param {string} name
* @param {string} value
* @param {int} position
* @param {boolean} isInheritable
* @param {boolean} isDeleted
* @param {string} utcDateCreated
* @param {string} utcDateModified
* @property {string} attributeId
* @property {string} noteId
* @property {string} type
* @property {string} name
* @property {string} value
* @property {int} position
* @property {boolean} isInheritable
* @property {boolean} isDeleted
* @property {string|null} deleteId - ID identifying delete transaction
* @property {string} utcDateCreated
* @property {string} utcDateModified
*
* @extends Entity
*/
@@ -72,11 +73,7 @@ class Attribute extends Entity {
* @returns {Promise&lt;Note|null>}
*/
async getNote() {
if (!this.__note) {
this.__note = await repository.getEntity("SELECT * FROM notes WHERE noteId = ?", [this.noteId]);
}
return this.__note;
return await repository.getNote(this.noteId);
}
/**
@@ -91,11 +88,7 @@ class Attribute extends Entity {
return null;
}
if (!this.__targetNote) {
this.__targetNote = await repository.getEntity("SELECT * FROM notes WHERE noteId = ?", [this.value]);
}
return this.__targetNote;
return await repository.getNote(this.value);
}
/**
@@ -107,6 +100,10 @@ class Attribute extends Entity {
async beforeSaving() {
if (!this.value) {
if (this.type === 'relation') {
throw new Error(`Cannot save relation ${this.name} since it does not target any note.`);
}
// null value isn't allowed
this.value = "";
}
@@ -137,6 +134,21 @@ class Attribute extends Entity {
// cannot be static!
updatePojo(pojo) {
delete pojo.isOwned;
delete pojo.__note;
}
createClone(type, name, value) {
return new Attribute({
noteId: this.noteId,
type: type,
name: name,
value: value,
position: this.position,
isInheritable: this.isInheritable,
isDeleted: false,
utcDateCreated: this.utcDateCreated,
utcDateModified: this.utcDateModified
});
}
}
@@ -156,7 +168,7 @@ module.exports = Attribute;</code></pre>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -37,15 +37,16 @@ const sql = require('../services/sql');
* Branch represents note's placement in the tree - it's essentially pair of noteId and parentNoteId.
* Each note can have multiple (at least one) branches, meaning it can be placed into multiple places in the tree.
*
* @param {string} branchId - primary key
* @param {string} noteId
* @param {string} parentNoteId
* @param {int} notePosition
* @param {string} prefix
* @param {boolean} isExpanded
* @param {boolean} isDeleted
* @param {string} utcDateModified
* @param {string} utcDateCreated
* @property {string} branchId - primary key
* @property {string} noteId
* @property {string} parentNoteId
* @property {int} notePosition
* @property {string} prefix
* @property {boolean} isExpanded
* @property {boolean} isDeleted
* @property {string|null} deleteId - ID identifying delete transaction
* @property {string} utcDateModified
* @property {string} utcDateCreated
*
* @extends Entity
*/
@@ -53,18 +54,16 @@ class Branch extends Entity {
static get entityName() { return "branches"; }
static get primaryKeyName() { return "branchId"; }
// notePosition is not part of hash because it would produce a lot of updates in case of reordering
static get hashedProperties() { return ["branchId", "noteId", "parentNoteId", "isDeleted", "prefix"]; }
static get hashedProperties() { return ["branchId", "noteId", "parentNoteId", "isDeleted", "deleteId", "prefix"]; }
constructor(row = {}) {
super(row);
// used to detect move in note tree
this.origParentNoteId = this.parentNoteId;
/** @returns {Promise&lt;Note|null>} */
async getNote() {
return await repository.getNote(this.noteId);
}
/** @returns {Note|null} */
async getNote() {
return await repository.getEntity("SELECT * FROM notes WHERE noteId = ?", [this.noteId]);
/** @returns {Promise&lt;Note|null>} */
async getParentNote() {
return await repository.getNote(this.parentNoteId);
}
async beforeSaving() {
@@ -73,6 +72,10 @@ class Branch extends Entity {
this.notePosition = maxNotePos === null ? 0 : maxNotePos + 10;
}
if (!this.isExpanded) {
this.isExpanded = false;
}
if (!this.isDeleted) {
this.isDeleted = false;
}
@@ -88,9 +91,17 @@ class Branch extends Entity {
}
}
// cannot be static!
updatePojo(pojo) {
delete pojo.origParentNoteId;
createClone(parentNoteId, notePosition) {
return new Branch({
noteId: this.noteId,
parentNoteId: parentNoteId,
notePosition: notePosition,
prefix: this.prefix,
isExpanded: this.isExpanded,
isDeleted: false,
utcDateCreated: this.utcDateCreated,
utcDateModified: this.utcDateModified
});
}
}
@@ -110,7 +121,7 @@ module.exports = Branch;</code></pre>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -102,7 +102,7 @@ module.exports = Entity;</code></pre>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -42,8 +42,6 @@ const LABEL_DEFINITION = 'label-definition';
const RELATION = 'relation';
const RELATION_DEFINITION = 'relation-definition';
const STRING_MIME_TYPES = ["application/x-javascript"];
/**
* This represents a Note which is a central object in the Trilium Notes project.
*
@@ -51,8 +49,11 @@ const STRING_MIME_TYPES = ["application/x-javascript"];
* @property {string} type - one of "text", "code", "file" or "render"
* @property {string} mime - MIME type, e.g. "text/html"
* @property {string} title - note title
* @property {int} contentLength - length of content
* @property {boolean} isProtected - true if note is protected
* @property {boolean} isDeleted - true if note is deleted
* @property {string|null} deleteId - ID identifying delete transaction
* @property {boolean} isErased - true if note's content is erased after it has been deleted
* @property {string} dateCreated - local date time (with offset)
* @property {string} dateModified - local date time (with offset)
* @property {string} utcDateCreated
@@ -63,7 +64,7 @@ const STRING_MIME_TYPES = ["application/x-javascript"];
class Note extends Entity {
static get entityName() { return "notes"; }
static get primaryKeyName() { return "noteId"; }
static get hashedProperties() { return ["noteId", "title", "type", "isProtected", "isDeleted"]; }
static get hashedProperties() { return ["noteId", "title", "type", "mime", "isProtected", "isDeleted", "deleteId"]; }
/**
* @param row - object containing database row from "notes" table
@@ -72,7 +73,7 @@ class Note extends Entity {
super(row);
this.isProtected = !!this.isProtected;
/* true if content (meaning any kind of potentially encrypted content) is either not encrypted
/* true if content is either not encrypted
* or encrypted, but with available protected session (so effectively decrypted) */
this.isContentAvailable = true;
@@ -81,7 +82,7 @@ class Note extends Entity {
this.isContentAvailable = protectedSessionService.isProtectedSessionAvailable();
if (this.isContentAvailable) {
protectedSessionService.decryptNote(this);
this.title = protectedSessionService.decryptString(this.title);
}
else {
this.title = "[protected]";
@@ -116,34 +117,46 @@ class Note extends Entity {
if (this.isProtected) {
if (this.isContentAvailable) {
protectedSessionService.decryptNoteContent(this);
this.content = this.content === null ? null : protectedSessionService.decrypt(this.content);
}
else {
this.content = "";
}
}
if (this.isStringNote()) {
this.content = this.content === null
? ""
: this.content.toString("UTF-8");
}
}
return this.content;
if (this.isStringNote()) {
return this.content === null
? ""
: this.content.toString("UTF-8");
}
else {
return this.content;
}
}
/** @returns {Promise&lt;*>} */
async getJsonContent() {
const content = await this.getContent();
if (!content || !content.trim()) {
return null;
}
return JSON.parse(content);
}
/** @returns {Promise} */
async setContent(content) {
// force updating note itself so that dateChanged is represented correctly even for the content
if (content === null || content === undefined) {
throw new Error(`Cannot set null content to note ${this.noteId}`);
}
content = Buffer.isBuffer(content) ? content : Buffer.from(content);
// force updating note itself so that dateModified is represented correctly even for the content
this.forcedChange = true;
this.contentLength = content.byteLength;
await this.save();
this.content = content;
@@ -152,12 +165,12 @@ class Note extends Entity {
noteId: this.noteId,
content: content,
utcDateModified: dateUtils.utcNowDateTime(),
hash: utils.hash(this.noteId + "|" + content)
hash: utils.hash(this.noteId + "|" + content.toString())
};
if (this.isProtected) {
if (this.isContentAvailable) {
protectedSessionService.encryptNoteContent(pojo);
pojo.content = protectedSessionService.encrypt(pojo.content);
}
else {
throw new Error(`Cannot update content of noteId=${this.noteId} since we're out of protected session.`);
@@ -199,9 +212,7 @@ class Note extends Entity {
/** @returns {boolean} true if the note has string content (not binary) */
isStringNote() {
return ["text", "code", "relation-map", "search"].includes(this.type)
|| this.mime.startsWith('text/')
|| STRING_MIME_TYPES.includes(this.mime);
return utils.isStringNote(this.type, this.mime);
}
/** @returns {string} JS script environment - either "frontend" or "backend" */
@@ -221,26 +232,36 @@ class Note extends Entity {
return null;
}
async loadOwnedAttributesToCache() {
this.__ownedAttributeCache = await repository.getEntities(`SELECT * FROM attributes WHERE isDeleted = 0 AND noteId = ?`, [this.noteId]);
return this.__ownedAttributeCache;
}
/**
* @returns {Promise&lt;Attribute[]>} attributes belonging to this specific note (excludes inherited attributes)
* This method is a faster variant of getAttributes() which looks for only owned attributes.
* Use when inheritance is not needed and/or in batch/performance sensitive operations.
*
* This method can be significantly faster than the getAttributes()
* @param {string} [type] - (optional) attribute type to filter
* @param {string} [name] - (optional) attribute name to filter
* @returns {Promise&lt;Attribute[]>} note's "owned" attributes - excluding inherited ones
*/
async getOwnedAttributes(type, name) {
let query = `SELECT * FROM attributes WHERE isDeleted = 0 AND noteId = ?`;
const params = [this.noteId];
if (type) {
query += ` AND type = ?`;
params.push(type);
if (!this.__ownedAttributeCache) {
await this.loadOwnedAttributesToCache();
}
if (name) {
query += ` AND name = ?`;
params.push(name);
if (type &amp;&amp; name) {
return this.__ownedAttributeCache.filter(attr => attr.type === type &amp;&amp; attr.name === name);
}
else if (type) {
return this.__ownedAttributeCache.filter(attr => attr.type === type);
}
else if (name) {
return this.__ownedAttributeCache.filter(attr => attr.name === name);
}
else {
return this.__ownedAttributeCache.slice();
}
return await repository.getEntities(query, params);
}
/**
@@ -262,19 +283,26 @@ class Note extends Entity {
}
/**
* @param {string} [name] - attribute name to filter
* @param {string} [type] - (optional) attribute type to filter
* @param {string} [name] - (optional) attribute name to filter
* @returns {Promise&lt;Attribute[]>} all note's attributes, including inherited ones
*/
async getAttributes(name) {
async getAttributes(type, name) {
if (!this.__attributeCache) {
await this.loadAttributesToCache();
}
if (name) {
if (type &amp;&amp; name) {
return this.__attributeCache.filter(attr => attr.type === type &amp;&amp; attr.name === name);
}
else if (type) {
return this.__attributeCache.filter(attr => attr.type === type);
}
else if (name) {
return this.__attributeCache.filter(attr => attr.name === name);
}
else {
return this.__attributeCache;
return this.__attributeCache.slice();
}
}
@@ -283,7 +311,15 @@ class Note extends Entity {
* @returns {Promise&lt;Attribute[]>} all note's labels (attributes with type label), including inherited ones
*/
async getLabels(name) {
return (await this.getAttributes(name)).filter(attr => attr.type === LABEL);
return await this.getAttributes(LABEL, name);
}
/**
* @param {string} [name] - label name to filter
* @returns {Promise&lt;Attribute[]>} all note's labels (attributes with type label), excluding inherited ones
*/
async getOwnedLabels(name) {
return await this.getOwnedAttributes(LABEL, name);
}
/**
@@ -291,7 +327,7 @@ class Note extends Entity {
* @returns {Promise&lt;Attribute[]>} all note's label definitions, including inherited ones
*/
async getLabelDefinitions(name) {
return (await this.getAttributes(name)).filter(attr => attr.type === LABEL_DEFINITION);
return await this.getAttributes(LABEL_DEFINITION, name);
}
/**
@@ -299,7 +335,15 @@ class Note extends Entity {
* @returns {Promise&lt;Attribute[]>} all note's relations (attributes with type relation), including inherited ones
*/
async getRelations(name) {
return (await this.getAttributes(name)).filter(attr => attr.type === RELATION);
return await this.getAttributes(RELATION, name);
}
/**
* @param {string} [name] - relation name to filter
* @returns {Promise&lt;Attribute[]>} all note's relations (attributes with type relation), excluding inherited ones
*/
async getOwnedRelations(name) {
return await this.getOwnedAttributes(RELATION, name);
}
/**
@@ -322,7 +366,7 @@ class Note extends Entity {
* @returns {Promise&lt;Attribute[]>} all note's relation definitions including inherited ones
*/
async getRelationDefinitions(name) {
return (await this.getAttributes(name)).filter(attr => attr.type === RELATION_DEFINITION);
return await this.getAttributes(RELATION_DEFINITION, name);
}
/**
@@ -331,6 +375,7 @@ class Note extends Entity {
*/
invalidateAttributeCache() {
this.__attributeCache = null;
this.__ownedAttributeCache = null;
}
/** @returns {Promise&lt;void>} */
@@ -340,11 +385,10 @@ class Note extends Entity {
tree(noteId, level) AS (
SELECT ?, 0
UNION
SELECT branches.parentNoteId, tree.level + 1 FROM branches
SELECT branches.parentNoteId, tree.level + 1
FROM branches
JOIN tree ON branches.noteId = tree.noteId
JOIN notes ON notes.noteId = branches.parentNoteId
WHERE notes.isDeleted = 0
AND branches.isDeleted = 0
WHERE branches.isDeleted = 0
),
treeWithAttrs(noteId, level) AS (
SELECT * FROM tree
@@ -363,6 +407,11 @@ class Note extends Entity {
// we order by noteId so that attributes from same note stay together. Actual noteId ordering doesn't matter.
const filteredAttributes = attributes.filter((attr, index) => {
// if this exact attribute already appears then don't include it (can happen via cloning)
if (attributes.findIndex(it => it.attributeId === attr.attributeId) !== index) {
return false;
}
if (attr.isDefinition()) {
const firstDefinitionIndex = attributes.findIndex(el => el.type === attr.type &amp;&amp; el.name === attr.name);
@@ -406,6 +455,15 @@ class Note extends Entity {
return !!await this.getAttribute(type, name);
}
/**
* @param {string} type - attribute type (label, relation, etc.)
* @param {string} name - attribute name
* @returns {Promise&lt;boolean>} true if note has an attribute with given type and name (excluding inherited)
*/
async hasOwnedAttribute(type, name) {
return !!await this.getOwnedAttribute(type, name);
}
/**
* @param {string} type - attribute type (label, relation, etc.)
* @param {string} name - attribute name
@@ -420,7 +478,7 @@ class Note extends Entity {
/**
* @param {string} type - attribute type (label, relation, etc.)
* @param {string} name - attribute name
* @returns {Promise&lt;string>} attribute value of given type and name or null if no such attribute exists.
* @returns {Promise&lt;string|null>} attribute value of given type and name or null if no such attribute exists.
*/
async getAttributeValue(type, name) {
const attr = await this.getAttribute(type, name);
@@ -428,6 +486,17 @@ class Note extends Entity {
return attr ? attr.value : null;
}
/**
* @param {string} type - attribute type (label, relation, etc.)
* @param {string} name - attribute name
* @returns {Promise&lt;string|null>} attribute value of given type and name or null if no such attribute exists.
*/
async getOwnedAttributeValue(type, name) {
const attr = await this.getOwnedAttribute(type, name);
return attr ? attr.value : null;
}
/**
* Based on enabled, attribute is either set or removed.
*
@@ -447,7 +516,7 @@ class Note extends Entity {
}
/**
* Creates given attribute name-value pair if it doesn't exist.
* Update's given attribute's value or creates it if it doesn't exist
*
* @param {string} type - attribute type (label, relation, etc.)
* @param {string} name - attribute name
@@ -455,10 +524,18 @@ class Note extends Entity {
* @returns {Promise&lt;void>}
*/
async setAttribute(type, name, value) {
const attributes = await this.getOwnedAttributes();
let attr = attributes.find(attr => attr.type === type &amp;&amp; (value === undefined || attr.value === value));
const attributes = await this.loadOwnedAttributesToCache();
let attr = attributes.find(attr => attr.type === type &amp;&amp; attr.name === name);
if (!attr) {
if (attr) {
if (attr.value !== value) {
attr.value = value;
await attr.save();
this.invalidateAttributeCache();
}
}
else {
attr = new Attribute({
noteId: this.noteId,
type: type,
@@ -481,10 +558,10 @@ class Note extends Entity {
* @returns {Promise&lt;void>}
*/
async removeAttribute(type, name, value) {
const attributes = await this.getOwnedAttributes();
const attributes = await this.loadOwnedAttributesToCache();
for (const attribute of attributes) {
if (attribute.type === type &amp;&amp; (value === undefined || value === attribute.value)) {
if (attribute.type === type &amp;&amp; attribute.name === name &amp;&amp; (value === undefined || value === attribute.value)) {
attribute.isDeleted = true;
await attribute.save();
@@ -493,42 +570,104 @@ class Note extends Entity {
}
}
/**
* @return {Promise&lt;Attribute>}
*/
async addAttribute(type, name, value = "") {
const attr = new Attribute({
noteId: this.noteId,
type: type,
name: name,
value: value
});
await attr.save();
this.invalidateAttributeCache();
return attr;
}
async addLabel(name, value = "") {
return await this.addAttribute(LABEL, name, value);
}
async addRelation(name, targetNoteId) {
return await this.addAttribute(RELATION, name, targetNoteId);
}
/**
* @param {string} name - label name
* @returns {Promise&lt;boolean>} true if label exists (including inherited)
*/
async hasLabel(name) { return await this.hasAttribute(LABEL, name); }
/**
* @param {string} name - label name
* @returns {Promise&lt;boolean>} true if label exists (excluding inherited)
*/
async hasOwnedLabel(name) { return await this.hasOwnedAttribute(LABEL, name); }
/**
* @param {string} name - relation name
* @returns {Promise&lt;boolean>} true if relation exists (including inherited)
*/
async hasRelation(name) { return await this.hasAttribute(RELATION, name); }
/**
* @param {string} name - relation name
* @returns {Promise&lt;boolean>} true if relation exists (excluding inherited)
*/
async hasOwnedRelation(name) { return await this.hasOwnedAttribute(RELATION, name); }
/**
* @param {string} name - label name
* @returns {Promise&lt;Attribute>} label if it exists, null otherwise
* @returns {Promise&lt;Attribute|null>} label if it exists, null otherwise
*/
async getLabel(name) { return await this.getAttribute(LABEL, name); }
/**
* @param {string} name - label name
* @returns {Promise&lt;Attribute|null>} label if it exists, null otherwise
*/
async getOwnedLabel(name) { return await this.getOwnedAttribute(LABEL, name); }
/**
* @param {string} name - relation name
* @returns {Promise&lt;Attribute>} relation if it exists, null otherwise
* @returns {Promise&lt;Attribute|null>} relation if it exists, null otherwise
*/
async getRelation(name) { return await this.getAttribute(RELATION, name); }
/**
* @param {string} name - relation name
* @returns {Promise&lt;Attribute|null>} relation if it exists, null otherwise
*/
async getOwnedRelation(name) { return await this.getOwnedAttribute(RELATION, name); }
/**
* @param {string} name - label name
* @returns {Promise&lt;string>} label value if label exists, null otherwise
* @returns {Promise&lt;string|null>} label value if label exists, null otherwise
*/
async getLabelValue(name) { return await this.getAttributeValue(LABEL, name); }
/**
* @param {string} name - label name
* @returns {Promise&lt;string|null>} label value if label exists, null otherwise
*/
async getOwnedLabelValue(name) { return await this.getOwnedAttributeValue(LABEL, name); }
/**
* @param {string} name - relation name
* @returns {Promise&lt;string>} relation value if relation exists, null otherwise
* @returns {Promise&lt;string|null>} relation value if relation exists, null otherwise
*/
async getRelationValue(name) { return await this.getAttributeValue(RELATION, name); }
/**
* @param {string} name - relation name
* @returns {Promise&lt;string|null>} relation value if relation exists, null otherwise
*/
async getOwnedRelationValue(name) { return await this.getOwnedAttributeValue(RELATION, name); }
/**
* @param {string} name
* @returns {Promise&lt;Note>|null} target note of the relation or null (if target is empty or note was not found)
@@ -539,6 +678,16 @@ class Note extends Entity {
return relation ? await repository.getNote(relation.value) : null;
}
/**
* @param {string} name
* @returns {Promise&lt;Note>|null} target note of the relation or null (if target is empty or note was not found)
*/
async getOwnedRelationTarget(name) {
const relation = await this.getOwnedRelation(name);
return relation ? await repository.getNote(relation.value) : null;
}
/**
* Based on enabled, label is either set or removed.
*
@@ -560,7 +709,7 @@ class Note extends Entity {
async toggleRelation(enabled, name, value) { return await this.toggleAttribute(RELATION, enabled, name, value); }
/**
* Create label name-value pair if it doesn't exist yet.
* Update's given label's value or creates it if it doesn't exist
*
* @param {string} name - label name
* @param {string} [value] - label value
@@ -569,7 +718,7 @@ class Note extends Entity {
async setLabel(name, value) { return await this.setAttribute(LABEL, name, value); }
/**
* Create relation name-value pair if it doesn't exist yet.
* Update's given relation's value or creates it if it doesn't exist
*
* @param {string} name - relation name
* @param {string} [value] - relation value (noteId)
@@ -690,9 +839,9 @@ class Note extends Entity {
SELECT *
FROM attributes
WHERE noteId = ? AND
isDeleted = 0 AND
type = 'relation' AND
name IN ('internal-link', 'image-link', 'relation-map-link')`, [this.noteId]);
isDeleted = 0 AND
type = 'relation' AND
name IN ('internalLink', 'imageLink', 'relationMapLink', 'includeNoteLink')`, [this.noteId]);
}
/**
@@ -749,6 +898,36 @@ class Note extends Entity {
AND parent_notes.isDeleted = 0`, [this.noteId]);
}
/**
* @return {Promise&lt;string[][]>} - array of notePaths (each represented by array of noteIds constituting the particular note path)
*/
async getAllNotePaths() {
if (this.noteId === 'root') {
return [['root']];
}
const notePaths = [];
for (const parentNote of await this.getParentNotes()) {
for (const parentPath of await parentNote.getAllNotePaths()) {
parentPath.push(this.noteId);
notePaths.push(parentPath);
}
}
return notePaths;
}
/**
* @param ancestorNoteId
* @return {Promise&lt;boolean>} - true if ancestorNoteId occurs in at least one of the note's paths
*/
async isDescendantOfNote(ancestorNoteId) {
const notePaths = await this.getAllNotePaths();
return notePaths.some(path => path.includes(ancestorNoteId));
}
beforeSaving() {
if (!this.isDeleted) {
this.isDeleted = false;
@@ -762,6 +941,10 @@ class Note extends Entity {
this.utcDateCreated = dateUtils.utcNowDateTime();
}
if (this.contentLength === undefined) {
this.contentLength = -1;
}
super.beforeSaving();
if (this.isChanged) {
@@ -774,7 +957,7 @@ class Note extends Entity {
updatePojo(pojo) {
if (pojo.isProtected) {
if (this.isContentAvailable) {
protectedSessionService.encryptNote(pojo);
pojo.title = protectedSessionService.encrypt(pojo.title);
}
else {
// updating protected note outside of protected session means we will keep original ciphertexts
@@ -784,7 +967,9 @@ class Note extends Entity {
delete pojo.isContentAvailable;
delete pojo.__attributeCache;
delete pojo.__ownedAttributeCache;
delete pojo.content;
/** zero references to contentHash, probably can be removed */
delete pojo.contentHash;
}
}
@@ -805,7 +990,7 @@ module.exports = Note;</code></pre>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -31,28 +31,34 @@
const Entity = require('./entity');
const protectedSessionService = require('../services/protected_session');
const repository = require('../services/repository');
const utils = require('../services/utils');
const sql = require('../services/sql');
const dateUtils = require('../services/date_utils');
const syncTableService = require('../services/sync_table');
/**
* NoteRevision represents snapshot of note's title and content at some point in the past. It's used for seamless note versioning.
*
* @param {string} noteRevisionId
* @param {string} noteId
* @param {string} type
* @param {string} mime
* @param {string} title
* @param {string} content
* @param {string} isProtected
* @param {string} dateModifiedFrom
* @param {string} dateModifiedTo
* @param {string} utcDateModifiedFrom
* @param {string} utcDateModifiedTo
* @property {string} noteRevisionId
* @property {string} noteId
* @property {string} type
* @property {string} mime
* @property {string} title
* @property {int} contentLength
* @property {boolean} isErased
* @property {boolean} isProtected
* @property {string} dateLastEdited
* @property {string} dateCreated
* @property {string} utcDateLastEdited
* @property {string} utcDateCreated
* @property {string} utcDateModified
*
* @extends Entity
*/
class NoteRevision extends Entity {
static get entityName() { return "note_revisions"; }
static get primaryKeyName() { return "noteRevisionId"; }
static get hashedProperties() { return ["noteRevisionId", "noteId", "title", "content", "isProtected", "dateModifiedFrom", "dateModifiedTo", "utcDateModifiedFrom", "utcDateModifiedTo"]; }
static get hashedProperties() { return ["noteRevisionId", "noteId", "title", "contentLength", "isErased", "isProtected", "dateLastEdited", "dateCreated", "utcDateLastEdited", "utcDateCreated", "utcDateModified"]; }
constructor(row) {
super(row);
@@ -60,20 +66,120 @@ class NoteRevision extends Entity {
this.isProtected = !!this.isProtected;
if (this.isProtected) {
protectedSessionService.decryptNoteRevision(this);
if (protectedSessionService.isProtectedSessionAvailable()) {
this.title = protectedSessionService.decryptString(this.title);
}
else {
this.title = "[Protected]";
}
}
}
async getNote() {
return await repository.getEntity("SELECT * FROM notes WHERE noteId = ?", [this.noteId]);
return await repository.getNote(this.noteId);
}
/** @returns {boolean} true if the note has string content (not binary) */
isStringNote() {
return utils.isStringNote(this.type, this.mime);
}
/*
* Note revision content has quite special handling - it's not a separate entity, but a lazily loaded
* part of NoteRevision entity with it's own sync. Reason behind this hybrid design is that
* content can be quite large and it's not necessary to load it / fill memory for any note access even
* if we don't need a content, especially for bulk operations like search.
*
* This is the same approach as is used for Note's content.
*/
/** @returns {Promise&lt;*>} */
async getContent(silentNotFoundError = false) {
if (this.content === undefined) {
const res = await sql.getRow(`SELECT content, hash FROM note_revision_contents WHERE noteRevisionId = ?`, [this.noteRevisionId]);
if (!res) {
if (silentNotFoundError) {
return undefined;
}
else {
throw new Error("Cannot find note revision content for noteRevisionId=" + this.noteRevisionId);
}
}
this.content = res.content;
if (this.isProtected) {
if (protectedSessionService.isProtectedSessionAvailable()) {
this.content = protectedSessionService.decrypt(this.content);
}
else {
this.content = "";
}
}
}
if (this.isStringNote()) {
return this.content === null
? ""
: this.content.toString("UTF-8");
}
else {
return this.content;
}
}
/** @returns {Promise} */
async setContent(content) {
// force updating note itself so that utcDateModified is represented correctly even for the content
this.forcedChange = true;
this.contentLength = content === null ? 0 : content.length;
await this.save();
this.content = content;
const pojo = {
noteRevisionId: this.noteRevisionId,
content: content,
utcDateModified: dateUtils.utcNowDateTime(),
hash: utils.hash(this.noteRevisionId + "|" + content)
};
if (this.isProtected) {
if (protectedSessionService.isProtectedSessionAvailable()) {
pojo.content = protectedSessionService.encrypt(pojo.content);
}
else {
throw new Error(`Cannot update content of noteRevisionId=${this.noteRevisionId} since we're out of protected session.`);
}
}
await sql.upsert("note_revision_contents", "noteRevisionId", pojo);
await syncTableService.addNoteRevisionContentSync(this.noteRevisionId);
}
beforeSaving() {
if (this.isProtected) {
protectedSessionService.encryptNoteRevision(this);
super.beforeSaving();
if (this.isChanged) {
this.utcDateModified = dateUtils.utcNowDateTime();
}
}
// cannot be static!
updatePojo(pojo) {
if (pojo.isProtected) {
if (protectedSessionService.isProtectedSessionAvailable()) {
pojo.title = protectedSessionService.encrypt(pojo.title);
}
else {
// updating protected note outside of protected session means we will keep original ciphertexts
delete pojo.title;
}
}
super.beforeSaving();
delete pojo.content;
}
}
@@ -93,7 +199,7 @@ module.exports = NoteRevision;</code></pre>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -34,11 +34,11 @@ const dateUtils = require('../services/date_utils');
/**
* Option represents name-value pair, either directly configurable by the user or some system property.
*
* @param {string} name
* @param {string} value
* @param {boolean} isSynced
* @param {string} utcDateModified
* @param {string} utcDateCreated
* @property {string} name
* @property {string} value
* @property {boolean} isSynced
* @property {string} utcDateModified
* @property {string} utcDateCreated
*
* @extends Entity
*/
@@ -82,7 +82,7 @@ module.exports = Option;</code></pre>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -34,10 +34,10 @@ const dateUtils = require('../services/date_utils');
/**
* RecentNote represents recently visited note.
*
* @param {string} noteId
* @param {string} notePath
* @param {boolean} isDeleted
* @param {string} utcDateModified
* @property {string} noteId
* @property {string} notePath
* @property {boolean} isDeleted
* @property {string} utcDateModified
*
* @extends Entity
*/
@@ -75,7 +75,7 @@ module.exports = RecentNote;</code></pre>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -102,6 +102,313 @@
<h4 class="name" id="CreateNewNoteParams">CreateNewNoteParams</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 class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>parentNoteId</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last">MANDATORY</td>
</tr>
<tr>
<td class="name"><code>title</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last">MANDATORY</td>
</tr>
<tr>
<td class="name"><code>content</code></td>
<td class="type">
<span class="param-type">string</span>
|
<span class="param-type">buffer</span>
</td>
<td class="description last">MANDATORY</td>
</tr>
<tr>
<td class="name"><code>type</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last">text, code, file, image, search, book, relation-map - MANDATORY</td>
</tr>
<tr>
<td class="name"><code>mime</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last">value is derived from default mimes for type</td>
</tr>
<tr>
<td class="name"><code>isProtected</code></td>
<td class="type">
<span class="param-type">boolean</span>
</td>
<td class="description last">default is false</td>
</tr>
<tr>
<td class="name"><code>isExpanded</code></td>
<td class="type">
<span class="param-type">boolean</span>
</td>
<td class="description last">default is false</td>
</tr>
<tr>
<td class="name"><code>prefix</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last">default is empty string</td>
</tr>
<tr>
<td class="name"><code>notePosition</code></td>
<td class="type">
<span class="param-type">int</span>
</td>
<td class="description last">default is last existing notePosition in a parent + 10</td>
</tr>
</tbody>
</table>
<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#line212">line 212</a>
</li></ul></dd>
</dl>
<h4 class="name" id="CreateNoteAttribute">CreateNoteAttribute</h4>
@@ -290,6 +597,194 @@
<h4 class="name" id="CreateNoteAttribute">CreateNoteAttribute</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 class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>type</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
</td>
<td class="description last">attribute type - label, relation etc.</td>
</tr>
<tr>
<td class="name"><code>name</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
</td>
<td class="description last">attribute name</td>
</tr>
<tr>
<td class="name"><code>value</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
&lt;optional><br>
</td>
<td class="description last">attribute value</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#line233">line 233</a>
</li></ul></dd>
</dl>
<h4 class="name" id="CreateNoteExtraOptions">CreateNoteExtraOptions</h4>
@@ -558,7 +1053,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#line180">line 180</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>
@@ -594,7 +1089,7 @@
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</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.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -198,6 +198,66 @@ function BackendScriptApi(currentNote, apiParams) {
*/
this.toggleNoteInParent = cloningService.toggleNoteInParent;
/**
* @typedef {object} CreateNoteAttribute
* @property {string} type - attribute type - label, relation etc.
* @property {string} name - attribute name
* @property {string} [value] - attribute value
*/
/**
* Create text note. See also createNewNote() for more options.
*
* @param {string} parentNoteId
* @param {string} title
* @param {string} content
* @return {Promise&lt;{note: Note, branch: Branch}>}
*/
this.createTextNote = async (parentNoteId, title, content = '') => await noteService.createNewNote({
parentNoteId,
title,
content,
type: 'text'
});
/**
* Create data note - data in this context means object serializable to JSON. Created note will be of type 'code' and
* JSON MIME type. See also createNewNote() for more options.
*
* @param {string} parentNoteId
* @param {string} title
* @param {object} content
* @return {Promise&lt;{note: Note, branch: Branch}>}
*/
this.createDataNote = async (parentNoteId, title, content = {}) => await noteService.createNewNote({
parentNoteId,
title,
content: JSON.stringify(content, null, '\t'),
type: 'code',
mime: 'application/json'
});
/**
* @typedef {object} CreateNewNoteParams
* @property {string} parentNoteId - MANDATORY
* @property {string} title - MANDATORY
* @property {string|buffer} content - MANDATORY
* @property {string} type - text, code, file, image, search, book, relation-map - MANDATORY
* @property {string} mime - value is derived from default mimes for type
* @property {boolean} isProtected - default is false
* @property {boolean} isExpanded - default is false
* @property {string} prefix - default is empty string
* @property {int} notePosition - default is last existing notePosition in a parent + 10
*/
/**
* @method
*
* @param {CreateNewNoteParams} [params]
* @returns {Promise&lt;{note: Note, branch: Branch}>} object contains newly created entities note and branch
*/
this.createNewNote = noteService.createNewNote;
/**
* @typedef {object} CreateNoteAttribute
* @property {string} type - attribute type - label, relation etc.
@@ -216,6 +276,7 @@ function BackendScriptApi(currentNote, apiParams) {
/**
* @method
* @deprecated please use createNote() API method instead
*
* @param {string} parentNoteId - create new note under this parent
* @param {string} title
@@ -223,25 +284,38 @@ function BackendScriptApi(currentNote, apiParams) {
* @param {CreateNoteExtraOptions} [extraOptions={}]
* @returns {Promise&lt;{note: Note, branch: Branch}>} object contains newly created entities note and branch
*/
this.createNote = noteService.createNote;
this.createNote = async (parentNoteId, title, content = "", extraOptions= {}) => {
extraOptions.parentNoteId = parentNoteId;
extraOptions.title = title;
/**
* Creates new note according to given params and force all connected clients to refresh their tree.
*
* @method
*
* @param {string} parentNoteId - create new note under this parent
* @param {string} title
* @param {string} [content=""]
* @param {CreateNoteExtraOptions} [extraOptions={}]
* @returns {Promise&lt;{note: Note, branch: Branch}>} object contains newly created entities note and branch
*/
this.createNoteAndRefresh = async function(parentNoteId, title, content, extraOptions) {
const ret = await noteService.createNote(parentNoteId, title, content, extraOptions);
const parentNote = await repository.getNote(parentNoteId);
ws.refreshTree();
return ret;
// code note type can be inherited, otherwise text is default
extraOptions.type = parentNote.type === 'code' ? 'code' : 'text';
extraOptions.mime = parentNote.type === 'code' ? parentNote.mime : 'text/html';
if (extraOptions.json) {
extraOptions.content = JSON.stringify(content || {}, null, '\t');
extraOptions.type = 'code';
extraOptions.mime = 'application/json';
}
else {
extraOptions.content = content;
}
const {note, branch} = await noteService.createNewNote(extraOptions);
for (const attr of extraOptions.attributes || []) {
await attributeService.createAttribute({
noteId: note.noteId,
type: attr.type,
name: attr.name,
value: attr.value,
isInheritable: !!attr.isInheritable
});
}
return {note, branch};
};
/**
@@ -268,6 +342,14 @@ function BackendScriptApi(currentNote, apiParams) {
*/
this.getDateNote = dateNoteService.getDateNote;
/**
* Returns today's day note. If such note doesn't exist, it is created.
*
* @method
* @returns {Promise&lt;Note|null>}
*/
this.getTodayNote = dateNoteService.getTodayNote;
/**
* Returns note for the first date of the week of the given date.
*
@@ -310,9 +392,10 @@ function BackendScriptApi(currentNote, apiParams) {
* This method looks similar to toggleNoteInParent() but differs because we're looking up branch by prefix.
*
* @method
* @deprecated - this method is pretty confusing and serves specialized purpose only
* @param {string} noteId
* @param {string} prefix
* @param {string} [parentNoteId]
* @param {string|null} parentNoteId
*/
this.setNoteToParent = treeService.setNoteToParent;
@@ -332,12 +415,10 @@ function BackendScriptApi(currentNote, apiParams) {
this.sql = sql;
/**
* Trigger tree refresh in all connected clients. This is required when some tree change happens in
* the backend.
*
* @returns {Promise&lt;void>}
* @method
* @deprecated - this is now no-op since all the changes should be gracefully handled per widget
*/
this.refreshTree = ws.refreshTree;
this.refreshTree = () => {};
/**
* @return {{syncVersion, appVersion, buildRevision, dbVersion, dataDirectory, buildDate}|*} - object representing basic info about running Trilium version
@@ -362,7 +443,7 @@ module.exports = BackendScriptApi;
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -183,7 +183,65 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line6">line 6</a>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line11">line 11</a>
</li></ul></dd>
</dl>
<h4 class="name" id="isDeleted"><span class="type-signature"></span>isDeleted<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="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line23">line 23</a>
</li></ul></dd>
@@ -241,7 +299,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line17">line 17</a>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line21">line 21</a>
</li></ul></dd>
@@ -299,7 +357,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line8">line 8</a>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line13">line 13</a>
</li></ul></dd>
@@ -357,7 +415,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line13">line 13</a>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line17">line 17</a>
</li></ul></dd>
@@ -415,7 +473,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line11">line 11</a>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line15">line 15</a>
</li></ul></dd>
@@ -473,7 +531,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line15">line 15</a>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line19">line 19</a>
</li></ul></dd>
@@ -549,7 +607,109 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line21">line 21</a>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line27">line 27</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type"><a href="NoteShort.html">NoteShort</a></span>
</dd>
</dl>
<h4 class="name" id="getParentNote"><span class="type-signature">(async) </span>getParentNote<span class="signature">()</span><span class="type-signature"> &rarr; {<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_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line32">line 32</a>
</li></ul></dd>
@@ -651,7 +811,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line26">line 26</a>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line37">line 37</a>
</li></ul></dd>
@@ -719,13 +879,13 @@
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteFull.html">NoteFull</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="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#decorateWidget">decorateWidget</a></li><li><a href="global.html#doRenderBody">doRenderBody</a></li><li><a href="global.html#widgetCollapsedStateChangedEvent">widgetCollapsedStateChangedEvent</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</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

@@ -0,0 +1,280 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Class: KeyboardActions</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: KeyboardActions</h1>
<section>
<header>
<h2><span class="attribs"><span class="type-signature"></span></span>KeyboardActions<span class="signature">()</span><span class="type-signature"></span></h2>
<div class="class-description">blaa vlaa</div>
</header>
<article>
<div class="container-overview">
<h2>Constructor</h2>
<h4 class="name" id="KeyboardActions"><span class="type-signature"></span>new KeyboardActions<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="services_keyboard_actions.js.html">services/keyboard_action.js</a>, <a href="services_keyboard_actions.js.html#line5">line 5</a>
</li></ul></dd>
</dl>
</div>
<h3 class="subsection-title">Members</h3>
<h4 class="name" id="JUMP_TO"><span class="type-signature"></span>JUMP_TO<span class="type-signature"></span></h4>
<h5 class="subsection-title">Properties:</h5>
<table class="props">
<thead>
<tr>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="type">
<span class="param-type">string</span>
</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_keyboard_actions.js.html">services/keyboard_action.js</a>, <a href="services_keyboard_actions.js.html#line7">line 7</a>
</li></ul></dd>
</dl>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="KeyboardActions.html">KeyboardActions</a></li><li><a href="NoteFull.html">NoteFull</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>

View File

@@ -0,0 +1,522 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Class: NoteComplement</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: NoteComplement</h1>
<section>
<header>
<h2><span class="attribs"><span class="type-signature"></span></span>NoteComplement<span class="signature">()</span><span class="type-signature"></span></h2>
<div class="class-description">Complements the NoteShort with the main note content and other extra attributes</div>
</header>
<article>
<div class="container-overview">
<h2>Constructor</h2>
<h4 class="name" id="NoteComplement"><span class="type-signature"></span>new NoteComplement<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="entities_note_complement.js.html">entities/note_complement.js</a>, <a href="entities_note_complement.js.html#line5">line 5</a>
</li></ul></dd>
</dl>
</div>
<h3 class="subsection-title">Members</h3>
<h4 class="name" id="content"><span class="type-signature"></span>content<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="entities_note_complement.js.html">entities/note_complement.js</a>, <a href="entities_note_complement.js.html#line10">line 10</a>
</li></ul></dd>
</dl>
<h4 class="name" id="dateCreated"><span class="type-signature"></span>dateCreated<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="entities_note_complement.js.html">entities/note_complement.js</a>, <a href="entities_note_complement.js.html#line13">line 13</a>
</li></ul></dd>
</dl>
<h4 class="name" id="dateModified"><span class="type-signature"></span>dateModified<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="entities_note_complement.js.html">entities/note_complement.js</a>, <a href="entities_note_complement.js.html#line16">line 16</a>
</li></ul></dd>
</dl>
<h4 class="name" id="noteId"><span class="type-signature"></span>noteId<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="entities_note_complement.js.html">entities/note_complement.js</a>, <a href="entities_note_complement.js.html#line7">line 7</a>
</li></ul></dd>
</dl>
<h4 class="name" id="utcDateCreated"><span class="type-signature"></span>utcDateCreated<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="entities_note_complement.js.html">entities/note_complement.js</a>, <a href="entities_note_complement.js.html#line19">line 19</a>
</li></ul></dd>
</dl>
<h4 class="name" id="utcDateModified"><span class="type-signature"></span>utcDateModified<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="entities_note_complement.js.html">entities/note_complement.js</a>, <a href="entities_note_complement.js.html#line22">line 22</a>
</li></ul></dd>
</dl>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><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#decorateWidget">decorateWidget</a></li><li><a href="global.html#doRenderBody">doRenderBody</a></li><li><a href="global.html#widgetCollapsedStateChangedEvent">widgetCollapsedStateChangedEvent</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -29,6 +29,11 @@
<pre class="prettyprint source linenums"><code>class Attribute {
constructor(treeCache, row) {
this.treeCache = treeCache;
this.update(row);
}
update(row) {
/** @param {string} attributeId */
this.attributeId = row.attributeId;
/** @param {string} noteId */
@@ -43,12 +48,6 @@
this.position = row.position;
/** @param {boolean} isInheritable */
this.isInheritable = row.isInheritable;
/** @param {boolean} isDeleted */
this.isDeleted = row.isDeleted;
/** @param {string} utcDateCreated */
this.utcDateCreated = row.utcDateCreated;
/** @param {string} utcDateModified */
this.utcDateModified = row.utcDateModified;
}
/** @returns {NoteShort} */
@@ -56,8 +55,17 @@
return await this.treeCache.getNote(this.noteId);
}
get jsonValue() {
try {
return JSON.parse(this.value);
}
catch (e) {
return null;
}
}
get toString() {
return `Attribute(attributeId=${this.attributeId}, type=${this.type}, name=${this.name})`;
return `Attribute(attributeId=${this.attributeId}, type=${this.type}, name=${this.name}, value=${this.value})`;
}
}
@@ -71,13 +79,13 @@ export default Attribute;</code></pre>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteFull.html">NoteFull</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="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#decorateWidget">decorateWidget</a></li><li><a href="global.html#doRenderBody">doRenderBody</a></li><li><a href="global.html#widgetCollapsedStateChangedEvent">widgetCollapsedStateChangedEvent</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -30,11 +30,15 @@
class Branch {
constructor(treeCache, row) {
this.treeCache = treeCache;
this.update(row);
}
update(row) {
/** @param {string} primary key */
this.branchId = row.branchId;
/** @param {string} */
this.noteId = row.noteId;
this.note = null;
/** @param {string} */
this.parentNoteId = row.parentNoteId;
/** @param {int} */
@@ -43,11 +47,18 @@ class Branch {
this.prefix = row.prefix;
/** @param {boolean} */
this.isExpanded = !!row.isExpanded;
/** @param {boolean} */
this.isDeleted = !!row.isDeleted;
}
/** @returns {NoteShort} */
async getNote() {
return await this.treeCache.getNote(this.noteId);
return this.treeCache.getNote(this.noteId);
}
/** @returns {NoteShort} */
async getParentNote() {
return this.treeCache.getNote(this.parentNoteId);
}
/** @returns {boolean} true if it's top level, meaning its parent is root note */
@@ -70,13 +81,13 @@ export default Branch;</code></pre>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteFull.html">NoteFull</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="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#decorateWidget">decorateWidget</a></li><li><a href="global.html#doRenderBody">doRenderBody</a></li><li><a href="global.html#widgetCollapsedStateChangedEvent">widgetCollapsedStateChangedEvent</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -0,0 +1,76 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Source: entities/note_complement.js</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Source: entities/note_complement.js</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>/**
* Complements the NoteShort with the main note content and other extra attributes
*/
class NoteComplement {
constructor(row) {
/** @param {string} */
this.noteId = row.noteId;
/** @param {string} */
this.content = row.content;
/** @param {string} */
this.dateCreated = row.dateCreated;
/** @param {string} */
this.dateModified = row.dateModified;
/** @param {string} */
this.utcDateCreated = row.utcDateCreated;
/** @param {string} */
this.utcDateModified = row.utcDateModified;
}
}
export default NoteComplement;</code></pre>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><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#decorateWidget">decorateWidget</a></li><li><a href="global.html#doRenderBody">doRenderBody</a></li><li><a href="global.html#widgetCollapsedStateChangedEvent">widgetCollapsedStateChangedEvent</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>

View File

@@ -28,7 +28,6 @@
<article>
<pre class="prettyprint source linenums"><code>import server from '../services/server.js';
import Attribute from './attribute.js';
import branches from "../services/branches.js";
const LABEL = 'label';
const LABEL_DEFINITION = 'label-definition';
@@ -36,33 +35,21 @@ const RELATION = 'relation';
const RELATION_DEFINITION = 'relation-definition';
/**
* FIXME: rethink how attributes are cached in Note entities since they are long lived inside the cache.
* Attribute cache should be limited to "transaction".
*
* This note's representation is used in note tree and is kept in TreeCache.
*/
class NoteShort {
/**
* @param {TreeCache} treeCache
* @param {Object.&lt;string, Object>} row
* @param {Branch[]} branches - all relevant branches, i.e. where this note is either child or parent
*/
constructor(treeCache, row, branches) {
constructor(treeCache, row) {
this.treeCache = treeCache;
/** @param {string} */
this.noteId = row.noteId;
/** @param {string} */
this.title = row.title;
/** @param {boolean} */
this.isProtected = row.isProtected;
/** @param {string} one of 'text', 'code', 'file' or 'render' */
this.type = row.type;
/** @param {string} content-type, e.g. "application/json" */
this.mime = row.mime;
/** @param {boolean} */
this.archived = row.archived;
/** @param {string} */
this.cssClass = row.cssClass;
/** @type {string[]} */
this.attributes = [];
/** @type {string[]} */
this.targetRelations = [];
/** @type {string[]} */
this.parents = [];
@@ -75,19 +62,24 @@ class NoteShort {
/** @type {Object.&lt;string, string>} */
this.childToBranch = {};
for (const branch of branches) {
if (this.noteId === branch.noteId) {
this.parents.push(branch.parentNoteId);
this.parentToBranch[branch.parentNoteId] = branch.branchId;
}
else if (this.noteId === branch.parentNoteId) {
this.children.push(branch.noteId);
this.childToBranch[branch.noteId] = branch.branchId;
}
else {
throw new Error(`Unknown branch ${branch.branchId} for note ${this.noteId}`);
}
}
this.update(row);
}
update(row) {
/** @param {string} */
this.noteId = row.noteId;
/** @param {string} */
this.title = row.title;
/** @param {int} */
this.contentLength = row.contentLength;
/** @param {boolean} */
this.isProtected = !!row.isProtected;
/** @param {string} one of 'text', 'code', 'file' or 'render' */
this.type = row.type;
/** @param {string} content-type, e.g. "application/json" */
this.mime = row.mime;
/** @param {boolean} */
this.isDeleted = row.isDeleted;
}
addParent(parentNoteId, branchId) {
@@ -108,7 +100,7 @@ class NoteShort {
const branchIdPos = {};
for (const branchId of Object.values(this.childToBranch)) {
branchIdPos[branchId] = this.treeCache.branches[branchId].notePosition;
branchIdPos[branchId] = this.treeCache.getBranch(branchId).notePosition;
}
this.children.sort((a, b) => branchIdPos[this.childToBranch[a]] &lt; branchIdPos[this.childToBranch[b]] ? -1 : 1);
@@ -139,8 +131,13 @@ class NoteShort {
}
}
/** @returns {Promise&lt;Branch[]>} */
async getBranches() {
/** @returns {string[]} */
getBranchIds() {
return Object.values(this.parentToBranch);
}
/** @returns {Branch[]} */
getBranches() {
const branchIds = Object.values(this.parentToBranch);
return this.treeCache.getBranches(branchIds);
@@ -151,9 +148,10 @@ class NoteShort {
return this.children.length > 0;
}
/** @returns {Promise&lt;Branch[]>} */
async getChildBranches() {
const branchIds = Object.values(this.childToBranch);
/** @returns {Branch[]} */
getChildBranches() {
// don't use Object.values() to guarantee order
const branchIds = this.children.map(childNoteId => this.childToBranch[childNoteId]);
return this.treeCache.getBranches(branchIds);
}
@@ -163,9 +161,9 @@ class NoteShort {
return this.parents;
}
/** @returns {Promise&lt;NoteShort[]>} */
async getParentNotes() {
return await this.treeCache.getNotes(this.parents);
/** @returns {NoteShort[]} */
getParentNotes() {
return this.treeCache.getNotesFromCache(this.parents);
}
/** @returns {string[]} */
@@ -179,121 +177,251 @@ class NoteShort {
}
/**
* @param {string} [name] - attribute name to filter
* @returns {Promise&lt;Attribute[]>}
* @param {string} [type] - (optional) attribute type to filter
* @param {string} [name] - (optional) attribute name to filter
* @returns {Attribute[]} all note's attributes, including inherited ones
*/
async getAttributes(name) {
if (!this.attributeCache) {
this.attributeCache = (await server.get('notes/' + this.noteId + '/attributes'))
.map(attrRow => new Attribute(this.treeCache, attrRow));
getOwnedAttributes(type, name) {
const attrs = this.attributes
.map(attributeId => this.treeCache.attributes[attributeId])
.filter(attr => !!attr);
return this.__filterAttrs(attrs, type, name)
}
/**
* @param {string} [type] - (optional) attribute type to filter
* @param {string} [name] - (optional) attribute name to filter
* @returns {Attribute[]} all note's attributes, including inherited ones
*/
getAttributes(type, name) {
const ownedAttributes = this.getOwnedAttributes();
const attrArrs = [
ownedAttributes
];
for (const templateAttr of ownedAttributes.filter(oa => oa.type === 'relation' &amp;&amp; oa.name === 'template')) {
const templateNote = this.treeCache.getNoteFromCache(templateAttr.value);
if (templateNote) {
attrArrs.push(templateNote.getAttributes());
}
}
if (name) {
return this.attributeCache.filter(attr => attr.name === name);
if (this.noteId !== 'root') {
for (const parentNote of this.getParentNotes()) {
// these virtual parent-child relationships are also loaded into frontend tree cache
if (parentNote.type !== 'search') {
attrArrs.push(parentNote.getInheritableAttributes());
}
}
}
else {
return this.attributeCache;
const attributes = attrArrs.flat();
return this.__filterAttrs(attributes, type, name);
}
__filterAttrs(attributes, type, name) {
if (type &amp;&amp; name) {
return attributes.filter(attr => attr.type === type &amp;&amp; attr.name === name);
} else if (type) {
return attributes.filter(attr => attr.type === type);
} else if (name) {
return attributes.filter(attr => attr.name === name);
} else {
return attributes;
}
}
getInheritableAttributes() {
const attrs = this.getAttributes();
return attrs.filter(attr => attr.isInheritable);
}
/**
* @param {string} [name] - label name to filter
* @returns {Promise&lt;Attribute[]>} all note's labels (attributes with type label), including inherited ones
* @returns {Attribute[]} all note's labels (attributes with type label), including inherited ones
*/
async getLabels(name) {
return (await this.getAttributes(name)).filter(attr => attr.type === LABEL);
getOwnedLabels(name) {
return this.getOwnedAttributes(LABEL, name);
}
/**
* @param {string} [name] - label name to filter
* @returns {Promise&lt;Attribute[]>} all note's label definitions, including inherited ones
* @returns {Attribute[]} all note's labels (attributes with type label), including inherited ones
*/
async getLabelDefinitions(name) {
return (await this.getAttributes(name)).filter(attr => attr.type === LABEL_DEFINITION);
getLabels(name) {
return this.getAttributes(LABEL, name);
}
/**
* @param {string} [name] - label name to filter
* @returns {Attribute[]} all note's label definitions, including inherited ones
*/
getLabelDefinitions(name) {
return this.getAttributes(LABEL_DEFINITION, name);
}
/**
* @param {string} [name] - relation name to filter
* @returns {Promise&lt;Attribute[]>} all note's relations (attributes with type relation), including inherited ones
* @returns {Attribute[]} all note's relations (attributes with type relation), including inherited ones
*/
async getRelations(name) {
return (await this.getAttributes(name)).filter(attr => attr.type === RELATION);
getOwnedRelations(name) {
return this.getOwnedAttributes(RELATION, name);
}
/**
* @param {string} [name] - relation name to filter
* @returns {Promise&lt;Attribute[]>} all note's relation definitions including inherited ones
* @returns {Attribute[]} all note's relations (attributes with type relation), including inherited ones
*/
async getRelationDefinitions(name) {
return (await this.getAttributes(name)).filter(attr => attr.type === RELATION_DEFINITION);
getRelations(name) {
return this.getAttributes(RELATION, name);
}
/**
* @param {string} [name] - relation name to filter
* @returns {Attribute[]} all note's relation definitions including inherited ones
*/
getRelationDefinitions(name) {
return this.getAttributes(RELATION_DEFINITION, name);
}
/**
* @param {string} type - attribute type (label, relation, etc.)
* @param {string} name - attribute name
* @returns {Promise&lt;boolean>} true if note has an attribute with given type and name (including inherited)
* @returns {boolean} true if note has an attribute with given type and name (including inherited)
*/
async hasAttribute(type, name) {
return !!await this.getAttribute(type, name);
hasAttribute(type, name) {
return !!this.getAttribute(type, name);
}
/**
* @param {string} type - attribute type (label, relation, etc.)
* @param {string} name - attribute name
* @returns {Promise&lt;Attribute>} attribute of given type and name. If there's more such attributes, first is returned. Returns null if there's no such attribute belonging to this note.
* @returns {boolean} true if note has an attribute with given type and name (including inherited)
*/
async getAttribute(type, name) {
const attributes = await this.getAttributes();
return attributes.find(attr => attr.type === type &amp;&amp; attr.name === name);
hasOwnedAttribute(type, name) {
return !!this.getOwnedAttribute(type, name);
}
/**
* @param {string} type - attribute type (label, relation, etc.)
* @param {string} name - attribute name
* @returns {Promise&lt;string>} attribute value of given type and name or null if no such attribute exists.
* @returns {Attribute} attribute of given type and name. If there's more such attributes, first is returned. Returns null if there's no such attribute belonging to this note.
*/
async getAttributeValue(type, name) {
const attr = await this.getAttribute(type, name);
getOwnedAttribute(type, name) {
const attributes = this.getOwnedAttributes(type, name);
return attributes.length > 0 ? attributes[0] : 0;
}
/**
* @param {string} type - attribute type (label, relation, etc.)
* @param {string} name - attribute name
* @returns {Attribute} attribute of given type and name. If there's more such attributes, first is returned. Returns null if there's no such attribute belonging to this note.
*/
getAttribute(type, name) {
const attributes = this.getAttributes(type, name);
return attributes.length > 0 ? attributes[0] : 0;
}
/**
* @param {string} type - attribute type (label, relation, etc.)
* @param {string} name - attribute name
* @returns {string} attribute value of given type and name or null if no such attribute exists.
*/
getOwnedAttributeValue(type, name) {
const attr = this.getOwnedAttribute(type, name);
return attr ? attr.value : null;
}
/**
* @param {string} type - attribute type (label, relation, etc.)
* @param {string} name - attribute name
* @returns {string} attribute value of given type and name or null if no such attribute exists.
*/
getAttributeValue(type, name) {
const attr = this.getAttribute(type, name);
return attr ? attr.value : null;
}
/**
* @param {string} name - label name
* @returns {Promise&lt;boolean>} true if label exists (including inherited)
* @returns {boolean} true if label exists (excluding inherited)
*/
async hasLabel(name) { return await this.hasAttribute(LABEL, name); }
/**
* @param {string} name - relation name
* @returns {Promise&lt;boolean>} true if relation exists (including inherited)
*/
async hasRelation(name) { return await this.hasAttribute(RELATION, name); }
hasOwnedLabel(name) { return this.hasOwnedAttribute(LABEL, name); }
/**
* @param {string} name - label name
* @returns {Promise&lt;Attribute>} label if it exists, null otherwise
* @returns {boolean} true if label exists (including inherited)
*/
async getLabel(name) { return await this.getAttribute(LABEL, name); }
hasLabel(name) { return this.hasAttribute(LABEL, name); }
/**
* @param {string} name - relation name
* @returns {Promise&lt;Attribute>} relation if it exists, null otherwise
* @returns {boolean} true if relation exists (excluding inherited)
*/
async getRelation(name) { return await this.getAttribute(RELATION, name); }
hasOwnedRelation(name) { return this.hasOwnedAttribute(RELATION, name); }
/**
* @param {string} name - relation name
* @returns {boolean} true if relation exists (including inherited)
*/
hasRelation(name) { return this.hasAttribute(RELATION, name); }
/**
* @param {string} name - label name
* @returns {Promise&lt;string>} label value if label exists, null otherwise
* @returns {Attribute} label if it exists, null otherwise
*/
async getLabelValue(name) { return await this.getAttributeValue(LABEL, name); }
getOwnedLabel(name) { return this.getOwnedAttribute(LABEL, name); }
/**
* @param {string} name - label name
* @returns {Attribute} label if it exists, null otherwise
*/
getLabel(name) { return this.getAttribute(LABEL, name); }
/**
* @param {string} name - relation name
* @returns {Promise&lt;string>} relation value if relation exists, null otherwise
* @returns {Attribute} relation if it exists, null otherwise
*/
async getRelationValue(name) { return await this.getAttributeValue(RELATION, name); }
getOwnedRelation(name) { return this.getOwnedAttribute(RELATION, name); }
/**
* @param {string} name - relation name
* @returns {Attribute} relation if it exists, null otherwise
*/
getRelation(name) { return this.getAttribute(RELATION, name); }
/**
* @param {string} name - label name
* @returns {string} label value if label exists, null otherwise
*/
getOwnedLabelValue(name) { return this.getOwnedAttributeValue(LABEL, name); }
/**
* @param {string} name - label name
* @returns {string} label value if label exists, null otherwise
*/
getLabelValue(name) { return this.getAttributeValue(LABEL, name); }
/**
* @param {string} name - relation name
* @returns {string} relation value if relation exists, null otherwise
*/
getOwnedRelationValue(name) { return this.getOwnedAttributeValue(RELATION, name); }
/**
* @param {string} name - relation name
* @returns {string} relation value if relation exists, null otherwise
*/
getRelationValue(name) { return this.getAttributeValue(RELATION, name); }
/**
* @param {string} name
@@ -310,7 +438,7 @@ class NoteShort {
* @returns {Promise&lt;NoteShort[]>}
*/
async getRelationTargets(name) {
const relations = await this.getRelations(name);
const relations = this.getRelations(name);
const targets = [];
for (const relation of relations) {
@@ -325,17 +453,17 @@ class NoteShort {
* Cache is note instance scoped.
*/
invalidateAttributeCache() {
this.attributeCache = null;
this.__attributeCache = null;
}
/**
* Get relations which target this note
*
* @returns {Promise&lt;Attribute[]>}
* @returns {Attribute[]}
*/
async getTargetRelations() {
return (await server.get('notes/' + this.noteId + '/target-relations'))
.map(attrRow => new Attribute(this.treeCache, attrRow));
getTargetRelations() {
return this.targetRelations
.map(attributeId => this.treeCache.attributes[attributeId]);
}
get toString() {
@@ -345,11 +473,14 @@ class NoteShort {
get dto() {
const dto = Object.assign({}, this);
delete dto.treeCache;
delete dto.archived;
delete dto.attributeCache;
return dto;
}
getCssClass() {
const labels = this.getLabels('cssClass');
return labels.map(l => l.value).join(' ');
}
}
export default NoteShort;</code></pre>
@@ -362,13 +493,13 @@ export default NoteShort;</code></pre>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteFull.html">NoteFull</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="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#decorateWidget">decorateWidget</a></li><li><a href="global.html#doRenderBody">doRenderBody</a></li><li><a href="global.html#widgetCollapsedStateChangedEvent">widgetCollapsedStateChangedEvent</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

View File

@@ -95,6 +95,275 @@
<h3 class="subsection-title">Methods</h3>
<h4 class="name" id="decorateWidget"><span class="type-signature"></span>decorateWidget<span class="signature">()</span><span class="type-signature"></span></h4>
<div class="description">
for overriding
</div>
<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#line93">line 93</a>
</li></ul></dd>
</dl>
<h4 class="name" id="doRenderBody"><span class="type-signature">(async) </span>doRenderBody<span class="signature">()</span><span class="type-signature"></span></h4>
<div class="description">
for overriding
</div>
<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#line96">line 96</a>
</li></ul></dd>
</dl>
<h4 class="name" id="widgetCollapsedStateChangedEvent"><span class="type-signature"></span>widgetCollapsedStateChangedEvent<span class="signature">()</span><span class="type-signature"></span></h4>
<div class="description">
This event is used to synchronize collapsed state of all the tab-cached widgets since they are all rendered
separately but should behave uniformly for the user.
</div>
<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#line86">line 86</a>
</li></ul></dd>
</dl>
@@ -204,7 +473,7 @@
<td class="description last">name of the JAM icon to be used (e.g. "clock" for "jam-clock" icon)</td>
<td class="description last">name of the boxicon to be used (e.g. "time" for "bx-time" icon)</td>
</tr>
@@ -303,7 +572,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#line72">line 72</a>
<a href="services_frontend_script_api.js.html">services/frontend_script_api.js</a>, <a href="services_frontend_script_api.js.html#line76">line 76</a>
</li></ul></dd>
@@ -333,13 +602,13 @@
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteFull.html">NoteFull</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="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#decorateWidget">decorateWidget</a></li><li><a href="global.html#doRenderBody">doRenderBody</a></li><li><a href="global.html#widgetCollapsedStateChangedEvent">widgetCollapsedStateChangedEvent</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</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="Branch.html">Branch</a></li><li><a href="FrontendScriptApi.html">FrontendScriptApi</a></li><li><a href="NoteFull.html">NoteFull</a></li><li><a href="NoteShort.html">NoteShort</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="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#decorateWidget">decorateWidget</a></li><li><a href="global.html#doRenderBody">doRenderBody</a></li><li><a href="global.html#widgetCollapsedStateChangedEvent">widgetCollapsedStateChangedEvent</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.4</a>
</footer>
<script> prettyPrint(); </script>

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