Compare commits

...

666 Commits

Author SHA1 Message Date
zadam a15be82f00 release 0.35.2 2019-10-09 23:09:38 +02:00
zadam 6c3809e1db calendar widget styling for dark themes
(cherry picked from commit c9432990b7)
2019-10-09 23:07:15 +02:00
zadam 33a2cd21a3 fix double import of auto generated link relations
(cherry picked from commit 144e75da9e)
2019-10-09 23:05:52 +02:00
zadam 3eebce22e7 fix incorrect import of relations from tar
(cherry picked from commit 8d14a0d687)
2019-10-09 23:05:51 +02:00
zadam adae0625b9 rename var so it's not misleading
(cherry picked from commit dd147a7209)
2019-10-09 23:05:14 +02:00
Arne 5063cfb979 BackendAPI: Return Note created within createNoteAndRefresh (#647)
(cherry picked from commit 334a38c493)
2019-10-09 23:05:14 +02:00
zadam 0835930a8a fix creating child in relation map, closes #655 2019-10-09 23:04:01 +02:00
zadam 0ef6634d41 release 0.35.1 2019-09-30 22:18:23 +02:00
zadam f6fc24d11d use GFM extensions for markdown export, closes #638 2019-09-30 20:56:32 +02:00
zadam ed24e32305 fix typo in shell, closes #639 2019-09-30 20:43:56 +02:00
zadam 86df60bb74 "code as code" and "text as text" import settings are respected also with tar import 2019-09-30 20:22:09 +02:00
zadam 42cf02e9a4 library updates 2019-09-30 19:35:00 +02:00
zadam 3add997b49 release 0.35.0-beta 2019-09-09 21:32:48 +02:00
zadam 649862b01c fixed mobile layout 2019-09-09 21:31:50 +02:00
zadam f5228f87f0 widgets can have a help link with title 2019-09-09 21:23:04 +02:00
zadam 76f3e87790 small fixes 2019-09-09 20:29:07 +02:00
zadam 30c56cd8af template can now contain also content 2019-09-08 16:57:41 +02:00
zadam 16be0c1014 calendar now indicates whether date note already exists or not + tooltip 2019-09-08 16:30:33 +02:00
zadam c82de8b6b2 calendar widget implementation 2019-09-08 16:06:42 +02:00
zadam d3f2b71803 calendar widget setup 2019-09-08 13:08:01 +02:00
zadam f3955bcbdc various small fixes 2019-09-08 11:25:57 +02:00
zadam 90afb2a1ee improvements in widgets rendering - individual widget render is now async while composing them together to the sidebar is sync which solves some race problems 2019-09-08 09:40:29 +02:00
zadam 2dae9b9621 note revisions widget shows content length 2019-09-08 09:17:16 +02:00
zadam 521a9b0b2c link map will try to display max possible number of links 2019-09-07 22:36:08 +02:00
zadam 2cfe9b3c03 note revision widget displays only date and time, no time offset 2019-09-07 22:03:08 +02:00
zadam 45ee959c11 date notes are now created with template relations 2019-09-07 21:40:18 +02:00
zadam 3bf8546d51 added getOwnedAttribute() without attr inheritance which can speed up bulk operations significantly 2019-09-07 20:43:59 +02:00
zadam ca8b603bd9 fix attr invalidation after note change 2019-09-07 13:09:32 +02:00
zadam faae11f070 template attributes don't need isInheritable flag to take effect 2019-09-07 11:00:15 +02:00
zadam b069436039 added "edited notes on date" widget 2019-09-07 10:11:59 +02:00
zadam e828ef370d note short can lazy load note content 2019-09-06 23:36:08 +02:00
zadam 50a0400616 fix note type selection 2019-09-06 22:18:03 +02:00
zadam 0226b1e9a8 fixes 2019-09-06 20:50:57 +02:00
zadam 135102d2b5 fixes to note loading. Sidebar flickers way less after note change 2019-09-04 22:45:12 +02:00
zadam a17b8a053e refactoring of note loading 2019-09-04 22:13:22 +02:00
zadam fdc86bab50 lazy loading of opened tabs to speed up initial startup 2019-09-04 21:30:11 +02:00
zadam f885388bf7 avoid overflowing of long mime type 2019-09-03 22:06:49 +02:00
zadam aa96b33bc2 initial load of tabs can run partially asynchronously to speed things up 2019-09-03 22:01:45 +02:00
zadam e36d636f93 cloned notes are less conspicuous in the tree with only asterisk after a title 2019-09-03 21:34:20 +02:00
zadam 2e05cb1764 similar notes is getting updated automatically after the title change 2019-09-03 21:31:39 +02:00
zadam 9404e27cba similar notes is async'd a bit to not block the event loop too much 2019-09-03 21:16:14 +02:00
zadam 494ec0b051 introduction of @isArchived special filter. Fulltext now by default filters with @!isArchived, label search without filtering for archived 2019-09-03 20:16:38 +02:00
zadam 36b575c286 optimize length of type/mime type labels 2019-09-02 22:08:50 +02:00
zadam d1992b061c fix drag & drop for chrome and code editor 2019-09-02 21:58:03 +02:00
zadam a79aec85b5 speedup of similar notes widget 2019-09-02 21:36:24 +02:00
zadam 76dce5197f fix inline markdown import dialog 2019-09-02 21:23:55 +02:00
zadam 5d80df398b removed event log 2019-09-02 20:30:28 +02:00
zadam a6f57d7761 recent changes now display also newly created notes without any revisions, some extra improvements to the dialog 2019-09-02 20:26:18 +02:00
zadam a981df6282 fix dialog opening 2019-09-02 19:56:52 +02:00
zadam ae8a2bfb1b updated demo document based on changes in tar format 2019-09-01 22:43:16 +02:00
zadam 15a2fe2570 fixes in import & export related to the protected session 2019-09-01 22:09:55 +02:00
zadam 8dadc7e518 allow deleting notes including all the clones, closes #629 2019-09-01 20:57:25 +02:00
zadam c614bc3263 importing a note now creates internal link relations 2019-09-01 20:35:55 +02:00
zadam 1e50d88166 clones in export are now also md/html pages with link to the primary location 2019-09-01 16:46:36 +02:00
zadam c9cc2cb4f3 refactoring of similar notes path handling 2019-09-01 13:42:10 +02:00
zadam c8a5c71ec2 tweaks to similar notes + missing options init 2019-09-01 11:37:43 +02:00
zadam 55356963dd improvements to similar notes - now using dice's coefficient for better results 2019-09-01 11:33:45 +02:00
zadam 0e867a995f include linux-x64 pngquant binary to fix build issues 2019-09-01 10:11:29 +02:00
zadam 3ca37b2f42 widget can be also enabled/disabled using labels 2019-09-01 09:52:07 +02:00
zadam 0c78fda531 collpase type and mime to same row in note info widget 2019-09-01 09:16:08 +02:00
zadam 7c60080772 basic implementation of "similar notes" widget 2019-09-01 08:58:13 +02:00
zadam bf5a31dcdb strip out HTML headers during the import 2019-08-31 22:52:07 +02:00
zadam a5e38165ef remove H1 from the text during import if it matches note title 2019-08-31 22:45:57 +02:00
zadam fe6f19e611 imported notes from tar now have correct links even without meta file 2019-08-31 22:39:25 +02:00
zadam 576a07bcb7 export to tar now preserves image and note links 2019-08-31 11:15:32 +02:00
zadam 4be7ac7ae1 export fixing links WIP 2019-08-31 10:12:42 +02:00
zadam a81b00e130 fix link map zoom after reload and some tweaks to springy 2019-08-30 22:01:49 +02:00
zadam d4e27c1b76 fixed CSS lazy loading (same file could be loaded multiple times) 2019-08-30 21:22:52 +02:00
zadam be477f178b custom per-theme modal backdrop color 2019-08-30 20:34:32 +02:00
zadam de95b92f90 link map tweaks 2019-08-30 20:15:59 +02:00
zadam 89ed9027da updated export + image link parsing fix 2019-08-29 23:11:59 +02:00
zadam 1c0b55e422 fixes to link parsing and tweaks 2019-08-29 23:08:30 +02:00
zadam 10d089240a updated DB schema and initial options 2019-08-29 22:32:53 +02:00
zadam 84b1f1f24e text editor now support font size, color, background 2019-08-29 22:20:08 +02:00
zadam c8f59ea547 options UI for selecting support code note MIME types 2019-08-29 21:08:53 +02:00
zadam 9d958e1860 link map is kept centered on the active note box 2019-08-28 23:08:05 +02:00
zadam ec06b940f4 when hovering over a note, outgoing and incoming connections are highlighted, set limit 3 seconds to the layout 2019-08-28 22:16:12 +02:00
zadam f331172c7d fixes & tweaks 2019-08-28 21:15:16 +02:00
zadam 650d9e0b27 state management fixes 2019-08-28 20:29:10 +02:00
zadam ff1d312a43 link map fixes 2019-08-27 22:47:10 +02:00
zadam a4acbf3aea fixes for link map 2019-08-27 22:19:32 +02:00
zadam 242bea236f removed link remnants 2019-08-27 21:24:31 +02:00
zadam ca2f14a2d0 extracted link map into a service 2019-08-27 20:20:00 +02:00
zadam 48a654630f added checkboxes/todo lists and image resize, closes #264, #587 2019-08-27 19:50:57 +02:00
zadam cf5c1c1be1 implemented new way of adding extra languages to note type picker 2019-08-26 21:43:28 +02:00
zadam 0558c30b56 updated to ckeditor 12.4.0 2019-08-26 20:34:50 +02:00
zadam 36c87b7fa0 renamed "messagingService" to "ws" 2019-08-26 20:21:43 +02:00
zadam d039a5f24e widgets are respecting positions 2019-08-26 20:19:14 +02:00
zadam 3e3d111d76 lazy loading of note detail components 2019-08-26 19:49:19 +02:00
zadam ecb485c8bc removed frontend APIs to modify code note types 2019-08-25 23:12:58 +02:00
zadam 02ab59c9e0 render note type dropdown lazily 2019-08-25 23:09:22 +02:00
zadam 8e4e0bd543 fix global ko references 2019-08-25 22:31:02 +02:00
zadam bbe0e9e425 lazy loading of knockout (used only in attribute dialog) 2019-08-25 21:59:54 +02:00
zadam 24a3f814ed fix ctrl+enter in sql console 2019-08-25 21:55:36 +02:00
zadam 233a50dbb7 reimplementation of note type with jquery only 2019-08-25 21:48:56 +02:00
zadam 6d8f11d533 fix code editor sometimes not rendering 2019-08-25 19:11:42 +02:00
zadam 4e4beb26c6 codemirro 5.48.4 2019-08-25 18:46:32 +02:00
zadam 1f092c2656 widgets now use options object 2019-08-25 17:41:08 +02:00
zadam 9622b046e0 refactored options_init to options on frontend 2019-08-25 17:36:13 +02:00
zadam f9abea83f3 refactoring of access to options in frontend 2019-08-22 23:31:02 +02:00
zadam b84542064c saving of widget configuration 2019-08-22 22:14:01 +02:00
zadam 8ab2c924c4 widget ordering WIP 2019-08-22 20:58:43 +02:00
zadam 4b9415a619 widget config WIP 2019-08-21 23:16:13 +02:00
zadam c11479de58 options split into individual classes 2019-08-21 20:24:37 +02:00
zadam dddb02a286 sorting widgets in options WIP 2019-08-20 23:30:19 +02:00
zadam fab4c59f9b using dynamic import for dialogs and widgets to speed up initial load 2019-08-20 21:40:47 +02:00
zadam b818f020a7 option to configure if sidebar should be enabled in new tab 2019-08-19 23:29:42 +02:00
zadam 9888850c22 resizing sidebar in options 2019-08-19 23:02:19 +02:00
zadam 04209182c1 options dialog view split up 2019-08-19 21:55:08 +02:00
zadam 02c9dabcff added "what links here" widget 2019-08-19 20:59:40 +02:00
zadam c9d0b8cc40 link fixes 2019-08-19 20:19:42 +02:00
zadam 3cb421143f Link entity migrated to Attribute, WIP 2019-08-19 20:12:00 +02:00
zadam fd9b79e115 loading of custom widgets 2019-08-17 11:28:36 +02:00
zadam 53c4bb8a94 refactor widget constructor 2019-08-17 10:45:20 +02:00
zadam 723fc42d88 reverted some experimental changes regarding sidebar resizing 2019-08-17 09:21:30 +02:00
zadam 1882b089ab delete confirmation lists notes for deletion in a UL list, #438 2019-08-17 09:00:53 +02:00
zadam ad7a6c4d79 Merge remote-tracking branch 'origin/master' 2019-08-17 08:49:42 +02:00
zadam 48e0e797da hide tabContent during tab init to prevent flickering 2019-08-17 08:49:39 +02:00
parsehex fbb77d3e55 List note titles in delete confirmation (#619)
* list note titles in delete confirmation

* typo
2019-08-17 08:49:08 +02:00
zadam d1d8e54d20 fixed state persisting and loading 2019-08-16 21:52:36 +02:00
zadam f259c60b54 state is now applied to sidebar widgets 2019-08-16 21:29:44 +02:00
zadam aa981d3cd4 convert other widgets to StandardWidget base class 2019-08-15 21:18:33 +02:00
zadam f8118444f9 introduced a StandardWidget base class 2019-08-15 21:08:41 +02:00
zadam 59da25ef55 sidebar & widget state management WIP 2019-08-15 10:04:03 +02:00
zadam 61520bc3b3 Merge branch 'stable'
# Conflicts:
#	package-lock.json
#	package.json
2019-08-15 08:52:34 +02:00
zadam 5406b09f3a release 0.34.3 2019-08-13 21:48:56 +02:00
zadam 90f1bfb3e4 electron 6.0.2 2019-08-13 21:48:45 +02:00
zadam f30eec7737 make sure all keyboard shortcuts use utility methods to not break mobile frontend 2019-08-12 22:41:53 +02:00
zadam 493cd1a7e0 better behavior of activateNote frontend script 2019-08-12 22:25:42 +02:00
zadam dfa1ab65c6 allow requiring native node modules from backend scripts 2019-08-12 20:41:38 +02:00
zadam 963ed32ce4 allow user to choose theme during initial setup 2019-08-11 10:28:49 +02:00
zadam de4733e848 updating attributes widget based on sync data changes 2019-08-06 23:20:27 +02:00
zadam bfbc124e78 widgets can now listen to sync data changes 2019-08-06 22:39:27 +02:00
zadam fcd87b3e2d instantiate widgets dynamically 2019-08-06 21:36:54 +02:00
zadam 7bee93bb73 allow showing inherited attributes in the sidebar as well 2019-08-06 20:43:07 +02:00
zadam c0c36d10e5 add attributes to the sidebar and remove them from the bottom 2019-08-06 20:05:05 +02:00
zadam 6e260ee563 Merge branch 'stable' 2019-08-06 19:28:11 +02:00
zadam b1075d956f release 0.34.2 2019-08-01 21:37:59 +02:00
zadam 4dd6352aec use overflow-wrap instead of word-break which doesn't break words unless they really don't fit 2019-08-01 21:36:55 +02:00
zadam 6fe8bde720 package updates 2019-08-01 21:26:09 +02:00
zadam 0556ab5e66 Merge branch 'stable'
# Conflicts:
#	package.json
2019-07-30 22:11:20 +02:00
zadam 7060700225 fix mobile tree not expanding automatically on load 2019-07-30 21:18:43 +02:00
zadam 385b79ad34 Merge remote-tracking branch 'origin/t35'
# Conflicts:
#	src/views/tabs.ejs
2019-07-28 22:38:02 +02:00
zadam b8509c487d release 0.34.1 2019-07-28 15:02:36 +02:00
zadam 083dee9bdd note activation from API will also scroll to it / focus 2019-07-28 14:47:35 +02:00
zadam 0c2dd6aa35 fix distraction free mode 2019-07-28 14:36:40 +02:00
zadam 743c15aacc fix code editor in mobile 2019-07-28 14:23:41 +02:00
zadam 263bff903c mobile frontend shows only the active tab 2019-07-28 14:08:05 +02:00
zadam 741dfaf2de hide tab row in distraction free mode 2019-07-28 13:50:46 +02:00
zadam e4e4f73638 styling card header 2019-07-28 13:45:50 +02:00
zadam 85e4bd817b note revisions sidebar 2019-07-25 22:31:09 +02:00
zadam 78ffac8232 logging API auth rejections 2019-07-25 21:05:16 +02:00
zadam b488adc330 sidebar POC WIP 2019-07-24 22:52:51 +02:00
zadam a06bd877c9 Merge branch 'master' into t35 2019-07-24 21:25:21 +02:00
zadam b3834324f6 fix sync proxy with TLS 2019-07-24 20:47:41 +02:00
zadam d351134b75 Merge branch 'master' into t35 2019-07-22 22:46:47 +02:00
zadam ea0835561c option to use node's http client for sync without proxy 2019-07-22 22:46:06 +02:00
zadam b0c0c5f56b release 0.34.0-beta 2019-07-21 21:57:35 +02:00
zadam 849fad0421 link map in sidebar POC 2019-07-21 21:55:48 +02:00
zadam eb28a3b0c9 note info sidebar widget 2019-07-21 11:32:38 +02:00
zadam 5283b489dc sidebar skeleton 2019-07-21 10:17:08 +02:00
zadam d54f848572 use dev icon in dev environment 2019-07-21 09:14:56 +02:00
zadam 1ac0c4f874 fix scrollbar styling in both ff and chrome (white corner in dark themes when both scrollbars are present) 2019-07-20 22:14:40 +02:00
zadam 3850f52401 add ResizeObserver to tabs with fallback for older firefox 2019-07-20 22:01:50 +02:00
zadam 6d5f8e0562 added web clipper to readme 2019-07-20 14:27:36 +02:00
zadam 04633bdf3a set clip type from the incoming param 2019-07-19 21:03:47 +02:00
zadam 97219aa12e removed unused clipper image API (migrated to clippings) 2019-07-18 22:35:16 +02:00
zadam e825abf893 Merge remote-tracking branch 'origin/master' 2019-07-18 20:20:45 +02:00
zadam 63b655cff4 package updates 2019-07-18 20:20:38 +02:00
Yevhen Kolomeiko 0524942d11 fix typo (#592) 2019-07-12 07:16:37 +02:00
zadam b5d75f183a update to ckeditor 12.3.1 2019-07-11 22:30:40 +02:00
zadam 706fc647ff Merge branch 'stable'
# Conflicts:
#	package.json
2019-07-11 22:27:27 +02:00
zadam 13e9f9f9e7 release 0.33.7 2019-07-11 20:55:56 +02:00
zadam a76dcb44ae improvements in the exported file extensions 2019-07-11 20:54:57 +02:00
zadam b9373806cf fix doubling of extension 2019-07-11 20:40:40 +02:00
zadam 9de2927304 image import/export related fixes 2019-07-10 23:01:30 +02:00
zadam c3e1126489 backported image fixes 2019-07-10 20:38:27 +02:00
zadam 3413c9ed64 backport notePath handling fixes from master 2019-07-10 20:35:01 +02:00
Xavier NUNN dcebcb0e73 Add host option (#588)
* Added option to configure host

* Updated sample config
2019-07-09 22:50:20 +02:00
zadam 3d7a5f20e7 make it again possible to open notes through URL hash 2019-07-09 22:12:05 +02:00
zadam 6a99af64a8 added clipper protocol version 2019-07-07 22:27:06 +02:00
zadam 7d57961ab2 make clipper api authenticated for server and unauthenticated for local electron 2019-07-07 13:12:40 +02:00
zadam 95a773e5c9 clipper doesn't open new tab if the note is already loaded in existing tab 2019-07-07 11:15:55 +02:00
zadam a912b2f23d choose port dynamically from range based on environment 2019-07-07 10:49:34 +02:00
zadam 36b581489c saving selections adds to the existing date note instead of creating new one each time 2019-07-06 23:54:48 +02:00
zadam 976684a3a8 save note in clipper 2019-07-06 16:48:06 +02:00
zadam 093dfb4a39 Merge branch 'stable' 2019-07-06 13:14:46 +02:00
zadam ddf381f92d fixed duplicated notes after creating into a folder which wasn't yet loaded 2019-07-06 13:14:33 +02:00
zadam 2b44f3bc76 fixed websocket reconnection 2019-07-06 12:03:51 +02:00
zadam 7b1fdfabf8 upgrade ckeditor to 12.3.0 2019-07-04 19:53:10 +02:00
zadam 070e8d9647 Merge branch 'stable' 2019-07-03 20:51:34 +02:00
zadam bf3360572a nest code editor instance to avoid visibility issues 2019-07-03 20:37:59 +02:00
zadam e5036318af fix enter on title to the code editor 2019-07-03 20:29:55 +02:00
zadam 6d2394a9da release 0.33.6 2019-07-02 22:26:05 +02:00
zadam 427a266c57 Merge branch 'stable' 2019-07-02 21:56:23 +02:00
zadam 196264b8c2 use bootstrap modal to confirm note deletion which fixes #582 2019-07-02 21:54:37 +02:00
zadam afe24866f0 some debug logging for duplicated nodes 2019-07-02 20:35:06 +02:00
zadam d18a20cc06 fix focus issue from title to the text content with tab/enter 2019-07-02 20:28:57 +02:00
zadam e94669de03 Merge branch 'stable' 2019-07-01 21:36:02 +02:00
zadam 9c91b0459e release 0.33.5 2019-06-30 21:47:04 +02:00
zadam b161db064e choose only desired context menu items 2019-06-30 21:34:19 +02:00
zadam ec4abe0d81 Merge branch 'stable' 2019-06-30 20:15:37 +02:00
zadam af21dd4463 fix mobile text editor display 2019-06-30 20:14:57 +02:00
zadam ef46727870 Merge branch 'stable' 2019-06-30 19:58:56 +02:00
zadam 1ea0d283de fix text instance sometimes remaining displayed when switching to e.g. image 2019-06-30 19:41:26 +02:00
zadam ed380e09c9 context menu WIP 2019-06-30 18:56:46 +02:00
zadam b5daa83d69 upgrades + removal of unused test 2019-06-30 11:22:10 +02:00
zadam c4b957427d implement print, closes #581 2019-06-29 22:57:47 +02:00
zadam 2f3b256272 Merge branch 'stable' 2019-06-29 20:37:51 +02:00
zadam 6e3d8472e1 avoid duplicate key error 2019-06-28 21:50:15 +02:00
zadam 2a9f36a027 fix activating parent note after delete 2019-06-27 22:58:04 +02:00
zadam cf3726289c attempt to fix the duplicate issue 2019-06-27 21:24:25 +02:00
zadam c8e4a5c9e7 release 0.33.4 2019-06-26 21:20:30 +02:00
zadam 3851bedb57 Merge branch 't34' 2019-06-26 21:11:27 +02:00
zadam a3951f1cce make sure autocomplete is closed when navigating to note 2019-06-26 21:08:54 +02:00
zadam 7c77ae758b fix frontend reload again 2019-06-26 20:49:17 +02:00
zadam 20d3d61cec release 0.33.3 2019-06-24 20:47:50 +02:00
zadam 1b831f94a9 fix orphan note autocomplete, closes #569 2019-06-24 20:45:35 +02:00
zadam 3f241553aa fix pngquant for linux-x64 2019-06-24 20:27:28 +02:00
zadam 8624c83108 use 127.0.0.1 instead of localhost, #577 2019-06-24 20:26:28 +02:00
zadam d49cae9cea fix update of window title during note renaming 2019-06-24 20:12:04 +02:00
zadam 174128447b token auth to /login 2019-06-23 21:22:08 +02:00
zadam 5d213eea7e basic webp support 2019-06-23 15:22:05 +02:00
zadam f45e25172b opening links from the clipper 2019-06-23 13:25:00 +02:00
zadam ec87856ef4 save image 2019-06-23 12:16:26 +02:00
zadam 6feb7ad1d5 selection clipping now supports images 2019-06-23 11:25:15 +02:00
zadam 6833e84d55 fix pngquant for linux-x64 2019-06-23 09:10:06 +02:00
zadam 154a575701 cleanup + context menu clip now works 2019-06-22 19:49:48 +02:00
zadam 504b2e2c4a Merge pull request #574 from maurerit/master
Build failed without python for arm
2019-06-21 09:10:17 +02:00
Matt Maurer 2c5292222f Build failed without python for arm 2019-06-20 23:45:31 +00:00
zadam 989da8877b added link map 2019-06-20 10:20:44 +02:00
zadam 70591eadd5 release 0.33.2-beta 2019-06-20 09:39:11 +02:00
zadam fead3cd7ad fix note export/import/branch prefix to use right-clicked note as opposed to current active 2019-06-20 09:37:18 +02:00
zadam a7cf3cdf05 fix unloading protected session after the timeout, fixes #571 2019-06-19 22:23:55 +02:00
zadam 5372f71faa hide menu bar 2019-06-19 20:45:19 +02:00
zadam 3b76939f17 distinction between unfocused active and hovered node - unfocused active has dashed border 2019-06-17 22:30:26 +02:00
zadam c827d38f39 when single note is selected and it's the same that was right clicked for context menu, then we treat it as no-selection action 2019-06-17 22:25:22 +02:00
zadam 1e7586fae4 context menu items are now disabled when there are selected notes and the item does not support actions on multiple items 2019-06-17 20:34:00 +02:00
zadam ee89111bfb fix clipboard operation for single nodes 2019-06-16 18:07:22 +02:00
zadam 288b3077b2 context menu items are now disabled when there are selected notes and the item does not support actions on multiple items 2019-06-16 12:06:06 +02:00
zadam 5c1922ac9f release 0.33.1-beta 2019-06-16 11:13:37 +02:00
zadam 93f1d46104 fix tree activation/focus after deleting node 2019-06-16 11:12:07 +02:00
zadam c5daaf541a active note has also border to make it more prominent 2019-06-16 10:53:30 +02:00
zadam 12b17b1e9e fix ctrl+. to switch focus to note tree 2019-06-16 10:41:22 +02:00
zadam ad46ba7d0f fix fancytree navigation bug before official release, use unminified build in the meantime 2019-06-16 09:44:23 +02:00
zadam 44f592c6cb fix reload 2019-06-16 09:15:37 +02:00
zadam 943b35fb7d fix delete with keyboard and context menu regarding the selection 2019-06-13 22:55:06 +02:00
zadam f1967fd466 fix unhoisting note 2019-06-13 22:45:55 +02:00
zadam ce2404b18a add link to link map to README 2019-06-12 22:10:05 +02:00
zadam cdd53a39f1 release 0.33.0-beta 2019-06-12 21:45:05 +02:00
zadam c646019536 ignore electron error 2019-06-12 21:44:33 +02:00
zadam c8049f0efe small fixes 2019-06-12 19:59:52 +02:00
zadam f2c497049b node updated to 12, electron to 6 2019-06-11 21:56:21 +02:00
zadam d713274ae2 link map tweaks 2019-06-11 21:52:00 +02:00
zadam a72eeb9a98 check sync version before setting up the sync, fixes #559 2019-06-11 20:42:06 +02:00
zadam 41cdd5c640 npm updates 2019-06-10 23:00:50 +02:00
zadam 4cde65d171 close currently active dialog if a different one is activated 2019-06-10 22:45:03 +02:00
zadam 27659805f6 redesign of drag & drop, separation of active, focused and active notes in the tree, fixes #565 2019-06-10 21:47:08 +02:00
zadam 8ab081a3fd configuration of displayed link types + max number of links 2019-06-10 14:33:59 +02:00
zadam ccbb2e2e12 link map visual tweaks 2019-06-10 11:22:52 +02:00
zadam 2bf2ec5a6c link map WIP 2019-06-09 21:48:30 +02:00
zadam 4329675c60 dynamic display of link map 2019-06-09 19:18:14 +02:00
zadam 412b0377e9 added panzoom to link map 2019-06-09 11:50:11 +02:00
zadam 69e48ff4d7 fix links table reference 2019-06-09 11:16:00 +02:00
zadam 4cacd1dfa2 Merge branch 'stable'
# Conflicts:
#	libraries/ckeditor/ckeditor.js
#	libraries/ckeditor/ckeditor.js.map
2019-06-09 10:20:45 +02:00
zadam 0c8ad1b46e disable media embed in ckeditor, fixes #564 2019-06-09 09:58:25 +02:00
zadam d3ac7b0939 fix disappearing expander in some cases, closes #562 2019-06-07 22:37:10 +02:00
zadam e0306d4ad7 ckeditor upgraded to 12.2.0 2019-06-06 21:33:59 +02:00
zadam 1f3d726048 Merge branch 'stable'
# Conflicts:
#	package-lock.json
2019-06-06 21:24:25 +02:00
zadam f3ed7e936d focus input on shown modal in branch prefix dialog, fixes #560 2019-06-06 21:16:12 +02:00
zadam 547ad7221d release 0.32.4 2019-06-05 22:53:34 +02:00
zadam 97a258c0c6 include sync version in sync seed request, #559 2019-06-05 22:50:03 +02:00
zadam 19a154c2f4 fix direct migration from 0.30 to 0.32, closes #557 2019-06-05 22:07:12 +02:00
zadam b389ec5ea3 enter/leave protected session button is not refreshed after entering from note detail (not dialog), fixes #555
(cherry picked from commit 0a0663be69)
2019-06-05 21:42:58 +02:00
zadam 412375e92f import should recognize all suported code note file types, fixes #554 2019-06-05 21:27:07 +02:00
zadam 4b96ada781 link map WIP 2019-06-04 22:57:10 +02:00
zadam 87b16f3325 link map WIP 2019-06-03 22:55:59 +02:00
zadam 0a0663be69 enter/leave protected session button is not refreshed after entering from note detail (not dialog), fixes #555 2019-06-03 20:36:37 +02:00
zadam 7eed076674 link router/loading 2019-06-02 17:12:18 +02:00
zadam b5143c152b link map empty dialog 2019-06-02 15:35:57 +02:00
zadam 6ef8a4c018 Merge branch 'next'
# Conflicts:
#	package.json
2019-06-02 15:22:15 +02:00
zadam ebd26f85bd release 0.32.3 2019-06-02 14:04:32 +02:00
zadam fbfb7b3b30 sync endpoints should not set csrf cookie, #541 2019-06-02 13:52:31 +02:00
zadam cfb313b60e sync endpoints should not set csrf cookie, #541 2019-06-02 13:47:59 +02:00
zadam 54e37dea20 codemirror updated to 5.47.0 2019-06-02 09:59:07 +02:00
zadam 5b14358620 fix folder status rendering issues when opening not-yet-loaded notes 2019-06-01 20:54:39 +02:00
zadam c4669cbaa3 fallback to display empty tab if the requested note doesn't exist anymore 2019-06-01 20:32:11 +02:00
zadam 74b41c9911 tree reloads should preserve activated node, fixes #552 2019-06-01 14:12:27 +02:00
zadam d08a36174d attribute sync should trigger note reload, fixes #551 2019-06-01 12:14:09 +02:00
zadam e845b80e10 fancytree upgrade to 2.31.0 2019-05-31 18:50:41 +02:00
zadam b0303ef529 updated sqlite binaries for electron 6 / node 12 2019-05-31 18:46:23 +02:00
zadam 68f67ec6ee package upgrades 2019-05-31 18:39:18 +02:00
zadam 20ae67f510 Merge branch 'master' into next
# Conflicts:
#	package-lock.json
#	package.json
2019-05-31 18:30:16 +02:00
zadam 237749e4af make recent notes dialog scrollable 2019-05-30 20:58:01 +02:00
zadam 15f4782947 make node activation after load clearer 2019-05-30 20:55:39 +02:00
zadam d48efd1925 FIXME 2019-05-29 23:34:23 +02:00
zadam 883d726622 release 0.32.2-beta 2019-05-29 23:14:59 +02:00
zadam 0a0cac5f41 added extra logging for debugging CSRF issues 2019-05-29 23:13:15 +02:00
zadam 012a18be00 put tabContext into frontend script API 2019-05-29 21:48:48 +02:00
zadam 890c00d4ba make frontendStartup event deterministic after the tree and tabs are loaded, fixes #543 2019-05-29 21:10:28 +02:00
zadam bb43014230 hide search help tooltip on executed search 2019-05-29 20:27:48 +02:00
zadam 53a995fecb fix database anonymization 2019-05-29 19:57:50 +02:00
zadam 8d3262d232 fix setting the title bar when switching note 2019-05-29 19:55:05 +02:00
zadam 373ec4ac50 Merge pull request #542 from spantaleev/exit-on-sigint
Exit on SIGINT
2019-05-29 19:40:04 +02:00
zadam 3fdecee95f fix bug with unresponsive tree after tree reload 2019-05-28 20:22:16 +02:00
Slavi Pantaleev 86b9f5a8b0 Exit on SIGINT
Pressing Ctrl+C used to not exit the application
(at least when running the Docker image).

Explicitly catching the `SIGINT` interrupt signal and exiting
fixes the problem.

We currently make it exit immediately as soon as the signal arrives.

In the future, it may be preferable to do dispatch some event and
try to exit more gracefully (finish any ongoing synchronization work,
etc.)
Still, I think it's better to exit directly than to not do anything at
all, in which case `SIGKILL` is likely to follow and kill the process
even more abruptly.
2019-05-28 13:38:32 +03:00
zadam 873b60b00d release 0.32.1-beta 2019-05-27 21:39:43 +02:00
zadam fc58086f6e fix super long line in code editor blowing up / overflowing the content grid cell width 2019-05-27 21:02:09 +02:00
zadam 40cec31099 schema update 2019-05-27 19:34:18 +02:00
zadam 33733d3ab7 use node 12 for server/docker builds 2019-05-27 19:12:34 +02:00
zadam f08bf0be15 upgrade to electron 6.0.0-beta.4 2019-05-23 19:59:23 +02:00
zadam 296cb7236f Merge branch 'stable'
# Conflicts:
#	package.json
#	src/services/build.js
2019-05-23 19:32:04 +02:00
zadam d614967d62 release 0.32.0-beta 2019-05-22 22:28:35 +02:00
zadam 35648b9f37 fix protected shield background visibility 2019-05-22 22:26:55 +02:00
zadam 494a980ecb fixes for drag & create new note in relation map 2019-05-22 22:22:29 +02:00
zadam 810aa8c2fb tab height tweak 2019-05-22 22:09:53 +02:00
zadam 027b3eaed8 fix tab dragging issue 2019-05-22 21:59:14 +02:00
zadam dedc1e708f fix redirect after login 2019-05-22 21:25:13 +02:00
zadam 79956b5676 mobile web fixes 2019-05-22 20:53:59 +02:00
zadam 48b1aece4d fix history navigation 2019-05-21 22:35:01 +02:00
zadam eee75bd2e8 fix node focus after hoisting 2019-05-21 22:07:08 +02:00
zadam 29828f8e8f fix recent notes (db & sync version increase) 2019-05-21 21:47:28 +02:00
zadam ced02b42b5 new card for tab operation in built-in help 2019-05-21 20:43:03 +02:00
zadam 3fe9218ea8 refactoring/cleanup 2019-05-21 20:24:40 +02:00
zadam ff5ea8b311 style change to active tab 2019-05-21 19:54:57 +02:00
zadam 32fae5e9e8 same note in different tabs are synced 2019-05-20 22:25:04 +02:00
zadam 48b4488a58 deleting a note will close all tabs containing the note 2019-05-20 21:50:01 +02:00
zadam aead6a44de render notes should now return elements to append instead of modifying DOM directly 2019-05-19 21:52:28 +02:00
zadam f59f08fa0e fix note paths 2019-05-19 21:22:35 +02:00
zadam 119d7367da tree fixes 2019-05-19 18:21:29 +02:00
zadam ddb99a0917 ctrl+enter should work only on tab detail 2019-05-19 16:56:16 +02:00
zadam ecfba95841 calendar root can now have datePattern and monthPattern to define the names 2019-05-19 11:30:17 +02:00
zadam 597eb5a300 ctrl+alt+p will create new note in a new tab 2019-05-19 10:46:19 +02:00
zadam f3e7e6bbe7 fix render note attributes 2019-05-19 10:30:00 +02:00
zadam 722380e7b8 fix access to editor instance if active note is not text 2019-05-19 09:13:13 +02:00
zadam 8c46e96397 tab styling tweaks 2019-05-19 08:47:00 +02:00
zadam f22cc37df7 middle click can now open links in new tab (and close tab) 2019-05-15 21:50:27 +02:00
zadam dd1fc23fe8 work on hash & history 2019-05-14 22:29:47 +02:00
zadam f9f4148e8c release 0.31.6 2019-05-13 23:12:12 +02:00
zadam 2178f82324 fixes to mobile version (WIP) 2019-05-13 23:08:59 +02:00
zadam 79d779dee8 setup cssClass for both note tab and content, #524 2019-05-13 22:08:06 +02:00
zadam 93c0469aa0 Merge branch 'stable'
# Conflicts:
#	src/public/javascripts/dialogs/add_link.js
2019-05-13 21:42:52 +02:00
zadam 81d10fa605 fix focusing the text editor component after adding a link, closes #523 2019-05-13 21:13:04 +02:00
zadam 75ef766649 fix retrieving "many rows", closes #525 2019-05-13 20:40:00 +02:00
zadam fab8b77794 configurable hiding of tab row for one tab 2019-05-12 21:45:30 +02:00
zadam 8b030a2323 new tab now has note autocomplete 2019-05-12 17:28:20 +02:00
zadam 14c420b782 new tab infrastructure 2019-05-12 12:58:55 +02:00
zadam 637547a3fa add new tab button, WIP 2019-05-12 10:59:53 +02:00
zadam c39c1baa4d further simplification 2019-05-12 10:21:27 +02:00
zadam b9edd0ecc7 tabs simplification 2019-05-12 10:11:41 +02:00
zadam 2dec8f1ad6 hoisting note now seems to work correctly in relation to tabs 2019-05-11 21:27:27 +02:00
zadam bd97df5ee9 refactored chrome tabs into "tab row" 2019-05-11 19:44:58 +02:00
zadam 8a501521e8 some refactoring etc. 2019-05-11 19:27:33 +02:00
zadam be68391c37 store "openTabs" session 2019-05-10 21:43:40 +02:00
zadam 89d4be504d tree active note now follows switched tabs (without changing scroll position) 2019-05-09 21:30:08 +02:00
zadam 0a2acbe4be npm package upgrades 2019-05-08 20:19:31 +02:00
zadam a7a42ff4af use notePath in tabContext 2019-05-08 20:14:41 +02:00
zadam bacf163c96 NoteContext => TabContext 2019-05-08 19:55:24 +02:00
zadam db7e083a21 ctrl-click opens new tab 2019-05-08 19:10:45 +02:00
zadam 8eaf44735a context menu on link to open in new tab 2019-05-07 22:33:53 +02:00
zadam bfc61f8b36 tab bar is automatically hidden for only one tab 2019-05-07 22:14:35 +02:00
zadam 4ea27e604f context menu on tab and "close all except for this tab" 2019-05-07 21:34:01 +02:00
zadam aef0e552a0 ctrl+tab and ctrl+shift+tab can be used to switch tabs 2019-05-07 21:04:07 +02:00
zadam d36bff2a97 protected session in a dialog now works, proper reloading 2019-05-05 20:45:07 +02:00
zadam 61696f0287 protected session in a component now works 2019-05-05 19:48:30 +02:00
zadam 9a97fe09ee note actions now work again 2019-05-05 18:24:59 +02:00
zadam b1d0cef33b tabs WIP 2019-05-05 10:59:34 +02:00
zadam 7f0c92c56b attributes and children overview working again 2019-05-04 22:44:25 +02:00
zadam b21568806a Merge branch 'stable' into tabs 2019-05-04 20:49:42 +02:00
zadam 80fb89b794 release 0.31.5 2019-05-04 20:25:14 +02:00
zadam 47d28b4eef fix protecting files/images 2019-05-04 16:05:28 +02:00
zadam a9762c5139 fix incorrect switch between protected/unprotected states causing content not being encrypted, fixes #510 2019-05-04 14:46:17 +02:00
zadam 32439ed006 tabs WIP 2019-05-04 14:34:03 +02:00
zadam ff41904d72 convert more note details to new style 2019-05-04 00:16:41 +02:00
zadam 39093cbc4c basic opening and switching tabs 2019-05-03 21:50:14 +02:00
zadam c7b5784123 context menu refactoring 2019-05-03 20:27:38 +02:00
zadam 3e22804a76 Merge branch 'stable' into tabs 2019-05-03 19:59:47 +02:00
zadam 7ce98b0b28 release 0.31.4 2019-05-02 22:25:48 +02:00
zadam 0d11cadc18 tabs wip 2019-05-02 22:24:43 +02:00
zadam 63ab82a076 tabs wip 2019-05-01 23:06:18 +02:00
zadam 7e03f14e01 tabs wip 2019-05-01 22:19:29 +02:00
zadam c9183f8bd4 #note-detail-wrapper => .note-tab-content 2019-05-01 10:17:17 +02:00
zadam bc2d1f1ef9 changes in grid for tabs 2019-05-01 09:52:45 +02:00
zadam e7c053d273 split out themes.css 2019-05-01 08:57:44 +02:00
zadam 3ccf553fda initial experiments with tabs 2019-04-30 22:31:12 +02:00
zadam 6d2eb7b187 fix paragraph button overflowing over text, closes #502 2019-04-29 21:52:28 +02:00
zadam 7234324112 dropdowns and buttons now respect main font sizing 2019-04-29 21:31:19 +02:00
zadam 8205cdc288 fix creation of top level note, closes #501 2019-04-29 21:18:12 +02:00
zadam 29931bbddf release 0.31.3 2019-04-28 22:58:27 +02:00
zadam 68cd4c9a31 focused cell background tweak 2019-04-28 22:02:24 +02:00
zadam f4b986e1c1 added global menu item for fullscreen toggle 2019-04-28 21:59:29 +02:00
zadam c0496ebef3 f11 can now toggle Trilium window to/from fullscreen 2019-04-28 21:52:25 +02:00
zadam 6aa30a4c74 steel blue theme updated with link color 2019-04-28 21:43:56 +02:00
zadam 3035a948b9 less hacky way to implement distraction free mode which also fixes scrollbar 2019-04-28 21:24:13 +02:00
zadam 7880cf62fe open links from render note 2019-04-28 17:44:00 +02:00
zadam ff76ba7d1b better theming of CKEditor through CSS variables (mostly) 2019-04-28 17:37:28 +02:00
zadam 06be593fe4 crash if the DB has newer version than the application 2019-04-23 21:27:45 +02:00
zadam 91e3eb8ae7 create "series" docker tag 2019-04-23 20:20:42 +02:00
zadam f7dd3558a7 release 0.31.2-beta 2019-04-22 22:53:04 +02:00
zadam eac5ec6e26 added searchForNote(s) also to frontend API 2019-04-22 22:52:09 +02:00
zadam f273b4334e implemented @limit for search 2019-04-22 18:08:33 +02:00
zadam 15eaf67189 fix broken history navigation 2019-04-22 17:13:24 +02:00
zadam 983d9c4319 fix merge issue 2019-04-22 17:05:04 +02:00
zadam a88a00b60e Merge branch 'stable'
# Conflicts:
#	package-lock.json
#	package.json
#	src/public/javascripts/services/note_detail_file.js
#	src/services/build.js
2019-04-22 16:29:16 +02:00
zadam a44f43b133 release 0.30.8 2019-04-22 15:02:39 +02:00
zadam 69677b15fe fix broken file download 2019-04-22 15:01:05 +02:00
zadam 2573c3b8a6 sync frontend dayjs to 1.8.12 2019-04-22 14:15:30 +02:00
zadam 0b0e9f2953 from now on, "latest" docker tag won't point to beta releases, closes #476 2019-04-21 12:48:16 +02:00
zadam 1990c9399e removed FTS5 completely 2019-04-21 12:03:13 +02:00
zadam 151641b659 fulltext search now doesn't use FTS5, closes #489 2019-04-21 11:54:13 +02:00
zadam 36c6376220 create trilium data directory if it doesn't exist, closes #491 2019-04-21 09:05:55 +02:00
zadam f0e22b70f6 tree reload doesn't necessarily re-activates the note 2019-04-20 21:14:48 +02:00
zadam 225e893461 fix closing of tooltips 2019-04-20 09:39:39 +02:00
zadam 064a11d872 don't allow deleting hoisted note + other related fixes, closes #488 2019-04-16 21:40:04 +02:00
zadam 3760835608 added noscript to make it clear that Trilium requires JavaScript 2019-04-15 21:30:26 +02:00
zadam e7ac2ec4ed add noscript to setup 2019-04-15 21:28:21 +02:00
zadam 8da8dfc543 if the resized and optimized image is larger than original, then keep the original 2019-04-15 21:12:47 +02:00
zadam 6b3c8b4bac Merge remote-tracking branch 'origin/master' 2019-04-15 21:08:38 +02:00
zadam 25fe78012f upgrade to ckeditor 12.1.0 which fixes some upload issues 2019-04-15 21:08:31 +02:00
zadam 147d79c65c release 0.31.1-beta 2019-04-14 21:18:22 +02:00
zadam 6fddd2bd62 Merge pull request #485 from fbartels/docker-compose
add example docker-compose
2019-04-14 20:22:55 +02:00
zadam 77c9b64dc7 re-enable animation for expanding since it seems to fix fancytree rendering glitches 2019-04-14 19:43:44 +02:00
zadam 47cb7c7f5e not refreshing tree after sort operation because it messes with everything ... 2019-04-14 18:32:56 +02:00
zadam 1bd769827d faster opening of the date notes (no animation) 2019-04-14 18:16:15 +02:00
Felix Bartels 288ec88c2f add example docker-compose
Signed-off-by: Felix Bartels <felix@host-consultants.de>
2019-04-14 15:24:35 +02:00
zadam 71916b5e28 empty icon for some menu actions do de-emphasize less important items 2019-04-14 13:51:21 +02:00
zadam b2d4330692 added button for reloading frontend 2019-04-14 12:48:50 +02:00
zadam 253a6ef081 added date note APIs to frontend script API 2019-04-14 12:24:48 +02:00
zadam e1e020c1a4 more reliable reimplementation of "create day sub note" 2019-04-14 12:18:52 +02:00
zadam 2b4413a1bd exposing tree cache methods to reload note's parents/children to frontend API 2019-04-13 22:56:45 +02:00
zadam dae674a7cd tree cache reloading 2019-04-13 22:10:16 +02:00
zadam 751bf94758 don't change sourceId for script execution which forces full tree reloads because it is annoying 2019-04-13 19:45:50 +02:00
zadam 4b934a4a81 fix sync / fulltext issue 2019-04-13 19:34:19 +02:00
zadam 7e374e795b fill sync rows to fix sync issues 2019-04-13 10:30:16 +02:00
zadam be378f71b0 sync checks for note_contents 2019-04-13 10:13:47 +02:00
zadam 27f74489fd fix login/logout redirects when not in the document root 2019-04-11 22:04:36 +02:00
zadam ae8f4ffbbe minor sync fix for fulltext 2019-04-11 21:44:35 +02:00
zadam 896776516b fix in page search in browser (didn't appear after ctrl+f) 2019-04-09 21:16:18 +02:00
zadam a27525af9e frontend API additions 2019-04-09 21:13:47 +02:00
zadam 83b4382787 missing cert and key error message 2019-04-08 20:08:29 +02:00
zadam ef1b32d586 search error handling & sanitize input for default fulltext 2019-04-02 22:52:42 +02:00
zadam fe3a0bc756 new find-in-page dialog (using electron-find) which actually works 2019-04-02 21:44:56 +02:00
zadam 2259e1d44d make sure to wait for DB connection to be up before starting ... 2019-04-02 19:42:41 +02:00
zadam 9ca4a016eb fix linux server build 2019-04-01 23:11:06 +02:00
zadam 2978a262f7 release 0.31.0-beta 2019-04-01 21:50:32 +02:00
zadam f47f3461e6 show local date in revisions dialog + make it larger 2019-04-01 21:49:27 +02:00
zadam 06202c31e4 note info shows local date instead of utc date 2019-04-01 21:43:45 +02:00
zadam 925dc258a6 fix menu text color in dark themes 2019-04-01 21:38:21 +02:00
zadam 3670800a51 set cookie header only for electron calls 2019-04-01 21:18:11 +02:00
zadam 90a331b989 some style fixes and refactoring for tree context menu 2019-04-01 21:11:20 +02:00
zadam a4c8bdeda2 fix decryption of protected note revisions 2019-03-31 22:54:38 +02:00
zadam 5bda254184 allow searching with noteId & fix combining fulltext and other conditions with OR 2019-03-31 22:23:50 +02:00
zadam 26621c0318 short search help in the tooltip 2019-03-31 21:19:10 +02:00
zadam c6806256fd import doesn't need a full tree reload 2019-03-31 19:13:17 +02:00
zadam f00e1235f9 tar import can now process files with out of order directories 2019-03-31 18:53:29 +02:00
zadam 51bede6541 fix detection of sync connection issue with new error code 2019-03-31 18:36:12 +02:00
zadam 75dbaa4b77 fix csrf protection on electron build 2019-03-31 12:49:42 +02:00
zadam bec6576620 fix note cleanup 2019-03-31 11:27:19 +02:00
zadam 44551e0e8c electron build now waits for the migration before opening the window 2019-03-31 11:21:44 +02:00
zadam 67553cb40e fix ordering of note migrations 2019-03-30 22:20:18 +01:00
zadam 7cafbda7cd migration for inconsistent isProtected status across notes and note_contents 2019-03-30 22:12:18 +01:00
zadam 9a5a085103 Merge branch 'stable'
# Conflicts:
#	package-lock.json
#	src/public/javascripts/services/server.js
#	src/services/app_info.js
#	src/services/notes.js
2019-03-30 22:11:03 +01:00
zadam cdb17ae937 release 0.30.7 2019-03-30 20:13:53 +01:00
zadam c240fb9896 migration for inconsistent isProtected status across notes and note_contents 2019-03-30 20:09:38 +01:00
zadam 4b41eddf44 fix creating note directly as protected 2019-03-30 19:24:53 +01:00
zadam b51ac112a2 fix loading of protected session in electron, #469 2019-03-30 18:00:08 +01:00
zadam a1ac609b34 search input tooltip WIP 2019-03-30 17:41:53 +01:00
zadam 66e2a12f3d rename "current" to "active" based on recent refactorings 2019-03-30 10:15:19 +01:00
zadam 9f69294f7f Merge pull request #466 from capi/ctrl-shift-l
Add Ctrl+Shift+L to pre-select "add to note"
2019-03-30 10:13:31 +01:00
zadam a5fc8d5329 moved libraries and images out of src folder 2019-03-30 09:39:58 +01:00
zadam 7bbf797caf saved search note now has refresh button, closes #369 2019-03-30 00:12:32 +01:00
zadam f479c0e10e when note is created, it's automatically present in all cloned parents as well 2019-03-29 23:55:28 +01:00
zadam 0f32154b91 Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	src/public/javascripts/services/context_menu.js
2019-03-29 23:37:36 +01:00
zadam f2019ee5f9 slightly nicer search detail 2019-03-29 23:28:41 +01:00
zadam 89b8e2bb08 redesign of search input. Saved search is now saved under active note and doesn't need page reload 2019-03-29 23:24:41 +01:00
zadam 8fb6edad67 fix consistency checks for fulltext 2019-03-29 22:08:04 +01:00
zadam c2e3a3fe04 release 0.30.6 2019-03-28 23:17:24 +01:00
zadam b2052a6ccd release 0.30.6 2019-03-28 23:01:52 +01:00
zadam a07479cd5a release 0.30.6 2019-03-28 22:49:34 +01:00
zadam 3820384f51 release 0.30.6 2019-03-28 22:35:43 +01:00
zadam 0610576e5a 0.30.6 2019-03-28 22:35:36 +01:00
zadam efac7701eb release 0.30.6 2019-03-28 22:31:59 +01:00
zadam 905eb303bc fix protected note switching 2019-03-28 21:17:40 +01:00
zadam 27cee1cf33 fix closing of context menu on FF66, closes #468
(cherry picked from commit 3c56d29fca)
2019-03-28 20:57:11 +01:00
zadam 3c56d29fca fix closing of context menu on FF66, closes #468 2019-03-28 20:54:17 +01:00
zadam 946dae72d9 implemented consistency check for note fulltext based on hashes 2019-03-27 21:27:29 +01:00
zadam 58f71c7300 some design explanations on special handling of content 2019-03-27 21:16:13 +01:00
zadam 07e9013152 content migration fixes 2019-03-27 21:04:25 +01:00
zadam 29c60581a6 yet another refactoring of working with note's payload/content 2019-03-26 22:24:04 +01:00
zadam 4bdcf32475 repository now uses upsert instead of insert/replace 2019-03-25 22:06:17 +01:00
Martin Carpella 44c742e839 Add Ctrl+Shift+L to pre-select "add to note" 2019-03-25 21:09:15 +01:00
zadam 001bd1d004 fix csrf path so that it's valid only for current path and not whole (sub)domain 2019-03-24 23:03:30 +01:00
zadam 6c7e2f0aa1 moved "About" from options dialog to a separate dialog under global menu 2019-03-24 23:01:33 +01:00
zadam 9fc5d328b4 added CSRF protection using csurf express middleware, fixes #455 2019-03-24 22:41:53 +01:00
zadam f6413d095c update schema -> fix creating new database from scratch 2019-03-24 21:06:38 +01:00
zadam d66ad4319e fix focused table cell background color, closes #458 2019-03-24 20:16:05 +01:00
zadam 251fcaeb48 support for superscript and subscript, closes #462 2019-03-24 19:58:13 +01:00
zadam 3311c6336c exposed searchForNotes to backend script API 2019-03-20 22:51:13 +01:00
zadam fc13e1fa6a added possibility to search by attached script returning note ids + some refactorings 2019-03-20 22:28:54 +01:00
zadam 9ca680f842 handle empty search note 2019-03-20 21:01:00 +01:00
zadam 616829464f refactoring of context menu items, got rid of ContextMenuItemsContainer 2019-03-19 22:56:37 +01:00
zadam 0267468cd5 deleting without reloading the whole tree (at least on frontend) 2019-03-18 23:03:41 +01:00
zadam ca0d17d93a cloning is now done without reloading the whole tree 2019-03-18 22:33:19 +01:00
zadam 3f656ea76f refactoring and fix icon assignment 2019-03-18 22:10:10 +01:00
zadam 1faf2c6ecd fixes for some note moving edge cases, closes #454 2019-03-18 21:59:53 +01:00
zadam 33f2aaa650 note type context submenu now works end to end 2019-03-17 12:19:23 +01:00
zadam 177caec011 note type context submenu WIP 2019-03-17 11:38:27 +01:00
zadam 62650a4545 refactoring of router search code into service 2019-03-16 22:19:01 +01:00
zadam 81dc907afc ordering of search results 2019-03-16 20:52:21 +01:00
zadam 3ee33e1024 refactoring of joins for search 2019-03-16 19:57:39 +01:00
zadam 2326eb85f1 filter reimplementation, WIP 2019-03-16 16:52:58 +01:00
zadam 0885e60b80 removed obsolete isoDateXXX API methods 2019-03-14 20:49:10 +01:00
zadam ef40c66344 renamed currentNote to activeNote to be consistent with frontend API 2019-03-14 20:21:27 +01:00
zadam 0d0464549f notes are now created with correct local dates 2019-03-13 22:43:59 +01:00
zadam b68b0fe783 Merge branch 'master' into dev31 2019-03-13 21:53:41 +01:00
zadam b4c6d9f800 using now session cookies to store protectedSessionId 2019-03-13 21:53:09 +01:00
zadam 24c8b39d8e release 0.30.5 2019-03-12 22:21:35 +01:00
zadam 0144dc12df current note as in note loaded into right pane is now called "active note" in frontend API 2019-03-12 21:52:19 +01:00
zadam 65684550a8 updated API docs 2019-03-12 21:42:27 +01:00
zadam 6d09931a39 add getCurrentNote() frontend API, #444 2019-03-12 21:39:35 +01:00
zadam 1c41d459f0 renamed dates in code as well 2019-03-12 20:58:31 +01:00
zadam f65fefe7b1 migration utc dates 2019-03-11 22:58:44 +01:00
zadam 0a906b5663 updated db schema 2019-03-11 20:36:19 +01:00
zadam dd9b7bbbb5 fix fulltext search 2019-03-11 19:50:13 +01:00
zadam d25a1e3ed9 initial work on note fulltext (schema changes, updating...) 2019-03-10 17:02:23 +01:00
zadam 05374becfd Merge branch 'master' into dev31 2019-03-10 10:11:01 +01:00
zadam 37d2a7939c fix background/border on quick help dialog, closes #440 2019-03-09 18:57:21 +01:00
zadam a432ad7483 fix isProtected consistency for images and files + related consistency check 2019-03-08 22:25:12 +01:00
zadam ae17e4dc60 release 0.30.4 2019-03-07 22:40:05 +01:00
zadam 02eddc347a fix export of protected notes to tar archive, fixes #432 2019-03-07 22:00:23 +01:00
zadam ee58bf3d5c fix bundle execution error handling 2019-03-07 20:51:55 +01:00
zadam ecbaffa5f3 return focus back to note detail after quitting add link dialog 2019-03-07 20:45:32 +01:00
zadam fe86c09f22 make sure date label is always created with YYYY-MM-DD and not the rest of date time 2019-03-05 20:49:39 +01:00
zadam c8e01d6cce pretty print JSON into note content 2019-03-05 20:44:50 +01:00
zadam fd0bd5dd00 small fixes 2019-03-05 20:38:31 +01:00
zadam cd6d4fb527 Merge pull request #420 from jkurei/master
Querying by dateCreated and dateModified virtual attributes
2019-03-05 19:47:17 +01:00
zadam 8ed6851e85 fix image upload for ckeditor v12 2019-03-04 22:58:47 +01:00
zadam a6fd3bfb00 placeholder for note content 2019-03-04 22:39:44 +01:00
zadam 610dd8a783 upgrade to ckeditor 12.0.0 2019-03-04 22:36:46 +01:00
zadam 7c404f03db unused param 2019-03-04 22:18:27 +01:00
zadam ed1cf6aad5 fix passing of startNote and originEntity to backend script API 2019-03-04 21:17:34 +01:00
zadam 9703fd61e2 protected note's shield background now looks better on the dark themes 2019-03-04 20:53:57 +01:00
zadam 16790e388b recent changes should show titles of protected notes correctly when in protected session 2019-03-04 20:44:20 +01:00
zadam b48474998b release 0.30.3-beta 2019-03-03 20:47:50 +01:00
zadam 95d8f07458 debugging info for image shrinking 2019-03-03 20:41:03 +01:00
zadam e628c30c89 fix OPML export to include correct OPML version 2019-03-03 19:43:30 +01:00
zadam 52a8aae74f moved test enex files to separate repo 2019-03-03 19:40:47 +01:00
zadam 54b5898582 detect mime types from the filename instead of relying on upload mime type 2019-03-03 00:25:31 +01:00
zadam 64974d75d5 added sync fill for note_contents 2019-03-02 19:59:32 +01:00
zadam bd118027fb note content is also part of hash check 2019-03-02 12:40:46 +01:00
zadam 36de217835 release 0.30.2-beta 2019-02-28 22:33:33 +01:00
zadam b5283d58bb nicer underlining under tooltip items 2019-02-28 22:32:54 +01:00
zadam 8414d97ffa improve logging a little bit 2019-02-27 22:15:52 +01:00
zadam 9f30d4e673 fix image caption editing (#422) 2019-02-26 22:59:38 +01:00
zadam 8e0d1fa0df better contrast of links on the dark theme 2019-02-26 22:51:33 +01:00
zadam 5b251b9977 added drag & drop files on note detail 2019-02-26 21:37:15 +01:00
zadam 8b3e721028 added "explodeArchives" option to the import dialog 2019-02-25 22:38:48 +01:00
zadam 7e2a2baa5d drag & drop now uses import code 2019-02-25 22:28:15 +01:00
zadam 003eed368b unify markdown mime to text/x-markdown 2019-02-25 21:57:11 +01:00
zadam 4b1cf05c0e import images 2019-02-25 21:22:57 +01:00
zadam d9429c4f4b import plain text file as text/html 2019-02-24 13:10:47 +01:00
zadam b7bd94b6b0 switchable image shrinking 2019-02-24 12:25:34 +01:00
zadam 51bbc10744 switchable image shrinking 2019-02-24 12:24:28 +01:00
zadam fb5df33ee7 new import options in the dialog, tooltips 2019-02-24 11:36:01 +01:00
zadam d8ba0ccd7d use formdata to pass text arguments during import instead of request path 2019-02-24 09:56:00 +01:00
zadam 886ea6c68c allow import of multiple files at the same time 2019-02-24 09:34:50 +01:00
jkurei ec384fafce Querying by dateCreated and dateModified virtual attributes 2019-02-24 01:34:23 +01:00
zadam 936f85c09e drag & drop multi file upload to note tree 2019-02-23 20:33:27 +01:00
zadam b25deea21d fixes for relative paths 2019-02-22 23:03:20 +01:00
zadam cf5ec44303 another fix for debian package upload 2019-02-20 23:22:04 +01:00
zadam 6f956c2415 release 0.30.1-beta 2019-02-20 23:08:36 +01:00
zadam 3533160bef fix initial document setup 2019-02-20 23:07:57 +01:00
zadam 60cbfdcabd update API docs 2019-02-20 22:24:51 +01:00
zadam 604f036a54 fix debian package upload 2019-02-20 22:10:19 +01:00
zadam dd4f3ec264 release 0.30.0-beta 2019-02-20 21:58:31 +01:00
zadam ff67b8a0ba initial debian package support 2019-02-20 21:58:23 +01:00
zadam 1d5fb0b646 add possibility to create week note, closes #416 2019-02-19 22:49:57 +01:00
zadam 80931a318f exposing APIs to get month and year note, #416 2019-02-19 21:29:41 +01:00
zadam 16f16cb36a fixed API for Trilium Sender, closes #415 2019-02-19 21:24:35 +01:00
zadam 899f24cde5 minor node upgrades 2019-02-17 22:56:33 +01:00
zadam 9f29521ab8 disable caching of note autocomplete for more accurate results 2019-02-17 20:59:52 +01:00
zadam c1ce0c6b22 avoid various HTTP server issues with slashes by putting notePath into the body with POST 2019-02-17 20:49:51 +01:00
zadam a7fce33750 OPML v2 export 2019-02-16 23:58:42 +01:00
zadam 6fd8e73150 UI for export of OPML v2, WIP 2019-02-16 23:33:40 +01:00
zadam 1359dd86c2 OPML 2 import, closes #298, #286 2019-02-16 22:13:29 +01:00
zadam a1b610fc50 full screen help dialog 2019-02-16 19:42:58 +01:00
zadam c849d719e9 styling for external links 2019-02-16 18:49:57 +01:00
zadam 96de2e7008 fixed saved search 2019-02-15 21:21:26 +01:00
zadam f140b77e7c fix migration script 2019-02-15 21:10:00 +01:00
zadam 22228de63b sync changes for note content 2019-02-15 00:15:09 +01:00
zadam b0596c9eb2 removed noteId display in the note detail, #408 2019-02-14 20:57:56 +01:00
zadam 2a2319d434 created note info dialog, closes #408 2019-02-14 20:56:33 +01:00
zadam dad47d115f fixes for SQL console schema view 2019-02-13 23:27:00 +01:00
zadam 502026359c help page, closes #273 2019-02-13 23:06:11 +01:00
zadam 47b0e4e4d3 Save electron window size and position, closes #186 2019-02-12 22:42:40 +01:00
zadam 6c927d9159 Merge remote-tracking branch 'origin/note-content' 2019-02-12 21:14:42 +01:00
zadam ddc79b2517 release 0.29.1 2019-02-12 20:30:07 +01:00
zadam 4c2e12d2cb upgrade to bootstrap 4.3.0 2019-02-12 20:26:28 +01:00
zadam 14f7a8b7b9 safe import implementation 2019-02-11 23:45:58 +01:00
zadam caa7dd9619 prettier progress count 2019-02-10 22:56:14 +01:00
zadam 8aa7e2d0a0 fixes in opml export and note content loading 2019-02-10 22:45:44 +01:00
zadam 6be8a3f343 added progress also to export 2019-02-10 22:30:55 +01:00
zadam a097cefba7 import error handling 2019-02-10 19:53:57 +01:00
zadam e4c78f3887 added ImportContext 2019-02-10 19:36:03 +01:00
zadam 5baa251944 more changes to import reporting through WS 2019-02-10 16:59:50 +01:00
zadam cde68abec9 progress of tar import through WS 2019-02-10 16:36:25 +01:00
zadam 51175e3676 import/export refactorign 2019-02-10 15:33:56 +01:00
zadam 45ddfef30a new import dialog 2019-02-10 14:33:13 +01:00
zadam 1e1d78999e some help dialog content 2019-02-10 12:19:48 +01:00
zadam 92fcd7b345 sql console added to global menu and now has schema info 2019-02-10 10:38:18 +01:00
zadam e04f1cd574 help button with no help dialog yet 2019-02-09 19:48:19 +01:00
zadam 176c3a5d51 added dev tools to global menu 2019-02-09 19:25:55 +01:00
zadam c09570cf39 global menu 2019-02-09 19:17:16 +01:00
zadam 4a093000be note content refactoring, WIP 2019-02-08 21:01:26 +01:00
zadam 6952b643ae note content refactoring, WIP 2019-02-07 22:16:40 +01:00
zadam c487a95bc7 note content refactoring, WIP 2019-02-06 21:29:23 +01:00
zadam 8884177d9f split out note's content into separate entity, WIP 2019-02-06 20:19:25 +01:00
zadam 8b250ed523 fix upload of the same file in succession, #388 2019-02-03 17:44:06 +01:00
zadam d8b78d8025 check reference issues only for non deleted entities 2019-02-03 16:27:26 +01:00
zadam 42112b8053 fix consistency check 2019-02-03 16:22:45 +01:00
zadam 6cc0dd5a80 release 0.29.0-beta 2019-02-03 15:44:19 +01:00
zadam afd5f4823f added Steel Blue theme to demo document 2019-02-03 15:39:27 +01:00
zadam b0cf82c91b fix 2019-02-03 15:37:01 +01:00
zadam 6a67cdd5af appThemeClass is redundant 2019-02-03 15:35:37 +01:00
zadam bad7b84993 error handling in custom request handler 2019-02-03 11:15:32 +01:00
zadam d3ca6b5ae6 styling for scrollbar which looks ugly otherwise in dark themes 2019-02-03 10:21:28 +01:00
zadam da5009f089 main border color CSS variable 2019-02-03 10:09:59 +01:00
zadam c08524c977 fix CSS class of user theme 2019-02-03 00:12:57 +01:00
zadam f89537037e small styling fixes 2019-02-02 23:51:00 +01:00
zadam c153793766 added CSS variable for disabled button background 2019-02-02 23:26:39 +01:00
zadam 0aec5927d5 added missing labels customRequestHandler, customResourceProvider to autocomplete 2019-02-02 22:33:02 +01:00
zadam 8aea9a1801 added font family CSS variables to theming API 2019-02-02 20:45:38 +01:00
zadam 73247e3220 minor library updates 2019-02-02 19:21:30 +01:00
zadam 89344a6eda final fixes and refactorings for consistency checks 2019-02-02 12:41:20 +01:00
zadam 40d2e6ea83 refactoring consistency checks WIP 2019-02-02 11:26:27 +01:00
zadam 910cfe9a17 refactoring consistency checks WIP 2019-02-02 10:38:33 +01:00
zadam e58a80fc00 consistency checks WIP 2019-02-02 09:26:57 +01:00
zadam 4a2319cb33 refactoring of consistency checks plus some autofixers 2019-02-01 22:48:51 +01:00
zadam 5619088c41 raise payload size limit to 500 MB #395 2019-01-29 21:19:08 +01:00
zadam 60271993eb Merge pull request #392 from jkurei/ios_favicon
Better icon for iOS' homescreen
2019-01-28 23:01:12 +01:00
jkurei 6695e8b011 Better icon for iOS' homescreen 2019-01-28 22:48:01 +01:00
zadam 707df18b93 added type and mime classes on body as well #383 2019-01-28 21:42:37 +01:00
zadam 90895f1288 added noteId to file view 2019-01-27 23:10:37 +01:00
zadam ba1ca506af change in referencing CSS resources to allow easier relative linking 2019-01-27 22:34:41 +01:00
zadam f90ed99a40 fix leaf node having angle bracket in dark & black themes, closes #387 2019-01-27 21:54:24 +01:00
zadam 67630b1a22 options now allow selecting user theme 2019-01-27 21:18:11 +01:00
zadam 2c1580ea65 appCss/appTheme are now loaded as external CSS files instead of inline styles 2019-01-27 17:01:37 +01:00
zadam 840a0b5f64 custom handler refactoring 2019-01-27 16:37:18 +01:00
zadam b39f6ef7ad bug fixes for custom handlers 2019-01-27 15:47:40 +01:00
zadam fb27088fcd smaller children overview font 2019-01-27 14:26:39 +01:00
azivner 76fbff68ba added readOnly attribute which puts text editor into readonly mode #371 2019-01-27 13:10:03 +01:00
azivner 54de4d236d custom HTTP handler which triggers associated script notes WIP, #356 2019-01-27 12:28:20 +01:00
azivner e211dd65ad exit on detection of not supported node version, #324 2019-01-26 19:59:51 +01:00
azivner a87f4d8653 search can be triggered from URL, closes #385 2019-01-25 22:18:34 +01:00
azivner b59c175c2e add HTML header with UTF-8 meta encoding declaration to exported HTML files, fixes #384 2019-01-25 21:34:14 +01:00
azivner 580104c4c5 using trilium's confirm dialog, small refactoring 2019-01-24 22:18:31 +01:00
zadam 0fc3053b0a Merge pull request #377 from flurmbo/master
add confirm type change dialog when note not empty
2019-01-24 22:12:09 +01:00
Phil Marshall 929e0f69c2 add confirm type change dialog when note not empty 2019-01-23 15:15:24 -06:00
azivner e70af1300a drag and drop moves multiple items only if CTRL is pressed, active note has now bold text for more differentiation from selected note 2019-01-23 21:13:04 +01:00
azivner 4d0e46021b Mac uses CMD+Left, CMD+Right for history navigation, closes #376 2019-01-23 20:15:33 +01:00
azivner 1a9a49b739 release 0.28.3 2019-01-22 23:01:32 +01:00
azivner 2ac560c56e text note should change its icon after having new note inserted into, fixes #361 2019-01-22 21:21:44 +01:00
azivner c23387c0fb make search dialog more responsive in narrow sidebar, fixes #367 2019-01-22 20:54:00 +01:00
azivner 0ff250fe15 font sizes were not created for new documents - fix plus migration for existing ones 2019-01-22 20:34:45 +01:00
azivner 52b1e58b26 make tree selection more visually consistent 2019-01-22 20:23:54 +01:00
azivner 484715e440 fix icon in desktop linux build, fixes #372 2019-01-22 19:49:33 +01:00
714 changed files with 37566 additions and 62611 deletions
+5
View File
@@ -0,0 +1,5 @@
# Default ignored files
/workspace.xml
# Datasource local storage ignored files
/dataSources.local.xml
+3
View File
@@ -6,5 +6,8 @@
<option name="TAB_SIZE" value="2" />
</value>
</option>
<JSCodeStyleSettings version="0">
<option name="USE_EXPLICIT_JS_EXTENSION" value="TRUE" />
</JSCodeStyleSettings>
</code_scheme>
</component>
+154 -145
View File
@@ -1,12 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<dataSource name="document.db">
<database-model serializer="dbm" dbms="SQLITE" family-id="SQLITE" format-version="4.14">
<database-model serializer="dbm" dbms="SQLITE" family-id="SQLITE" format-version="4.16">
<root id="1">
<ServerVersion>3.16.1</ServerVersion>
<ServerVersion>3.25.1</ServerVersion>
</root>
<schema id="2" parent="1" name="main">
<Current>1</Current>
<Visible>1</Visible>
</schema>
<collation id="3" parent="1" name="BINARY"/>
<collation id="4" parent="1" name="NOCASE"/>
@@ -15,7 +14,7 @@
<table id="7" parent="2" name="attributes"/>
<table id="8" parent="2" name="branches"/>
<table id="9" parent="2" name="event_log"/>
<table id="10" parent="2" name="links"/>
<table id="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"/>
@@ -38,7 +37,7 @@
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="21" parent="6" name="dateCreated">
<column id="21" parent="6" name="utcDateCreated">
<Position>3</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
@@ -98,12 +97,12 @@
<NotNull>1</NotNull>
<DefaultExpression>0</DefaultExpression>
</column>
<column id="32" parent="7" name="dateCreated">
<column id="32" parent="7" name="utcDateCreated">
<Position>7</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="33" parent="7" name="dateModified">
<column id="33" parent="7" name="utcDateModified">
<Position>8</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
@@ -130,167 +129,162 @@
<ColumnCollations></ColumnCollations>
<Unique>1</Unique>
</index>
<key id="38" parent="7">
<index id="38" parent="7" name="IDX_attributes_noteId_index">
<ColNames>noteId</ColNames>
<ColumnCollations></ColumnCollations>
</index>
<index id="39" parent="7" name="IDX_attributes_name_value">
<ColNames>name
value</ColNames>
<ColumnCollations></ColumnCollations>
</index>
<index id="40" parent="7" name="IDX_attributes_name_index">
<ColNames>name</ColNames>
<ColumnCollations></ColumnCollations>
</index>
<index id="41" parent="7" name="IDX_attributes_value_index">
<ColNames>value</ColNames>
<ColumnCollations></ColumnCollations>
</index>
<key id="42" parent="7">
<ColNames>attributeId</ColNames>
<Primary>1</Primary>
<UnderlyingIndexName>sqlite_autoindex_attributes_1</UnderlyingIndexName>
</key>
<column id="39" parent="8" name="branchId">
<column id="43" parent="8" name="branchId">
<Position>1</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="40" parent="8" name="noteId">
<column id="44" parent="8" name="noteId">
<Position>2</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="41" parent="8" name="parentNoteId">
<column id="45" parent="8" name="parentNoteId">
<Position>3</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="42" parent="8" name="notePosition">
<column id="46" parent="8" name="notePosition">
<Position>4</Position>
<DataType>INTEGER|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="43" parent="8" name="prefix">
<column id="47" parent="8" name="prefix">
<Position>5</Position>
<DataType>TEXT|0s</DataType>
</column>
<column id="44" parent="8" name="isExpanded">
<column id="48" parent="8" name="isExpanded">
<Position>6</Position>
<DataType>BOOLEAN|0s</DataType>
</column>
<column id="45" parent="8" name="isDeleted">
<column id="49" parent="8" name="isDeleted">
<Position>7</Position>
<DataType>INTEGER|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>0</DefaultExpression>
</column>
<column id="46" parent="8" name="dateModified">
<column id="50" parent="8" name="utcDateModified">
<Position>8</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="47" parent="8" name="hash">
<column id="51" parent="8" name="utcDateCreated">
<Position>9</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="52" parent="8" name="hash">
<Position>10</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&quot;&quot;</DefaultExpression>
</column>
<column id="48" parent="8" name="dateCreated">
<Position>10</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&apos;1970-01-01T00:00:00.000Z&apos;</DefaultExpression>
</column>
<index id="49" parent="8" name="sqlite_autoindex_branches_1">
<index id="53" parent="8" name="sqlite_autoindex_branches_1">
<NameSurrogate>1</NameSurrogate>
<ColNames>branchId</ColNames>
<ColumnCollations></ColumnCollations>
<Unique>1</Unique>
</index>
<index id="50" parent="8" name="IDX_branches_noteId_parentNoteId">
<index id="54" parent="8" name="IDX_branches_noteId_parentNoteId">
<ColNames>noteId
parentNoteId</ColNames>
<ColumnCollations></ColumnCollations>
</index>
<index id="51" parent="8" name="IDX_branches_noteId">
<index id="55" parent="8" name="IDX_branches_noteId">
<ColNames>noteId</ColNames>
<ColumnCollations></ColumnCollations>
</index>
<index id="52" parent="8" name="IDX_branches_parentNoteId">
<index id="56" parent="8" name="IDX_branches_parentNoteId">
<ColNames>parentNoteId</ColNames>
<ColumnCollations></ColumnCollations>
</index>
<key id="53" parent="8">
<key id="57" parent="8">
<ColNames>branchId</ColNames>
<Primary>1</Primary>
<UnderlyingIndexName>sqlite_autoindex_branches_1</UnderlyingIndexName>
</key>
<column id="54" parent="9" name="eventId">
<column id="58" parent="9" name="eventId">
<Position>1</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="55" parent="9" name="noteId">
<column id="59" parent="9" name="noteId">
<Position>2</Position>
<DataType>TEXT|0s</DataType>
</column>
<column id="56" parent="9" name="comment">
<column id="60" parent="9" name="comment">
<Position>3</Position>
<DataType>TEXT|0s</DataType>
</column>
<column id="57" parent="9" name="dateCreated">
<column id="61" parent="9" name="utcDateCreated">
<Position>4</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<index id="58" parent="9" name="sqlite_autoindex_event_log_1">
<index id="62" parent="9" name="sqlite_autoindex_event_log_1">
<NameSurrogate>1</NameSurrogate>
<ColNames>eventId</ColNames>
<ColumnCollations></ColumnCollations>
<Unique>1</Unique>
</index>
<key id="59" parent="9">
<key id="63" parent="9">
<ColNames>eventId</ColNames>
<Primary>1</Primary>
<UnderlyingIndexName>sqlite_autoindex_event_log_1</UnderlyingIndexName>
</key>
<column id="60" parent="10" name="linkId">
<column id="64" parent="10" name="noteId">
<Position>1</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="61" parent="10" name="noteId">
<column id="65" parent="10" name="content">
<Position>2</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="62" parent="10" name="targetNoteId">
<column id="66" parent="10" name="hash">
<Position>3</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="63" parent="10" name="type">
<Position>4</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="64" parent="10" name="isDeleted">
<Position>5</Position>
<DataType>INTEGER|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>0</DefaultExpression>
</column>
<column id="65" parent="10" name="dateCreated">
<Position>6</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="66" parent="10" name="dateModified">
<Position>7</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="67" parent="10" name="hash">
<Position>8</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&quot;&quot;</DefaultExpression>
</column>
<index id="68" parent="10" name="sqlite_autoindex_links_1">
<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>linkId</ColNames>
<ColNames>noteId</ColNames>
<ColumnCollations></ColumnCollations>
<Unique>1</Unique>
</index>
<key id="69" parent="10">
<ColNames>linkId</ColNames>
<ColNames>noteId</ColNames>
<Primary>1</Primary>
<UnderlyingIndexName>sqlite_autoindex_links_1</UnderlyingIndexName>
<UnderlyingIndexName>sqlite_autoindex_note_contents_1</UnderlyingIndexName>
</key>
<column id="70" parent="11" name="noteRevisionId">
<Position>1</Position>
@@ -316,286 +310,301 @@ parentNoteId</ColNames>
<NotNull>1</NotNull>
<DefaultExpression>0</DefaultExpression>
</column>
<column id="75" parent="11" name="dateModifiedFrom">
<column id="75" parent="11" name="utcDateModifiedFrom">
<Position>6</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="76" parent="11" name="dateModifiedTo">
<column id="76" parent="11" name="utcDateModifiedTo">
<Position>7</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="77" parent="11" name="type">
<column id="77" parent="11" name="dateModifiedFrom">
<Position>8</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&apos;&apos;</DefaultExpression>
</column>
<column id="78" parent="11" name="mime">
<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="79" parent="11" name="hash">
<Position>10</Position>
<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="80" parent="11" name="sqlite_autoindex_note_revisions_1">
<index id="82" parent="11" name="sqlite_autoindex_note_revisions_1">
<NameSurrogate>1</NameSurrogate>
<ColNames>noteRevisionId</ColNames>
<ColumnCollations></ColumnCollations>
<Unique>1</Unique>
</index>
<index id="81" parent="11" name="IDX_note_revisions_noteId">
<index id="83" parent="11" name="IDX_note_revisions_noteId">
<ColNames>noteId</ColNames>
<ColumnCollations></ColumnCollations>
</index>
<index id="82" parent="11" name="IDX_note_revisions_dateModifiedFrom">
<ColNames>dateModifiedFrom</ColNames>
<index id="84" parent="11" name="IDX_note_revisions_dateModifiedFrom">
<ColNames>utcDateModifiedFrom</ColNames>
<ColumnCollations></ColumnCollations>
</index>
<index id="83" parent="11" name="IDX_note_revisions_dateModifiedTo">
<ColNames>dateModifiedTo</ColNames>
<index id="85" parent="11" name="IDX_note_revisions_dateModifiedTo">
<ColNames>utcDateModifiedTo</ColNames>
<ColumnCollations></ColumnCollations>
</index>
<key id="84" parent="11">
<key id="86" parent="11">
<ColNames>noteRevisionId</ColNames>
<Primary>1</Primary>
<UnderlyingIndexName>sqlite_autoindex_note_revisions_1</UnderlyingIndexName>
</key>
<column id="85" parent="12" name="noteId">
<column id="87" parent="12" name="noteId">
<Position>1</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="86" parent="12" name="title">
<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="87" parent="12" name="content">
<column id="89" parent="12" name="isProtected">
<Position>3</Position>
<DataType>TEXT|0s</DataType>
<DefaultExpression>NULL</DefaultExpression>
</column>
<column id="88" parent="12" name="isProtected">
<Position>4</Position>
<DataType>INT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>0</DefaultExpression>
</column>
<column id="89" parent="12" name="type">
<Position>5</Position>
<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="90" parent="12" name="mime">
<Position>6</Position>
<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="91" parent="12" name="hash">
<Position>7</Position>
<column id="92" parent="12" name="hash">
<Position>6</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&quot;&quot;</DefaultExpression>
</column>
<column id="92" parent="12" name="isDeleted">
<Position>8</Position>
<column id="93" parent="12" name="isDeleted">
<Position>7</Position>
<DataType>INT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>0</DefaultExpression>
</column>
<column id="93" parent="12" name="dateCreated">
<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="94" parent="12" name="dateModified">
<column id="96" parent="12" name="utcDateCreated">
<Position>10</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<index id="95" parent="12" name="sqlite_autoindex_notes_1">
<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>
<ColumnCollations></ColumnCollations>
<Unique>1</Unique>
</index>
<key id="96" parent="12">
<key id="99" parent="12">
<ColNames>noteId</ColNames>
<Primary>1</Primary>
<UnderlyingIndexName>sqlite_autoindex_notes_1</UnderlyingIndexName>
</key>
<column id="97" parent="13" name="name">
<column id="100" parent="13" name="name">
<Position>1</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="98" parent="13" name="value">
<column id="101" parent="13" name="value">
<Position>2</Position>
<DataType>TEXT|0s</DataType>
</column>
<column id="99" parent="13" name="dateModified">
<column id="102" parent="13" name="isSynced">
<Position>3</Position>
<DataType>INT|0s</DataType>
</column>
<column id="100" parent="13" name="isSynced">
<Position>4</Position>
<DataType>INTEGER|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>0</DefaultExpression>
</column>
<column id="101" parent="13" name="hash">
<Position>5</Position>
<column id="103" parent="13" name="hash">
<Position>4</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&quot;&quot;</DefaultExpression>
</column>
<column id="102" parent="13" name="dateCreated">
<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>
<DefaultExpression>&apos;1970-01-01T00:00:00.000Z&apos;</DefaultExpression>
</column>
<index id="103" parent="13" name="sqlite_autoindex_options_1">
<index id="106" parent="13" name="sqlite_autoindex_options_1">
<NameSurrogate>1</NameSurrogate>
<ColNames>name</ColNames>
<ColumnCollations></ColumnCollations>
<Unique>1</Unique>
</index>
<key id="104" parent="13">
<key id="107" parent="13">
<ColNames>name</ColNames>
<Primary>1</Primary>
<UnderlyingIndexName>sqlite_autoindex_options_1</UnderlyingIndexName>
</key>
<column id="105" parent="14" name="branchId">
<column id="108" parent="14" name="noteId">
<Position>1</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="106" parent="14" name="notePath">
<column id="109" parent="14" name="notePath">
<Position>2</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="107" parent="14" name="hash">
<column id="110" parent="14" name="hash">
<Position>3</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
<DefaultExpression>&quot;&quot;</DefaultExpression>
</column>
<column id="108" parent="14" name="dateCreated">
<column id="111" parent="14" name="utcDateCreated">
<Position>4</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="109" parent="14" name="isDeleted">
<column id="112" parent="14" name="isDeleted">
<Position>5</Position>
<DataType>INT|0s</DataType>
</column>
<index id="110" parent="14" name="sqlite_autoindex_recent_notes_1">
<index id="113" parent="14" name="sqlite_autoindex_recent_notes_1">
<NameSurrogate>1</NameSurrogate>
<ColNames>branchId</ColNames>
<ColNames>noteId</ColNames>
<ColumnCollations></ColumnCollations>
<Unique>1</Unique>
</index>
<key id="111" parent="14">
<ColNames>branchId</ColNames>
<key id="114" parent="14">
<ColNames>noteId</ColNames>
<Primary>1</Primary>
<UnderlyingIndexName>sqlite_autoindex_recent_notes_1</UnderlyingIndexName>
</key>
<column id="112" parent="15" name="sourceId">
<column id="115" parent="15" name="sourceId">
<Position>1</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="113" parent="15" name="dateCreated">
<column id="116" parent="15" name="utcDateCreated">
<Position>2</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<index id="114" parent="15" name="sqlite_autoindex_source_ids_1">
<index id="117" parent="15" name="sqlite_autoindex_source_ids_1">
<NameSurrogate>1</NameSurrogate>
<ColNames>sourceId</ColNames>
<ColumnCollations></ColumnCollations>
<Unique>1</Unique>
</index>
<key id="115" parent="15">
<key id="118" parent="15">
<ColNames>sourceId</ColNames>
<Primary>1</Primary>
<UnderlyingIndexName>sqlite_autoindex_source_ids_1</UnderlyingIndexName>
</key>
<column id="116" parent="16" name="type">
<column id="119" parent="16" name="type">
<Position>1</Position>
<DataType>text|0s</DataType>
</column>
<column id="117" parent="16" name="name">
<column id="120" parent="16" name="name">
<Position>2</Position>
<DataType>text|0s</DataType>
</column>
<column id="118" parent="16" name="tbl_name">
<column id="121" parent="16" name="tbl_name">
<Position>3</Position>
<DataType>text|0s</DataType>
</column>
<column id="119" parent="16" name="rootpage">
<column id="122" parent="16" name="rootpage">
<Position>4</Position>
<DataType>integer|0s</DataType>
<DataType>int|0s</DataType>
</column>
<column id="120" parent="16" name="sql">
<column id="123" parent="16" name="sql">
<Position>5</Position>
<DataType>text|0s</DataType>
</column>
<column id="121" parent="17" name="name">
<column id="124" parent="17" name="name">
<Position>1</Position>
</column>
<column id="122" parent="17" name="seq">
<column id="125" parent="17" name="seq">
<Position>2</Position>
</column>
<column id="123" parent="18" name="id">
<column id="126" parent="18" name="id">
<Position>1</Position>
<DataType>INTEGER|0s</DataType>
<NotNull>1</NotNull>
<SequenceIdentity>1</SequenceIdentity>
</column>
<column id="124" parent="18" name="entityName">
<column id="127" parent="18" name="entityName">
<Position>2</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="125" parent="18" name="entityId">
<column id="128" parent="18" name="entityId">
<Position>3</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="126" parent="18" name="sourceId">
<column id="129" parent="18" name="sourceId">
<Position>4</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<column id="127" parent="18" name="syncDate">
<column id="130" parent="18" name="utcSyncDate">
<Position>5</Position>
<DataType>TEXT|0s</DataType>
<NotNull>1</NotNull>
</column>
<index id="128" parent="18" name="IDX_sync_entityName_entityId">
<index id="131" parent="18" name="IDX_sync_entityName_entityId">
<ColNames>entityName
entityId</ColNames>
<ColumnCollations></ColumnCollations>
<Unique>1</Unique>
</index>
<index id="129" parent="18" name="IDX_sync_syncDate">
<ColNames>syncDate</ColNames>
<index id="132" parent="18" name="IDX_sync_utcSyncDate">
<ColNames>utcSyncDate</ColNames>
<ColumnCollations></ColumnCollations>
</index>
<key id="130" parent="18">
<key id="133" parent="18">
<ColNames>id</ColNames>
<Primary>1</Primary>
</key>
+2 -1
View File
@@ -1,4 +1,4 @@
FROM node:10.15.0-alpine
FROM node:12.10.0-alpine
# Create app directory
WORKDIR /usr/src/app
@@ -18,6 +18,7 @@ RUN set -x \
make \
nasm \
libpng-dev \
python \
&& npm install --production \
&& apk del .build-dependencies
+3 -2
View File
@@ -15,16 +15,17 @@ Trilium Notes is a hierarchical note taking application with focus on building l
* Note [attributes](https://github.com/zadam/trilium/wiki/Attributes) can be used for note organization, querying and advanced [scripting](https://github.com/zadam/trilium/wiki/Scripts)
* [Synchronization](https://github.com/zadam/trilium/wiki/Synchronization) with self-hosted sync server
* Strong [note encryption](https://github.com/zadam/trilium/wiki/Protected-notes) with per-note granularity
* [Relation maps](https://github.com/zadam/trilium/wiki/Relation-map) for visualizing notes and their relations
* [Relation maps](https://github.com/zadam/trilium/wiki/Relation-map) and [link maps](https://github.com/zadam/trilium/wiki/Link-map) for visualizing notes and their relations
* [Scripting](https://github.com/zadam/trilium/wiki/Scripts) - see [Advanced showcases](https://github.com/zadam/trilium/wiki/Advanced-showcases)
* Scales well in both usability and performance upwards of 100 000 notes
* Touch optimized [mobile frontend](https://github.com/zadam/trilium/wiki/Mobile-frontend) for smartphones and tablets
* [Night theme](https://github.com/zadam/trilium/wiki/Themes)
* [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import) and [Markdown import & export](https://github.com/zadam/trilium/wiki/Markdown)
* [Web Clipper](https://github.com/zadam/trilium/wiki/Web-clipper) for easy saving of web content
## Builds
Trilium is provided as either desktop application (Linux, Windows, Mac) or web application hosted on your server (Linux).
Trilium is provided as either desktop application (Linux and Windows) or web application hosted on your server (Linux). Mac OS desktop build is available, but it is [unsupported](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support).
* If you want to use Trilium on the desktop, download binary release for your platform from [latest release](https://github.com/zadam/trilium/releases/latest), unzip the package and run ```trilium``` executable.
* If you want to install Trilium on server, follow [this page](https://github.com/zadam/trilium/wiki/Server-installation).
+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
echo "Packaging debian x64 distribution..."
VERSION=`jq -r ".version" package.json`
./node_modules/.bin/electron-installer-debian --config bin/deb-options.json --options.version=${VERSION} --arch amd64
+6 -1
View File
@@ -1,5 +1,10 @@
#!/usr/bin/env bash
VERSION=`jq -r ".version" package.json`
SERIES=${VERSION:0:4}-latest
sudo docker build -t zadam/trilium:latest -t zadam/trilium:$VERSION .
sudo docker build -t zadam/trilium:$VERSION -t zadam/trilium:$SERIES .
if [[ $VERSION != *"beta"* ]]; then
sudo docker tag zadam/trilium:$VERSION zadam/trilium:latest
fi
+9
View File
@@ -3,14 +3,23 @@
BUILD_DIR=./dist/trilium-linux-x64
rm -rf $BUILD_DIR
echo "Copying required linux-x64 binaries"
rm -r node_modules/sqlite3/lib/binding/*
rm -r node_modules/pngquant-bin/vendor/*
cp -r bin/deps/linux-x64/sqlite/* node_modules/sqlite3/lib/binding/
cp bin/deps/linux-x64/image/pngquant node_modules/pngquant-bin/vendor/
# rebuild binaries for image operations (pngquant ...)
npm rebuild
./node_modules/.bin/electron-packager . --asar --out=dist --executable-name=trilium --platform=linux --arch=x64 --overwrite
mv "./dist/Trilium Notes-linux-x64" $BUILD_DIR
cp images/app-icons/png/128x128.png $BUILD_DIR/icon.png
# removing software WebGL binaries because they are pretty huge and not necessary
rm -r $BUILD_DIR/swiftshader
+2 -2
View File
@@ -15,12 +15,12 @@ cp bin/deps/mac-x64/image/cjpeg node_modules/mozjpeg/vendor/
cp bin/deps/mac-x64/image/pngquant node_modules/pngquant-bin/vendor/
cp bin/deps/mac-x64/image/gifsicle node_modules/giflossy/vendor/
./node_modules/.bin/electron-packager . --asar --out=dist --executable-name=trilium --platform=darwin --arch=x64 --overwrite --icon=src/public/images/app-icons/mac/icon.icns
./node_modules/.bin/electron-packager . --asar --out=dist --executable-name=trilium --platform=darwin --arch=x64 --overwrite --icon=images/app-icons/mac/icon.icns
# Mac build has by default useless directory level
mv "./dist/Trilium Notes-darwin-x64" $BUILD_DIR
./reset-local.sh
./bin/reset-local.sh
echo "Zipping mac x64 electron distribution..."
+5 -3
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
PKG_DIR=dist/trilium-linux-x64-server
NODE_VERSION=10.15.0
NODE_VERSION=12.10.0
rm -r $PKG_DIR
mkdir $PKG_DIR
@@ -14,6 +14,8 @@ rm node-v${NODE_VERSION}-linux-x64.tar.xz
mv node-v${NODE_VERSION}-linux-x64 node
cp -r ../../node_modules/ ./
cp -r ../../images/ ./
cp -r ../../libraries/ ./
cp -r ../../src/ ./
cp -r ../../db/ ./
cp -r ../../package.json ./
@@ -28,11 +30,11 @@ rm -r ./node_modules/sqlite3/lib/binding/*
cp -r ../../bin/deps/linux-x64/sqlite/node* ./node_modules/sqlite3/lib/binding/
printf "#/bin/sh\n./node/bin/node src/www" > trilium.sh
printf "#!/bin/sh\n./node/bin/node src/www" > trilium.sh
chmod 755 trilium.sh
cd ..
VERSION=`jq -r ".version" ../package.json`
tar cJf trilium-linux-x64-server-${VERSION}.tar.xz trilium-linux-x64-server
tar cJf trilium-linux-x64-server-${VERSION}.tar.xz trilium-linux-x64-server
+2 -2
View File
@@ -15,14 +15,14 @@ cp bin/deps/win-x64/image/cjpeg.exe node_modules/mozjpeg/vendor/
cp bin/deps/win-x64/image/pngquant.exe node_modules/pngquant-bin/vendor/
cp bin/deps/win-x64/image/gifsicle.exe node_modules/giflossy/vendor/
./node_modules/.bin/electron-packager . --asar --out=dist --executable-name=trilium --platform=win32 --arch=x64 --overwrite --icon=src/public/images/app-icons/win/icon.ico
./node_modules/.bin/electron-packager . --asar --out=dist --executable-name=trilium --platform=win32 --arch=x64 --overwrite --icon=images/app-icons/win/icon.ico
mv "./dist/Trilium Notes-win32-x64" $BUILD_DIR
# removing software WebGL binaries because they are pretty huge and not necessary
rm -r $BUILD_DIR/swiftshader
./reset-local.sh
./bin/reset-local.sh
echo "Zipping windows x64 electron distribution..."
VERSION=`jq -r ".version" package.json`
+3
View File
@@ -15,4 +15,7 @@ bin/build-mac-x64.sh
# building X64 linux as the last so electron-rebuild will prepare X64 binaries for local development
bin/build-linux-x64.sh
# this needs to be run after linux build
bin/build-debian.sh
bin/build-server.sh
+14
View File
@@ -0,0 +1,14 @@
{
"src": "dist/trilium-linux-x64",
"dest": "dist/",
"name": "trilium",
"productName": "Trilium Notes",
"genericName": "Note taker",
"description": "Trilium Notes is a hierarchical note taking application with focus on building large personal knowledge bases.",
"sections": "misc",
"maintainer": "zadam.apps@gmail.com",
"homepage": "https://github.com/zadam/trilium",
"bin": "trilium",
"icon": "dist/trilium-linux-x64/icon.png",
"categories": [ "Office" ]
}
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Regular → Executable
View File
Regular → Executable
View File
Binary file not shown.
Regular → Executable
View File
+9 -2
View File
@@ -5,5 +5,12 @@ if [[ $# -eq 0 ]] ; then
exit 1
fi
sudo docker push zadam/trilium:latest
sudo docker push zadam/trilium:$1
VERSION=$1
SERIES=${VERSION:0:4}-latest
sudo docker push zadam/trilium:$VERSION
sudo docker push zadam/trilium:$SERIES
if [[ $1 != *"beta"* ]]; then
sudo docker push zadam/trilium:latest
fi
+10
View File
@@ -1,5 +1,7 @@
#!/usr/bin/env bash
export GITHUB_REPO=trilium
if [[ $# -eq 0 ]] ; then
echo "Missing argument of new version"
exit 1
@@ -43,6 +45,7 @@ git push origin $TAG
bin/build.sh
LINUX_X64_BUILD=trilium-linux-x64-$VERSION.tar.xz
DEBIAN_X64_BUILD=trilium_${VERSION}_amd64.deb
WINDOWS_X64_BUILD=trilium-windows-x64-$VERSION.zip
MAC_X64_BUILD=trilium-mac-x64-$VERSION.zip
SERVER_BUILD=trilium-linux-x64-server-$VERSION.tar.xz
@@ -59,6 +62,13 @@ github-release release \
--tag $TAG \
--name "$TAG release" $EXTRA
echo "Uploading debian x64 package"
github-release upload \
--tag $TAG \
--name "$DEBIAN_X64_BUILD" \
--file "dist/$DEBIAN_X64_BUILD"
echo "Uploading linux x64 build"
github-release upload \
+2
View File
@@ -3,6 +3,8 @@
instanceName=
[Network]
# host setting is relevant only for web deployments - set the host on which the server will listen
# host=0.0.0.0
# port setting is relevant only for web deployments, desktop builds run on random free port
port=8080
# true for TLS/SSL/HTTPS (secure), false for HTTP (unsecure).
BIN
View File
Binary file not shown.
+11
View File
@@ -0,0 +1,11 @@
INSERT INTO options (name, value, dateCreated, dateModified, isSynced)
SELECT 'mainFontSize', '100', '2019-01-13T18:31:00.874Z', '2019-01-13T18:31:00.874Z', 0
WHERE NOT EXISTS (SELECT 1 FROM options WHERE name = 'mainFontSize');
INSERT INTO options (name, value, dateCreated, dateModified, isSynced)
SELECT 'treeFontSize', '100', '2019-01-13T18:31:00.874Z', '2019-01-13T18:31:00.874Z', 0
WHERE NOT EXISTS (SELECT 1 FROM options WHERE name = 'treeFontSize');
INSERT INTO options (name, value, dateCreated, dateModified, isSynced)
SELECT 'detailFontSize', '110', '2019-01-13T18:31:00.874Z', '2019-01-13T18:31:00.874Z', 0
WHERE NOT EXISTS (SELECT 1 FROM options WHERE name = 'detailFontSize');
@@ -0,0 +1,35 @@
CREATE TABLE IF NOT EXISTS "note_contents" (
`noteContentId` TEXT NOT NULL,
`noteId` TEXT NOT NULL,
`isProtected` INT NOT NULL DEFAULT 0,
`content` TEXT NULL DEFAULT NULL,
`hash` TEXT DEFAULT "" NOT NULL,
`dateCreated` TEXT NOT NULL,
`dateModified` TEXT NOT NULL,
PRIMARY KEY(`noteContentId`)
);
CREATE UNIQUE INDEX `IDX_note_contents_noteId` ON `note_contents` (`noteId`);
INSERT INTO note_contents (noteContentId, noteId, isProtected, content, dateCreated, dateModified)
SELECT 'C' || SUBSTR(noteId, 2), noteId, isProtected, content, dateCreated, dateModified FROM notes;
CREATE TABLE IF NOT EXISTS "notes_mig" (
`noteId` TEXT NOT NULL,
`title` TEXT NOT NULL DEFAULT "note",
`isProtected` INT NOT NULL DEFAULT 0,
`type` TEXT NOT NULL DEFAULT 'text',
`mime` TEXT NOT NULL DEFAULT 'text/html',
`hash` TEXT DEFAULT "" NOT NULL,
`isDeleted` INT NOT NULL DEFAULT 0,
`dateCreated` TEXT NOT NULL,
`dateModified` TEXT NOT NULL,
PRIMARY KEY(`noteId`)
);
INSERT INTO notes_mig (noteId, title, isProtected, isDeleted, dateCreated, dateModified, type, mime, hash)
SELECT noteId, title, isProtected, isDeleted, dateCreated, dateModified, type, mime, hash FROM notes;
DROP TABLE notes;
ALTER TABLE notes_mig RENAME TO notes;
@@ -0,0 +1,2 @@
INSERT OR REPLACE INTO sync (entityName, entityId, sourceId, syncDate)
SELECT 'note_contents', noteContentId, '', '2019-03-02T18:07:29.182Z' FROM note_contents;
@@ -0,0 +1,6 @@
UPDATE notes SET title = 'Recovered protected note', isProtected = 0 WHERE noteId IN (
SELECT noteId FROM notes JOIN note_contents USING(noteId)
WHERE notes.isProtected = 1
AND note_contents.isProtected = 0
AND notes.isDeleted = 0
)
@@ -0,0 +1 @@
module.exports = async () => {};
+236
View File
@@ -0,0 +1,236 @@
CREATE TABLE IF NOT EXISTS "sync_mig" (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`entityName` TEXT NOT NULL,
`entityId` TEXT NOT NULL,
`sourceId` TEXT NOT NULL,
`utcSyncDate` TEXT NOT NULL);
INSERT INTO sync_mig (id, entityName, entityId, sourceId, utcSyncDate)
SELECT id, entityName, entityId, sourceId, REPLACE(syncDate, 'T', ' ') FROM sync;
DROP TABLE sync;
ALTER TABLE sync_mig RENAME TO sync;
CREATE TABLE IF NOT EXISTS "source_ids_mig" (
`sourceId` TEXT NOT NULL,
`utcDateCreated` TEXT NOT NULL,
PRIMARY KEY(`sourceId`)
);
INSERT INTO source_ids_mig (sourceId, utcDateCreated)
SELECT sourceId, REPLACE(dateCreated, 'T', ' ') FROM source_ids;
DROP TABLE source_ids;
ALTER TABLE source_ids_mig RENAME TO source_ids;
CREATE TABLE IF NOT EXISTS "note_revisions_mig" (
`noteRevisionId` TEXT NOT NULL PRIMARY KEY,
`noteId` TEXT NOT NULL,
`title` TEXT,
`content` TEXT,
`isProtected` INT NOT NULL DEFAULT 0,
`utcDateModifiedFrom` TEXT NOT NULL,
`utcDateModifiedTo` TEXT NOT NULL,
`dateModifiedFrom` TEXT NOT NULL,
`dateModifiedTo` TEXT NOT NULL,
type TEXT DEFAULT '' NOT NULL,
mime TEXT DEFAULT '' NOT NULL,
hash TEXT DEFAULT "" NOT NULL);
INSERT INTO note_revisions_mig (noteRevisionId, noteId, title, content, isProtected, utcDateModifiedFrom, utcDateModifiedTo, dateModifiedFrom, dateModifiedTo, type, mime, hash)
SELECT noteRevisionId, noteId, title, content, isProtected, REPLACE(dateModifiedFrom, 'T', ' '), REPLACE(dateModifiedTo, 'T', ' '), REPLACE(REPLACE(dateModifiedFrom, 'T', ' '), 'Z', '+0000'), REPLACE(REPLACE(dateModifiedTo, 'T', ' '), 'Z', '+0000'), type, mime, hash FROM note_revisions;
DROP TABLE note_revisions;
ALTER TABLE note_revisions_mig RENAME TO note_revisions;
CREATE TABLE IF NOT EXISTS "api_tokens_mig"
(
apiTokenId TEXT PRIMARY KEY NOT NULL,
token TEXT NOT NULL,
utcDateCreated TEXT NOT NULL,
isDeleted INT NOT NULL DEFAULT 0,
hash TEXT DEFAULT "" NOT NULL);
INSERT INTO api_tokens_mig (apiTokenId, token, utcDateCreated, isDeleted, hash)
SELECT apiTokenId, token, REPLACE(dateCreated, 'T', ' '), isDeleted, hash FROM api_tokens;
DROP TABLE api_tokens;
ALTER TABLE api_tokens_mig RENAME TO api_tokens;
CREATE TABLE IF NOT EXISTS "branches_mig" (
`branchId` TEXT NOT NULL,
`noteId` TEXT NOT NULL,
`parentNoteId` TEXT NOT NULL,
`notePosition` INTEGER NOT NULL,
`prefix` TEXT,
`isExpanded` BOOLEAN,
`isDeleted` INTEGER NOT NULL DEFAULT 0,
`utcDateModified` TEXT NOT NULL,
utcDateCreated TEXT NOT NULL,
hash TEXT DEFAULT "" NOT NULL,
PRIMARY KEY(`branchId`)
);
INSERT INTO branches_mig (branchId, noteId, parentNoteId, notePosition, prefix, isExpanded, isDeleted, utcDateModified, utcDateCreated, hash)
SELECT branchId, noteId, parentNoteId, notePosition, prefix, isExpanded, isDeleted, REPLACE(dateModified, 'T', ' '), REPLACE(dateCreated, 'T', ' '), hash FROM branches;
DROP TABLE branches;
ALTER TABLE branches_mig RENAME TO branches;
CREATE TABLE IF NOT EXISTS "recent_notes_mig" (
`branchId` TEXT NOT NULL PRIMARY KEY,
`notePath` TEXT NOT NULL,
hash TEXT DEFAULT "" NOT NULL,
`utcDateCreated` TEXT NOT NULL,
isDeleted INT
);
INSERT INTO recent_notes_mig (branchId, notePath, hash, utcDateCreated, isDeleted)
SELECT branchId, notePath, hash, REPLACE(dateCreated, 'T', ' '), isDeleted FROM recent_notes;
DROP TABLE recent_notes;
ALTER TABLE recent_notes_mig RENAME TO recent_notes;
CREATE TABLE IF NOT EXISTS "event_log_mig" (
`eventId` TEXT NOT NULL PRIMARY KEY,
`noteId` TEXT,
`comment` TEXT,
`utcDateCreated` TEXT NOT NULL
);
INSERT INTO event_log_mig (eventId, noteId, comment, utcDateCreated)
SELECT eventId, noteId, comment, REPLACE(dateCreated, 'T', ' ') FROM event_log;
DROP TABLE event_log;
ALTER TABLE event_log_mig RENAME TO event_log;
CREATE TABLE IF NOT EXISTS "options_mig"
(
name TEXT not null PRIMARY KEY,
value TEXT,
isSynced INTEGER default 0 not null,
hash TEXT default "" not null,
utcDateCreated TEXT not null,
utcDateModified TEXT NOT NULL
);
INSERT INTO options_mig (name, value, isSynced, hash, utcDateCreated, utcDateModified)
SELECT name, value, isSynced, hash, REPLACE(dateCreated, 'T', ' '), REPLACE(dateModified, 'T', ' ') FROM options;
DROP TABLE options;
ALTER TABLE options_mig RENAME TO options;
CREATE TABLE attributes_mig
(
attributeId TEXT not null primary key,
noteId TEXT not null,
type TEXT not null,
name TEXT not null,
value TEXT default '' not null,
position INT default 0 not null,
utcDateCreated TEXT not null,
utcDateModified TEXT not null,
isDeleted INT not null,
hash TEXT default "" not null,
isInheritable int DEFAULT 0 NULL);
INSERT INTO attributes_mig (attributeId, noteId, type, name, value, position, utcDateCreated, utcDateModified, isDeleted, hash, isInheritable)
SELECT attributeId, noteId, type, name, value, position, REPLACE(dateCreated, 'T', ' '), REPLACE(dateModified, 'T', ' '), isDeleted, hash, isInheritable FROM attributes;
DROP TABLE attributes;
ALTER TABLE attributes_mig RENAME TO attributes;
CREATE TABLE IF NOT EXISTS "links_mig" (
`linkId` TEXT NOT NULL,
`noteId` TEXT NOT NULL,
`targetNoteId` TEXT NOT NULL,
`type` TEXT NOT NULL,
`hash` TEXT DEFAULT "" NOT NULL,
`isDeleted` INTEGER NOT NULL DEFAULT 0,
`utcDateCreated` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
PRIMARY KEY(`linkId`)
);
INSERT INTO links_mig (linkId, noteId, targetNoteId, type, hash, isDeleted, utcDateCreated, utcDateModified)
SELECT linkId, noteId, targetNoteId, type, hash, isDeleted, REPLACE(dateCreated, 'T', ' '), REPLACE(dateModified, 'T', ' ') FROM links;
DROP TABLE links;
ALTER TABLE links_mig RENAME TO links;
CREATE TABLE IF NOT EXISTS "note_contents_mig" (
`noteContentId` TEXT NOT NULL,
`noteId` TEXT NOT NULL,
`isProtected` INT NOT NULL DEFAULT 0,
`content` TEXT NULL DEFAULT NULL,
`hash` TEXT DEFAULT "" NOT NULL,
`utcDateCreated` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
PRIMARY KEY(`noteContentId`)
);
INSERT INTO note_contents_mig (noteContentId, noteId, isProtected, content, hash, utcDateCreated, utcDateModified)
SELECT noteContentId, noteId, isProtected, content, hash, REPLACE(dateCreated, 'T', ' '), REPLACE(dateModified, 'T', ' ') FROM note_contents;
DROP TABLE note_contents;
ALTER TABLE note_contents_mig RENAME TO note_contents;
CREATE TABLE IF NOT EXISTS "notes_mig" (
`noteId` TEXT NOT NULL,
`title` TEXT NOT NULL DEFAULT "note",
`isProtected` INT NOT NULL DEFAULT 0,
`type` TEXT NOT NULL DEFAULT 'text',
`mime` TEXT NOT NULL DEFAULT 'text/html',
`hash` TEXT DEFAULT "" NOT NULL,
`isDeleted` INT NOT NULL DEFAULT 0,
`dateCreated` TEXT NOT NULL,
`dateModified` TEXT NOT NULL,
`utcDateCreated` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
PRIMARY KEY(`noteId`)
);
INSERT INTO notes_mig (noteId, title, isProtected, type, mime, hash, isDeleted, dateCreated, dateModified, utcDateCreated, utcDateModified)
SELECT noteId, title, isProtected, type, mime, hash, isDeleted, REPLACE(REPLACE(dateCreated, 'T', ' '), 'Z', '+0000'), REPLACE(REPLACE(dateModified, 'T', ' '), 'Z', '+0000'), REPLACE(dateCreated, 'T', ' '), REPLACE(dateModified, 'T', ' ') FROM notes;
DROP TABLE notes;
ALTER TABLE notes_mig RENAME TO notes;
CREATE UNIQUE INDEX `IDX_sync_entityName_entityId` ON `sync` (
`entityName`,
`entityId`
);
CREATE INDEX `IDX_sync_utcSyncDate` ON `sync` (
`utcSyncDate`
);
CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (
`noteId`
);
CREATE INDEX `IDX_note_revisions_dateModifiedFrom` ON `note_revisions` (
`utcDateModifiedFrom`
);
CREATE INDEX `IDX_note_revisions_dateModifiedTo` ON `note_revisions` (
`utcDateModifiedTo`
);
CREATE INDEX `IDX_branches_noteId` ON `branches` (
`noteId`
);
CREATE INDEX `IDX_branches_noteId_parentNoteId` ON `branches` (
`noteId`,
`parentNoteId`
);
CREATE INDEX IDX_branches_parentNoteId ON branches (parentNoteId);
CREATE INDEX IDX_attributes_name_value
on attributes (name, value);
CREATE INDEX IDX_links_noteId_index
on links (noteId);
CREATE INDEX IDX_links_targetNoteId_index
on links (targetNoteId);
CREATE INDEX IDX_attributes_name_index
on attributes (name);
CREATE INDEX IDX_attributes_noteId_index
on attributes (noteId);
CREATE INDEX IDX_attributes_value_index
on attributes (value);
CREATE UNIQUE INDEX `IDX_note_contents_noteId` ON `note_contents` (`noteId`);
@@ -0,0 +1,13 @@
CREATE TABLE IF NOT EXISTS "note_contents_mig" (
`noteId` TEXT NOT NULL,
`content` TEXT NULL DEFAULT NULL,
`hash` TEXT DEFAULT "" NOT NULL,
`utcDateModified` TEXT NOT NULL,
PRIMARY KEY(`noteId`)
);
INSERT INTO note_contents_mig (noteId, content, hash, utcDateModified)
SELECT noteId, content, hash, utcDateModified FROM note_contents;
DROP TABLE note_contents;
ALTER TABLE note_contents_mig RENAME TO note_contents;
+5
View File
@@ -0,0 +1,5 @@
const syncTableService = require('../../src/services/sync_table');
module.exports = async () => {
await syncTableService.fillAllSyncRows();
};
@@ -0,0 +1 @@
DROP TABLE IF EXISTS note_fulltext;
@@ -0,0 +1,4 @@
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
SELECT 'openTabs', '[{"notePath":"' || value || '","active": true,"tabId":"1111"}]', '2019-05-01T18:31:00.874Z', '2019-05-01T18:31:00.874Z', 0 FROM options WHERE name = 'startNotePath';
DELETE FROM options WHERE name = 'startNotePath';
@@ -0,0 +1,2 @@
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
VALUES ('hideTabRowForOneTab', 'false', '2019-05-01T18:31:00.874Z', '2019-05-01T18:31:00.874Z', 0);
@@ -0,0 +1,12 @@
drop table recent_notes;
create table recent_notes
(
noteId TEXT not null primary key,
notePath TEXT not null,
hash TEXT default "" not null,
utcDateCreated TEXT not null,
isDeleted INT
);
delete from sync where entityName = 'recent_notes';
@@ -0,0 +1,10 @@
UPDATE links SET type = 'internal-link' WHERE type = 'hyper';
UPDATE links SET type = 'image-link' WHERE type = 'image';
UPDATE links SET type = 'relation-map-link' WHERE type = 'relation-map';
INSERT INTO attributes (attributeId, noteId, type, name, value, position, utcDateCreated, utcDateModified, isDeleted, hash, isInheritable)
SELECT linkId, noteId, 'relation', type, targetNoteId, 0, utcDateCreated, utcDateModified, isDeleted, hash, 0 FROM links;
UPDATE sync SET entityName = 'attributes' WHERE entityName = 'links';
DROP TABLE links;
+5
View File
@@ -0,0 +1,5 @@
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
VALUES ('sidebarMinWidth', '350', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
VALUES ('sidebarWidthPercent', '25', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
@@ -0,0 +1,2 @@
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
VALUES ('showSidebarInNewTab', 'true', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
+14
View File
@@ -0,0 +1,14 @@
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
VALUES ('noteInfoWidget', '{"enabled":true,"expanded":true,"position":100}', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
VALUES ('attributesWidget', '{"enabled":true,"expanded":true,"position":200}', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
VALUES ('linkMapWidget', '{"enabled":true,"expanded":true,"position":300}', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
VALUES ('noteRevisionsWidget', '{"enabled":true,"expanded":true,"position":400}', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
VALUES ('whatLinksHereWidget', '{"enabled":false,"expanded":true,"position":500}', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
@@ -0,0 +1,5 @@
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
VALUES ('codeNotesMimeTypes', '["text/x-csrc","text/x-c++src","text/x-csharp","text/css","text/x-go","text/x-groovy","text/x-haskell","text/html","message/http","text/x-java","application/javascript;env=frontend","application/javascript;env=backend","application/json","text/x-kotlin","text/x-markdown","text/x-perl","text/x-php","text/x-python","text/x-ruby",null,"text/x-sql","text/x-swift","text/xml","text/x-yaml"]', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 1);
INSERT INTO sync (entityName, entityId, sourceId, utcSyncDate)
VALUES ('options' ,'codeNotesMimeTypes', 'SYNC_FILL', '2018-01-01T00:00:00.000Z');
@@ -0,0 +1,2 @@
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
VALUES ('similarNotesWidget', '{"enabled":true,"expanded":true,"position":600}', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
+1
View File
@@ -0,0 +1 @@
DROP TABLE event_log;
@@ -0,0 +1,2 @@
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
VALUES ('editedNotesWidget', '{"enabled":true,"expanded":true,"position":50}', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
+2
View File
@@ -0,0 +1,2 @@
INSERT INTO options (name, value, utcDateCreated, utcDateModified, isSynced)
VALUES ('calendarWidget', '{"enabled":true,"expanded":true,"position":20}', '2018-07-29T18:31:00.874Z', '2018-07-29T18:31:00.874Z', 0);
+98 -97
View File
@@ -1,88 +1,63 @@
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,
`syncDate` TEXT NOT NULL);
CREATE UNIQUE INDEX `IDX_sync_entityName_entityId` ON `sync` (
`entityName`,
`entityId`
);
CREATE INDEX `IDX_sync_syncDate` ON `sync` (
`syncDate`
);
`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,
`dateCreated` TEXT NOT NULL,
PRIMARY KEY(`sourceId`)
`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,
`dateModifiedFrom` TEXT NOT NULL,
`dateModifiedTo` TEXT NOT NULL
, type TEXT DEFAULT '' NOT NULL, mime TEXT DEFAULT '' NOT NULL, hash TEXT DEFAULT "" NOT NULL);
CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (
`noteId`
);
CREATE INDEX `IDX_note_revisions_dateModifiedFrom` ON `note_revisions` (
`dateModifiedFrom`
);
CREATE INDEX `IDX_note_revisions_dateModifiedTo` ON `note_revisions` (
`dateModifiedTo`
);
`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,
token TEXT NOT NULL,
dateCreated TEXT NOT NULL,
isDeleted INT NOT NULL DEFAULT 0
, hash TEXT DEFAULT "" NOT NULL);
utcDateCreated TEXT NOT NULL,
isDeleted INT NOT NULL DEFAULT 0,
hash TEXT DEFAULT "" NOT NULL);
CREATE TABLE IF NOT EXISTS "branches" (
`branchId` TEXT NOT NULL,
`noteId` TEXT NOT NULL,
`parentNoteId` TEXT NOT NULL,
`notePosition` INTEGER NOT NULL,
`prefix` TEXT,
`isExpanded` BOOLEAN,
`isDeleted` INTEGER NOT NULL DEFAULT 0,
`dateModified` TEXT NOT NULL, hash TEXT DEFAULT "" NOT NULL, dateCreated TEXT NOT NULL DEFAULT '1970-01-01T00:00:00.000Z',
PRIMARY KEY(`branchId`)
);
CREATE INDEX `IDX_branches_noteId` ON `branches` (
`noteId`
);
CREATE INDEX `IDX_branches_noteId_parentNoteId` ON `branches` (
`noteId`,
`parentNoteId`
);
CREATE INDEX IDX_branches_parentNoteId ON branches (parentNoteId);
CREATE TABLE IF NOT EXISTS "recent_notes" (
`branchId` TEXT NOT NULL PRIMARY KEY,
`notePath` TEXT NOT NULL,
hash TEXT DEFAULT "" NOT NULL,
`dateCreated` TEXT NOT NULL,
isDeleted INT
`branchId` TEXT NOT NULL,
`noteId` TEXT NOT NULL,
`parentNoteId` TEXT NOT NULL,
`notePosition` INTEGER NOT NULL,
`prefix` TEXT,
`isExpanded` BOOLEAN,
`isDeleted` INTEGER NOT NULL DEFAULT 0,
`utcDateModified` TEXT NOT NULL,
utcDateCreated TEXT NOT NULL,
hash TEXT DEFAULT "" NOT NULL,
PRIMARY KEY(`branchId`)
);
CREATE TABLE IF NOT EXISTS "event_log" (
`eventId` TEXT NOT NULL PRIMARY KEY,
`noteId` TEXT,
`comment` TEXT,
`dateCreated` TEXT NOT NULL
`eventId` TEXT NOT NULL PRIMARY KEY,
`noteId` TEXT,
`comment` TEXT,
`utcDateCreated` TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS "options"
(
name TEXT not null PRIMARY KEY,
value TEXT,
dateModified INT,
isSynced INTEGER default 0 not null,
hash TEXT default "" not null,
dateCreated TEXT default '1970-01-01T00:00:00.000Z' not null
utcDateCreated TEXT not null,
utcDateModified TEXT NOT NULL
);
CREATE TABLE attributes
CREATE TABLE IF NOT EXISTS "attributes"
(
attributeId TEXT not null primary key,
noteId TEXT not null,
@@ -90,40 +65,66 @@ CREATE TABLE attributes
name TEXT not null,
value TEXT default '' not null,
position INT default 0 not null,
dateCreated TEXT not null,
dateModified TEXT not null,
utcDateCreated TEXT not null,
utcDateModified TEXT not null,
isDeleted INT not null,
hash TEXT default "" not null, isInheritable int DEFAULT 0 NULL);
hash TEXT default "" not null,
isInheritable int DEFAULT 0 NULL);
CREATE 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 TABLE IF NOT EXISTS "note_contents" (
`noteId` TEXT NOT NULL,
`content` TEXT NULL DEFAULT NULL,
`hash` TEXT DEFAULT "" NOT NULL,
`utcDateModified` TEXT NOT NULL,
PRIMARY KEY(`noteId`)
);
CREATE TABLE recent_notes
(
noteId TEXT not null primary key,
notePath TEXT not null,
hash TEXT default "" not null,
utcDateCreated TEXT not null,
isDeleted INT
);
CREATE UNIQUE INDEX `IDX_sync_entityName_entityId` ON `sync` (
`entityName`,
`entityId`
);
CREATE INDEX `IDX_sync_utcSyncDate` ON `sync` (
`utcSyncDate`
);
CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (
`noteId`
);
CREATE INDEX `IDX_note_revisions_dateModifiedFrom` ON `note_revisions` (
`utcDateModifiedFrom`
);
CREATE INDEX `IDX_note_revisions_dateModifiedTo` ON `note_revisions` (
`utcDateModifiedTo`
);
CREATE INDEX `IDX_branches_noteId` ON `branches` (
`noteId`
);
CREATE INDEX `IDX_branches_noteId_parentNoteId` ON `branches` (
`noteId`,
`parentNoteId`
);
CREATE INDEX IDX_branches_parentNoteId ON branches (parentNoteId);
CREATE INDEX IDX_attributes_name_value
on attributes (name, value);
CREATE TABLE IF NOT EXISTS "notes" (
`noteId` TEXT NOT NULL,
`title` TEXT NOT NULL DEFAULT "note",
`content` TEXT NULL DEFAULT NULL,
`isProtected` INT NOT NULL DEFAULT 0,
`type` TEXT NOT NULL DEFAULT 'text',
`mime` TEXT NOT NULL DEFAULT 'text/html',
`hash` TEXT DEFAULT "" NOT NULL,
`isDeleted` INT NOT NULL DEFAULT 0,
`dateCreated` TEXT NOT NULL,
`dateModified` TEXT NOT NULL,
PRIMARY KEY(`noteId`)
);
CREATE TABLE IF NOT EXISTS "links" (
`linkId` TEXT NOT NULL,
`noteId` TEXT NOT NULL,
`targetNoteId` TEXT NOT NULL,
`type` TEXT NOT NULL,
`hash` TEXT DEFAULT "" NOT NULL,
`isDeleted` INTEGER NOT NULL DEFAULT 0,
`dateCreated` TEXT NOT NULL,
`dateModified` TEXT NOT NULL,
PRIMARY KEY(`linkId`)
);
CREATE INDEX IDX_links_noteId_index
on links (noteId);
CREATE INDEX IDX_links_targetNoteId_index
on links (targetNoteId);
CREATE INDEX IDX_attributes_name_index
on attributes (name);
CREATE INDEX IDX_attributes_noteId_index
+17
View File
@@ -0,0 +1,17 @@
version: '2.1'
services:
trilium:
build:
context: .
image: zadam/trilium
restart: always
environment:
- TRILIUM_DATA_DIR=/data
ports:
- "8080:8080"
volumes:
- trilium:/data
volumes:
trilium:
+7 -5
View File
@@ -28,7 +28,7 @@
<header>
<h2><span class="attribs"><span class="type-signature"></span></span>ApiToken<span class="signature">(apiTokenId, token, isDeleted, dateCreated)</span><span class="type-signature"></span></h2>
<h2><span class="attribs"><span class="type-signature"></span></span>ApiToken<span class="signature">(apiTokenId, token, isDeleted, utcDateCreated)</span><span class="type-signature"></span></h2>
<div class="class-description">ApiToken is an entity representing token used to authenticate against Trilium API from client applications. Currently used only by Trilium Sender.</div>
@@ -45,7 +45,7 @@
<h4 class="name" id="ApiToken"><span class="type-signature"></span>new ApiToken<span class="signature">(apiTokenId, token, isDeleted, dateCreated)</span><span class="type-signature"></span></h4>
<h4 class="name" id="ApiToken"><span class="type-signature"></span>new ApiToken<span class="signature">(apiTokenId, token, isDeleted, utcDateCreated)</span><span class="type-signature"></span></h4>
@@ -154,7 +154,7 @@
<tr>
<td class="name"><code>dateCreated</code></td>
<td class="name"><code>utcDateCreated</code></td>
<td class="type">
@@ -239,6 +239,8 @@
</div>
@@ -282,13 +284,13 @@
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+15 -7
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, dateCreated, dateModified)</span><span class="type-signature"></span></h2>
<h2><span class="attribs"><span class="type-signature"></span></span>Attribute<span class="signature">(attributeId, noteId, type, name, value, position, isInheritable, isDeleted, utcDateCreated, utcDateModified)</span><span class="type-signature"></span></h2>
<div class="class-description">Attribute is key value pair owned by a note.</div>
@@ -45,7 +45,7 @@
<h4 class="name" id="Attribute"><span class="type-signature"></span>new Attribute<span class="signature">(attributeId, noteId, type, name, value, position, isInheritable, isDeleted, dateCreated, dateModified)</span><span class="type-signature"></span></h4>
<h4 class="name" id="Attribute"><span class="type-signature"></span>new Attribute<span class="signature">(attributeId, noteId, type, name, value, position, isInheritable, isDeleted, utcDateCreated, utcDateModified)</span><span class="type-signature"></span></h4>
@@ -269,7 +269,7 @@
<tr>
<td class="name"><code>dateCreated</code></td>
<td class="name"><code>utcDateCreated</code></td>
<td class="type">
@@ -292,7 +292,7 @@
<tr>
<td class="name"><code>dateModified</code></td>
<td class="name"><code>utcDateModified</code></td>
<td class="type">
@@ -349,7 +349,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_attribute.js.html">entities/attribute.js</a>, <a href="entities_attribute.js.html#line24">line 24</a>
<a href="entities_attribute.js.html">entities/attribute.js</a>, <a href="entities_attribute.js.html#line29">line 29</a>
</li></ul></dd>
@@ -377,6 +377,8 @@
</div>
@@ -485,6 +487,8 @@
<h5>Returns:</h5>
@@ -585,6 +589,8 @@
<h5>Returns:</h5>
@@ -685,6 +691,8 @@
<h5>Returns:</h5>
@@ -724,13 +732,13 @@
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
File diff suppressed because it is too large Load Diff
+11 -7
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, dateModified, dateCreated)</span><span class="type-signature"></span></h2>
<h2><span class="attribs"><span class="type-signature"></span></span>Branch<span class="signature">(branchId, noteId, parentNoteId, notePosition, prefix, isExpanded, isDeleted, utcDateModified, utcDateCreated)</span><span class="type-signature"></span></h2>
<div class="class-description">Branch represents note's placement in the tree - it's essentially pair of noteId and parentNoteId.
Each note can have multiple (at least one) branches, meaning it can be placed into multiple places in the tree.</div>
@@ -46,7 +46,7 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
<h4 class="name" id="Branch"><span class="type-signature"></span>new Branch<span class="signature">(branchId, noteId, parentNoteId, notePosition, prefix, isExpanded, isDeleted, dateModified, dateCreated)</span><span class="type-signature"></span></h4>
<h4 class="name" id="Branch"><span class="type-signature"></span>new Branch<span class="signature">(branchId, noteId, parentNoteId, notePosition, prefix, isExpanded, isDeleted, utcDateModified, utcDateCreated)</span><span class="type-signature"></span></h4>
@@ -247,7 +247,7 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
<tr>
<td class="name"><code>dateModified</code></td>
<td class="name"><code>utcDateModified</code></td>
<td class="type">
@@ -270,7 +270,7 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
<tr>
<td class="name"><code>dateCreated</code></td>
<td class="name"><code>utcDateCreated</code></td>
<td class="type">
@@ -327,7 +327,7 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line24">line 24</a>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line30">line 30</a>
</li></ul></dd>
@@ -355,6 +355,8 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
</div>
@@ -463,6 +465,8 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
<h5>Returns:</h5>
@@ -505,13 +509,13 @@ Each note can have multiple (at least one) branches, meaning it can be placed in
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+4 -2
View File
@@ -178,6 +178,8 @@
</div>
@@ -210,13 +212,13 @@
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+4 -4
View File
@@ -28,7 +28,7 @@
<header>
<h2><span class="attribs"><span class="type-signature"></span></span>Link<span class="signature">(linkId, noteId, targetNoteId, type, isDeleted, dateModified, dateCreated)</span><span class="type-signature"></span></h2>
<h2><span class="attribs"><span class="type-signature"></span></span>Link<span class="signature">(linkId, noteId, targetNoteId, type, isDeleted, utcDateModified, utcDateCreated)</span><span class="type-signature"></span></h2>
<div class="class-description">This class represents link from one note to another in the form of hyperlink or image reference. Note that
this is different concept than attribute/relation.</div>
@@ -46,7 +46,7 @@ this is different concept than attribute/relation.</div>
<h4 class="name" id="Link"><span class="type-signature"></span>new Link<span class="signature">(linkId, noteId, targetNoteId, type, isDeleted, dateModified, dateCreated)</span><span class="type-signature"></span></h4>
<h4 class="name" id="Link"><span class="type-signature"></span>new Link<span class="signature">(linkId, noteId, targetNoteId, type, isDeleted, utcDateModified, utcDateCreated)</span><span class="type-signature"></span></h4>
@@ -201,7 +201,7 @@ this is different concept than attribute/relation.</div>
<tr>
<td class="name"><code>dateModified</code></td>
<td class="name"><code>utcDateModified</code></td>
<td class="type">
@@ -224,7 +224,7 @@ this is different concept than attribute/relation.</div>
<tr>
<td class="name"><code>dateCreated</code></td>
<td class="name"><code>utcDateCreated</code></td>
<td class="type">
+878 -184
View File
File diff suppressed because it is too large Load Diff
+53 -5
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)</span><span class="type-signature"></span></h2>
<h2><span class="attribs"><span class="type-signature"></span></span>NoteRevision<span class="signature">(noteRevisionId, noteId, type, mime, title, content, isProtected, dateModifiedFrom, dateModifiedTo, utcDateModifiedFrom, utcDateModifiedTo)</span><span class="type-signature"></span></h2>
<div class="class-description">NoteRevision represents snapshot of note's title and content at some point in the past. It's used for seamless note versioning.</div>
@@ -45,7 +45,7 @@
<h4 class="name" id="NoteRevision"><span class="type-signature"></span>new NoteRevision<span class="signature">(noteRevisionId, noteId, type, mime, title, content, isProtected, dateModifiedFrom, dateModifiedTo)</span><span class="type-signature"></span></h4>
<h4 class="name" id="NoteRevision"><span class="type-signature"></span>new NoteRevision<span class="signature">(noteRevisionId, noteId, type, mime, title, content, isProtected, dateModifiedFrom, dateModifiedTo, utcDateModifiedFrom, utcDateModifiedTo)</span><span class="type-signature"></span></h4>
@@ -285,6 +285,52 @@
<td class="description last"></td>
</tr>
<tr>
<td class="name"><code>utcDateModifiedFrom</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last"></td>
</tr>
<tr>
<td class="name"><code>utcDateModifiedTo</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="description last"></td>
</tr>
@@ -326,7 +372,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_revision.js.html">entities/note_revision.js</a>, <a href="entities_note_revision.js.html#line22">line 22</a>
<a href="entities_note_revision.js.html">entities/note_revision.js</a>, <a href="entities_note_revision.js.html#line29">line 29</a>
</li></ul></dd>
@@ -354,6 +400,8 @@
</div>
@@ -397,13 +445,13 @@
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+9 -7
View File
@@ -28,7 +28,7 @@
<header>
<h2><span class="attribs"><span class="type-signature"></span></span>Option<span class="signature">(name, value, isSynced, dateModified, dateCreated)</span><span class="type-signature"></span></h2>
<h2><span class="attribs"><span class="type-signature"></span></span>Option<span class="signature">(name, value, isSynced, utcDateModified, utcDateCreated)</span><span class="type-signature"></span></h2>
<div class="class-description">Option represents name-value pair, either directly configurable by the user or some system property.</div>
@@ -45,7 +45,7 @@
<h4 class="name" id="Option"><span class="type-signature"></span>new Option<span class="signature">(name, value, isSynced, dateModified, dateCreated)</span><span class="type-signature"></span></h4>
<h4 class="name" id="Option"><span class="type-signature"></span>new Option<span class="signature">(name, value, isSynced, utcDateModified, utcDateCreated)</span><span class="type-signature"></span></h4>
@@ -154,7 +154,7 @@
<tr>
<td class="name"><code>dateModified</code></td>
<td class="name"><code>utcDateModified</code></td>
<td class="type">
@@ -177,7 +177,7 @@
<tr>
<td class="name"><code>dateCreated</code></td>
<td class="name"><code>utcDateCreated</code></td>
<td class="type">
@@ -234,7 +234,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_option.js.html">entities/option.js</a>, <a href="entities_option.js.html#line17">line 17</a>
<a href="entities_option.js.html">entities/option.js</a>, <a href="entities_option.js.html#line22">line 22</a>
</li></ul></dd>
@@ -262,6 +262,8 @@
</div>
@@ -305,13 +307,13 @@
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+8 -6
View File
@@ -28,7 +28,7 @@
<header>
<h2><span class="attribs"><span class="type-signature"></span></span>RecentNote<span class="signature">(branchId, notePath, isDeleted, dateModified)</span><span class="type-signature"></span></h2>
<h2><span class="attribs"><span class="type-signature"></span></span>RecentNote<span class="signature">(noteId, notePath, isDeleted, utcDateModified)</span><span class="type-signature"></span></h2>
<div class="class-description">RecentNote represents recently visited note.</div>
@@ -45,7 +45,7 @@
<h4 class="name" id="RecentNote"><span class="type-signature"></span>new RecentNote<span class="signature">(branchId, notePath, isDeleted, dateModified)</span><span class="type-signature"></span></h4>
<h4 class="name" id="RecentNote"><span class="type-signature"></span>new RecentNote<span class="signature">(noteId, notePath, isDeleted, utcDateModified)</span><span class="type-signature"></span></h4>
@@ -85,7 +85,7 @@
<tr>
<td class="name"><code>branchId</code></td>
<td class="name"><code>noteId</code></td>
<td class="type">
@@ -154,7 +154,7 @@
<tr>
<td class="name"><code>dateModified</code></td>
<td class="name"><code>utcDateModified</code></td>
<td class="type">
@@ -239,6 +239,8 @@
</div>
@@ -282,13 +284,13 @@
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+6 -6
View File
@@ -37,22 +37,22 @@ const dateUtils = require('../services/date_utils');
* @param {string} apiTokenId - primary key
* @param {string} token
* @param {boolean} isDeleted - true if API token is deleted
* @param {string} dateCreated
* @param {string} utcDateCreated
*
* @extends Entity
*/
class ApiToken extends Entity {
static get entityName() { return "api_tokens"; }
static get primaryKeyName() { return "apiTokenId"; }
static get hashedProperties() { return ["apiTokenId", "token", "dateCreated", "isDeleted"]; }
static get hashedProperties() { return ["apiTokenId", "token", "utcDateCreated", "isDeleted"]; }
beforeSaving() {
if (!this.isDeleted) {
this.isDeleted = false;
}
if (!this.dateCreated) {
this.dateCreated = dateUtils.nowDate();
if (!this.utcDateCreated) {
this.utcDateCreated = dateUtils.utcNowDateTime();
}
super.beforeSaving();
@@ -69,13 +69,13 @@ module.exports = ApiToken;</code></pre>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+8 -8
View File
@@ -44,15 +44,15 @@ const sql = require('../services/sql');
* @param {int} position
* @param {boolean} isInheritable
* @param {boolean} isDeleted
* @param {string} dateCreated
* @param {string} dateModified
* @param {string} utcDateCreated
* @param {string} utcDateModified
*
* @extends Entity
*/
class Attribute extends Entity {
static get entityName() { return "attributes"; }
static get primaryKeyName() { return "attributeId"; }
static get hashedProperties() { return ["attributeId", "noteId", "type", "name", "value", "isInheritable", "isDeleted", "dateCreated"]; }
static get hashedProperties() { return ["attributeId", "noteId", "type", "name", "value", "isInheritable", "isDeleted", "utcDateCreated"]; }
constructor(row) {
super(row);
@@ -123,14 +123,14 @@ class Attribute extends Entity {
this.isDeleted = false;
}
if (!this.dateCreated) {
this.dateCreated = dateUtils.nowDate();
if (!this.utcDateCreated) {
this.utcDateCreated = dateUtils.utcNowDateTime();
}
super.beforeSaving();
if (this.isChanged) {
this.dateModified = dateUtils.nowDate();
this.utcDateModified = dateUtils.utcNowDateTime();
}
}
@@ -150,13 +150,13 @@ module.exports = Attribute;</code></pre>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+7 -7
View File
@@ -44,8 +44,8 @@ const sql = require('../services/sql');
* @param {string} prefix
* @param {boolean} isExpanded
* @param {boolean} isDeleted
* @param {string} dateModified
* @param {string} dateCreated
* @param {string} utcDateModified
* @param {string} utcDateCreated
*
* @extends Entity
*/
@@ -77,14 +77,14 @@ class Branch extends Entity {
this.isDeleted = false;
}
if (!this.dateCreated) {
this.dateCreated = dateUtils.nowDate();
if (!this.utcDateCreated) {
this.utcDateCreated = dateUtils.utcNowDateTime();
}
super.beforeSaving();
if (this.isChanged) {
this.dateModified = dateUtils.nowDate();
this.utcDateModified = dateUtils.utcNowDateTime();
}
}
@@ -104,13 +104,13 @@ module.exports = Branch;</code></pre>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+13 -4
View File
@@ -36,7 +36,10 @@ class Entity {
*/
constructor(row = {}) {
for (const key in row) {
this[key] = row[key];
// ! is used when joint-fetching notes and note_contents objects for performance
if (!key.startsWith('!')) {
this[key] = row[key];
}
}
if ('isDeleted' in this) {
@@ -51,7 +54,13 @@ class Entity {
this.hash = this.generateHash();
this.isChanged = origHash !== this.hash;
if (this.forcedChange) {
this.isChanged = true;
delete this.forcedChange;
}
else {
this.isChanged = origHash !== this.hash;
}
}
generateIdIfNecessary() {
@@ -87,13 +96,13 @@ module.exports = Entity;</code></pre>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+6 -6
View File
@@ -41,15 +41,15 @@ const dateUtils = require('../services/date_utils');
* @param {string} targetNoteId
* @param {string} type
* @param {boolean} isDeleted
* @param {string} dateModified
* @param {string} dateCreated
* @param {string} utcDateModified
* @param {string} utcDateCreated
*
* @extends Entity
*/
class Link extends Entity {
static get entityName() { return "links"; }
static get primaryKeyName() { return "linkId"; }
static get hashedProperties() { return ["linkId", "noteId", "targetNoteId", "type", "isDeleted", "dateCreated", "dateModified"]; }
static get hashedProperties() { return ["linkId", "noteId", "targetNoteId", "type", "isDeleted", "utcDateCreated", "utcDateModified"]; }
async getNote() {
return await repository.getEntity("SELECT * FROM notes WHERE noteId = ?", [this.noteId]);
@@ -64,14 +64,14 @@ class Link extends Entity {
this.isDeleted = false;
}
if (!this.dateCreated) {
this.dateCreated = dateUtils.nowDate();
if (!this.utcDateCreated) {
this.utcDateCreated = dateUtils.utcNowDateTime();
}
super.beforeSaving();
if (this.isChanged) {
this.dateModified = dateUtils.nowDate();
this.utcDateModified = dateUtils.utcNowDateTime();
}
}
}
+176 -50
View File
@@ -33,13 +33,17 @@ const Attribute = require('./attribute');
const protectedSessionService = require('../services/protected_session');
const repository = require('../services/repository');
const sql = require('../services/sql');
const utils = require('../services/utils');
const dateUtils = require('../services/date_utils');
const syncTableService = require('../services/sync_table');
const LABEL = 'label';
const LABEL_DEFINITION = 'label-definition';
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.
*
@@ -47,18 +51,19 @@ const RELATION_DEFINITION = 'relation-definition';
* @property {string} type - one of "text", "code", "file" or "render"
* @property {string} mime - MIME type, e.g. "text/html"
* @property {string} title - note title
* @property {string} content - note content - e.g. HTML text for text notes, file payload for files
* @property {boolean} isProtected - true if note is protected
* @property {boolean} isDeleted - true if note is deleted
* @property {string} dateCreated
* @property {string} dateModified
* @property {string} dateCreated - local date time (with offset)
* @property {string} dateModified - local date time (with offset)
* @property {string} utcDateCreated
* @property {string} utcDateModified
*
* @extends Entity
*/
class Note extends Entity {
static get entityName() { return "notes"; }
static get primaryKeyName() { return "noteId"; }
static get hashedProperties() { return ["noteId", "title", "content", "type", "isProtected", "isDeleted"]; }
static get hashedProperties() { return ["noteId", "title", "type", "isProtected", "isDeleted"]; }
/**
* @param row - object containing database row from "notes" table
@@ -75,19 +80,98 @@ class Note extends Entity {
if (this.isProtected &amp;&amp; this.noteId) {
this.isContentAvailable = protectedSessionService.isProtectedSessionAvailable();
protectedSessionService.decryptNote(this);
if (this.isContentAvailable) {
protectedSessionService.decryptNote(this);
}
else {
this.title = "[protected]";
}
}
this.setContent(this.content);
}
setContent(content) {
/*
* Note content has quite special handling - it's not a separate entity, but a lazily loaded
* part of Note entity with it's own sync. Reasons behind this hybrid design has been:
*
* - content can be quite large and it's not necessary to load it / fill memory for any note access even if we don't need a content, especially for bulk operations like search
* - changes in the note metadata or title should not trigger note content sync (so we keep separate utcDateModified and sync rows)
* - but to the user note content and title changes are one and the same - single dateModified (so all changes must go through Note and content is not a separate entity)
*/
/** @returns {Promise&lt;*>} */
async getContent(silentNotFoundError = false) {
if (this.content === undefined) {
const res = await sql.getRow(`SELECT content, hash FROM note_contents WHERE noteId = ?`, [this.noteId]);
if (!res) {
if (silentNotFoundError) {
return undefined;
}
else {
throw new Error("Cannot find note content for noteId=" + this.noteId);
}
}
this.content = res.content;
if (this.isProtected) {
if (this.isContentAvailable) {
protectedSessionService.decryptNoteContent(this);
}
else {
this.content = "";
}
}
if (this.isStringNote()) {
this.content = this.content === null
? ""
: this.content.toString("UTF-8");
}
}
return this.content;
}
/** @returns {Promise&lt;*>} */
async getJsonContent() {
const content = await this.getContent();
return JSON.parse(content);
}
/** @returns {Promise} */
async setContent(content) {
// force updating note itself so that dateChanged is represented correctly even for the content
this.forcedChange = true;
await this.save();
this.content = content;
try {
this.jsonContent = JSON.parse(this.content);
const pojo = {
noteId: this.noteId,
content: content,
utcDateModified: dateUtils.utcNowDateTime(),
hash: utils.hash(this.noteId + "|" + content)
};
if (this.isProtected) {
if (this.isContentAvailable) {
protectedSessionService.encryptNoteContent(pojo);
}
else {
throw new Error(`Cannot update content of noteId=${this.noteId} since we're out of protected session.`);
}
}
catch(e) {}
await sql.upsert("note_contents", "noteId", pojo);
await syncTableService.addNoteContentSync(this.noteId);
}
/** @returns {Promise} */
async setJsonContent(content) {
await this.setContent(JSON.stringify(content, null, '\t'));
}
/** @returns {boolean} true if this note is the root of the note tree. Root note has "root" noteId */
@@ -113,6 +197,13 @@ class Note extends Entity {
return (this.type === "code" || this.type === "file" || this.type === "render") &amp;&amp; this.mime === "text/html";
}
/** @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);
}
/** @returns {string} JS script environment - either "frontend" or "backend" */
getScriptEnv() {
if (this.isHtml() || (this.isJavaScript() &amp;&amp; this.mime.endsWith('env=frontend'))) {
@@ -132,9 +223,35 @@ class Note extends Entity {
/**
* @returns {Promise&lt;Attribute[]>} attributes belonging to this specific note (excludes inherited attributes)
*
* This method can be significantly faster than the getAttributes()
*/
async getOwnedAttributes() {
return await repository.getEntities(`SELECT * FROM attributes WHERE isDeleted = 0 AND noteId = ?`, [this.noteId]);
async getOwnedAttributes(type, name) {
let query = `SELECT * FROM attributes WHERE isDeleted = 0 AND noteId = ?`;
const params = [this.noteId];
if (type) {
query += ` AND type = ?`;
params.push(type);
}
if (name) {
query += ` AND name = ?`;
params.push(name);
}
return await repository.getEntities(query, params);
}
/**
* @returns {Promise&lt;Attribute>} attribute belonging to this specific note (excludes inherited attributes)
*
* This method can be significantly faster than the getAttribute()
*/
async getOwnedAttribute(type, name) {
const attrs = await this.getOwnedAttributes(type, name);
return attrs.length > 0 ? attrs[0] : null;
}
/**
@@ -185,6 +302,21 @@ class Note extends Entity {
return (await this.getAttributes(name)).filter(attr => attr.type === RELATION);
}
/**
* @param {string} [name] - relation name to filter
* @returns {Promise&lt;Note[]>}
*/
async getRelationTargets(name) {
const relations = await this.getRelations(name);
const targets = [];
for (const relation of relations) {
targets.push(await relation.getTargetNote());
}
return targets;
}
/**
* @param {string} [name] - relation name to filter
* @returns {Promise&lt;Attribute[]>} all note's relation definitions including inherited ones
@@ -217,16 +349,16 @@ class Note extends Entity {
treeWithAttrs(noteId, level) AS (
SELECT * FROM tree
UNION
SELECT attributes.value, treeWithAttrs.level + 1 FROM attributes
SELECT attributes.value, treeWithAttrs.level FROM attributes
JOIN treeWithAttrs ON treeWithAttrs.noteId = attributes.noteId
WHERE attributes.isDeleted = 0
AND attributes.type = 'relation'
AND attributes.name = 'template'
AND (attributes.noteId = ? OR attributes.isInheritable = 1)
AND (treeWithAttrs.level = 0 OR attributes.isInheritable = 1)
)
SELECT attributes.* FROM attributes JOIN treeWithAttrs ON attributes.noteId = treeWithAttrs.noteId
WHERE attributes.isDeleted = 0 AND (attributes.isInheritable = 1 OR attributes.noteId = ?)
ORDER BY level, noteId, position`, [this.noteId, this.noteId, this.noteId]);
WHERE attributes.isDeleted = 0 AND (attributes.isInheritable = 1 OR treeWithAttrs.level = 0)
ORDER BY level, noteId, position`, [this.noteId]);
// attributes are ordered so that "closest" attributes are first
// we order by noteId so that attributes from same note stay together. Actual noteId ordering doesn't matter.
@@ -550,28 +682,17 @@ class Note extends Entity {
/**
* Get list of links coming out of this note.
*
* @returns {Promise&lt;Link[]>}
* @deprecated - not intended for general use
* @returns {Promise&lt;Attribute[]>}
*/
async getLinks() {
return await repository.getEntities("SELECT * FROM links WHERE noteId = ? AND isDeleted = 0", [this.noteId]);
}
/**
* Get list of links targetting this note.
*
* @returns {Promise&lt;Link[]>}
*/
async getTargetLinks() {
return await repository.getEntities("SELECT * FROM links WHERE targetNoteId = ? AND isDeleted = 0", [this.noteId]);
}
/**
* Return all links from this note, including deleted ones.
*
* @returns {Promise&lt;Link[]>}
*/
async getLinksWithDeleted() {
return await repository.getEntities("SELECT * FROM links WHERE noteId = ?", [this.noteId]);
return await repository.getEntities(`
SELECT *
FROM attributes
WHERE noteId = ? AND
isDeleted = 0 AND
type = 'relation' AND
name IN ('internal-link', 'image-link', 'relation-map-link')`, [this.noteId]);
}
/**
@@ -629,37 +750,42 @@ class Note extends Entity {
}
beforeSaving() {
if (this.isJson() &amp;&amp; this.jsonContent) {
this.content = JSON.stringify(this.jsonContent, null, '\t');
}
// we do this here because encryption needs the note ID for the IV
this.generateIdIfNecessary();
if (!this.isDeleted) {
this.isDeleted = false;
}
if (!this.dateCreated) {
this.dateCreated = dateUtils.nowDate();
this.dateCreated = dateUtils.localNowDateTime();
}
if (!this.utcDateCreated) {
this.utcDateCreated = dateUtils.utcNowDateTime();
}
super.beforeSaving();
if (this.isChanged) {
this.dateModified = dateUtils.nowDate();
this.dateModified = dateUtils.localNowDateTime();
this.utcDateModified = dateUtils.utcNowDateTime();
}
}
// cannot be static!
updatePojo(pojo) {
if (pojo.isProtected) {
protectedSessionService.encryptNote(pojo);
if (this.isContentAvailable) {
protectedSessionService.encryptNote(pojo);
}
else {
// updating protected note outside of protected session means we will keep original ciphertexts
delete pojo.title;
}
}
delete pojo.jsonContent;
delete pojo.isContentAvailable;
delete pojo.__attributeCache;
delete pojo.content;
delete pojo.contentHash;
}
}
@@ -673,13 +799,13 @@ module.exports = Note;</code></pre>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
@@ -44,13 +44,15 @@ const repository = require('../services/repository');
* @param {string} isProtected
* @param {string} dateModifiedFrom
* @param {string} dateModifiedTo
* @param {string} utcDateModifiedFrom
* @param {string} utcDateModifiedTo
*
* @extends Entity
*/
class NoteRevision extends Entity {
static get entityName() { return "note_revisions"; }
static get primaryKeyName() { return "noteRevisionId"; }
static get hashedProperties() { return ["noteRevisionId", "noteId", "title", "content", "isProtected", "dateModifiedFrom", "dateModifiedTo"]; }
static get hashedProperties() { return ["noteRevisionId", "noteId", "title", "content", "isProtected", "dateModifiedFrom", "dateModifiedTo", "utcDateModifiedFrom", "utcDateModifiedTo"]; }
constructor(row) {
super(row);
@@ -85,13 +87,13 @@ module.exports = NoteRevision;</code></pre>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+9 -5
View File
@@ -37,8 +37,8 @@ const dateUtils = require('../services/date_utils');
* @param {string} name
* @param {string} value
* @param {boolean} isSynced
* @param {string} dateModified
* @param {string} dateCreated
* @param {string} utcDateModified
* @param {string} utcDateCreated
*
* @extends Entity
*/
@@ -54,10 +54,14 @@ class Option extends Entity {
}
beforeSaving() {
if (!this.utcDateCreated) {
this.utcDateCreated = dateUtils.utcNowDateTime();
}
super.beforeSaving();
if (this.isChanged) {
this.dateModified = dateUtils.nowDate();
this.utcDateModified = dateUtils.utcNowDateTime();
}
}
}
@@ -72,13 +76,13 @@ module.exports = Option;</code></pre>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
@@ -34,25 +34,25 @@ const dateUtils = require('../services/date_utils');
/**
* RecentNote represents recently visited note.
*
* @param {string} branchId
* @param {string} noteId
* @param {string} notePath
* @param {boolean} isDeleted
* @param {string} dateModified
* @param {string} utcDateModified
*
* @extends Entity
*/
class RecentNote extends Entity {
static get entityName() { return "recent_notes"; }
static get primaryKeyName() { return "branchId"; }
static get hashedProperties() { return ["branchId", "notePath", "dateCreated", "isDeleted"]; }
static get primaryKeyName() { return "noteId"; }
static get hashedProperties() { return ["noteId", "notePath", "utcDateCreated", "isDeleted"]; }
beforeSaving() {
if (!this.isDeleted) {
this.isDeleted = false;
}
if (!this.dateCreated) {
this.dateCreated = dateUtils.nowDate();
if (!this.utcDateCreated) {
this.utcDateCreated = dateUtils.utcNowDateTime();
}
super.beforeSaving();
@@ -69,13 +69,13 @@ module.exports = RecentNote;</code></pre>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+4 -4
View File
@@ -272,7 +272,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line144">line 144</a>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line173">line 173</a>
</li></ul></dd>
@@ -558,7 +558,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line151">line 151</a>
<a href="services_backend_script_api.js.html">services/backend_script_api.js</a>, <a href="services_backend_script_api.js.html#line180">line 180</a>
</li></ul></dd>
@@ -588,13 +588,13 @@
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+2 -2
View File
@@ -50,13 +50,13 @@
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+9 -9
View File
@@ -1,12 +1,12 @@
/*global document */
(function() {
var source = document.getElementsByClassName('prettyprint source linenums');
var i = 0;
var lineNumber = 0;
var lineId;
var lines;
var totalLines;
var anchorHash;
(() => {
const source = document.getElementsByClassName('prettyprint source linenums');
let i = 0;
let lineNumber = 0;
let lineId;
let lines;
let totalLines;
let anchorHash;
if (source && source[0]) {
anchorHash = document.location.hash.substring(1);
@@ -15,7 +15,7 @@
for (; i < totalLines; i++) {
lineNumber++;
lineId = 'line' + lineNumber;
lineId = `line${lineNumber}`;
lines[i].id = lineId;
if (lineId === anchorHash) {
lines[i].className += ' selected';
@@ -30,15 +30,17 @@
const noteService = require('./notes');
const sql = require('./sql');
const utils = require('./utils');
const dateUtils = require('./date_utils');
const attributeService = require('./attributes');
const dateNoteService = require('./date_notes');
const treeService = require('./tree');
const config = require('./config');
const repository = require('./repository');
const axios = require('axios');
const dayjs = require('dayjs');
const cloningService = require('./cloning');
const messagingService = require('./messaging');
const ws = require('./ws.js');
const appInfo = require('./app_info');
const searchService = require('./search');
/**
* This is the main backend API interface for scripts. It's published in the local "api" object.
@@ -46,20 +48,23 @@ const messagingService = require('./messaging');
* @constructor
* @hideconstructor
*/
function BackendScriptApi(startNote, currentNote, originEntity) {
function BackendScriptApi(currentNote, apiParams) {
/** @property {Note} note where script started executing */
this.startNote = startNote;
/** @property {Note} note where script is currently executing */
this.startNote = apiParams.startNote;
/** @property {Note} note where script is currently executing. Don't mix this up with concept of active note */
this.currentNote = currentNote;
/** @property {Entity} entity whose event triggered this executions */
this.originEntity = originEntity;
this.originEntity = apiParams.originEntity;
for (const key in apiParams) {
this[key] = apiParams[key];
}
this.axios = axios;
this.dayjs = dayjs;
this.utils = {
unescapeHtml: utils.unescapeHtml,
isoDateTimeStr: dateUtils.dateStr,
isoDateStr: date => dateUtils.dateStr(date).substr(0, 10)
unescapeHtml: utils.unescapeHtml
};
/**
@@ -116,6 +121,30 @@ function BackendScriptApi(startNote, currentNote, originEntity) {
*/
this.getEntities = repository.getEntities;
/**
* This is a powerful search method - you can search by attributes and their values, e.g.:
* "@dateModified =* MONTH AND @log". See full documentation for all options at: https://github.com/zadam/trilium/wiki/Search
*
* @method
* @param {string} searchString
* @returns {Promise&lt;Note[]>}
*/
this.searchForNotes = searchService.searchForNotes;
/**
* This is a powerful search method - you can search by attributes and their values, e.g.:
* "@dateModified =* MONTH AND @log". See full documentation for all options at: https://github.com/zadam/trilium/wiki/Search
*
* @method
* @param {string} searchString
* @returns {Promise&lt;Note|null>}
*/
this.searchForNote = async searchString => {
const notes = await searchService.searchForNotes(searchString);
return notes.length > 0 ? notes[0] : null;
};
/**
* Retrieves notes with given label name &amp; value
*
@@ -196,6 +225,23 @@ function BackendScriptApi(startNote, currentNote, originEntity) {
*/
this.createNote = noteService.createNote;
/**
* Creates new note according to given params and force all connected clients to refresh their tree.
*
* @method
*
* @param {string} parentNoteId - create new note under this parent
* @param {string} title
* @param {string} [content=""]
* @param {CreateNoteExtraOptions} [extraOptions={}]
* @returns {Promise&lt;{note: Note, branch: Branch}>} object contains newly created entities note and branch
*/
this.createNoteAndRefresh = async function(parentNoteId, title, content, extraOptions) {
await noteService.createNote(parentNoteId, title, content, extraOptions);
ws.refreshTree();
};
/**
* Log given message to trilium logs.
*
@@ -212,14 +258,42 @@ function BackendScriptApi(startNote, currentNote, originEntity) {
this.getRootCalendarNote = dateNoteService.getRootCalendarNote;
/**
* Returns day note for given date (YYYY-MM-DD format). If such note doesn't exist, it is created.
* Returns day note for given date. If such note doesn't exist, it is created.
*
* @method
* @param {string} date
* @param {string} date in YYYY-MM-DD format
* @returns {Promise&lt;Note|null>}
*/
this.getDateNote = dateNoteService.getDateNote;
/**
* Returns note for the first date of the week of the given date.
*
* @method
* @param {string} date in YYYY-MM-DD format
* @param {object} options - "startOfTheWeek" - either "monday" (default) or "sunday"
* @returns {Promise&lt;Note|null>}
*/
this.getWeekNote = dateNoteService.getWeekNote;
/**
* Returns month note for given date. If such note doesn't exist, it is created.
*
* @method
* @param {string} date in YYYY-MM format
* @returns {Promise&lt;Note|null>}
*/
this.getMonthNote = dateNoteService.getMonthNote;
/**
* Returns year note for given year. If such note doesn't exist, it is created.
*
* @method
* @param {string} year in YYYY format
* @returns {Promise&lt;Note|null>}
*/
this.getYearNote = dateNoteService.getYearNote;
/**
* @method
* @param {string} parentNoteId - this note's child notes will be sorted
@@ -261,7 +335,12 @@ function BackendScriptApi(startNote, currentNote, originEntity) {
*
* @returns {Promise&lt;void>}
*/
this.refreshTree = () => messagingService.sendMessageToAllClients({ type: 'refresh-tree' });
this.refreshTree = ws.refreshTree;
/**
* @return {{syncVersion, appVersion, buildRevision, dbVersion, dataDirectory, buildDate}|*} - object representing basic info about running Trilium version
*/
this.getAppInfo = () => appInfo
}
module.exports = BackendScriptApi;</code></pre>
@@ -274,13 +353,13 @@ module.exports = BackendScriptApi;</code></pre>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Link.html">Link</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ApiToken.html">ApiToken</a></li><li><a href="Attribute.html">Attribute</a></li><li><a href="BackendScriptApi.html">BackendScriptApi</a></li><li><a href="Branch.html">Branch</a></li><li><a href="Entity.html">Entity</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteRevision.html">NoteRevision</a></li><li><a href="Option.html">Option</a></li><li><a href="RecentNote.html">RecentNote</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+2 -2
View File
@@ -273,7 +273,7 @@ tr > th:last-child { border-right: 1px solid #ddd; }
margin: 0;
}
.prettyprint
.source
{
border: 1px solid #ddd;
width: 80%;
@@ -284,7 +284,7 @@ tr > th:last-child { border-right: 1px solid #ddd; }
width: inherit;
}
.prettyprint code
.source code
{
font-size: 100%;
line-height: 18px;
+8 -2
View File
@@ -93,7 +93,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#line2">line 2</a>
<a href="entities_branch.js.html">entities/branch.js</a>, <a href="entities_branch.js.html#line3">line 3</a>
</li></ul></dd>
@@ -121,6 +121,8 @@
</div>
@@ -570,6 +572,8 @@
<h5>Returns:</h5>
@@ -670,6 +674,8 @@
<h5>Returns:</h5>
@@ -719,7 +725,7 @@
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
File diff suppressed because it is too large Load Diff
+180 -4
View File
@@ -93,7 +93,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_full.js.html">entities/note_full.js</a>, <a href="entities_note_full.js.html#line6">line 6</a>
<a href="entities_note_full.js.html">entities/note_full.js</a>, <a href="entities_note_full.js.html#line7">line 7</a>
</li></ul></dd>
@@ -121,6 +121,8 @@
</div>
@@ -199,7 +201,7 @@
<h4 class="name" id="jsonContent"><span class="type-signature"></span>jsonContent<span class="type-signature"></span></h4>
<h4 class="name" id="dateCreated"><span class="type-signature"></span>dateCreated<span class="type-signature"></span></h4>
@@ -239,7 +241,181 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_full.js.html">entities/note_full.js</a>, <a href="entities_note_full.js.html#line16">line 16</a>
<a href="entities_note_full.js.html">entities/note_full.js</a>, <a href="entities_note_full.js.html#line14">line 14</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_full.js.html">entities/note_full.js</a>, <a href="entities_note_full.js.html#line17">line 17</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_full.js.html">entities/note_full.js</a>, <a href="entities_note_full.js.html#line20">line 20</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_full.js.html">entities/note_full.js</a>, <a href="entities_note_full.js.html#line23">line 23</a>
</li></ul></dd>
@@ -279,7 +455,7 @@
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+406 -30
View File
@@ -30,8 +30,7 @@
<h2><span class="attribs"><span class="type-signature"></span></span>NoteShort<span class="signature">()</span><span class="type-signature"></span></h2>
<div class="class-description">This note's representation is used in note tree and is kept in TreeCache.
Its notable omission is the note content.</div>
<div class="class-description">This note's representation is used in note tree and is kept in TreeCache.</div>
</header>
@@ -94,7 +93,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line12">line 12</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line13">line 13</a>
</li></ul></dd>
@@ -122,6 +121,8 @@ Its notable omission is the note content.</div>
</div>
@@ -200,6 +201,64 @@ Its notable omission is the note content.</div>
<h4 class="name" id="cssClass"><span class="type-signature"></span>cssClass<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_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line28">line 28</a>
</li></ul></dd>
</dl>
<h4 class="name" id="isProtected"><span class="type-signature"></span>isProtected<span class="type-signature"></span></h4>
@@ -620,7 +679,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line144">line 144</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line166">line 166</a>
</li></ul></dd>
@@ -643,6 +702,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -785,7 +846,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line85">line 85</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line106">line 106</a>
</li></ul></dd>
@@ -808,6 +869,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -957,7 +1020,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line155">line 155</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line177">line 177</a>
</li></ul></dd>
@@ -980,6 +1043,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -1061,7 +1126,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line36">line 36</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line57">line 57</a>
</li></ul></dd>
@@ -1084,6 +1149,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -1161,7 +1228,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line50">line 50</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line71">line 71</a>
</li></ul></dd>
@@ -1184,6 +1251,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -1261,7 +1330,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line72">line 72</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line93">line 93</a>
</li></ul></dd>
@@ -1284,6 +1353,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -1361,7 +1432,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line77">line 77</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line98">line 98</a>
</li></ul></dd>
@@ -1384,6 +1455,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -1510,7 +1583,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line177">line 177</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line199">line 199</a>
</li></ul></dd>
@@ -1533,6 +1606,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -1675,7 +1750,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line110">line 110</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line132">line 132</a>
</li></ul></dd>
@@ -1698,6 +1773,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -1840,7 +1917,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line102">line 102</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line124">line 124</a>
</li></ul></dd>
@@ -1863,6 +1940,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -1993,7 +2072,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line189">line 189</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line211">line 211</a>
</li></ul></dd>
@@ -2016,6 +2095,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -2097,7 +2178,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line62">line 62</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line83">line 83</a>
</li></ul></dd>
@@ -2120,6 +2201,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -2197,7 +2280,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line67">line 67</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line88">line 88</a>
</li></ul></dd>
@@ -2220,6 +2303,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -2346,7 +2431,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line183">line 183</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line205">line 205</a>
</li></ul></dd>
@@ -2369,6 +2454,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -2511,7 +2598,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line126">line 126</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line148">line 148</a>
</li></ul></dd>
@@ -2534,6 +2621,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -2676,7 +2765,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line118">line 118</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line140">line 140</a>
</li></ul></dd>
@@ -2699,6 +2788,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -2732,7 +2823,7 @@ Its notable omission is the note content.</div>
<h4 class="name" id="getRelationTarget"><span class="type-signature">(async) </span>getRelationTarget<span class="signature">(name)</span><span class="type-signature"> &rarr; {Promise.&lt;Note>|null}</span></h4>
<h4 class="name" id="getRelationTarget"><span class="type-signature">(async) </span>getRelationTarget<span class="signature">(name)</span><span class="type-signature"> &rarr; {Promise.&lt;<a href="NoteShort.html">NoteShort</a>>|null}</span></h4>
@@ -2829,7 +2920,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line201">line 201</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line223">line 223</a>
</li></ul></dd>
@@ -2852,6 +2943,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -2867,7 +2960,7 @@ Its notable omission is the note content.</div>
</dt>
<dd>
<span class="param-type">Promise.&lt;Note></span>
<span class="param-type">Promise.&lt;<a href="NoteShort.html">NoteShort</a>></span>
|
<span class="param-type">null</span>
@@ -2888,6 +2981,169 @@ Its notable omission is the note content.</div>
<h4 class="name" id="getRelationTargets"><span class="type-signature">(async) </span>getRelationTargets<span class="signature">(name<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Promise.&lt;Array.&lt;<a href="NoteShort.html">NoteShort</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>name</code></td>
<td class="type">
<span class="param-type">string</span>
</td>
<td class="attributes">
&lt;optional><br>
</td>
<td class="description last">relation name to filter</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line233">line 233</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">Promise.&lt;Array.&lt;<a href="NoteShort.html">NoteShort</a>>></span>
</dd>
</dl>
<h4 class="name" id="getRelationValue"><span class="type-signature">(async) </span>getRelationValue<span class="signature">(name)</span><span class="type-signature"> &rarr; {Promise.&lt;string>}</span></h4>
@@ -2985,7 +3241,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line195">line 195</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line217">line 217</a>
</li></ul></dd>
@@ -3008,6 +3264,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -3041,6 +3299,112 @@ Its notable omission is the note content.</div>
<h4 class="name" id="getTargetRelations"><span class="type-signature">(async) </span>getTargetRelations<span class="signature">()</span><span class="type-signature"> &rarr; {Promise.&lt;Array.&lt;<a href="Attribute.html">Attribute</a>>>}</span></h4>
<div class="description">
Get relations which target this note
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line257">line 257</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">Promise.&lt;Array.&lt;<a href="Attribute.html">Attribute</a>>></span>
</dd>
</dl>
<h4 class="name" id="hasAttribute"><span class="type-signature">(async) </span>hasAttribute<span class="signature">(type, name)</span><span class="type-signature"> &rarr; {Promise.&lt;boolean>}</span></h4>
@@ -3161,7 +3525,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line135">line 135</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line157">line 157</a>
</li></ul></dd>
@@ -3184,6 +3548,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -3265,7 +3631,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line44">line 44</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line65">line 65</a>
</li></ul></dd>
@@ -3288,6 +3654,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -3414,7 +3782,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line165">line 165</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line187">line 187</a>
</li></ul></dd>
@@ -3437,6 +3805,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -3567,7 +3937,7 @@ Its notable omission is the note content.</div>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line171">line 171</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line193">line 193</a>
</li></ul></dd>
@@ -3590,6 +3960,8 @@ Its notable omission is the note content.</div>
<h5>Returns:</h5>
@@ -3676,7 +4048,7 @@ Cache is note instance scoped.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line211">line 211</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line248">line 248</a>
</li></ul></dd>
@@ -3704,6 +4076,8 @@ Cache is note instance scoped.
@@ -3758,7 +4132,7 @@ Cache is note instance scoped.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line31">line 31</a>
<a href="entities_note_short.js.html">entities/note_short.js</a>, <a href="entities_note_short.js.html#line32">line 32</a>
</li></ul></dd>
@@ -3781,6 +4155,8 @@ Cache is note instance scoped.
<h5>Returns:</h5>
@@ -3826,7 +4202,7 @@ Cache is note instance scoped.
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+8 -6
View File
@@ -45,10 +45,10 @@
this.isInheritable = row.isInheritable;
/** @param {boolean} isDeleted */
this.isDeleted = row.isDeleted;
/** @param {string} dateCreated */
this.dateCreated = row.dateCreated;
/** @param {string} dateModified */
this.dateModified = row.dateModified;
/** @param {string} utcDateCreated */
this.utcDateCreated = row.utcDateCreated;
/** @param {string} utcDateModified */
this.utcDateModified = row.utcDateModified;
}
/** @returns {NoteShort} */
@@ -59,7 +59,9 @@
get toString() {
return `Attribute(attributeId=${this.attributeId}, type=${this.type}, name=${this.name})`;
}
}</code></pre>
}
export default Attribute;</code></pre>
</article>
</section>
@@ -75,7 +77,7 @@
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+1 -1
View File
@@ -76,7 +76,7 @@ export default Branch;</code></pre>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+12 -8
View File
@@ -38,13 +38,17 @@ class NoteFull extends NoteShort {
/** @param {string} */
this.content = row.content;
if (this.content !== "" &amp;&amp; this.isJson()) {
try {
/** @param {object} */
this.jsonContent = JSON.parse(this.content);
}
catch(e) {}
}
/** @param {string} */
this.dateCreated = row.dateCreated;
/** @param {string} */
this.dateModified = row.dateModified;
/** @param {string} */
this.utcDateCreated = row.utcDateCreated;
/** @param {string} */
this.utcDateModified = row.utcDateModified;
}
}
@@ -64,7 +68,7 @@ export default NoteFull;</code></pre>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+53 -6
View File
@@ -27,6 +27,7 @@
<section>
<article>
<pre class="prettyprint source linenums"><code>import server from '../services/server.js';
import Attribute from './attribute.js';
const LABEL = 'label';
const LABEL_DEFINITION = 'label-definition';
@@ -35,7 +36,6 @@ const RELATION_DEFINITION = 'relation-definition';
/**
* This note's representation is used in note tree and is kept in TreeCache.
* Its notable omission is the note content.
*/
class NoteShort {
constructor(treeCache, row) {
@@ -52,6 +52,7 @@ class NoteShort {
this.mime = row.mime;
/** @param {boolean} */
this.archived = row.archived;
/** @param {string} */
this.cssClass = row.cssClass;
}
@@ -60,6 +61,26 @@ class NoteShort {
return this.mime === "application/json";
}
async getContent() {
// we're not caching content since these objects are in treeCache and as such pretty long lived
const note = await server.get("notes/" + this.noteId);
return note.content;
}
async getJsonContent() {
const content = await this.getContent();
try {
return JSON.parse(content);
}
catch (e) {
console.log(`Cannot parse content of note ${this.noteId}: `, e.message);
return null;
}
}
/** @returns {Promise&lt;Branch[]>} */
async getBranches() {
const branchIds = this.treeCache.parents[this.noteId].map(
@@ -112,7 +133,8 @@ class NoteShort {
*/
async getAttributes(name) {
if (!this.attributeCache) {
this.attributeCache = await server.get('notes/' + this.noteId + '/attributes');
this.attributeCache = (await server.get('notes/' + this.noteId + '/attributes'))
.map(attrRow => new Attribute(this.treeCache, attrRow));
}
if (name) {
@@ -224,12 +246,27 @@ class NoteShort {
/**
* @param {string} name
* @returns {Promise&lt;Note>|null} target note of the relation or null (if target is empty or note was not found)
* @returns {Promise&lt;NoteShort>|null} target note of the relation or null (if target is empty or note was not found)
*/
async getRelationTarget(name) {
const relation = await this.getRelation(name);
const targets = await this.getRelationTargets(name);
return relation ? await repository.getNote(relation.value) : null;
return targets.length > 0 ? targets[0] : null;
}
/**
* @param {string} [name] - relation name to filter
* @returns {Promise&lt;NoteShort[]>}
*/
async getRelationTargets(name) {
const relations = await this.getRelations(name);
const targets = [];
for (const relation of relations) {
targets.push(await this.treeCache.getNote(relation.value));
}
return targets;
}
/**
@@ -240,6 +277,16 @@ class NoteShort {
this.attributeCache = null;
}
/**
* Get relations which target this note
*
* @returns {Promise&lt;Attribute[]>}
*/
async getTargetRelations() {
return (await server.get('notes/' + this.noteId + '/target-relations'))
.map(attrRow => new Attribute(this.treeCache, attrRow));
}
get toString() {
return `Note(noteId=${this.noteId}, title=${this.title})`;
}
@@ -270,7 +317,7 @@ export default NoteShort;</code></pre>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+2 -2
View File
@@ -303,7 +303,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#line48">line 48</a>
<a href="services_frontend_script_api.js.html">services/frontend_script_api.js</a>, <a href="services_frontend_script_api.js.html#line67">line 67</a>
</li></ul></dd>
@@ -339,7 +339,7 @@
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+1 -1
View File
@@ -56,7 +56,7 @@
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+9 -9
View File
@@ -1,12 +1,12 @@
/*global document */
(function() {
var source = document.getElementsByClassName('prettyprint source linenums');
var i = 0;
var lineNumber = 0;
var lineId;
var lines;
var totalLines;
var anchorHash;
(() => {
const source = document.getElementsByClassName('prettyprint source linenums');
let i = 0;
let lineNumber = 0;
let lineId;
let lines;
let totalLines;
let anchorHash;
if (source && source[0]) {
anchorHash = document.location.hash.substring(1);
@@ -15,7 +15,7 @@
for (; i < totalLines; i++) {
lineNumber++;
lineId = 'line' + lineNumber;
lineId = `line${lineNumber}`;
lines[i].id = lineId;
if (lineId === anchorHash) {
lines[i].className += ' selected';
@@ -33,8 +33,10 @@ import infoService from './info.js';
import linkService from './link.js';
import treeCache from './tree_cache.js';
import noteDetailService from './note_detail.js';
import noteTypeService from './note_type.js';
import noteTooltipService from './note_tooltip.js';
import protectedSessionService from './protected_session.js';
import dateNotesService from './date_notes.js';
import StandardWidget from '../widgets/standard_widget.js';
/**
* This is the main frontend API interface for scripts. It's published in the local "api" object.
@@ -42,7 +44,7 @@ import noteTooltipService from './note_tooltip.js';
* @constructor
* @hideconstructor
*/
function FrontendScriptApi(startNote, currentNote, originEntity = null) {
function FrontendScriptApi(startNote, currentNote, originEntity = null, tabContext = null) {
const $pluginButtons = $("#plugin-buttons");
/** @property {object} note where script started executing */
@@ -52,6 +54,15 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null) {
/** @property {object|null} entity whose event triggered this execution */
this.originEntity = originEntity;
// to keep consistency with backend API
this.dayjs = dayjs;
/** @property {TabContext|null} - experimental! */
this.tabContext = tabContext;
/** @property {StandardWidget} */
this.StandardWidget = StandardWidget;
/**
* Activates note in the tree and in the note detail.
*
@@ -59,7 +70,15 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null) {
* @param {string} notePath (or noteId)
* @returns {Promise&lt;void>}
*/
this.activateNote = treeService.activateNote;
this.activateNote = async (notePath, noteLoadedListener) => {
await treeService.activateNote(notePath, async () => {
await treeService.scrollToActiveNote();
if (noteLoadedListener) {
noteLoadedListener();
}
});
};
/**
* Activates newly created note. Compared to this.activateNote() also refreshes tree.
@@ -70,7 +89,7 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null) {
this.activateNewNote = async notePath => {
await treeService.reload();
await treeService.activateNote(notePath, true);
await treeService.activateNote(notePath, noteDetailService.focusAndSelectTitle);
};
/**
@@ -107,7 +126,7 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null) {
}
if (opts.shortcut) {
$(document).bind('keydown', opts.shortcut, opts.action);
utils.bindGlobalShortcut(opts.shortcut, opts.action);
button.attr("title", "Shortcut " + opts.shortcut);
}
@@ -158,6 +177,46 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null) {
}
};
/**
* This is a powerful search method - you can search by attributes and their values, e.g.:
* "@dateModified =* MONTH AND @log". See full documentation for all options at: https://github.com/zadam/trilium/wiki/Search
*
* @method
* @param {string} searchString
* @returns {Promise&lt;NoteShort[]>}
*/
this.searchForNotes = async searchString => {
const noteIds = await this.runOnServer(async searchString => {
const notes = await api.searchForNotes(searchString);
return notes.map(note => note.noteId);
}, [searchString]);
return await treeCache.getNotes(noteIds);
};
/**
* This is a powerful search method - you can search by attributes and their values, e.g.:
* "@dateModified =* MONTH AND @log". See full documentation for all options at: https://github.com/zadam/trilium/wiki/Search
*
* @method
* @param {string} searchString
* @returns {Promise&lt;NoteShort|null>}
*/
this.searchForNote = async searchString => {
const notes = await this.searchForNotes(searchString);
return notes.length > 0 ? notes[0] : null;
};
/**
* Returns note by given noteId. If note is missing from cache, it's loaded.
**
* @param {string} noteId
* @return {Promise&lt;NoteShort>}
*/
this.getNote = async noteId => await treeCache.getNote(noteId);
/**
* Returns list of notes. If note is missing from cache, it's loaded.
*
@@ -170,6 +229,18 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null) {
*/
this.getNotes = async (noteIds, silentNotFoundError = false) => await treeCache.getNotes(noteIds, silentNotFoundError);
/**
* @param {string} noteId
* @method
*/
this.reloadChildren = async noteId => await treeCache.reloadChildren(noteId);
/**
* @param {string} noteId
* @method
*/
this.reloadParents = async noteId => await treeCache.reloadParents(noteId);
/**
* Instance name identifies particular Trilium instance. It can be useful for scripts
* if some action needs to happen on only one specific instance.
@@ -227,9 +298,32 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null) {
/**
* @method
* @returns {string} content of currently loaded note in the editor (HTML, code etc.)
* @returns {NoteFull} active note (loaded into right pane)
*/
this.getCurrentNoteContent = noteDetailService.getCurrentNoteContent;
this.getActiveNote = noteDetailService.getActiveNote;
/**
* @method
* @returns {Promise&lt;string|null>} returns note path of active note or null if there isn't active note
*/
this.getActiveNotePath = () => {
const activeTabContext = noteDetailService.getActiveTabContext();
return activeTabContext ? activeTabContext.notePath : null;
};
/**
* This method checks whether user navigated away from the note from which the scripts has been started.
* This is necessary because script execution is async and by the time it is finished, the user might have
* already navigated away from this page - the end result would be that script might return data for the wrong
* note.
*
* @method
* @return {boolean} returns true if the original note is still loaded, false if user switched to another
*/
this.isNoteStillActive = () => {
return this.originEntity.noteId === tabContext.noteId;
};
/**
* @method
@@ -237,29 +331,51 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null) {
*/
this.onNoteChange = noteDetailService.onNoteChange;
/**
* @method
* @returns {array} list of default code mime types
*/
this.getDefaultCodeMimeTypes = noteTypeService.getDefaultCodeMimeTypes;
/**
* @method
* @returns {array} list of currently used code mime types
*/
this.getCodeMimeTypes = noteTypeService.getCodeMimeTypes;
/**
* @method
* @param {array} types - list of mime types to be used
*/
this.setCodeMimeTypes = noteTypeService.setCodeMimeTypes;
/**
* @method
* @param {object} $el - jquery object on which to setup the tooltip
*/
this.setupElementTooltip = noteTooltipService.setupElementTooltip
this.setupElementTooltip = noteTooltipService.setupElementTooltip;
/**
* @method
*/
this.protectActiveNote = protectedSessionService.protectNoteAndSendToServer;
/**
* Returns date-note for today. If it doesn't exist, it is automatically created.
*
* @method
* @return {Promise&lt;NoteShort>}
*/
this.getTodayNote = dateNotesService.getTodayNote;
/**
* Returns date-note. If it doesn't exist, it is automatically created.
*
* @method
* @param {string} date - e.g. "2019-04-29"
* @return {Promise&lt;NoteShort>}
*/
this.getDateNote = dateNotesService.getDateNote;
/**
* Returns month-note. If it doesn't exist, it is automatically created.
*
* @method
* @param {string} month - e.g. "2019-04"
* @return {Promise&lt;NoteShort>}
*/
this.getMonthNote = dateNotesService.getMonthNote;
/**
* Returns year-note. If it doesn't exist, it is automatically created.
*
* @method
* @param {string} year - e.g. "2019"
* @return {Promise&lt;NoteShort>}
*/
this.getYearNote = dateNotesService.getYearNote;
}
export default FrontendScriptApi;</code></pre>
@@ -278,7 +394,7 @@ export default FrontendScriptApi;</code></pre>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a>
</footer>
<script> prettyPrint(); </script>
+2 -2
View File
@@ -273,7 +273,7 @@ tr > th:last-child { border-right: 1px solid #ddd; }
margin: 0;
}
.prettyprint
.source
{
border: 1px solid #ddd;
width: 80%;
@@ -284,7 +284,7 @@ tr > th:last-child { border-right: 1px solid #ddd; }
width: inherit;
}
.prettyprint code
.source code
{
font-size: 100%;
line-height: 18px;
+54 -15
View File
@@ -3,10 +3,14 @@
const electron = require('electron');
const path = require('path');
const log = require('./src/services/log');
const sqlInit = require('./src/services/sql_init');
const cls = require('./src/services/cls');
const url = require("url");
const port = require('./src/services/port');
const env = require('./src/services/env');
const appIconService = require('./src/services/app_icon');
const windowStateKeeper = require('electron-window-state');
const contextMenu = require('electron-context-menu');
const app = electron.app;
const globalShortcut = electron.globalShortcut;
@@ -21,6 +25,26 @@ let mainWindow;
require('electron-dl')({ saveAs: true });
contextMenu({
menu: (actions, params, browserWindow) => [
actions.cut(),
actions.copy(),
actions.copyLink(),
actions.paste(),
{
label: 'Search DuckDuckGo for “{selection}”',
// Only show it when right-clicking text
visible: params.selectionText.trim().length > 0,
click: () => {
const {shell} = require('electron');
shell.openExternal(`https://duckduckgo.com?q=${encodeURIComponent(params.selectionText)}`);
}
},
actions.inspect()
]
});
function onClosed() {
// Dereference the window
// For multiple windows store them in an array
@@ -28,16 +52,36 @@ function onClosed() {
}
async function createMainWindow() {
const win = new electron.BrowserWindow({
// initial window width & height so it's usable on 1600 * 900 display (including some extra panels etc.)
width: 1200,
height: 800,
title: 'Trilium Notes',
icon: path.join(__dirname, 'src/public/images/app-icons/png/256x256.png')
await sqlInit.dbConnection;
// if schema doesn't exist -> setup process
// if schema exists, then we need to wait until the migration process is finished
if (await sqlInit.schemaExists()) {
await sqlInit.dbReady;
}
const mainWindowState = windowStateKeeper({
// default window width & height so it's usable on 1600 * 900 display (including some extra panels etc.)
defaultWidth: 1200,
defaultHeight: 800
});
win.setMenu(null);
win.loadURL('http://localhost:' + await port);
const win = new electron.BrowserWindow({
x: mainWindowState.x,
y: mainWindowState.y,
width: mainWindowState.width,
height: mainWindowState.height,
title: 'Trilium Notes',
webPreferences: {
nodeIntegration: true
},
icon: path.join(__dirname, 'images/app-icons/png/256x256' + (env.isDev() ? '-dev' : '') + '.png')
});
mainWindowState.manage(win);
win.setMenuBarVisibility(false);
win.loadURL('http://127.0.0.1:' + await port);
win.on('closed', onClosed);
win.webContents.on('new-window', (e, url) => {
@@ -52,7 +96,7 @@ async function createMainWindow() {
const parsedUrl = url.parse(targetUrl);
// we still need to allow internal redirects from setup and migration pages
if (parsedUrl.hostname !== 'localhost' || (parsedUrl.path && parsedUrl.path !== '/')) {
if (!['localhost', '127.0.0.1'].includes(parsedUrl.hostname) || (parsedUrl.path && parsedUrl.path !== '/')) {
ev.preventDefault();
}
});
@@ -78,15 +122,10 @@ app.on('ready', async () => {
mainWindow = await createMainWindow();
const result = globalShortcut.register('CommandOrControl+Alt+P', cls.wrap(async () => {
const dateNoteService = require('./src/services/date_notes');
const dateUtils = require('./src/services/date_utils');
const parentNote = await dateNoteService.getDateNote(dateUtils.nowLocalDate());
// window may be hidden / not in focus
mainWindow.focus();
mainWindow.webContents.send('create-day-sub-note', parentNote.noteId);
mainWindow.webContents.send('create-day-sub-note');
}));
if (!result) {
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Before

Width:  |  Height:  |  Size: 820 B

After

Width:  |  Height:  |  Size: 820 B

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

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