From 6a94889646bfde3be8636e949f56ffca355c6bc0 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 6 Apr 2025 15:30:54 +0300 Subject: [PATCH] feat(docs): reorganize script notes & document render note --- docs/User Guide/!!!meta.json | 1104 +++++++++-------- .../Advanced Usage/Advanced Showcases.md | 2 +- .../Advanced Showcases/Task Manager.md | 4 +- .../Advanced Showcases/Weight Tracker.md | 2 +- .../Advanced Usage/Custom Request Handler.md | 2 +- .../User Guide/Advanced Usage/Database.md | 19 +- .../Advanced Usage/Database/Demo Notes.md | 19 + .../Manually altering the database.md | 2 +- .../ETAPI (REST API)}/API Reference.dat | 0 .../Internal API/API Reference.dat | 0 .../Basic Concepts and Features/Notes.md | 2 +- .../Notes/Attachments.md | 2 +- .../UI Elements/Launch Bar.md | 4 +- docs/User Guide/User Guide/FAQ.md | 2 +- .../Installation & Setup/Mobile Frontend.md | 2 +- docs/User Guide/User Guide/Note Types.md | 2 +- docs/User Guide/User Guide/Note Types/Code.md | 2 +- .../User Guide/Note Types/Code/Events.md | 2 +- .../Scripting/New Task launcher button.md | 47 - .../User Guide/Note Types/Render Note.md | 39 + .../Note Types/Render Note_image.png | Bin 0 -> 30231 bytes .../{Note Types/Code => }/Scripting.md | 14 +- .../Downloading responses from Goo.md | 0 .../Examples/New Task launcher button.md | 47 + .../Examples}/New Task launcher button_i.png | Bin .../Examples/Using promoted attributes .png | Bin .../Using promoted attributes to c.md | 0 .../Frontend Basics.md | 0 .../Widget Basics.md | 0 .../app/doc_notes/en/User Guide/!!!meta.json | 1104 +++++++++-------- .../Advanced Usage/Advanced Showcases.html | 2 +- .../Advanced Showcases/Task Manager.html | 4 +- .../Advanced Showcases/Weight Tracker.html | 4 +- .../Custom Request Handler.html | 2 +- .../User Guide/Advanced Usage/Database.html | 33 +- .../Advanced Usage/Database/Demo Notes.html | 50 + .../Manually altering the database.html | 2 +- .../ETAPI (REST API)}/API Reference.dat | 0 .../Internal API/API Reference.dat | 0 .../Basic Concepts and Features/Notes.html | 2 +- .../Notes/Attachments.html | 2 +- .../UI Elements/Launch Bar.html | 4 +- .../en/User Guide/User Guide/FAQ.html | 2 +- .../Installation & Setup/Mobile Frontend.html | 2 +- .../en/User Guide/User Guide/Note Types.html | 2 +- .../User Guide/Note Types/Code.html | 3 +- .../User Guide/Note Types/Code/Events.html | 6 +- .../User Guide/Note Types/Render Note.html | 43 +- .../Note Types/Render Note_image.png | Bin 0 -> 30231 bytes .../{Note Types/Code => }/Scripting.html | 18 +- .../Downloading responses from Goo.html | 0 .../Examples}/New Task launcher button.html | 22 +- .../Examples}/New Task launcher button_i.png | Bin .../Examples/Using promoted attributes .png | Bin .../Using promoted attributes to c.html | 0 .../Frontend Basics.html | 0 .../Widget Basics.html | 0 .../doc_notes/en/User Guide/navigation.html | 78 +- 58 files changed, 1428 insertions(+), 1276 deletions(-) create mode 100644 docs/User Guide/User Guide/Advanced Usage/Database/Demo Notes.md rename docs/User Guide/User Guide/{Developer Guides/REST API/ETAPI => Advanced Usage/ETAPI (REST API)}/API Reference.dat (100%) rename docs/User Guide/User Guide/{Developer Guides/REST API => Advanced Usage}/Internal API/API Reference.dat (100%) delete mode 100644 docs/User Guide/User Guide/Note Types/Code/Scripting/New Task launcher button.md create mode 100644 docs/User Guide/User Guide/Note Types/Render Note_image.png rename docs/User Guide/User Guide/{Note Types/Code => }/Scripting.md (56%) rename docs/User Guide/User Guide/{Developer Guides => Scripting}/Examples/Downloading responses from Goo.md (100%) create mode 100644 docs/User Guide/User Guide/Scripting/Examples/New Task launcher button.md rename docs/User Guide/User Guide/{Note Types/Code/Scripting => Scripting/Examples}/New Task launcher button_i.png (100%) rename docs/User Guide/User Guide/{Developer Guides => Scripting}/Examples/Using promoted attributes .png (100%) rename docs/User Guide/User Guide/{Developer Guides => Scripting}/Examples/Using promoted attributes to c.md (100%) rename docs/User Guide/User Guide/{Developer Guides => Scripting}/Frontend Basics.md (100%) rename docs/User Guide/User Guide/{Developer Guides => Scripting}/Widget Basics.md (100%) create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Demo Notes.html rename src/public/app/doc_notes/en/User Guide/User Guide/{Developer Guides/REST API/ETAPI => Advanced Usage/ETAPI (REST API)}/API Reference.dat (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Developer Guides/REST API => Advanced Usage}/Internal API/API Reference.dat (100%) create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Render Note_image.png rename src/public/app/doc_notes/en/User Guide/User Guide/{Note Types/Code => }/Scripting.html (79%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Developer Guides => Scripting}/Examples/Downloading responses from Goo.html (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Note Types/Code/Scripting => Scripting/Examples}/New Task launcher button.html (83%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Note Types/Code/Scripting => Scripting/Examples}/New Task launcher button_i.png (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Developer Guides => Scripting}/Examples/Using promoted attributes .png (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Developer Guides => Scripting}/Examples/Using promoted attributes to c.html (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Developer Guides => Scripting}/Frontend Basics.html (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Developer Guides => Scripting}/Widget Basics.html (100%) diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index 0ecd44f5e..c1cdcc09c 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -4858,13 +4858,6 @@ "type": "text", "mime": "text/markdown", "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "CdNpE2pqjmI6", - "isInheritable": false, - "position": 10 - }, { "type": "relation", "name": "internalLink", @@ -4913,6 +4906,13 @@ "value": "bx bx-code", "isInheritable": false, "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "CdNpE2pqjmI6", + "isInheritable": false, + "position": 100 } ], "format": "markdown", @@ -4937,173 +4937,6 @@ ], "dirFileName": "Code", "children": [ - { - "isClone": false, - "noteId": "CdNpE2pqjmI6", - "notePath": [ - "pOsGYCXsbNQG", - "KSZ04uQ2D1St", - "6f9hih2hXXZk", - "CdNpE2pqjmI6" - ], - "title": "Scripting", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/markdown", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "6f9hih2hXXZk", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "GLks18SNjxmC", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "TjLYAo3JMO8X", - "isInheritable": false, - "position": 30 - }, - { - "type": "relation", - "name": "internalLink", - "value": "zEY4DaJG4YT5", - "isInheritable": false, - "position": 40 - }, - { - "type": "relation", - "name": "internalLink", - "value": "RDslemsQ6gCp", - "isInheritable": false, - "position": 50 - }, - { - "type": "relation", - "name": "internalLink", - "value": "5668rwcirq1t", - "isInheritable": false, - "position": 60 - }, - { - "type": "relation", - "name": "internalLink", - "value": "GPERMystNGTB", - "isInheritable": false, - "position": 70 - }, - { - "type": "label", - "name": "shareAlias", - "value": "scripts", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Scripting.md", - "attachments": [], - "dirFileName": "Scripting", - "children": [ - { - "isClone": false, - "noteId": "TjLYAo3JMO8X", - "notePath": [ - "pOsGYCXsbNQG", - "KSZ04uQ2D1St", - "6f9hih2hXXZk", - "CdNpE2pqjmI6", - "TjLYAo3JMO8X" - ], - "title": "\"New Task\" launcher button", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "xYjQUYhpbUEW", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "xYmIYSP6wE3F", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "6f9hih2hXXZk", - "isInheritable": false, - "position": 30 - }, - { - "type": "relation", - "name": "internalLink", - "value": "zEY4DaJG4YT5", - "isInheritable": false, - "position": 40 - }, - { - "type": "relation", - "name": "internalLink", - "value": "yIhgI5H7A2Sm", - "isInheritable": false, - "position": 50 - }, - { - "type": "relation", - "name": "internalLink", - "value": "m1lbrzyKDaRB", - "isInheritable": false, - "position": 60 - }, - { - "type": "relation", - "name": "internalLink", - "value": "s8alTXmpFR61", - "isInheritable": false, - "position": 70 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-task", - "isInheritable": false, - "position": 80 - } - ], - "format": "markdown", - "dataFileName": "New Task launcher button.md", - "attachments": [ - { - "attachmentId": "9C2JA6tdtRpN", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "New Task launcher button_i.png" - } - ] - } - ] - }, { "isClone": false, "noteId": "GLks18SNjxmC", @@ -5422,11 +5255,62 @@ "value": "bx bx-extension", "isInheritable": false, "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "CdNpE2pqjmI6", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "R7abl2fc6Mxi", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6tZeKvSHEUiB", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6f9hih2hXXZk", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "HcABDtFCkbFN", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 70 } ], "format": "markdown", "dataFileName": "Render Note.md", - "attachments": [] + "attachments": [ + { + "attachmentId": "SeTpR7xEDMvQ", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Render Note_image.png" + } + ] }, { "isClone": false, @@ -6551,321 +6435,6 @@ } ] }, - { - "isClone": false, - "noteId": "k2Gc17NbaAwb", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb" - ], - "title": "Developer Guides", - "notePosition": 260, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "iconClass", - "value": "bx bxl-javascript", - "isInheritable": false, - "position": 10 - } - ], - "format": "markdown", - "attachments": [], - "dirFileName": "Developer Guides", - "children": [ - { - "isClone": false, - "noteId": "yIhgI5H7A2Sm", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "yIhgI5H7A2Sm" - ], - "title": "Frontend Basics", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/markdown", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "zEY4DaJG4YT5", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "GLks18SNjxmC", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "SynTBQiBsdYJ", - "isInheritable": false, - "position": 30 - }, - { - "type": "label", - "name": "shareAlias", - "value": "frontend-basics", - "isInheritable": false, - "position": 30 - } - ], - "format": "markdown", - "dataFileName": "Frontend Basics.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "SynTBQiBsdYJ", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "SynTBQiBsdYJ" - ], - "title": "Widget Basics", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/markdown", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "zEY4DaJG4YT5", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "BFs8mudNFgCS", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "GLks18SNjxmC", - "isInheritable": false, - "position": 30 - }, - { - "type": "label", - "name": "shareAlias", - "value": "widget-basics", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Widget Basics.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "es8OU2GuguFU", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "es8OU2GuguFU" - ], - "title": "Examples", - "notePosition": 30, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "attachments": [], - "dirFileName": "Examples", - "children": [ - { - "isClone": false, - "noteId": "7kZPMD0uFwkH", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "es8OU2GuguFU", - "7kZPMD0uFwkH" - ], - "title": "Downloading responses from Google Forms", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Downloading responses from Goo.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "DL92EjAaXT26", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "es8OU2GuguFU", - "DL92EjAaXT26" - ], - "title": "Using promoted attributes to configure scripts", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Using promoted attributes to c.md", - "attachments": [ - { - "attachmentId": "7P3jzVEa1mk7", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "Using promoted attributes .png" - } - ] - } - ] - }, - { - "isClone": false, - "noteId": "CXny4YWKsD7z", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "CXny4YWKsD7z" - ], - "title": "REST API", - "notePosition": 40, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "attachments": [], - "dirFileName": "REST API", - "children": [ - { - "isClone": false, - "noteId": "cqCjxpN8NhbH", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "CXny4YWKsD7z", - "cqCjxpN8NhbH" - ], - "title": "ETAPI", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "attachments": [], - "dirFileName": "ETAPI", - "children": [ - { - "isClone": false, - "noteId": "9qPsTWBorUhQ", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "CXny4YWKsD7z", - "cqCjxpN8NhbH", - "9qPsTWBorUhQ" - ], - "title": "API Reference", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "webView", - "mime": "", - "attributes": [ - { - "type": "label", - "name": "webViewSrc", - "value": "/etapi/docs", - "isInheritable": false, - "position": 10 - } - ], - "dataFileName": "API Reference.dat", - "attachments": [] - } - ] - }, - { - "isClone": false, - "noteId": "0vTSyvhPTAOz", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "CXny4YWKsD7z", - "0vTSyvhPTAOz" - ], - "title": "Internal API", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "attachments": [], - "dirFileName": "Internal API", - "children": [ - { - "isClone": false, - "noteId": "z8O2VG4ZZJD7", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "CXny4YWKsD7z", - "0vTSyvhPTAOz", - "z8O2VG4ZZJD7" - ], - "title": "API Reference", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "webView", - "mime": "", - "attributes": [ - { - "type": "label", - "name": "webViewSrc", - "value": "/api/docs", - "isInheritable": false, - "position": 10 - } - ], - "dataFileName": "API Reference.dat", - "attachments": [] - } - ] - } - ] - } - ] - }, { "isClone": false, "noteId": "tC7s2alapj8V", @@ -6874,7 +6443,7 @@ "tC7s2alapj8V" ], "title": "Advanced Usage", - "notePosition": 300, + "notePosition": 310, "prefix": null, "isExpanded": false, "type": "text", @@ -7262,6 +6831,13 @@ "value": "note-map", "isInheritable": false, "position": 30 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bxs-network-chart", + "isInheritable": false, + "position": 40 } ], "format": "markdown", @@ -7885,7 +7461,37 @@ ], "format": "markdown", "dataFileName": "ETAPI (REST API).md", - "attachments": [] + "attachments": [], + "dirFileName": "ETAPI (REST API)", + "children": [ + { + "isClone": false, + "noteId": "9qPsTWBorUhQ", + "notePath": [ + "pOsGYCXsbNQG", + "tC7s2alapj8V", + "pgxEVkzLl1OP", + "9qPsTWBorUhQ" + ], + "title": "API Reference", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "webView", + "mime": "", + "attributes": [ + { + "type": "label", + "name": "webViewSrc", + "value": "/etapi/docs", + "isInheritable": false, + "position": 10 + } + ], + "dataFileName": "API Reference.dat", + "attachments": [] + } + ] }, { "isClone": false, @@ -7896,7 +7502,7 @@ "47ZrP6FNuoG8" ], "title": "Default Note Title", - "notePosition": 110, + "notePosition": 120, "prefix": null, "isExpanded": false, "type": "text", @@ -7937,7 +7543,7 @@ "wX4HbRucYSDD" ], "title": "Database", - "notePosition": 130, + "notePosition": 140, "prefix": null, "isExpanded": false, "type": "text", @@ -7950,41 +7556,6 @@ "isInheritable": false, "position": 10 }, - { - "type": "relation", - "name": "internalLink", - "value": "iRwzGnHPzonm", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "l0tKav7yLHGF", - "isInheritable": false, - "position": 30 - }, - { - "type": "relation", - "name": "internalLink", - "value": "R7abl2fc6Mxi", - "isInheritable": false, - "position": 40 - }, - { - "type": "relation", - "name": "internalLink", - "value": "xYjQUYhpbUEW", - "isInheritable": false, - "position": 50 - }, - { - "type": "relation", - "name": "internalLink", - "value": "Wy267RK4M69c", - "isInheritable": false, - "position": 60 - }, { "type": "relation", "name": "internalLink", @@ -8012,6 +7583,13 @@ "value": "bx bx-data", "isInheritable": false, "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6tZeKvSHEUiB", + "isInheritable": false, + "position": 90 } ], "format": "markdown", @@ -8038,16 +7616,16 @@ { "type": "relation", "name": "internalLink", - "value": "YKWqdJhzi2VY", + "value": "tAassRL4RSQL", "isInheritable": false, - "position": 10 + "position": 20 }, { "type": "relation", "name": "internalLink", - "value": "tAassRL4RSQL", + "value": "YKWqdJhzi2VY", "isInheritable": false, - "position": 20 + "position": 30 } ], "format": "markdown", @@ -8141,6 +7719,69 @@ ] } ] + }, + { + "isClone": false, + "noteId": "6tZeKvSHEUiB", + "notePath": [ + "pOsGYCXsbNQG", + "tC7s2alapj8V", + "wX4HbRucYSDD", + "6tZeKvSHEUiB" + ], + "title": "Demo Notes", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "iRwzGnHPzonm", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "l0tKav7yLHGF", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "R7abl2fc6Mxi", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "xYjQUYhpbUEW", + "isInheritable": false, + "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Wy267RK4M69c", + "isInheritable": false, + "position": 100 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-package", + "isInheritable": false, + "position": 110 + } + ], + "format": "markdown", + "dataFileName": "Demo Notes.md", + "attachments": [] } ] }, @@ -8153,7 +7794,7 @@ "Gzjqa934BdH4" ], "title": "Configuration (config.ini or environment variables)", - "notePosition": 140, + "notePosition": 150, "prefix": null, "isExpanded": false, "type": "text", @@ -8180,7 +7821,7 @@ "ivYnonVFBxbQ" ], "title": "Bulk actions", - "notePosition": 150, + "notePosition": 160, "prefix": null, "isExpanded": false, "type": "text", @@ -8207,7 +7848,7 @@ "4FahAwuGTAwC" ], "title": "Note source", - "notePosition": 160, + "notePosition": 170, "prefix": null, "isExpanded": false, "type": "text", @@ -8320,7 +7961,7 @@ "1YeN2MzFUluU" ], "title": "Technologies used", - "notePosition": 170, + "notePosition": 180, "prefix": null, "isExpanded": false, "type": "text", @@ -8469,7 +8110,7 @@ "m1lbrzyKDaRB" ], "title": "Note ID", - "notePosition": 180, + "notePosition": 190, "prefix": null, "isExpanded": false, "type": "text", @@ -8493,6 +8134,391 @@ "format": "markdown", "dataFileName": "Note ID.md", "attachments": [] + }, + { + "isClone": false, + "noteId": "0vTSyvhPTAOz", + "notePath": [ + "pOsGYCXsbNQG", + "tC7s2alapj8V", + "0vTSyvhPTAOz" + ], + "title": "Internal API", + "notePosition": 200, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "attachments": [], + "dirFileName": "Internal API", + "children": [ + { + "isClone": false, + "noteId": "z8O2VG4ZZJD7", + "notePath": [ + "pOsGYCXsbNQG", + "tC7s2alapj8V", + "0vTSyvhPTAOz", + "z8O2VG4ZZJD7" + ], + "title": "API Reference", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "webView", + "mime": "", + "attributes": [ + { + "type": "label", + "name": "webViewSrc", + "value": "/api/docs", + "isInheritable": false, + "position": 10 + } + ], + "dataFileName": "API Reference.dat", + "attachments": [] + } + ] + } + ] + }, + { + "isClone": false, + "noteId": "CdNpE2pqjmI6", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6" + ], + "title": "Scripting", + "notePosition": 320, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "6f9hih2hXXZk", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "GLks18SNjxmC", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "TjLYAo3JMO8X", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "RDslemsQ6gCp", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "5668rwcirq1t", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "GPERMystNGTB", + "isInheritable": false, + "position": 70 + }, + { + "type": "label", + "name": "shareAlias", + "value": "scripts", + "isInheritable": false, + "position": 20 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bxs-file-js", + "isInheritable": false, + "position": 80 + } + ], + "format": "markdown", + "dataFileName": "Scripting.md", + "attachments": [], + "dirFileName": "Scripting", + "children": [ + { + "isClone": false, + "noteId": "yIhgI5H7A2Sm", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "yIhgI5H7A2Sm" + ], + "title": "Frontend Basics", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "GLks18SNjxmC", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "SynTBQiBsdYJ", + "isInheritable": false, + "position": 30 + }, + { + "type": "label", + "name": "shareAlias", + "value": "frontend-basics", + "isInheritable": false, + "position": 30 + } + ], + "format": "markdown", + "dataFileName": "Frontend Basics.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "SynTBQiBsdYJ", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "SynTBQiBsdYJ" + ], + "title": "Widget Basics", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "BFs8mudNFgCS", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "GLks18SNjxmC", + "isInheritable": false, + "position": 30 + }, + { + "type": "label", + "name": "shareAlias", + "value": "widget-basics", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Widget Basics.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "es8OU2GuguFU", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "es8OU2GuguFU" + ], + "title": "Examples", + "notePosition": 50, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "attachments": [], + "dirFileName": "Examples", + "children": [ + { + "isClone": false, + "noteId": "TjLYAo3JMO8X", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "es8OU2GuguFU", + "TjLYAo3JMO8X" + ], + "title": "\"New Task\" launcher button", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "xYjQUYhpbUEW", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "xYmIYSP6wE3F", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6f9hih2hXXZk", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "yIhgI5H7A2Sm", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "m1lbrzyKDaRB", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "s8alTXmpFR61", + "isInheritable": false, + "position": 70 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-task", + "isInheritable": false, + "position": 80 + } + ], + "format": "markdown", + "dataFileName": "New Task launcher button.md", + "attachments": [ + { + "attachmentId": "9C2JA6tdtRpN", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "New Task launcher button_i.png" + } + ] + }, + { + "isClone": false, + "noteId": "7kZPMD0uFwkH", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "es8OU2GuguFU", + "7kZPMD0uFwkH" + ], + "title": "Downloading responses from Google Forms", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Downloading responses from Goo.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "DL92EjAaXT26", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "es8OU2GuguFU", + "DL92EjAaXT26" + ], + "title": "Using promoted attributes to configure scripts", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Using promoted attributes to c.md", + "attachments": [ + { + "attachmentId": "7P3jzVEa1mk7", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Using promoted attributes .png" + } + ] + } + ] } ] }, @@ -8504,7 +8530,7 @@ "Wxt3vVlxlYLi" ], "title": "Attachments", - "notePosition": 310, + "notePosition": 340, "prefix": null, "isExpanded": false, "type": "text", diff --git a/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases.md b/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases.md index ec81ead6c..758dc4435 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases.md +++ b/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases.md @@ -1,5 +1,5 @@ # Advanced Showcases -Trilium offers advanced functionality through [Scripts](../Note%20Types/Code/Scripting.md) and [Promoted Attributes](Attributes/Promoted%20Attributes.md). To illustrate these features, we've prepared several showcases available in the [demo notes](Database.md): +Trilium offers advanced functionality through [Scripts](../Scripting.md) and [Promoted Attributes](Attributes/Promoted%20Attributes.md). To illustrate these features, we've prepared several showcases available in the [demo notes](Database.md): * [Relation Map](../Note%20Types/Relation%20Map.md) * [Day Notes](Advanced%20Showcases/Day%20Notes.md) diff --git a/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager.md b/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager.md index 026840ae0..3618f5aae 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager.md +++ b/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager.md @@ -1,5 +1,5 @@ # Task Manager -Task Manager is a [promoted attributes](../Attributes/Promoted%20Attributes.md) and [scripts](../../Note%20Types/Code/Scripting.md)showcase present in the [demo notes](../Database.md). +Task Manager is a [promoted attributes](../Attributes/Promoted%20Attributes.md) and [scripts](../../Scripting.md)showcase present in the [demo notes](../Database.md). ## Demo @@ -15,7 +15,7 @@ New tasks are created in the TODO note which has `~child:template` [relation](.. ### Attributes -Task template defines several [promoted attributes](../Attributes/Promoted%20Attributes.md) - todoDate, doneDate, tags, location. Importantly it also defines `~runOnAttributeChange` relation - [event](../../Note%20Types/Code/Events.md) handler which is run on attribute change. This [script](../../Note%20Types/Code/Scripting.md) handles when e.g. we fill out the doneDate attribute - meaning the task is done and should be moved to "Done" note and removed from TODO, locations and tags. +Task template defines several [promoted attributes](../Attributes/Promoted%20Attributes.md) - todoDate, doneDate, tags, location. Importantly it also defines `~runOnAttributeChange` relation - [event](../../Note%20Types/Code/Events.md) handler which is run on attribute change. This [script](../../Scripting.md) handles when e.g. we fill out the doneDate attribute - meaning the task is done and should be moved to "Done" note and removed from TODO, locations and tags. ### New task button diff --git a/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker.md b/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker.md index 32bfde718..584dacdce 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker.md +++ b/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker.md @@ -7,7 +7,7 @@ By adding `weight` as a [promoted attribute](../Attributes/Promoted%20Attributes ## Implementation -The `Weight Tracker` note in the screenshot above is of the type `Render Note`. That type of note doesn't have any useful content itself. Instead it is a placeholder where a [script](../../Note%20Types/Code/Scripting.md) can render its output. +The `Weight Tracker` note in the screenshot above is of the type `Render Note`. That type of note doesn't have any useful content itself. Instead it is a placeholder where a [script](../../Scripting.md) can render its output. Scripts for `Render Notes` are defined in a [relation](../Attributes.md) called `~renderNote`. In this example, it's the `Weight Tracker`'s child `Implementation`. The Implementation consists of two [code notes](../../Note%20Types/Code.md) that contain some HTML and JavaScript respectively, which load all the notes with a `weight` attribute and display their values in a chart. diff --git a/docs/User Guide/User Guide/Advanced Usage/Custom Request Handler.md b/docs/User Guide/User Guide/Advanced Usage/Custom Request Handler.md index 6adbebe5e..b848fdd8d 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Custom Request Handler.md +++ b/docs/User Guide/User Guide/Advanced Usage/Custom Request Handler.md @@ -1,5 +1,5 @@ # Custom Request Handler -Trilium provides a mechanism for [scripts](../Note%20Types/Code/Scripting.md) to open a public REST endpoint. This opens a way for various integrations with other services - a simple example would be creating new note from Slack by issuing a slash command (e.g. `/trilium buy milk`). +Trilium provides a mechanism for [scripts](../Scripting.md) to open a public REST endpoint. This opens a way for various integrations with other services - a simple example would be creating new note from Slack by issuing a slash command (e.g. `/trilium buy milk`). ## Create note from outside Trilium diff --git a/docs/User Guide/User Guide/Advanced Usage/Database.md b/docs/User Guide/User Guide/Advanced Usage/Database.md index e0ce389fb..a6dae59da 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Database.md +++ b/docs/User Guide/User Guide/Advanced Usage/Database.md @@ -3,24 +3,9 @@ Your Trilium data is stored in a [SQLite](https://www.sqlite.org) database which ## Demo Notes -When you run Trilium for the first time, it will generate a new database containing demo notes. These notes showcase its many features, such as: +When first starting Trilium, it will provide a set of notes to showcase various features of the application. -* [Relation Map](../Note%20Types/Relation%20Map.md) -* [Day Notes](Advanced%20Showcases/Day%20Notes.md) -* [Weight Tracker](Advanced%20Showcases/Weight%20Tracker.md) -* [Task Manager](Advanced%20Showcases/Task%20Manager.md) -* [Custom CSS Themes](../Basic%20Concepts%20and%20Features/Themes.md) - -### Restoring Demo Notes - -There are some cases in which you may want to restore the original demo notes. For example, if you experimented with some of the more advanced features and want to see the original reference, or if you simply want to explore the latest version of the demo notes, which might showcase new features. - -You can easily restore the demo notes by using Trilium's built-in import feature by importing them: - -* Download [this .zip archive](https://github.com/TriliumNext/Notes/raw/develop/db/demo.zip) with the latest version of the demo notes -* Right click on any note in your tree under which you would like the demo notes to be imported -* Click "Import into note" -* Select the .zip archive to import it +For more information see Demo Notes. ## Manually Modifying the Database diff --git a/docs/User Guide/User Guide/Advanced Usage/Database/Demo Notes.md b/docs/User Guide/User Guide/Advanced Usage/Database/Demo Notes.md new file mode 100644 index 000000000..b68a3f67d --- /dev/null +++ b/docs/User Guide/User Guide/Advanced Usage/Database/Demo Notes.md @@ -0,0 +1,19 @@ +# Demo Notes +When you run Trilium for the first time, it will generate a new database containing demo notes. These notes showcase its many features, such as: + +* Relation Map +* Day Notes +* Weight Tracker +* Task Manager +* Themes + +### Restoring Demo Notes + +There are some cases in which you may want to restore the original demo notes. For example, if you experimented with some of the more advanced features and want to see the original reference, or if you simply want to explore the latest version of the demo notes, which might showcase new features. + +You can easily restore the demo notes by using Trilium's built-in import feature by importing them: + +* Download [this .zip archive](https://github.com/TriliumNext/Notes/raw/develop/db/demo.zip) with the latest version of the demo notes +* Right click on any note in your tree under which you would like the demo notes to be imported +* Click "Import into note" +* Select the .zip archive to import it \ No newline at end of file diff --git a/docs/User Guide/User Guide/Advanced Usage/Database/Manually altering the database.md b/docs/User Guide/User Guide/Advanced Usage/Database/Manually altering the database.md index e91260892..361e27f77 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Database/Manually altering the database.md +++ b/docs/User Guide/User Guide/Advanced Usage/Database/Manually altering the database.md @@ -7,7 +7,7 @@ If you are doing any advanced development or troubleshooting where you manually The SQL Console is Trilium's built-in database editor. -See [SQL Console](Manually%20altering%20the%20database/SQL%20Console.md). +See SQL Console. ## Externally modifying the database diff --git a/docs/User Guide/User Guide/Developer Guides/REST API/ETAPI/API Reference.dat b/docs/User Guide/User Guide/Advanced Usage/ETAPI (REST API)/API Reference.dat similarity index 100% rename from docs/User Guide/User Guide/Developer Guides/REST API/ETAPI/API Reference.dat rename to docs/User Guide/User Guide/Advanced Usage/ETAPI (REST API)/API Reference.dat diff --git a/docs/User Guide/User Guide/Developer Guides/REST API/Internal API/API Reference.dat b/docs/User Guide/User Guide/Advanced Usage/Internal API/API Reference.dat similarity index 100% rename from docs/User Guide/User Guide/Developer Guides/REST API/Internal API/API Reference.dat rename to docs/User Guide/User Guide/Advanced Usage/Internal API/API Reference.dat diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Notes.md b/docs/User Guide/User Guide/Basic Concepts and Features/Notes.md index 22ee8f262..381e59000 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/Notes.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Notes.md @@ -5,7 +5,7 @@ Note is a central entity in Trilium. Main attributes of note are title and conte The main note type is a rich-text note type called Text. For diagrams and drawing there is Canvas and Mermaid Diagrams. -There are also more complex note types such as Saved Search, Render Note that usually go hand-in-hand with Scripting. +There are also more complex note types such as Saved Search, Render Note that usually go hand-in-hand with Scripting. In Trilium there's no specific "folder" note type. Any note can have children and thus be a folder. diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Attachments.md b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Attachments.md index 36e011c32..27c2f751d 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Attachments.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Attachments.md @@ -1,7 +1,7 @@ # Attachments A [note](../Notes.md) in Trilium can _own_ one or more attachments, which can be either images or files. These attachments can be displayed or linked within the note that owns them. -This can be especially useful to include dependencies for your [scripts](../../Note%20Types/Code/Scripting.md). The Weight Tracker shows how to use [chartjs](https://chartjs.org/) which is attached to the script note. +This can be especially useful to include dependencies for your [scripts](../../Scripting.md). The Weight Tracker shows how to use [chartjs](https://chartjs.org/) which is attached to the script note. Each note exclusively owns its attachments, meaning attachments cannot be shared or linked from one note to another. If an attachment link is copied to a different note, the attachment itself is duplicated, and the copies are managed independently thereafter. diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar.md b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar.md index 184d25de3..d3dfd49f8 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar.md @@ -50,13 +50,13 @@ Right click either the _Available launchers_ or _Visible launchers_ sections and 2. Optionally, set `hoistedNote` to hoist a particular note. See [Note Hoisting](../Navigation/Note%20Hoisting.md) for more information. 3. Optionally, set a `keyboardShortcut` to trigger the launcher. 2. **Script Launcher** - An advanced launcher which will run a script upon pressing. See [Scripts](../../Note%20Types/Code/Scripting.md) for more information. + An advanced launcher which will run a script upon pressing. See [Scripts](../../Scripting.md) for more information. 1. Set `script` to point to the desired script to run. 2. Optionally, set a `keyboardShortcut` to trigger the launcher. 3. **Custom Widget** - Allows defining a custom widget to be rendered inside the launcher. See [Widget Basics](../../Developer%20Guides/Widget%20Basics.md) for more information. + Allows defining a custom widget to be rendered inside the launcher. See [Widget Basics](../../Scripting/Widget%20Basics.md) for more information. 4. **Spacers** Launchers that create some distance between other launchers for better visual distinction. diff --git a/docs/User Guide/User Guide/FAQ.md b/docs/User Guide/User Guide/FAQ.md index 7a30ea58c..d0af95d76 100644 --- a/docs/User Guide/User Guide/FAQ.md +++ b/docs/User Guide/User Guide/FAQ.md @@ -17,7 +17,7 @@ Common request is to allow multiple users collaborate, share notes etc. So far I * it's a huge feature, or rather a Pandora's box of collaboration features like user management, permissions, conflict resolution, real-time editing of a note by multiple people etc. This would be a huge amount of work. Trilium Notes is project made mostly by one person in free time and that's unlikely to change in the future. * given its size it would probably pivot the attention away from my main focus which is a personal note-taking -* the assumption that only single person has access to the app simplifies many things, or just outright makes them possible. In multi-user app, our [scripting](Note%20Types/Code/Scripting.md)support would be a XSS security hole, while with the single user assumption it's an endless customizable tool. +* the assumption that only single person has access to the app simplifies many things, or just outright makes them possible. In multi-user app, our [scripting](Scripting.md)support would be a XSS security hole, while with the single user assumption it's an endless customizable tool. ## How to open multiple documents in one Trilium instance diff --git a/docs/User Guide/User Guide/Installation & Setup/Mobile Frontend.md b/docs/User Guide/User Guide/Installation & Setup/Mobile Frontend.md index 53351321a..619ca8431 100644 --- a/docs/User Guide/User Guide/Installation & Setup/Mobile Frontend.md +++ b/docs/User Guide/User Guide/Installation & Setup/Mobile Frontend.md @@ -31,4 +31,4 @@ Trilium decides automatically whether to use mobile or desktop frontend. If this ## Scripting -You can alter the behavior with [scripts](../Note%20Types/Code/Scripting.md) just like for normal frontend. For script notes to be executed, they need to have labeled `#run=mobileStartup`. \ No newline at end of file +You can alter the behavior with [scripts](../Scripting.md) just like for normal frontend. For script notes to be executed, they need to have labeled `#run=mobileStartup`. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Note Types.md b/docs/User Guide/User Guide/Note Types.md index a455fb6ee..a47b3d650 100644 --- a/docs/User Guide/User Guide/Note Types.md +++ b/docs/User Guide/User Guide/Note Types.md @@ -25,4 +25,4 @@ It is possible to change the type of a note after it has been created via the _B The following note types are supported by Trilium: -
Note TypeDescription
TextThe default note type, which allows for rich text formatting, images, admonitions and right-to-left support.
CodeUses a mono-space font and can be used to store larger chunks of code or plain text than a text note, and has better syntax highlighting.
Saved SearchStores the information about a search (the search text, criteria, etc.) for later use. Can be used for quick filtering of a large amount of notes, for example. The search can easily be triggered.
Relation MapAllows easy creation of notes and relations between them. Can be used for mainly relational data such as a family tree.
Note MapDisplays the relationships between the notes, whether via relations or their hierarchical structure.
Render NoteUsed in Scripting, it displays the HTML content of another note. This allows displaying any kind of content, provided there is a script behind it to generate it.
Book

Displays the children of the note either as a grid, a list, or for a more specialized case: a calendar.

Generally useful for easy reading of short notes.

Mermaid DiagramsDisplays diagrams such as bar charts, flow charts, state diagrams, etc. Requires a bit of technical knowledge since the diagrams are written in a specialized format.
CanvasAllows easy drawing of sketches, diagrams, handwritten content. Uses the same technology behind excalidraw.com.
Web ViewDisplays the content of an external web page, similar to a browser.
Mind MapEasy for brainstorming ideas, by placing them in a hierarchical layout.
Geo MapDisplays the children of the note as a geographical map, one use-case would be to plan vacations. It even has basic support for tracks. Notes can also be created from it.
FileRepresents an uploaded file such as PDFs, images, video or audio files.
\ No newline at end of file +
Note TypeDescription
TextThe default note type, which allows for rich text formatting, images, admonitions and right-to-left support.
CodeUses a mono-space font and can be used to store larger chunks of code or plain text than a text note, and has better syntax highlighting.
Saved SearchStores the information about a search (the search text, criteria, etc.) for later use. Can be used for quick filtering of a large amount of notes, for example. The search can easily be triggered.
Relation MapAllows easy creation of notes and relations between them. Can be used for mainly relational data such as a family tree.
Note MapDisplays the relationships between the notes, whether via relations or their hierarchical structure.
Render NoteUsed in Scripting, it displays the HTML content of another note. This allows displaying any kind of content, provided there is a script behind it to generate it.
Book

Displays the children of the note either as a grid, a list, or for a more specialized case: a calendar.

Generally useful for easy reading of short notes.

Mermaid DiagramsDisplays diagrams such as bar charts, flow charts, state diagrams, etc. Requires a bit of technical knowledge since the diagrams are written in a specialized format.
CanvasAllows easy drawing of sketches, diagrams, handwritten content. Uses the same technology behind excalidraw.com.
Web ViewDisplays the content of an external web page, similar to a browser.
Mind MapEasy for brainstorming ideas, by placing them in a hierarchical layout.
Geo MapDisplays the children of the note as a geographical map, one use-case would be to plan vacations. It even has basic support for tracks. Notes can also be created from it.
FileRepresents an uploaded file such as PDFs, images, video or audio files.
\ No newline at end of file diff --git a/docs/User Guide/User Guide/Note Types/Code.md b/docs/User Guide/User Guide/Note Types/Code.md index a44bb8c8c..cba400984 100644 --- a/docs/User Guide/User Guide/Note Types/Code.md +++ b/docs/User Guide/User Guide/Note Types/Code.md @@ -5,7 +5,7 @@ This can be useful for a few things: * computer programmers can store code snippets as notes with syntax highlighting * JavaScript code notes can be executed inside Trilium for some extra functionality - * we call such JavaScript code notes "scripts" - see [Scripts](Code/Scripting.md) + * we call such JavaScript code notes "scripts" - see Scripting * JSON, XML etc. can be used as storage for structured data (typically used in conjunction with scripting) For shorter snippets of code that can be embedded in [Text](Text.md) notes, see [Code blocks](Text/Developer-specific%20formatting/Code%20blocks.md). diff --git a/docs/User Guide/User Guide/Note Types/Code/Events.md b/docs/User Guide/User Guide/Note Types/Code/Events.md index 7e50ca30e..ca3336889 100644 --- a/docs/User Guide/User Guide/Note Types/Code/Events.md +++ b/docs/User Guide/User Guide/Note Types/Code/Events.md @@ -1,5 +1,5 @@ # Events -[Script](Scripting.md) notes can be triggered by events. Note that these are backend events and thus relation need to point to the "JS backend" code note. +[Script](../../Scripting.md) notes can be triggered by events. Note that these are backend events and thus relation need to point to the "JS backend" code note. ## Global events diff --git a/docs/User Guide/User Guide/Note Types/Code/Scripting/New Task launcher button.md b/docs/User Guide/User Guide/Note Types/Code/Scripting/New Task launcher button.md deleted file mode 100644 index 8c9148c42..000000000 --- a/docs/User Guide/User Guide/Note Types/Code/Scripting/New Task launcher button.md +++ /dev/null @@ -1,47 +0,0 @@ -# "New Task" launcher button -In this example we are going to extend the functionality of Task Manager showcase (which comes by default with Trilium) by adding a button in the Launch Bar  (![](New%20Task%20launcher%20button_i.png)) to create a new task automatically and open it. - -## Creating the note - -1. First, create a new Code note type with the _JS frontend_ language. -2. Define the `#run=frontendStartup` label in Attributes. - -## Content of the script - -Copy-paste the following script: - -```javascript -api.addButtonToToolbar({ - title: "New task", - icon: "task", - shortcut: "alt+n", - action: async () => { - const taskNoteId = await api.runOnBackend(() => { - const todoRootNote = api.getNoteWithLabel("taskTodoRoot"); - const resp = api.createTextNote(todoRootNote.noteId, "New task", "") - return resp.note.noteId; - }); - - await api.waitUntilSynced(); - await api.activateNewNote(taskNoteId); - } -}); -``` - -## Testing the functionality - -Since we set the script to be run on start-up, all we need to do is to [refresh the application](../../../Troubleshooting/Refreshing%20the%20application.md). - -## Understanding how the script works - -
api.addButtonToToolbar({
-	title: "New task",
-    icon: "task",
-    shortcut: "alt+n",
-    action: async () => {
-    	// [...]
-    }
-});

This uses the Front-end API to create a icon in the Launch Bar, by specifying:

  • A title
  • A corresponding boxicons icon (without the bx- prefix).
  • Optionally, a keyboard shortcut to assign to it.
  • The action, which will be executed when the button is pressed.
const taskNoteId = await api.runOnBackend(() => {
-    // Shown below.           
-    return resp.note.noteId;
-});
  • This portion of code is actually executed on the server (backend) and not on the client (i.e. browser).
    • The reason is that the creating notes is the responsibility of the server.
  • Here we can also see that it is possible to return results from the server execution and read them in the client (taskNoteId).
const todoRootNote = api.getNoteWithLabel("taskTodoRoot");
  • Here we identify a note with the label #taskTodoRoot. This is how the Task Manager showcase knows where to place all the different tasks.
  • Normally this might return a null value if no such note could be identified, but error handling is outside the scope of this example. 
const resp = api.createTextNote(todoRootNote.noteId, "New task", "")
  • We create a new child note within the to-do root note (first argument) with the title “New task" (second argument) and no content by default (third argument).
await api.waitUntilSynced();
  • Back on the client, since we created a new note on the server, we now need to wait for the change to be reflected in the client.
await api.activateNewNote(taskNoteId);
  • Since we know the ID of the newly created note, all we have to do now is to show this note to the user.
\ No newline at end of file diff --git a/docs/User Guide/User Guide/Note Types/Render Note.md b/docs/User Guide/User Guide/Note Types/Render Note.md index e69de29bb..6b70ad128 100644 --- a/docs/User Guide/User Guide/Note Types/Render Note.md +++ b/docs/User Guide/User Guide/Note Types/Render Note.md @@ -0,0 +1,39 @@ +# Render Note +
+ +Render Note is used in Scripting. It works by displaying the HTML of a Code note, via an attribute. + +## Creating a render note + +1. Create a Code note with the HTML language, with what needs to be displayed (for example `

Hello world.

`). +2. Create a Render Note. +3. Assign the `renderNote` [relation](../Advanced%20Usage/Attributes.md) to point at the previously created code note. + +## Dynamic content + +A static HTML is generally not enough for Scripting. The next step is to automatically change parts of the note using JavaScript. + +For a simple example, we are going to create a render note that displays the current date in a field. + +To do so, first create an HTML code note with the following content: + +``` +

Current date & time

+The current date & time is +``` + +Now we need to add the script. Create another Code, but this time of JavaScript (frontend) language. Make sure the newly created note is a direct child of the HTML note created previously; with the following content: + +``` +const $dateEl = api.$container.find(".date"); +$dateEl.text(new Date()); +``` + +Now create a render note at any place and set its `~renderNote` relation to point to the HTML note. When the render note is accessed it will display: + +> **Current date & time** +> The current date & time is Sun Apr 06 2025 15:26:29 GMT+0300 (Eastern European Summer Time) + +## Examples + +* Weight Tracker which is present in the Demo Notes. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Note Types/Render Note_image.png b/docs/User Guide/User Guide/Note Types/Render Note_image.png new file mode 100644 index 0000000000000000000000000000000000000000..18afa6cee0d4c41f61441037b4785b6d463a0596 GIT binary patch literal 30231 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 notes, i.e. notes which allow you to store some programming code and highlight it. Special case is JavaScript code notes which can also be executed inside Trilium which can in conjunction with Script API provide extra functionality. +Trilium supports creating Code notes, i.e. notes which allow you to store some programming code and highlight it. Special case is JavaScript code notes which can also be executed inside Trilium which can in conjunction with Script API provide extra functionality. ## Scripting @@ -12,7 +12,7 @@ So we have frontend and backend, each with their own set of responsibilities, bu ## Use cases -* "New Task" launcher button +* "New Task" launcher button ## Action handler @@ -24,18 +24,18 @@ So we have a script which will add the button to the toolbar. But how can we exe We need to execute it every time Trilium starts up, but we probably don't want to have to manually click on play button on every start up. -The solution is marked by red circle at the bottom - this note has [label](../../Advanced%20Usage/Attributes.md) `#run=frontendStartup` - this is one of the "system" labels which Trilium understands. As you might guess, this will cause all such labeled script notes to be executed once Trilium frontend starts up. +The solution is marked by red circle at the bottom - this note has [label](Advanced%20Usage/Attributes.md) `#run=frontendStartup` - this is one of the "system" labels which Trilium understands. As you might guess, this will cause all such labeled script notes to be executed once Trilium frontend starts up. -(`#run=frontendStartup` does not work for [Mobile frontend](../../Installation%20%26%20Setup/Mobile%20Frontend.md) - if you want to have scripts running there, give the script `#run=mobileStartup` label) +(`#run=frontendStartup` does not work for [Mobile frontend](Installation%20%26%20Setup/Mobile%20Frontend.md) - if you want to have scripts running there, give the script `#run=mobileStartup` label) ## More showcases -You can see more scripting with explanation in Advanced Showcases. +You can see more scripting with explanation in Advanced Showcases. ## Events -See Events. +See Events. ## Script API -See Script API. \ No newline at end of file +See Script API. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Developer Guides/Examples/Downloading responses from Goo.md b/docs/User Guide/User Guide/Scripting/Examples/Downloading responses from Goo.md similarity index 100% rename from docs/User Guide/User Guide/Developer Guides/Examples/Downloading responses from Goo.md rename to docs/User Guide/User Guide/Scripting/Examples/Downloading responses from Goo.md diff --git a/docs/User Guide/User Guide/Scripting/Examples/New Task launcher button.md b/docs/User Guide/User Guide/Scripting/Examples/New Task launcher button.md new file mode 100644 index 000000000..6fd6f16f7 --- /dev/null +++ b/docs/User Guide/User Guide/Scripting/Examples/New Task launcher button.md @@ -0,0 +1,47 @@ +# "New Task" launcher button +In this example we are going to extend the functionality of Task Manager showcase (which comes by default with Trilium) by adding a button in the Launch Bar  (![](New%20Task%20launcher%20button_i.png)) to create a new task automatically and open it. + +## Creating the note + +1. First, create a new Code note type with the _JS frontend_ language. +2. Define the `#run=frontendStartup` label in Attributes. + +## Content of the script + +Copy-paste the following script: + +```javascript +api.addButtonToToolbar({ + title: "New task", + icon: "task", + shortcut: "alt+n", + action: async () => { + const taskNoteId = await api.runOnBackend(() => { + const todoRootNote = api.getNoteWithLabel("taskTodoRoot"); + const resp = api.createTextNote(todoRootNote.noteId, "New task", "") + return resp.note.noteId; + }); + + await api.waitUntilSynced(); + await api.activateNewNote(taskNoteId); + } +}); +``` + +## Testing the functionality + +Since we set the script to be run on start-up, all we need to do is to [refresh the application](../../Troubleshooting/Refreshing%20the%20application.md). + +## Understanding how the script works + +
api.addButtonToToolbar({
+	title: "New task",
+    icon: "task",
+    shortcut: "alt+n",
+    action: async () => {
+    	// [...]
+    }
+});

This uses the Front-end API to create a icon in the Launch Bar, by specifying:

  • A title
  • A corresponding boxicons icon (without the bx- prefix).
  • Optionally, a keyboard shortcut to assign to it.
  • The action, which will be executed when the button is pressed.
const taskNoteId = await api.runOnBackend(() => {
+    // Shown below.           
+    return resp.note.noteId;
+});
  • This portion of code is actually executed on the server (backend) and not on the client (i.e. browser).
    • The reason is that the creating notes is the responsibility of the server.
  • Here we can also see that it is possible to return results from the server execution and read them in the client (taskNoteId).
const todoRootNote = api.getNoteWithLabel("taskTodoRoot");
  • Here we identify a note with the label #taskTodoRoot. This is how the Task Manager showcase knows where to place all the different tasks.
  • Normally this might return a null value if no such note could be identified, but error handling is outside the scope of this example. 
const resp = api.createTextNote(todoRootNote.noteId, "New task", "")
  • We create a new child note within the to-do root note (first argument) with the title “New task" (second argument) and no content by default (third argument).
await api.waitUntilSynced();
  • Back on the client, since we created a new note on the server, we now need to wait for the change to be reflected in the client.
await api.activateNewNote(taskNoteId);
  • Since we know the ID of the newly created note, all we have to do now is to show this note to the user.
\ No newline at end of file diff --git a/docs/User Guide/User Guide/Note Types/Code/Scripting/New Task launcher button_i.png b/docs/User Guide/User Guide/Scripting/Examples/New Task launcher button_i.png similarity index 100% rename from docs/User Guide/User Guide/Note Types/Code/Scripting/New Task launcher button_i.png rename to docs/User Guide/User Guide/Scripting/Examples/New Task launcher button_i.png diff --git a/docs/User Guide/User Guide/Developer Guides/Examples/Using promoted attributes .png b/docs/User Guide/User Guide/Scripting/Examples/Using promoted attributes .png similarity index 100% rename from docs/User Guide/User Guide/Developer Guides/Examples/Using promoted attributes .png rename to docs/User Guide/User Guide/Scripting/Examples/Using promoted attributes .png diff --git a/docs/User Guide/User Guide/Developer Guides/Examples/Using promoted attributes to c.md b/docs/User Guide/User Guide/Scripting/Examples/Using promoted attributes to c.md similarity index 100% rename from docs/User Guide/User Guide/Developer Guides/Examples/Using promoted attributes to c.md rename to docs/User Guide/User Guide/Scripting/Examples/Using promoted attributes to c.md diff --git a/docs/User Guide/User Guide/Developer Guides/Frontend Basics.md b/docs/User Guide/User Guide/Scripting/Frontend Basics.md similarity index 100% rename from docs/User Guide/User Guide/Developer Guides/Frontend Basics.md rename to docs/User Guide/User Guide/Scripting/Frontend Basics.md diff --git a/docs/User Guide/User Guide/Developer Guides/Widget Basics.md b/docs/User Guide/User Guide/Scripting/Widget Basics.md similarity index 100% rename from docs/User Guide/User Guide/Developer Guides/Widget Basics.md rename to docs/User Guide/User Guide/Scripting/Widget Basics.md diff --git a/src/public/app/doc_notes/en/User Guide/!!!meta.json b/src/public/app/doc_notes/en/User Guide/!!!meta.json index da25d6ce5..ea3daa8e3 100644 --- a/src/public/app/doc_notes/en/User Guide/!!!meta.json +++ b/src/public/app/doc_notes/en/User Guide/!!!meta.json @@ -4858,13 +4858,6 @@ "type": "text", "mime": "text/markdown", "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "CdNpE2pqjmI6", - "isInheritable": false, - "position": 10 - }, { "type": "relation", "name": "internalLink", @@ -4913,6 +4906,13 @@ "value": "bx bx-code", "isInheritable": false, "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "CdNpE2pqjmI6", + "isInheritable": false, + "position": 100 } ], "format": "html", @@ -4937,173 +4937,6 @@ ], "dirFileName": "Code", "children": [ - { - "isClone": false, - "noteId": "CdNpE2pqjmI6", - "notePath": [ - "pOsGYCXsbNQG", - "KSZ04uQ2D1St", - "6f9hih2hXXZk", - "CdNpE2pqjmI6" - ], - "title": "Scripting", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/markdown", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "6f9hih2hXXZk", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "GLks18SNjxmC", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "TjLYAo3JMO8X", - "isInheritable": false, - "position": 30 - }, - { - "type": "relation", - "name": "internalLink", - "value": "zEY4DaJG4YT5", - "isInheritable": false, - "position": 40 - }, - { - "type": "relation", - "name": "internalLink", - "value": "RDslemsQ6gCp", - "isInheritable": false, - "position": 50 - }, - { - "type": "relation", - "name": "internalLink", - "value": "5668rwcirq1t", - "isInheritable": false, - "position": 60 - }, - { - "type": "relation", - "name": "internalLink", - "value": "GPERMystNGTB", - "isInheritable": false, - "position": 70 - }, - { - "type": "label", - "name": "shareAlias", - "value": "scripts", - "isInheritable": false, - "position": 20 - } - ], - "format": "html", - "dataFileName": "Scripting.html", - "attachments": [], - "dirFileName": "Scripting", - "children": [ - { - "isClone": false, - "noteId": "TjLYAo3JMO8X", - "notePath": [ - "pOsGYCXsbNQG", - "KSZ04uQ2D1St", - "6f9hih2hXXZk", - "CdNpE2pqjmI6", - "TjLYAo3JMO8X" - ], - "title": "\"New Task\" launcher button", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "xYjQUYhpbUEW", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "xYmIYSP6wE3F", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "6f9hih2hXXZk", - "isInheritable": false, - "position": 30 - }, - { - "type": "relation", - "name": "internalLink", - "value": "zEY4DaJG4YT5", - "isInheritable": false, - "position": 40 - }, - { - "type": "relation", - "name": "internalLink", - "value": "yIhgI5H7A2Sm", - "isInheritable": false, - "position": 50 - }, - { - "type": "relation", - "name": "internalLink", - "value": "m1lbrzyKDaRB", - "isInheritable": false, - "position": 60 - }, - { - "type": "relation", - "name": "internalLink", - "value": "s8alTXmpFR61", - "isInheritable": false, - "position": 70 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-task", - "isInheritable": false, - "position": 80 - } - ], - "format": "html", - "dataFileName": "New Task launcher button.html", - "attachments": [ - { - "attachmentId": "9C2JA6tdtRpN", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "New Task launcher button_i.png" - } - ] - } - ] - }, { "isClone": false, "noteId": "GLks18SNjxmC", @@ -5422,11 +5255,62 @@ "value": "bx bx-extension", "isInheritable": false, "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "CdNpE2pqjmI6", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "R7abl2fc6Mxi", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6tZeKvSHEUiB", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6f9hih2hXXZk", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "HcABDtFCkbFN", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 70 } ], "format": "html", "dataFileName": "Render Note.html", - "attachments": [] + "attachments": [ + { + "attachmentId": "SeTpR7xEDMvQ", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Render Note_image.png" + } + ] }, { "isClone": false, @@ -6551,321 +6435,6 @@ } ] }, - { - "isClone": false, - "noteId": "k2Gc17NbaAwb", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb" - ], - "title": "Developer Guides", - "notePosition": 260, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "iconClass", - "value": "bx bxl-javascript", - "isInheritable": false, - "position": 10 - } - ], - "format": "html", - "attachments": [], - "dirFileName": "Developer Guides", - "children": [ - { - "isClone": false, - "noteId": "yIhgI5H7A2Sm", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "yIhgI5H7A2Sm" - ], - "title": "Frontend Basics", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/markdown", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "zEY4DaJG4YT5", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "GLks18SNjxmC", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "SynTBQiBsdYJ", - "isInheritable": false, - "position": 30 - }, - { - "type": "label", - "name": "shareAlias", - "value": "frontend-basics", - "isInheritable": false, - "position": 30 - } - ], - "format": "html", - "dataFileName": "Frontend Basics.html", - "attachments": [] - }, - { - "isClone": false, - "noteId": "SynTBQiBsdYJ", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "SynTBQiBsdYJ" - ], - "title": "Widget Basics", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/markdown", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "zEY4DaJG4YT5", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "BFs8mudNFgCS", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "GLks18SNjxmC", - "isInheritable": false, - "position": 30 - }, - { - "type": "label", - "name": "shareAlias", - "value": "widget-basics", - "isInheritable": false, - "position": 20 - } - ], - "format": "html", - "dataFileName": "Widget Basics.html", - "attachments": [] - }, - { - "isClone": false, - "noteId": "es8OU2GuguFU", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "es8OU2GuguFU" - ], - "title": "Examples", - "notePosition": 30, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "html", - "attachments": [], - "dirFileName": "Examples", - "children": [ - { - "isClone": false, - "noteId": "7kZPMD0uFwkH", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "es8OU2GuguFU", - "7kZPMD0uFwkH" - ], - "title": "Downloading responses from Google Forms", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "html", - "dataFileName": "Downloading responses from Goo.html", - "attachments": [] - }, - { - "isClone": false, - "noteId": "DL92EjAaXT26", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "es8OU2GuguFU", - "DL92EjAaXT26" - ], - "title": "Using promoted attributes to configure scripts", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "html", - "dataFileName": "Using promoted attributes to c.html", - "attachments": [ - { - "attachmentId": "7P3jzVEa1mk7", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "Using promoted attributes .png" - } - ] - } - ] - }, - { - "isClone": false, - "noteId": "CXny4YWKsD7z", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "CXny4YWKsD7z" - ], - "title": "REST API", - "notePosition": 40, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "html", - "attachments": [], - "dirFileName": "REST API", - "children": [ - { - "isClone": false, - "noteId": "cqCjxpN8NhbH", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "CXny4YWKsD7z", - "cqCjxpN8NhbH" - ], - "title": "ETAPI", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "html", - "attachments": [], - "dirFileName": "ETAPI", - "children": [ - { - "isClone": false, - "noteId": "9qPsTWBorUhQ", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "CXny4YWKsD7z", - "cqCjxpN8NhbH", - "9qPsTWBorUhQ" - ], - "title": "API Reference", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "webView", - "mime": "", - "attributes": [ - { - "type": "label", - "name": "webViewSrc", - "value": "/etapi/docs", - "isInheritable": false, - "position": 10 - } - ], - "dataFileName": "API Reference.dat", - "attachments": [] - } - ] - }, - { - "isClone": false, - "noteId": "0vTSyvhPTAOz", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "CXny4YWKsD7z", - "0vTSyvhPTAOz" - ], - "title": "Internal API", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "html", - "attachments": [], - "dirFileName": "Internal API", - "children": [ - { - "isClone": false, - "noteId": "z8O2VG4ZZJD7", - "notePath": [ - "pOsGYCXsbNQG", - "k2Gc17NbaAwb", - "CXny4YWKsD7z", - "0vTSyvhPTAOz", - "z8O2VG4ZZJD7" - ], - "title": "API Reference", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "webView", - "mime": "", - "attributes": [ - { - "type": "label", - "name": "webViewSrc", - "value": "/api/docs", - "isInheritable": false, - "position": 10 - } - ], - "dataFileName": "API Reference.dat", - "attachments": [] - } - ] - } - ] - } - ] - }, { "isClone": false, "noteId": "tC7s2alapj8V", @@ -6874,7 +6443,7 @@ "tC7s2alapj8V" ], "title": "Advanced Usage", - "notePosition": 300, + "notePosition": 310, "prefix": null, "isExpanded": false, "type": "text", @@ -7262,6 +6831,13 @@ "value": "note-map", "isInheritable": false, "position": 30 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bxs-network-chart", + "isInheritable": false, + "position": 40 } ], "format": "html", @@ -7885,7 +7461,37 @@ ], "format": "html", "dataFileName": "ETAPI (REST API).html", - "attachments": [] + "attachments": [], + "dirFileName": "ETAPI (REST API)", + "children": [ + { + "isClone": false, + "noteId": "9qPsTWBorUhQ", + "notePath": [ + "pOsGYCXsbNQG", + "tC7s2alapj8V", + "pgxEVkzLl1OP", + "9qPsTWBorUhQ" + ], + "title": "API Reference", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "webView", + "mime": "", + "attributes": [ + { + "type": "label", + "name": "webViewSrc", + "value": "/etapi/docs", + "isInheritable": false, + "position": 10 + } + ], + "dataFileName": "API Reference.dat", + "attachments": [] + } + ] }, { "isClone": false, @@ -7896,7 +7502,7 @@ "47ZrP6FNuoG8" ], "title": "Default Note Title", - "notePosition": 110, + "notePosition": 120, "prefix": null, "isExpanded": false, "type": "text", @@ -7937,7 +7543,7 @@ "wX4HbRucYSDD" ], "title": "Database", - "notePosition": 130, + "notePosition": 140, "prefix": null, "isExpanded": false, "type": "text", @@ -7950,41 +7556,6 @@ "isInheritable": false, "position": 10 }, - { - "type": "relation", - "name": "internalLink", - "value": "iRwzGnHPzonm", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "l0tKav7yLHGF", - "isInheritable": false, - "position": 30 - }, - { - "type": "relation", - "name": "internalLink", - "value": "R7abl2fc6Mxi", - "isInheritable": false, - "position": 40 - }, - { - "type": "relation", - "name": "internalLink", - "value": "xYjQUYhpbUEW", - "isInheritable": false, - "position": 50 - }, - { - "type": "relation", - "name": "internalLink", - "value": "Wy267RK4M69c", - "isInheritable": false, - "position": 60 - }, { "type": "relation", "name": "internalLink", @@ -8012,6 +7583,13 @@ "value": "bx bx-data", "isInheritable": false, "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6tZeKvSHEUiB", + "isInheritable": false, + "position": 90 } ], "format": "html", @@ -8038,16 +7616,16 @@ { "type": "relation", "name": "internalLink", - "value": "YKWqdJhzi2VY", + "value": "tAassRL4RSQL", "isInheritable": false, - "position": 10 + "position": 20 }, { "type": "relation", "name": "internalLink", - "value": "tAassRL4RSQL", + "value": "YKWqdJhzi2VY", "isInheritable": false, - "position": 20 + "position": 30 } ], "format": "html", @@ -8141,6 +7719,69 @@ ] } ] + }, + { + "isClone": false, + "noteId": "6tZeKvSHEUiB", + "notePath": [ + "pOsGYCXsbNQG", + "tC7s2alapj8V", + "wX4HbRucYSDD", + "6tZeKvSHEUiB" + ], + "title": "Demo Notes", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "iRwzGnHPzonm", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "l0tKav7yLHGF", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "R7abl2fc6Mxi", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "xYjQUYhpbUEW", + "isInheritable": false, + "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Wy267RK4M69c", + "isInheritable": false, + "position": 100 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-package", + "isInheritable": false, + "position": 110 + } + ], + "format": "html", + "dataFileName": "Demo Notes.html", + "attachments": [] } ] }, @@ -8153,7 +7794,7 @@ "Gzjqa934BdH4" ], "title": "Configuration (config.ini or environment variables)", - "notePosition": 140, + "notePosition": 150, "prefix": null, "isExpanded": false, "type": "text", @@ -8180,7 +7821,7 @@ "ivYnonVFBxbQ" ], "title": "Bulk actions", - "notePosition": 150, + "notePosition": 160, "prefix": null, "isExpanded": false, "type": "text", @@ -8207,7 +7848,7 @@ "4FahAwuGTAwC" ], "title": "Note source", - "notePosition": 160, + "notePosition": 170, "prefix": null, "isExpanded": false, "type": "text", @@ -8320,7 +7961,7 @@ "1YeN2MzFUluU" ], "title": "Technologies used", - "notePosition": 170, + "notePosition": 180, "prefix": null, "isExpanded": false, "type": "text", @@ -8469,7 +8110,7 @@ "m1lbrzyKDaRB" ], "title": "Note ID", - "notePosition": 180, + "notePosition": 190, "prefix": null, "isExpanded": false, "type": "text", @@ -8493,6 +8134,391 @@ "format": "html", "dataFileName": "Note ID.html", "attachments": [] + }, + { + "isClone": false, + "noteId": "0vTSyvhPTAOz", + "notePath": [ + "pOsGYCXsbNQG", + "tC7s2alapj8V", + "0vTSyvhPTAOz" + ], + "title": "Internal API", + "notePosition": 200, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "html", + "attachments": [], + "dirFileName": "Internal API", + "children": [ + { + "isClone": false, + "noteId": "z8O2VG4ZZJD7", + "notePath": [ + "pOsGYCXsbNQG", + "tC7s2alapj8V", + "0vTSyvhPTAOz", + "z8O2VG4ZZJD7" + ], + "title": "API Reference", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "webView", + "mime": "", + "attributes": [ + { + "type": "label", + "name": "webViewSrc", + "value": "/api/docs", + "isInheritable": false, + "position": 10 + } + ], + "dataFileName": "API Reference.dat", + "attachments": [] + } + ] + } + ] + }, + { + "isClone": false, + "noteId": "CdNpE2pqjmI6", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6" + ], + "title": "Scripting", + "notePosition": 320, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "6f9hih2hXXZk", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "GLks18SNjxmC", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "TjLYAo3JMO8X", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "RDslemsQ6gCp", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "5668rwcirq1t", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "GPERMystNGTB", + "isInheritable": false, + "position": 70 + }, + { + "type": "label", + "name": "shareAlias", + "value": "scripts", + "isInheritable": false, + "position": 20 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bxs-file-js", + "isInheritable": false, + "position": 80 + } + ], + "format": "html", + "dataFileName": "Scripting.html", + "attachments": [], + "dirFileName": "Scripting", + "children": [ + { + "isClone": false, + "noteId": "yIhgI5H7A2Sm", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "yIhgI5H7A2Sm" + ], + "title": "Frontend Basics", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "GLks18SNjxmC", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "SynTBQiBsdYJ", + "isInheritable": false, + "position": 30 + }, + { + "type": "label", + "name": "shareAlias", + "value": "frontend-basics", + "isInheritable": false, + "position": 30 + } + ], + "format": "html", + "dataFileName": "Frontend Basics.html", + "attachments": [] + }, + { + "isClone": false, + "noteId": "SynTBQiBsdYJ", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "SynTBQiBsdYJ" + ], + "title": "Widget Basics", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "BFs8mudNFgCS", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "GLks18SNjxmC", + "isInheritable": false, + "position": 30 + }, + { + "type": "label", + "name": "shareAlias", + "value": "widget-basics", + "isInheritable": false, + "position": 20 + } + ], + "format": "html", + "dataFileName": "Widget Basics.html", + "attachments": [] + }, + { + "isClone": false, + "noteId": "es8OU2GuguFU", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "es8OU2GuguFU" + ], + "title": "Examples", + "notePosition": 50, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "html", + "attachments": [], + "dirFileName": "Examples", + "children": [ + { + "isClone": false, + "noteId": "TjLYAo3JMO8X", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "es8OU2GuguFU", + "TjLYAo3JMO8X" + ], + "title": "\"New Task\" launcher button", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "xYjQUYhpbUEW", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "xYmIYSP6wE3F", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6f9hih2hXXZk", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "yIhgI5H7A2Sm", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "m1lbrzyKDaRB", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "s8alTXmpFR61", + "isInheritable": false, + "position": 70 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-task", + "isInheritable": false, + "position": 80 + } + ], + "format": "html", + "dataFileName": "New Task launcher button.html", + "attachments": [ + { + "attachmentId": "9C2JA6tdtRpN", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "New Task launcher button_i.png" + } + ] + }, + { + "isClone": false, + "noteId": "7kZPMD0uFwkH", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "es8OU2GuguFU", + "7kZPMD0uFwkH" + ], + "title": "Downloading responses from Google Forms", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "html", + "dataFileName": "Downloading responses from Goo.html", + "attachments": [] + }, + { + "isClone": false, + "noteId": "DL92EjAaXT26", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "es8OU2GuguFU", + "DL92EjAaXT26" + ], + "title": "Using promoted attributes to configure scripts", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "html", + "dataFileName": "Using promoted attributes to c.html", + "attachments": [ + { + "attachmentId": "7P3jzVEa1mk7", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Using promoted attributes .png" + } + ] + } + ] } ] }, @@ -8504,7 +8530,7 @@ "Wxt3vVlxlYLi" ], "title": "Attachments", - "notePosition": 310, + "notePosition": 340, "prefix": null, "isExpanded": false, "type": "text", diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Advanced Showcases.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Advanced Showcases.html index d401c7cb6..6069a6f40 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Advanced Showcases.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Advanced Showcases.html @@ -13,7 +13,7 @@

Advanced Showcases

-

Trilium offers advanced functionality through Scripts and +

Trilium offers advanced functionality through Scripts and Promoted Attributes. To illustrate these features, we've prepared several showcases available in the demo notes:

diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager.html index f30e0366e..a3b07cbc9 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager.html @@ -15,7 +15,7 @@

Task Manager is a promoted attributes and scriptsshowcase present in the demo notes.

+ href="../../Scripting.html">scriptsshowcase present in the demo notes.

Demo

@@ -37,7 +37,7 @@

Task template defines several promoted attributes - todoDate, doneDate, tags, location. Importantly it also defines ~runOnAttributeChange relation - event handler which is - run on attribute change. This script handles + run on attribute change. This script handles when e.g. we fill out the doneDate attribute - meaning the task is done and should be moved to "Done" note and removed from TODO, locations and tags.

diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker.html index ce0f6cb26..67a7e2dbf 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker.html @@ -24,8 +24,8 @@

Implementation

The Weight Tracker note in the screenshot above is of the type Render Note. That type of note doesn't have any useful content itself. Instead it is - a placeholder where a script can - render its output.

+ a placeholder where a script can render + its output.

Scripts for Render Notes are defined in a relation called ~renderNote. In this example, it's the Weight Tracker's child Implementation. The Implementation consists of two code notes that diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Custom Request Handler.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Custom Request Handler.html index ee165623a..8c491ef80 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Custom Request Handler.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Custom Request Handler.html @@ -13,7 +13,7 @@

Custom Request Handler

-

Trilium provides a mechanism for scripts to +

Trilium provides a mechanism for scripts to open a public REST endpoint. This opens a way for various integrations with other services - a simple example would be creating new note from Slack by issuing a slash command (e.g. /trilium buy milk).

diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Database.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Database.html index 4b52c6f4a..be62b8869 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Database.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Database.html @@ -18,36 +18,9 @@ The database file is named document.db and is stored in the application's default Data directory.

Demo Notes

-

When you run Trilium for the first time, it will generate a new database - containing demo notes. These notes showcase its many features, such as:

- -

Restoring Demo Notes

-

There are some cases in which you may want to restore the original demo - notes. For example, if you experimented with some of the more advanced - features and want to see the original reference, or if you simply want - to explore the latest version of the demo notes, which might showcase new - features.

-

You can easily restore the demo notes by using Trilium's built-in import - feature by importing them:

-
    -
  • Download this .zip archive with - the latest version of the demo notes
  • -
  • Right click on any note in your tree under which you would like the demo - notes to be imported
  • -
  • Click "Import into note"
  • -
  • Select the .zip archive to import it
  • -
+

When first starting Trilium, it will provide a set of notes to showcase + various features of the application.

+

For more information see Demo Notes.

Manually Modifying the Database

Trilium provides a lot of flexibility, and with it, opportunities for advanced users to tweak it. If you need to explore or modify the database diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Demo Notes.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Demo Notes.html new file mode 100644 index 000000000..bc15cd499 --- /dev/null +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Demo Notes.html @@ -0,0 +1,50 @@ + + + + + + + + Demo Notes + + + +

+

Demo Notes

+ +
+

When you run Trilium for the first time, it will generate a new database + containing demo notes. These notes showcase its many features, such as:

+ +

Restoring Demo Notes

+

There are some cases in which you may want to restore the original demo + notes. For example, if you experimented with some of the more advanced + features and want to see the original reference, or if you simply want + to explore the latest version of the demo notes, which might showcase new + features.

+

You can easily restore the demo notes by using Trilium's built-in import + feature by importing them:

+
    +
  • Download this .zip archive with + the latest version of the demo notes
  • +
  • Right click on any note in your tree under which you would like the demo + notes to be imported
  • +
  • Click "Import into note"
  • +
  • Select the .zip archive to import it
  • +
+
+
+ + + \ No newline at end of file diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database.html index b41a6518a..d831e67c7 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database.html @@ -20,7 +20,7 @@ of your document.db file.

Modifying it internally using the SQL Console

The SQL Console is Trilium's built-in database editor.

-

See SQL Console.

+

See SQL Console.

Externally modifying the database

Sometimes the SQL Console cannot be used (for example if the application cannot start).

diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Developer Guides/REST API/ETAPI/API Reference.dat b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/ETAPI (REST API)/API Reference.dat similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Developer Guides/REST API/ETAPI/API Reference.dat rename to src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/ETAPI (REST API)/API Reference.dat diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Developer Guides/REST API/Internal API/API Reference.dat b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Internal API/API Reference.dat similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Developer Guides/REST API/Internal API/API Reference.dat rename to src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Internal API/API Reference.dat diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes.html b/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes.html index 9682039be..30a2f01c3 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes.html @@ -24,7 +24,7 @@

There are also more complex note types such as Saved SearchRender Note that usually - go hand-in-hand with Scripting.

+ go hand-in-hand with Scripting.

In Trilium there's no specific "folder" note type. Any note can have children and thus be a folder.

Root note

diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Attachments.html b/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Attachments.html index 4e5d2c70d..423734561 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Attachments.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Attachments.html @@ -16,7 +16,7 @@

A note in Trilium can own one or more attachments, which can be either images or files. These attachments can be displayed or linked within the note that owns them.

-

This can be especially useful to include dependencies for your scripts. +

This can be especially useful to include dependencies for your scripts. The Weight Tracker shows how to use chartjs which is attached to the script note.

diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar.html b/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar.html index 93dd27ed0..de42d0c71 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar.html @@ -84,7 +84,7 @@

Script Launcher
An advanced launcher which will run a script upon pressing. See  Scripts for more information.

+ href="../../Scripting.html">Scripts for more information.

  1. Set script to point to the desired script to run.
  2. Optionally, set a keyboardShortcut to trigger the launcher.
  3. @@ -95,7 +95,7 @@

    Allows defining a custom widget to be rendered inside the launcher. See  Widget Basics for more information.

    + href="../../Scripting/Widget%20Basics.html">Widget Basics for more information.

  4. Spacers diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/FAQ.html b/src/public/app/doc_notes/en/User Guide/User Guide/FAQ.html index 506cc67cf..f0f98ab37 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/FAQ.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/FAQ.html @@ -36,7 +36,7 @@

  5. the assumption that only single person has access to the app simplifies many things, or just outright makes them possible. In multi-user app, our scriptingsupport would be a XSS security hole, while with the single + href="Scripting.html">scriptingsupport would be a XSS security hole, while with the single user assumption it's an endless customizable tool.
  6. How to open multiple documents in one Trilium instance

    diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Installation & Setup/Mobile Frontend.html b/src/public/app/doc_notes/en/User Guide/User Guide/Installation & Setup/Mobile Frontend.html index a9528ed37..5f55eec45 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Installation & Setup/Mobile Frontend.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Installation & Setup/Mobile Frontend.html @@ -47,7 +47,7 @@ If this is not appropriate, you can use ?mobile or ?desktop query param on login page (Note: you might need to log out).

    Scripting

    -

    You can alter the behavior with scripts just +

    You can alter the behavior with scripts just like for normal frontend. For script notes to be executed, they need to have labeled #run=mobileStartup.

diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types.html b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types.html index c4736bcd3..afcb7f4cb 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types.html @@ -94,7 +94,7 @@ Render Note - Used in Scripting, + Used in Scripting, it displays the HTML content of another note. This allows displaying any kind of content, provided there is a script behind it to generate it. diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Code.html b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Code.html index c4ba2fbcf..ec9ef88a0 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Code.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Code.html @@ -21,7 +21,8 @@
  • computer programmers can store code snippets as notes with syntax highlighting
  • JavaScript code notes can be executed inside Trilium for some extra functionality
      -
    • we call such JavaScript code notes "scripts" - see Scripts +
    • we call such JavaScript code notes "scripts" - see Scripting
  • diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Code/Events.html b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Code/Events.html index de11c7aa2..4b9a0394e 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Code/Events.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Code/Events.html @@ -13,9 +13,9 @@

    Events

    -

    Script notes can be triggered by events. Note - that these are backend events and thus relation need to point to the "JS - backend" code note.

    +

    Script notes can be triggered by events. + Note that these are backend events and thus relation need to point to the + "JS backend" code note.

    Global events

    Global events are attached to the script note via label. Simply create e.g. "run" label with some of these values and script note will be executed diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Render Note.html b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Render Note.html index fcebc8389..347cf2129 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Render Note.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Render Note.html @@ -12,7 +12,48 @@

    Render Note

    -
    +
    +
    + +
    +

    Render Note is used in Scripting. + It works by displaying the HTML of a Code note, + via an attribute.

    +

    Creating a render note

    +
      +
    1. Create a Code note + with the HTML language, with what needs to be displayed (for example <p>Hello world.</p>).
    2. +
    3. Create a Render Note.
    4. +
    5. Assign the renderNote relation to + point at the previously created code note.
    6. +
    +

    Dynamic content

    +

    A static HTML is generally not enough for Scripting. The next step is to automatically + change parts of the note using JavaScript.

    +

    For a simple example, we are going to create a render note that displays + the current date in a field.

    +

    To do so, first create an HTML code note with the following content:

    <h1>Current date & time</h1>
    +The current date & time is <span class="date"></span>
    +

    Now we need to add the script. Create another Code, but this time of JavaScript (frontend) language. + Make sure the newly created note is a direct child of the HTML note created + previously; with the following content:

    const $dateEl = api.$container.find(".date");
    +$dateEl.text(new Date());
    +

    Now create a render note at any place and set its ~renderNote relation + to point to the HTML note. When the render note is accessed it will display:

    +
    +

    Current date & time +
    The current date & time is Sun Apr 06 2025 15:26:29 GMT+0300 (Eastern + European Summer Time)

    +
    +

    Examples

    + +
    diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Render Note_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Render Note_image.png new file mode 100644 index 0000000000000000000000000000000000000000..18afa6cee0d4c41f61441037b4785b6d463a0596 GIT binary patch literal 30231 zcmbq*hd-BV{P#B^*(R35v6PiO%xhJB$QQ1 z$NTd*9c6U7yc;eeOuz<42h2H_=ll6sDsZY9}ZZDpP#jOGiuo z89mQ|f33Zsa@2qhfBDndMc}_TdZ?Rt=$~`&@UlK{PdR<|oU8rL3%2L&?ay9tJm)b* zU3U=QBu>6b^}M~chts*U{02_0_7pWweo1+LYq#_K(vs40{8DoJq!ji^O7V+J%1BDO zvxw(VDEyS8YKIKGZ%^LwGU4cZ|E%u%T9vUL`YcWc8yfY=tjlMPuszO-u>Y~)q({-j zQiXNHZMYAql?qg;t7X$=hR6G?etBNoEX2xB*SMmn!+R}tzt>B~>(9Mj z9{6Sv_3B#}KPz2`GnIB%hSN=--RzMm3+4UnbRq5GS)!v;al1`_(5buS_fx2Xm01P3 zOau}%hR(SUs`InvUmY5Xdf{*^a_7uKVnmTZM4JFBUC-qqs)Eu|R)GY%EzIi_d0BSs z*zv`!?MIaIediFBZELC4%+Aj8bJ921l-1jm*+uOXctD9_&ey!|?zU5W(_$+c zy}h*C=>J~0l*wAE!S{z$RjDPoj%hlwwQnnL{@%ToDwrZVm8RS!%Vx5+aW{S3GuyDg z_VzUIjoxJIY9--XmHF`*R>ygRmH8>^?%Wbw4Eg!_x`u`{(S`@t?bYtm)zi}}_r&i$ zT|aVuV=&EfpkmVEB_B}<3AN+LnXx3-S*a=bDJ&R%P|L!^Gut4+P**o-dD)+nlXIET zj}9M9tKCI@;_TU7SV!D*O*6Z8*F7!j;OXeBtgOZeiL!e3bx)Gz7N21G{SWfh)YP1R z&&|apprpi?nwt7$#{2cVcg0CI1n*kDfAFdQpUWF%9IT#Q-P&7j&rtj1$;^090sG%S(}P!< zm(OsjA3Abm-4oy6DsFDmI{R)4#Kgvy`Tv>K{BG`lJ9d+t%EgOS-AjT;t_Ed^`Y-*; zJ27u*-qzkurLL#oKBQ)NYgS*ZU>yTx(f_H6Ys;L-4jbz9SH_M5H<*r&Y-6RXll{9e z_3UHK1-+6}2Pn$Jt+APR?@}K-c8rsY%jQFsYun40VR3ORpPybbcMiNT+Ii^V*-sQo zUS6I;z_P-Yty|f+xLPGj)(Z&=%N6Y+Wv*`+ zob0QhV`0HP?$>m^b?cV-PHE<&ODw_4i`hqyA3r=d`XV7dJ}4w)ZEe8HCW>U>KYxe5 z9PL}vKR)aUU7C2ENo`?a@nvY}vQt;iHd$F*9G51CU{B~^Q@HKl`5zInu|>}MbcSoS zyG$w^m`KXz;oN*x7cMqa?EK_!c!(NWS`uZkx}s_Z1_r5r zjr8;meS3Ll;|wh))4An;f2Zynm+*RcdcMik;ZyWqj5poQyJO#_CD|OURH~CFPmWDY z*v?P(ooL#6`c+zJWu;tqclYb!ll#?<968p9!&!Cq6FpYY(b2KKwUzcr9PbTB+cRgP zO)DI%-xZo->$et~R%j{~zqxzlF8*iA!Arh*N>|T)t_`lJkoooNS4M8`y3?mm*ZR!S zD!-}86{TPJ`Kjso_3elBIQ{+oQ(RY97A$-F`bc%qz9rwn7r3l991ySA$8sJUsPXUHSqqb!$K2iRsn_T*BRC=%gQvh>Xm8?Y`o2LSNr~vR6t$ zK|xYwqAOQttfzqc_?>;f^`(FBkU5&OPiTrQL7l%_1toTR>Gv7MfMuTDr)uwCbb4iP zy*NE6DJ^|DJp4%H5B#~6t?iZA&3lr3`1lU`2W4h%3(6W~+P;0eMa_AdGw+LA5(JNA zra5lagYirKR2r0`Tc_$)ubzB-(faMZqvscL+y1P~y;8Ea zwhm5}IZY+X&cMLEs~P9wP0fYVl=}G}AEaFSW$|DKzdpZCY6JGz72#t^8k19~2aCVH zbKvGfvX3R({QOwMqu|CbD<|hZ+{#pV@-f$~J?C1VUivFk_1JqxfP96iSXqIBqb zpB{NO1+K0b{~TWG#~ug}fRP1(ak*7x@~4R2idmoHY1PELl8m{c;SlPAsf zL=UF#USJzVY1r_&q2lzb>B&Bsd)e98Q+M$gN-HbXo5GknJ{mhZihiyOjGGyLCT^j( zgaz{cJHPYe$B*r`b>mux4z0QPqdzoYWhv8VZq(3~d60VuTRtKpLfP6HhgdfL)-8qv zjS!qSIFre|gvetqvsy{MmiTwPh2!p^~gL+Rq`dZ&A_d*n)#7*>udzt(9lq zvu@tZz{JEvQTFy$!2O3~jb$$R`T7oFgKKDLP;|d0ynX$;9!r`ce`lYk3fgws!AtED zIJPW!3T}U9?HwL3Obra9Eyb|1(XB0g@Sr(p4RxvC!r9SHq|Ud-ZqA){H>APEkM&h- zCyzX7r@4TT(AvX?58MCz_T$6DFK!B*(JeMop^?$s6FIkwi5<<^ZphF2X;1>PZTNwjQc%Mse|}pFZ()A^pcqOn7W;Y+jey9_j7vRaRH02@MVP zo}b+K^V8#SAT&l^#p?VQ5;AYzym|fpeX{s28(Uj)SVBTW8+v=Io1c!pN{{<9_wAU3 z`6Capoa1-sGc;b~Tpayaha(-v!nbRLZTxL^bn`c^oo4)!lB|^Jnc*X~ehbHUygSnt zzb!_W5`D@SE0AlaysmOJ4;B9r9oUO@{w7PELE=;`&ylNJ z5}dto5!Kbzl2iU(&OkJMvJOUoKp-UGfNsBam^ zl6Uo1oYsk4(Y~#~hGR>uuE(>_L)7tRYt#nu6uz{tU+q3V@iWfk%i{ZHV^`6q<)Y*4 zyn~`~z^S6oCGxM$`Sa3h0&LY5#hsUgwr`hNEty?bkav7dnRr*!gsOip#psi{*{1A$ERF;*COAJbU+t&OHr%h|t ztXZ5LVX!!P61YvU;?wo*I;Qd)eN-dw1d)4+qDU$w`;7@82_BKU9^L zm)pE!2vq^JVLdnSRNcWr#KXgbY}p6SJyA{e=!Ah>6R>((j3x59jKR7I6__3h2Fbo6iysYy?5_k z2Ed=LvGEZ%H%UA-RxYlvv;%&P4Gn96)(U=AOE8BE>f4DGOy%dCusenQDlH>3(n{~H zuq7omb#VAu+=hM~BO@+?K2Wa6MgTZb#-l(N-M+_D2F*J%GLlE$CB-86_wt_$sQ2r3 znmq^tL^P{(4#h@me)dep_2=g&(T}~R8UZ-!R^~T@8?f>4v^ASi>Pct7PCz4J7H8ds3*>W-?BE!|#(P0FYU z6bt;PC?F`>ayLJ`!?Y1@hq*jcSbM-Yqnb8Z|Tj!+hGiR+{g9T&an~;?k0UynIsRe)g`1 z=PdCAkFFgCaBh0_iskCntL&FJ7v^Q1yXim{y#FoNgnVM!EDylXX<%q*-=8)12j^0V zii+yX)D(-3jt-9f6|t^u_>4burvc_Jvzbubz%8Qg+_wn{3DJmn6%)g_3;@@udfq2) z;&fI?2?0JbR1BiCx>&%YiWvqXv&C1&KR?Vei0b69l$=$I@xD{&++;t9mYg9+nFWr%ub<1j@8Tp~##mO@`}g6{6oRrgYvH1O z=O>>>2%tBDhJR_evM%OX2c9`P?`ex4+BanzzP(B(ixZiv@x1yT=kAF0RA@YE*lDD=14`T&j$wC}hB(sp>ecQt?SO!%jYoxhXpS5? z;_{&?cE)CTDsZ(4ykUBzgWJU1ys4*W0~CUvKYxyl2ma`WWC$Pi--OF6`8jv@UwZi*w|dA zVc@a?J0dW5pT}6x;-WWzJueuxoz1l!QL(X10jn!sc|7?jOXT@7Gc(5|pTXm4d+{PP zIhnibWoIWNp!MRn^gt_DS0*f!OJ6z7%a<>)jd>3GD}ZQ&?nE^=tJRbRM%^ALv8=Os zd3!IRL4`#{1eBw6+O)=OtacluQrN;wiVr?rSzn)HX=#bnX0)q&i5F-%KlyFly0y%E z#>P!yi_51+8~*(HbD}Sr^aG~omd5rQ;@L@?H*dD>E4No_q4o6qt=VxlY2?pJpFvdH zi3j|q>baj67iR=fc7(g3vFr$A+$hi^FCaig+DNH&ljaL~;G%=T*`efMzkSONkj1W} z3hQOv4VsYp|Vm73JT^3HIX6;R*rMp@czBAgO>i$n2j>DKwpc0r|R5)e%xzf zYC5?5XU@&j^M>O?r!En41pVeG8^V}2TUl8J9lb8{d^xy~j&$cx25uomSv2PAz}16E z5~hubS_EJozpb#1jsL0dZ|4|3CEnuVViRCA(1cLz`(a#MOv+a`1-J9(81fBjN3GuuQqUTLXh%FUZef2*AZA>b+U>SX3mVVCPGn8!aGHjFM!)f5}# zPm8jd{?Z^RBXhk^1Sl9S+-g_xY_r`Dp!co&Je0$kw|?zEkHZb#oAO5yxL(Y9R!~-Z z_^$*$Up?@NF(LFK<0C0G_V0 zv2iln)HGhzXj&AXU}T-P%WnlZ-GP>2}IeChF?@pRX{x=Hb~*TQNB3;uiw6HoOoZdG2u4=@W;nqq_n>7>1n~{6iQ1Gi@J9IK7;c3T->y`Vrcl5 zXR({ZK^up$OL$})V$}A{#_4jl#3Z9E595xiFa4DVR`Xr>$s{KyM^XQ2X&USath)Gb zWq+|{-Bo$l{`$|K)BYU#i|3>HB;H$*m!5$kAvyWkWVG^qQ4}d2Sw~hva3OJIg42OA zs-lge^|orgy%`@reT?QQ2VIEeX8Bu8IHq~Cn?}@+9LY7KlgMBffBNvuduFVyLr#{Y zoLnf1Yw@WkQ5hNhU%!6UU<{n`R?Mqu0lTprI=D&BIb_ed&l-s@cZ-VFgD41J9{2S0 zw03l)gEZk*W3hJa+QgI>=&(&%8#6OA*PJ=|}5YCRM(XdE`DAU<#0xDo7# zNOIa;jy?Gs1WTdgs?6o4rldf!Qw;oPVdDb;h@D_GKEL*|;`qCwXfzfg4SD~W6+Zj1 zI{5y5Q4~|F*{{zX2c90l|Jf!L$_U_YAU{4nuDSlf`?qiNxynpzcI>PxgWf=74YHbG zBRrcot3o~mlOjuu6Cu?4b?45V00|Lzs7)xExYF~v+gWYFCQx+I$b-dPS+{Owf&_4( zHoarSraov5L8B_Fsw3~t0h%@x7?;G~xIuI2(j~}{G(eE{RD+cd9=v{f$q#C(fVemV z7_+*s?>=A#oOlWd38*L$l<624R6z=KO-v$iOQ9b#p-Pedf&Ceuo*wteb7JVj!*dZa zF?Ljg>qBO@L*NjNQbBtj92*mrDdiTWXPiQTx_srz8^~mlkBn^4mkE#o z*!?;>s&ecY11R>jh!s4<&1kdOA6IZbaW+sDrA#kb?BZ4pV{Aa%cK^{Y=XmB!)4O+E zC?C3x2eU~j0Gp7Kl8T6mx}226_2}Y{9fsSZm38HZdYj5Q=^>7GG-}EqT9c80=@hKIc&Mo~GEg##pz*1PQsRZc04>T$fo=V!4x^4rWC; z1eJJ5TR0)i;Z196#n~5k#Wgmn;1EC?R~F@zcJKdx761@#Nz#y}){O`Ws$ktYv4Xbt zj*cr~VTUU(Ea05I9i024p{;GdHfgcNrmTHuxigiaQW<1j{tUxO(eJgnUCH1 z7mj_-a{m1J_-oe$L`K`) zm*3{Lu}AW=M=EzcXg(HGKB_3lN;msQPob>OWpux}g;md}OCz6{q22mW72={u{O6)v zjf&C?RpX-M-STix5dJ3~Mkhfv_-*>`>HO-2n(BIi&xNbGY6)1@6rY8N*LarMnORv> zyOPa+4yw#p&dd+-6b;FF;R*+hGrQlmqc&Pq^kIwO?-M!+SjCHiT({DO2IC@vb+7XipTuBu^Yy3fSYz#= z|DOI%K&g9NIRAm1#ak2(QyU>m@ZudgqUl+D`C&d&UP za)s3V7l>2m9GsN&PG{is#f$Pw3sZ3@9x@$(_wLJ!?$wVT{qw*=tGu}UpQ&fo0cf@{ z*d7IG!-fsG=jxi8L5LQHE?eP3^lT${+-+8DQA0%`(BgfG<;>!YEkzk}+2zZZ^WVx+ zg3{CZM5C_#Jz;35e)n)J_&$Y?kMCY?u5sn_4VRk+QOy?@7Y!=KP5>s$e7gkugx>Xf zTG~sO3g@2ucDZ=no&WPG-e9ndz}NTl^ED$9QKdmMi*{lQgW1s#DX%_cJ%>>Ly8>et zblKwerueLk3<>}s9TQUv5sV?QtX;RxxYATEZG*TG|F&(JIA_aL@%3IGPQqindp)X-@uS#mqT4@ke4}Dx8W3=hot>QsfVU6$aiuE-wt`u> zul~FAz^Q9A_k#)Xks1M;W?m_+8su$-DAN3U;ywIQf}V`>cCPLF@98=#4h{}df&k9$ z2Cn`)F%cb|1C`+r2zq7e!AtubZyr`tQ@asS2nnnH-8-YvM|yV;TMsoy@+f*s;#^B! z7}bKlv#{OVWWTPyzUrw{yyPh;DJelGGf3S@J{F*_!J#6uEkEafKM{D75(I0)hQOXG zPcN_J8kk?-Dg63DhU)-6!uMVnwSvc1?KQF#qh0$gOGrJ3 zC8yF4_!)&Jbz98N%?%C@Q*%X!-n%CxVO~|3uPtC;OMG1CZTJC=W5-m1_K0Dap3ah> zu{NV^0>uISGqk(gz<>4MR?r7Sm$LKTOTWa1d-5Z@3ykA@Rspc{euESD)?C;=`QwLP z?(wbn3ksS*2D);zo94c~vY+?)Qolx*lSW%xn?m#>bTHDzRJFC4!1Yt4?deZF^*7CO z1pt8<6LS4J2eg5Pk@MCL4q-qRgW#I^q!076zYd&!xy3=n z+vn&eEQ^+WZffdA7?;gUDAFz;tJ$Cig+bHA2`BAWVgLS)18GC=4?*TftAHtbUe>jr z6Th~!w6q>XKPAWBd`|1>UfSH+@*62xl-P9Hhz@}H-PrwyKmseIsXsbI^ zKb|r)+<+b5g7pW}XUYCxwgtPlb^iu7wrzVvj%h)d-{(2LmQoFKCX9J&d!gUV5DhK! zmI!dTj*m$#HiNkTR$|R1@hP}bczJnWL$C)P`114TF8%wn-ipM$y0VTX$t)QG1S#9r zFEGEP7m9Lo!@;*R-~vK!Y=&|~j(Vj0NTm|wE2wUiAe?#I!N$A15s=+)#xbHmi&23}7RS z!NUbgr`6ZjZ*FbXytIH_8S~=So-6PvVSSB#tdXhs2`!x%TSVaVN{7PG`|wov8snjyhRV&NcnFri#NgTEwHYmVFk`~XAi zi=pf3=z?&5D8$Tw9pYW{7fsRo*BBehM>M{9M~7Or+h8Nj=%oUqqLc+dT z;ASWLD;Z!y5F2QDdHHqa8Dr3LZ(rX=LY@ck2`T$Lcfc)=K?MX}rUI8RdEzSv;&cAO z1u1-*kcfz;>wceEyTew$rv~_pOHQdXr5+Ew?A*Y?nyTmnMriRzaNhB}aX6Txvf^RM zl77;CUyo!%kX3-<$i~io84Vz)X^>w=h67abhToH=#la zEW`^?W2N`}RD;|i2&h17hp;UQ*4I;DoSF*|FN;J+7EBM+a@(XiZ$(mMK!PEoQ-wDL zU%h%fHQjqdW_fN88+|C@XIRR?FJE*=eNPPWO~IidLKb!tr0ymte><8iDE4!9H0#z4 zKO6{9#S()J$71oMC!mmoLFpu7E)ivegM*u^P`|O1t*9%I0wSRisaRU_)vx-MQ!*fN zBT^9#GrxHr+Xj{{g+k;H2(ec0XlQArsl4D6OEdVO{}Qzt#AgjfOvgxla`(>$!bGuB znE~xD-CD|A>)$B1~7f<`i(=EKzE2-4F&jwD>JWR+vHzVMmG-+gE4=D2j|Luw7ehr z`ZWV2k=Vtkj3FpuK}~;Fmuqi`8{53NDF@c^40nBxeZS+)FdRKR?brE+;?2#?k`qyu z>rjwqW@cdBmNn0#$Ag}2rcj_Fz<&xuIa9kebTK?6Bm+mKb6?qZ2GOWEMbB{qJau7V z;pZp4#=FH7_U&uGp{ASQl}QNF%q3@B4OI-j(h%{cfEb^(kATeP}n~7^z<181<}~kQXhmxM5IsM zJK#63v7Qqg%=LZoNvJjI&`5xmM7qM{&b-rDFF_%B4e(3)jIjXy+p6KrYbZqVSY4S4 zl>Ykzr5YyPjth6Be=JN-ize6aSP#Q4r|^mbwIN&c>Roh>Hck`eH!Qz<%WT(hwgfz% zyPa4ShiF1O=ON`cuWv5;=_T1b-tfZ@3l+1N1~3Bo_21$!3tBH1I6sm}AtCit6qpkv zy#N{adg|U|dYtfGnJExGvOmsMdVD_t>Q$xM*&NA{y_Smt_dL>P_tf8#f&vCyjhn)4 z%ex_}C?y@gT0m-unWU@Bij8J$W6l*VJkw2Flf}P(NmK_bK%+a$QT6E2KICh@_U9HA zF`>Jqy6;k=hC4a==`lB;g~N&Wswyg9;P_)3Hh%v6RC7{b*#Zd_p^&Evwr)^gU}HSP zj!CuBh7ITJOpp4muy?QZ_qW;XdkVl9zmAL;M(rsmkBp6_p^y+m=Z7dhEwIrPo}08x zn?zq#pGW~X&vS*b7{#&ucm|MIXE`X&AtClm1SQZn9)EO|la+m47Z`YZpC|pcZQGzw zry1NrEqwmzGYSJ#i5pQj*uuRS`3`Qe*k$~49@R_w%mJ~ke?zB4?5&-g)}t>F1E!&& zLE+*gkBosx91g2Y1yiED!0_m37!H;I;tVXjipt5mPI8tPEFL@@yUEbT9KyoKS|1LS zk_@Lu-QMcoW#R4gmK2vL$7a2Ed8NH8N64WwW!v2Mqog+C zTJa3CtFlEkhg$V&)2<5avDv?Wf8LjeLs~F}u~Y{2Ln%y>XhI+ zghR4sOE5eZpS-ng&@Cl73y>6z)>6~X{`6^ETuLXanGd~2`y(lF0sjClBw_a8r?&qN z^jY}1H7F}#jrx_95uYVHpM>U!K!d30KPcERI;rAg*sh00My_XMVoHGUP-c-jZ~WEk zz7P(h`)KDz$aY&0-y!*wRAo=oh`9C2d7-ZRJ;v&5!GWGM3Sd>EqJLid0)6DzG4Ywz z!p^4?Jq6)_E;fh{Xk8o!jnLeXhVl--P!$Lf;3y2}WBAi!FKHQP`)w~1cSc_O896ke zo0eM$blLfrzQ!2G2$qTN&})5ILij2O)??IUe*1d#0Tcq_s6*t>LaqY&L#w1!Z(G*6 z;pxmm>+9L8Mp4^MDGdH6>SDWl5%=0#JEY84hr9{ncArE zi@?o7Nzh3O%_`~B($YH1kptZVh)P;geK0j>)V3Q|gusE7uKV}zA2eS^Z1fQPu47yM zVDNAO z)kdA30HQjcGkwGB+>Z4=3pdIg>~gZRrKVa0sfD+3Ik)KLtlS8VilPVjTn89|XS|_v zMX)9A=sPKHaP#nu>k&*e>dl$Gy+^t1LT=~NzrQE8&(z$T64CDJedH-l>LtWUTNvBK za|R%bNKE7evCeuc6R;t3vGUY59U~PLDx7{+0IR61dz?OaXxIBw6u{{&e#)fGhUVJ!>tzV{ zxb&6=Z**RQSj@G{A_A4u7GYK#Lz1AwDHWPuM}ZhgkSpw=wU7%@DgnYNDA%f}1r$!2 z<55=vZ^@krgM@)b$>QYXKCgeR^rXmbP|*$D`=+!=`FU zx}s~NTXwidnD=EBm9zQHLiY_r5j1RLcnI5YdFB}({Q)Lpd7PEQI2`V1c3bv&&>?*q zTv=JEws~fu80P^wGTr+FZmN1uHGo+Qr<)hQ!8n+B>l;mrtMikI=heHzlm~KZS3#SI^hR5FAjTwLV@L@P|kR*K2S8-Z!=T0Vch-Zi$rZV1w zxk60Obu7FgB#!#~w-m|*1e`DU$&J)W^+QP{Fjx>;&tBm(=YWV~CW7H4{fOMB(7Wg>UM*>} z<%~?moVa#~;#XdMBTkuc)e0zwov%jz+kfTd)=jhoN`YMwu<_B z2|RqYT_>&WW3g=1I@f2!C-_6oKzF$%@eq&!>t&hyRBJ*dAHSP3`12Ch5vIf?; ze~;kHV-CF@z4~g$me@~7?~16Bm>0^=395n}BKk!V&0-lhVxK;J+T2wY7DfvmAar>e z`|sF`UvJ;MX#jw8`!%LVEN?Id;(ekRHr%^;f-@8=m;q}Fy0|)onSV&@`mZb*=IdHU zbL|vLW8W<2yf$OZiB>e9_7mt}B*j=&RW)^n2QK4vw*ruTY&pSw`!*>j=yFG@b^aF4 zK{;o|SD}UQL$DVIQ87&(p4~beE11Y4E?$s+@s6<^;f2>lv?Y;#1f!!y7?MP_C6Q(s zy;=OzW9)VCdOBuC#>5?BQjV|rDXUXkcSj<8WkphuzpHjcd8?dNQmSLGC> z!IBH1pi;noih5-Q^VWSrU4kEh!A0mSPl?>)neoZPIY_l}gumPr5|wDgecZy?8v9qN zXbO%Hk@t{Jf_ZFG?Y2#@nnYQ}jf*uNV56UYdYxctu~Ld;>RZF-z*;F8-r4tRS41B; z=hssOq-{3q`ES0N7|9M-%T;QnwK2K&9Gq92JPzMCYig4BK_ zN6j1G(a_XvgdRpRPGpN=tE$2c7LB@GQ?pla2|R!v&?v{%=~PO-18z|(Yz_{x(2jEC z*k$AjQ8=!Em$gq0Lp>$J1ED;O@5QNSLOu{p6<)Z#?;$i^(TBCFSXU$57msx{-0hl% zH$%O5p+R?SFl%A>hHUD|@qgm~B-kVGjoayQwsh~Ao0&;4zi~iBg!aO>mn~?T8`93_ zXI<)&WkRBvxNl)$VMLk>%9^FK(K`s0AX55x%fwvdF_9GwY`&|!2l8J_8HhmAoSvRm zK6EH}cHC|Qx0&(_PLuYa7Mr6d+sdQb#IE3xZIh7D%GdO|LdzuS(kn?q&k!d_97Eov zmjWzCB0g~D>n#IUgf~c*&_O3;Zz#60%YM{;X8TK_9*}Qc(Zs#y3=tqvYyFO9PP}XA zrd#%&zt?&3y+`65Lqk(jvm2q+IWM7Y{g*d${lEqC5sI-Dr0ocL0b#;zg+AwDq^Gy( z=X%9;%`iPT-|6kW_4>7Q_?^9VfpyJG=wpXql|d0l7P$p-Z|e9*AXMC2cx0 zmB)|wtEi|~hAv;fxy%B7^a0>|y%rYcxDz&^F_3Mf22l>|FN1)N`_57jXVwyluSeS-GM9WHT zuezR=`oh-z7m>c_0QDyPxUs3J%(-WW2g-xl$6JVvxX%o!qcy14v}k;&JhKj11ssGe zSa=<(ZQgU?k=PH$oCnk6z~zq_Z0DMTi2*}X1p`UXpFhW$q^4!GveAaPgsiRQ=%p&B zE?UAVc(`?7?V`Bf>&G@yQ*i`E$9`T%LeoK6%Eq8n8*JGDWT12-*1bm5SLLApq9j2E zIMZ;$B~`D62qaz_*1LG9ZtTMoVAiD=6%mc;y%>yU>Uq3%>UdOzJqTR)Fz*kmZ(I9nlpf3HW z+Ir-kq2#=IJ`l2ST~_d~aodPwsNkuS zEbg!I9tQX-z`SaJ7i^rILUa4yL$?)4L)A1T2`rGr6iId@KiAUIf(Y^=i%fpt$`$IH za%X697)JLYg~J3Jc!as(c~KHei+Dr1mAY;Vn#lR3}Nvq1;qSsZk1EL0UiNN?%pSUdk7H6mV_36 zqvnyMu0hH!2?@qyNfOqIG-&rnP|33U-<4SM0oWs~Lv!mzEAlun<5Kv&(2-!i5WTFk zOBZq@q~&$o+}xN83CeMD`CPjZjhhevDCk7JB7;x>DcQ&GnVDmzO?rD{Y;^P$4WVoM zA0uvFY#_2tT~CJ#r7Dm=(W){F4e;cjqzZnW9Ub#+S2dC|Y{RLjGXRHvKdsFR5>UaB>79G9?(>-Zxtd29~l$KR1J?$O^tMTag%IUc6F;ypFUY545ixAceh^XSg}GLqL@!D@!Eso^SmT0M;^*yD1`{u|c(LHYGxD zhSc{3w@S!|%ux^bS66S|?B8t|VZfN&p^l~9;QRrlgk9!o02fk~_U&KMovb5O4?+Yq zDYXh#b02yO3oPoRlVwx|fa7|-1wlyNAl_KZh>!Bw!kZJH1pt9(+cmY%wkCs)oN%Oa zj>?h*HWIm7P>2NZFyOFo74RTgl4C_Fr+C}nK193y=$+5E7c(9tq*f7!d$PsYmGnbY zq1&CQr#NevF{i-!$cVFu;~nVT_<=(npl>9+h8ib*?hK-iz=k(WJd>60YjdXaZxW@a z;*Kr`fY78FAdWADlOtG5Qr(brwe-F02#fr_Rx^j1pO24JQ%g_(b$g_c`1sQE<*z8; zXG0bV^&RAf8nl;jaC~B7n3Qc8Yb0NWCv%i(0F@Bm^Y7XzVz=L?&#xr&vF+-LS}8EQ z5_<9r3dCjnjxyeQ5tfu>l>PEN@!{o|1j^|`%y7rFaHgRSYf3PSg*_WaI(Ri zIbi3_8@NnmwPAm$VwE<|BLiW%g*c9VE?>WWBZ_qX3j}pScBqP_NiZMzJ~Kx??l9Uo zrfFeN7`kdkhJ=Sh0p1D|paj#8YgL%k!~~)lIgpDOA}ybv)xb~32-6Y7?L)>TUmifK zTY1OiWdZw5bZak5gs50oRx3eKW(DX^toeDweFHD=RmAs_d(-dS*@_5kq3mChpa_kb z!<4ONaL#vUw#Bq-*Dga%+R-g9C$|CMct=?*hI*wtv85`5Htj5b`}Qp>J3AG$QLqjK z6SlEBZ|FH>wMIQH7igi)f}59j7h7BpCU;2CvNs)^^~8^Y|6*9s5kmXTOibz<8?&zM z6krWFC?+Phxb(X~#TBtuUAW-cA9QWiji3#YtR@_H3c;hHq_9U7;R2L418~+fjv;Eu zo{l61@_LIho%sfcIfo)CA=-TrfW)NI*)VjT8y*pi({0ky?C_dl<}_lmYjAYbC^I0C z7WM+ln;HaVsPX#Ff59IG<>k2`jUu0#d%`u-X%lMVVVLpmF#hc9?GGXO1%K;Vwfk`5 zqmur59DS0j2(f^tcERk-udL`SF%JAFeo{pxPwBhNZGR=d4TEf zC;ltgj8As#E6-MO6`!~b0^YU3=hEuGJH^aE&2Q1|bJl3oI^N8|gWpva(=qZk`j%C? z@c+#MaPQtVcMuIw;th+s-UC2+*ua`~kl*^kg_04Yd`%g{S3jZG{B+ zJ$p(LFTEE*?^U7B;9zIZ?@!d+wr}6ff4{z8Z(O)G-VD9uJ4A)I#>EzS&ieUs=u5J< zUgRL?dnj5>Akq`_RGDjDLv1P$nBcrCvCst!^#)o<#=>Nu>csf?TiDL*6Abk9j+9?e zOpaOPh+?D4QkF1ZVE@^O>*OPkOdOwr#HVyodbS_;LGozEGqgV_2AHBD!GdvR!1mJf zBbpd~P4uyZ7Jyl@aG1$Zk=H?u0}7`B!oV=p{nzdW+es{yq#+>Cimmii<%+8O&bT+J z;)7uk4gXzfo{Qpk-01J@u#AoF|3Jh?(z-F^{EugFJke`IAj%{@bOv#*_WvVIMssli zw~@<1)Tj{;KlN)cHdW(`7fb{Jq5DxtOqfhg4`P4;@B%^qEJ&hAwzgoqCL|^OH<0rF zJvS1mo&TU5lff&{Aea;lNFAb!s=}B}kw=t<3{8WzMj(9>k&cadBKCX1vX zB9Ngd%xUbtedo>^3Q1E#4O&Bz3gBGzkPeB&6={#ffGZ~jt)vu_xfZqFY#=cT7_$K7 zwZaHARLmiu#?Gg(3n1bLLE*dn!oe0<>goCUFrYpPNhIL7fO}nT-uoR|KZab9uekz_ zM@@m;8V;e@26!(;?hF^a!G{m`5NQGXo``fr7!o;tyY1I?#A~n_NDQ6CUU42sMhD|+ zp)XGwW@=QG^5E;pGwPUnxp~0X35)R~a|UGlDx2hS1&9Q_#PKD$^oS_^~c;O9gXa z=wu^;9)b!ACYe?6=x!`7&yE}e!Vs5@MqGLicEQ@3g&)Mk{@Rv6W&?1u>zKo@AegLm zOP+~BCTb|km@^VA2L#0|^bR&Y&wtB41o9Ce50RN@5EyR+hi6ny@FrF+Ms`Xul0jy> zfy@c<0Ffl1fv5uKI1%mBDM6nSHDk2Es*j80Gw^Ame!thY=M5czpTAts9n z=p93*_2Z{cQughfNFyVseaa>k3W>hbOC$iGpFD#qf(*${uYtgo-`r$w2+wy2=$(jF zBr7pJ?N-`1dBSy%q+~t*NQl>?n%fq}7!_d;XB_I2TJRn~T z!aulrmHA{{z$IT?hXGEaW@<_#Hj)>iVK4l><+aX+%e;TJtT?g0UON2n{=`!=E? z4*-Xs!2OK;T^`0TJTx>0ko^|G_5t$h2QW&oZ`ZD?IZii^YieHG)cOelG3_qdo$Qfg zAYrdD>h#}rp-C(OwhI5_)7)PtkPv|}vHhQr8Z_f)mHa@Q)M9XrJ4s20yJWRdI=a9L zGa+qgl1s<$xd%5P`(KDAY9-0?um^TIoJr<#NiX% zF7X#e_GD~nslW0J{Syo%HMwwa+<24}Z}KT~b92W&9zh_GDQF%_*ar~-fy=bY7+Ool z0{nb)cijOTMTbjZvi~)T-{U>DNlcq$BYt9TZLY7iHS8=VEt}oG;z&DDI;UD7b~_>b zxdd@pYjdWq#zV(9mwDx!IkAE(;MkbR^hHBpmxnNJo;lb!5V(3rUP=lP8K}lDM$UhS zH<%Nf)f779M>0eA=51|lRUbcoeC$C*Ma5mviBx&;P&61&Pg(5_mIH1}b@M+Ji*uG& zsTU_c&pYb95fHj2!4c)6em^tpsF;(q-FlAHwqF&Y3A7x}DbHVW+ONOj|4sY>Yl5)t z=BFWfLQy%1hofIj#mOv;T|8G%T(mGZQyrJ;_wt+n!SoA{7JSoRT|BsYyQaE&daB?e zw*xWHZX5jhtkg9aA6_CH|TY@-h%Q+00OC2E6nt;3Z0$ds$=?l%idsNU>w5dv2KeJN+O#bicqhitF!)e9 zG-T7-duw-ScD8Wz)vFGGc`oqR87a|mao^@Jp1uzTryWS6J({u|Dysu{u#FP^$jC?` zw93xcuj5@m*QR3DCL$K2dSc?@b4vTNb{9bEH7~VV6CE9G3-wYi?HhnmA7;x^E?=g4 zj9JyXI%h;LZ?rt9tTaXL!cX6F4_N?|?@%iGpYI ztkU&E(x1h}Qba$>dwWeBoSoYt0Gass)byTK{^gV3;d4prU?P9PwwpsKg;=aIBy6XL zrNjp^H1v_@o8mu%6QQNAfBi;sas>z~>f+vui1%WUpcjn?`pZV3bXy>S;W-cvD`=3c z9eYqb*L(>~7ST!TgaIq6_YY-#k#b!2aN%q$vu#ZFy?fo8?68PZI7#v_jFZySUm*qC zhu_FUDcfAJL~Du%&2E2`p&Wv}@LQ+~k)-NMy_@D2$3QMZ@R31FVAqV4#~25)jgf+u zol{iwB4FwJ_J5;)^ndHon#M?7L`>&keEt?kL*~-Y7x@=-lvbJ_zU#I_H**1)EkrqC z3^Iw<(N=3X0=2&5#S42>WqWv#ozI^~BD-3F&Lh*xb4$vWcA~fJZm-f7^fo(CR2L|5 zF=cx!>EGO;v$ZG{S_(Jy&^r0EcKkfIan~Jv&u^*NAyLuMsQ|JSWo3g4#!TgEJ00LtYMa6}p zHAxXrwNO0^F0Nv{Wg~@LSSyb$ptv2S7c#mjUY{`W;o)v9KGfGLNF*2W1{GT6Nxs?k zL*WsklI$y^S2xLNW>wbCMwji`sblyF!uvaZETnDEXia=U;>Q<7zPfW;Akn_2Cg1U}H8)-jO%7S^}rH8A) zXUkRU(OgoHyznX|sz?u}nU}40OdF-w#z?sgJl%?5*w=MOqi9e2`uOxX#a_Ef(jZtf zOv4|K{SIt82+}zli|*^PY5`uGX?3W`aPzo- zT8tE8`!-M%7l)#Em*P6|CO(tbk6_{kZ>HK;hd?$HMivphF{%8MjtozX6dLYPm%muL zGW!lLGER$_bY8Q&=aZ+XY=<#|)c^1t3uYGsme zZd>t^@;tPJO>-MghU14dw|a>${m@4;kSLaCKkZxo^DP~tV$DcVGQj$Pp!j|@;C%n}&dXh}5k)ChXhSwKmYW3Yse-_{D9S|>HsqBnK=_1p zL4GpH(C5b6eu5A)M}T+@z!B8h`ktN}1L+Vt0m;|W&>Y<&{)kqD6u~r9&ka(yhUxMjK^0Ews!{bfzYKz|&j=R5g zxH&#H_636YiMWzi-@>{-p-2BQOfM+@w~P|IuY_)A7Sz3&t;??wIyUkfc0>j~Ql$Wh&WJ4ND}D?@){sOuQ?~RH3ps-ONfL8 z&@?b$X>+m=M&J;!O`(Y3tqmRNfg=M{P9MfmQ#RqlMz7=n77wF@A>Kzj?GT%bt~tHN z6`@&VSXu%qLRB(N4&ePeP|DmU-t8>gxQIwwBawv2+~EEDbZ`ZUd4#+g3B+K;flP&? zNAP*X8+LW^Ql|Huz#bf-Zbx?Kwo>3J7p|EPg`1{dCcBYWknq^X_FtxPtB@rFe{hKW zfA<*6<&eY9l^NZg1{;CR#>TEkUe*^DE)2>~uL{f;CRHIlOAfCKFy z(Gw17qE`yRB1DXXP~-UMh^htr)D-w{E}izpYhLVFI7xBVO<~smmj4jXkYr1cHMK%K zYMGr?KS!&JG(Apg;-2F~MA4 zUr)hHOb`i9?iHa=8pkM*F%K|1h<*gV3&$}Nwu}E6e_Rh4@W8s@SSrIF1{PPTL6!?CV1K+EK=>?GK??YY?a`-SUj@ak%Wi?_r!+j7`RJ0g+Ie?%Q$!cM)q^_vC zng?GatNQI>j|aD5&1axy4IQ0tt5*$sev`L!al_9f!U6nHlK2Y<1WxC%B~fEOD`K%h zaP#>a{ksIiAOZRE^)%PP`ofEfewg3k&f|NN|B8qhjxSu0Ag?PaE@64Hp`aL|65ECi zHK*#-eYp>}>Qvo_shUBi-M#h-|No^`4SJ^rds_{=R{{!h5SDHp z9`%6>Gw!F5Hzvf-Uy1huG_O&_dBSE}$>VWZ1%*Bt9@9UjZzd(ZKogXN{tF@kVe-$w zmnSOd)|NFoBcFqmYlEPFWq0npL91=WL7#Nx$}*dL7p_PK!xhMLHdw5eEiJ_#XPbLw zYinv~)UUyZ7<3v=mcV6I*tU~^V-yq>xneHL0@k&%wpN77vG?0I%PwWKCtnj&`QJ4+ zy8?O;*pBp$sBNmMB&@Iiv|j=EvOIXw^78W)Yp-^@r^@$D&}R5K%2g&`N@&*Kmr_wl zoX7Fc*z&z6mJ6cPUsn-(N(8DXu{}LJHX$;h7-d{9SYhfR^rtj*T5fJ`wToFba`x{u zHM1KrGB$q3%gYM_Ot4}I)8Y{JrEHXVSvJ@I3aOCR$M%|j6RcJtJ-oh0JX9e zjHESg%N1)au`ijJne{N)RDsME6c)N*@w}|A4nO?maXdf(CF__X6r_`1PPfxQe%#B* zc!7Ghx+NrbQZ#+YXBQZS9tvjX8Z=PrNJ6Yv-bQ$(7JigWDK zR6P82neza#?tmu5tVhi5+1s}z@wsAmE``VNSt8|*=n(KYsd!NA zxuAB>V@CT5FVjpe+~fUX*_S+ooNz-0pn>0ovA#;=j!t5X!BvmoCn#Ry;^V>Iu;Ss9 zd$xh&09*d)vV>{Buwf zi{+jXhhD@FH_uh<7*ow;)s>qx$mmKgTHzu<#<`wiv%(*6N+_yp2$5fj;5CfV{xAH> z+t}-_;*hDJh9QXts2{2WVI0JJUWHb*4#K~Ypx;wL%DpPs;vjz=pFt_>2*V0Lx0G`? zh7u+Hox;KuWZ%Um$3kJd-iuS72L7RTn=X0wrgU8nE7U5)GDivmRGOoo!1z3Ld$kf? zY-FZb-18-8{@0qwnJMh>T8O2f2L#L<2CwZ@huyIgp1E&`e%l=g+u%Amxp=#?t{xy5 zA|fNTOiknT#-_%{!w@}|qalZ}c`uTD==4EdT`t02kZKqL38y(6@W*=^1R>h!f`d^p z=RCwBWN{|~f5S_xDK3IeV^9QG3j!Z?UnyWr;L%mg*-S>;i}`1mtWhwL3(?14si4H- z|I`i>A31$MOpZ)V?LBbdwSQ*DNg$$?0J2BE*6`#Ffyp9aD(t)>Z#`VWWO3nXi0&Ij zPl!X{3>yXoy9^X{aODs;6Om#fMF&5r9#+6KFDu&#?>C_cNInk!bQ=4qk-hy=>MH!Q z02dH&%mJ1JHRknQYRbxjIG~@A&xbt*$L)9>OC`QLEnxN}kxYUJ4TJvxut*4SCW->% zycGX4v6B!g6}A~P3}Qno$%K2aR4Sg8mbMs2L>*QH+^oES%XIbKk->zAEjLS@z&FII z(Rqrpr>%b#hLTKi^tO3J@bjYm>8LwcmIJa%*1C`r#XvPmOAfqhlwCv-O;5(+d3kfE z7%-O_m3I0fQWEy|!f{Cwq@8APrY}K_P>Vc((Pj&WPE=ng`q(L?nDJwWT1*kiA0k_+ zU`UjSC>W5&bAX7OPIT)K1_JZh$*-@sR}xJMzPJ{c87z8IUSQ6`5V;mC3|2dKa^#(a zF&O%HY}ev@r>W{6(KFZ4;Ut6$IwU8YILh}BoKg)zD?jq%puTcK8EnjP&B7hlujU^G z`T3bXYG$6^-v5M?Ac+$#Bpc-z)d_GHMH8xI+pzK6L*M`b-|_QgLS#>jl0-m&qm0<$ zP$7d$182ldeS={JRVuPw7_c3U)`4etgjATWh9bBIh&VBuA})qx!eDYirPLLT(t(GN zXT!s9j(%ur>RwcY7L@8>{fIV49gO!sdABHK5Q(@1#{?0{LtBL8C6(58*(#L1_jEOH_?!2!GB1`%fwHTqVP83y#1 zD5FYHMZ<@+2_pEs+`@AWuU=`R5SG@vDqdWMhL}w3-wRMhL!aKeNR~p%c?j?*WE9t2 z!n@0Aog>5}7J73FGD(QPABCF0CpGYz0D(HuXwYNs0*B?Wq)1*3CJE_{eYYPZZ|$;j z=?~zTTEtlib(v+MhX8T1Wqe1+hJlHOkJ%9lATVqeWsM~E1&N7Lqh2l9e}B5kj^#-q zHi+Ou6bxj#gg0w#oz59&FA+_km|o^Ks-BIeu(TLUR%U#BhB~iGBx}pjccbuvkOJPp zfj-KHRWPl(uThLbD~8N(%O)KUO zu%7mPwtaC?ozhD(o)0{II@Ql-^k-4oIle?a2UnNS@LO7?C&M@@{!X}Bf7rXymHr@b zmaFxVL9y!!A=dqgti#`&$J&%j6J&$Ed*I&*fzFKtkpc$E6Uu2|F>el7!;RspzH9Y> zq680+I|2w53i6SZ#=xLA-M!~<{S5MFDQbuRWOmER_wTXkj`}IZr3)Uz8Z%DJf@7w} zrpG|XqzD``mcpJx-;*Di;o;F7lj!pRWOx_trU{O`A_Y(!(M2)uwaiN z!HoLc9fHt2B3H$!NMguG$)ODgly}(^)`^LU<2bmWaOePqJfWJPBzNGzfp0*Tfe=ub zji{cmH$o`@zdBeY1dMV+%P)fD4@h#PPSK&0#;k@%s-wT38#OE39{^HCQLPE>pTqme zwk=(T0S!jkM1-d3x%TB)1T-KsUlD;Xd?>r1PZ^uj-h32XoWSzsCie#}U%$=^iSELV zJ<)$K(2SEKZ`6+_4b!wOYk*2fe;%8q*{_^F)<YYElBn5OmqkgfzvVY*XUkMGd@zA0X@ru?ghIe(G%nE2q=59wqjw{n-~E> zg8>w(gNkOrcZa7nsvjEQ6e3l?tT!|^#*GA9h=c(tN|5hpqDS~Q98m`vwsUY$Hi3AL zh_?@V0OC{v@vM3LI1N4av{E~LdLX9W3m)|T%KqV zS%8Sbe+W38ob$k{jb*+?T;F<}6-6e|Ed(thhIR670F{$82AmZXHgOWej6R*Xw8;Qb zh;!Jw=hCVRIFbo)g=vTA?(J{k9DsP`@|wNYU^u&sw}E@f%)6OiDZ=zEcIMz0l2)tT zC=tS=R(q+Z)=@d3F1pmQr+K5}n2Wl}@~tO1VZ^_Er~PEljjb$ORasYWXC3c7{{8eI zH9OH2`ryZxnsHyBuF#Z`V;w&|9Y09R*I$gFva?H^wRa6|KXq(|RsGbK#QWH>Z*Zq) zu+V71Wjh}R?J}HkPQ1qR*BREfw$B?CmtEa_o@Y>6pH*6q;$0F_6UoBE-K&j2{rQOk{XsCcRZesxh{b2v2#!HJk~gXin!XzTs!Lc?BvXJgG&g5Q za3zfET`1O|z#u6Ah&&?749u7Xyze?^Kt{+?-A1IPIAp3me_n-_5M@r+2b{=X2OdI95!UZu6#8yK6Dn@V`fay@$IgI;l)FqH> zcghR_!K=h)qps~_4j|}M6LW;{GUXeu5a33Y6a~{jLK{zyx&y|;qYy|CB3Kp*W{%9! zT6YvuPF)AsSaV&aw_2W=JzCKdni3=?F6H5MLQb(_UOJ#cy^>LL!l$ctDcW{6ZpoWB zZ6A(}NW8tvlX`zjx^NciLlQ8MZ5Wi*C}uuIux9!5Rzq4 z+VQ}7Z>rU1ajCO&3RHJD0_1H2c01Q-Y9S!Sv1ecE`@I5Pbv`{X3rqhs*m_wk)~qzd z=j-kc1hby_J>PmOI|}8{meUKYEX*su)0>WsN{S~xFfy;b5tb`&VL;V4e6=oUdC(V{ zZD1GsL;lZjrPZjWAvX(#R7!1baI2D2e)Sq_CFrbe!d8< zZ4&4qzGKJJkD?)flSxn~a&Kzfh|;49$~DLtm5bHvAoYTwyfSV*cyhx^rp?c94}bsa z+eNp=j3OZOMlM6WPfC&7PZVTIDhAYxMMaYzFw-{<$#yTZAxS5Wjp;wQtnxWjq-71J<`EwE|80I=)UoGrp zUJEF_*$e|JIgYWUp=UuNCy~gtSobxYTiR1QqqBTvLs7ZXIo;TjBM)}{M*3L^O;1Yd zYgfX`=dm)Ck;1m##%A$iXMWEY=;*t9zF<2)HSD92sMCDY-00Zk@ZP+SvvG0MH5DHP z&p&qcTE9+HO9F&|MPp6a7KQ;9wN`Fu0Cl9S$+US%4SKq462<#DF`3 zt@Q4_%R*62_a1YtikC^N&jjIe7;1J$XcaMju~!9TH&}dpY5T4?x#jWlp*b{???4u2 zc0(5 zHmM|jx}P~KUGn6N*@@t}_>H!y%_0NF1N|p@L|3vhe&u;9dguvBq`d%JA&i7yg~gpiFO_ z1m}-Db;4#jd3Wv%m|cPWFcd9LdvgXzF3M?wlw61^$b+jeE+Jv;lS4V33wQ%`YhmqM z5cac5^m zz~{P)K=LHgE)lx}%1VeNN!Bw-kVTV7YEAHzO#cvD@EpYMjJ}mH-KiR3$EJSRp^&?c zjy*lSkTP*jv`a!sLVW268Oj?%JB@GrOxS_Wf}3?fao++i1muwfq*ff_sr2oG$bbl0 z3{6d|@p*3nppd{YY=Ri%aLi&fQKa()1)iN%7;y#kE{02tzBGSwrcZsK<#SXO*YfH_ zpY+$A&utyeo3GN;`(D3~p6TQ`;&*OgzVw8Waw$F6mgUrN;CM-j{N;@AC<<3@G%fVGFi- zbb^JMs$pxDvccUFS;|5jT8c|aY2W6dp+~^ckE=Ag z+?S$6BV+~g6p82;YabnNFhsS_s;WA32Ih0?UmVw9H=JS_rqMnp8=5(&95D@w3Sl|6 zuw!afO$4XogqONilFgo~FZ24U{{HfB-!VB_a(h}T@*j32>`VW6*3u%&!pHk08~cgq zR+bV`C>?Ao1qE2ZSNPf;`D{5qCR%jiQg814lr@H)q2FaLv|s?}{B1R=z#zxujrRXn z5y<}zj`^QY85@4W8qROL28vJrb~ACjI01M?@~7;$G&xag{rhKow7;DFKf$TpVK6Ri za&3t7nu3;)=$I#7PhsCc1%}&}F3&DF1IWLC&aox=2grBwV+JFDqewFRKM(dlk=z)A zXW%48|8`Fy6ePrdq-h6d*nh(SRuJ49l8UrqY~Td;gUl#%6qtkvj5nyBH4phi5e}uk zxOp_f?(su9?wZ1dP7vk7y8?mDp5F`ex6;!sogcM>ra{V8WnU?DJE)SI`i%KCaVlcJ zj{Id*39NUA~wJ;MnMP_S+tZODbUz!LhJy| zo2_>e1Uo5es}Tsa2kJj!_{7~Wqajc_131PFP~sDofOHVM<{(>-@TwJ1yF0?wh5ars zb)SU=?zt0MvH_Q9e23=4p3$d>V608Gq~=Co$x@0i&(I+?pIOZ*!8lL0%Qe^0z&}Ti z-A~k2PM&;-bpa(qZVMtvR2E!)h{b%4>U+QxG}8vCw8@n!YOO33_%!UJYmw#yWnc3j z!?=Nj&@d37P$lBtmBB0k#7N9OB_9J}WgQ}Czz?i6y@#u}7=5JlLua=dB7S->8-=!f zWMU%cLy>s6(o(W5(T@>|6u{vAFTyKVUPPNPHjMJ0hw^AIFKhY<$6BsQ((Qx-B2yUz z8MWA%m+-`3;hMTuuUbW}!orwDt==vKpEfohk_}0=CTIXqhl=AqKQwDg_aMkEXwO&NMdYVcY)rFdLh z$54WTNDDj}-VcQn0^EKTC~>IR0b}pQyvG|S(BJm$Pxh=YkcM$0p|$1hQ%;E`THrjo z@3=uYfFZ<|nF`=^$?N;@RZ%6{`{4SOFCGR^j8#X>skCT>e~M$g&CN;lc-J_wC;$oy zgCyV}#+%;36md1biwoSq+T^L5b^}|SXo%z=J4MQY?mNAMgS@pOP?OXYJ0O9MVAtq- z`r~l!1vt96gyUL|xVX5HPx#M^5Q$bn)`t8f>7wpWSoiD;LH&F=cP6g*$LXYUn9@?N}z~E zEq582lEB0@!0+J@@om_YB!i9uL+!HK@=bj8zX zWY6!uBaHP3USX|_3eboNf<88Y^GO?dRt&ex)Bxi-?NBp;# z3-92s+9PMO5_J&C&xCB}8Is}%*x@qyNYA=r>=P4a>}h#?&-i+DhqaAK0C%=@|Mi9I - + Scripting @@ -13,10 +13,10 @@

    Scripting

    -

    Trilium supports creating Code notes, +

    Trilium supports creating Code notes, i.e. notes which allow you to store some programming code and highlight it. Special case is JavaScript code notes which can also be executed inside - Trilium which can in conjunction with Script API provide + Trilium which can in conjunction with Script API provide extra functionality.

    Scripting

    To go further I must explain basic architecture of Trilium - in its essence @@ -33,7 +33,7 @@ we're onto something.

    Use cases

    Action handler

    @@ -48,19 +48,19 @@ by Trilium runtime so when we restart Trilium, button won't be there.

    We need to execute it every time Trilium starts up, but we probably don't want to have to manually click on play button on every start up.

    -

    The solution is marked by red circle at the bottom - this note has label #run=frontendStartup - +

    The solution is marked by red circle at the bottom - this note has label #run=frontendStartup - this is one of the "system" labels which Trilium understands. As you might guess, this will cause all such labeled script notes to be executed once Trilium frontend starts up.

    -

    (#run=frontendStartup does not work for Mobile frontend - +

    (#run=frontendStartup does not work for Mobile frontend - if you want to have scripts running there, give the script #run=mobileStartup label)

    More showcases

    You can see more scripting with explanation in Advanced Showcases.

    + href="Advanced%20Usage/Advanced%20Showcases.html">Advanced Showcases.

    Events

    -

    See Events.

    +

    See Events.

    Script API

    -

    See Script API.

    +

    See Script API.

    diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Developer Guides/Examples/Downloading responses from Goo.html b/src/public/app/doc_notes/en/User Guide/User Guide/Scripting/Examples/Downloading responses from Goo.html similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Developer Guides/Examples/Downloading responses from Goo.html rename to src/public/app/doc_notes/en/User Guide/User Guide/Scripting/Examples/Downloading responses from Goo.html diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Code/Scripting/New Task launcher button.html b/src/public/app/doc_notes/en/User Guide/User Guide/Scripting/Examples/New Task launcher button.html similarity index 83% rename from src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Code/Scripting/New Task launcher button.html rename to src/public/app/doc_notes/en/User Guide/User Guide/Scripting/Examples/New Task launcher button.html index 625fed737..dca84feef 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Code/Scripting/New Task launcher button.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Scripting/Examples/New Task launcher button.html @@ -3,7 +3,7 @@ - + "New Task" launcher button @@ -14,17 +14,17 @@

    In this example we are going to extend the functionality of Task Manager showcase + href="../../Advanced%20Usage/Advanced%20Showcases/Task%20Manager.html">Task Manager showcase (which comes by default with Trilium) by adding a button in the  Launch Bar  ( + class="reference-link" href="../../Basic%20Concepts%20and%20Features/UI%20Elements/Launch%20Bar.html">Launch Bar  ( ) to create a new task automatically and open it.

    Creating the note

      -
    1. First, create a new Code note +
    2. First, create a new Code note type with the JS frontend language.
    3. Define the #run=frontendStartup label in Attributes.
    4. + href="../../Advanced%20Usage/Attributes.html">Attributes.

    Content of the script

    Copy-paste the following script:

    api.addButtonToToolbar({
    @@ -45,7 +45,7 @@
             

    Testing the functionality

    Since we set the script to be run on start-up, all we need to do is to refresh the application.

    + href="../../Troubleshooting/Refreshing%20the%20application.html">refresh the application.

    Understanding how the script works

    @@ -64,8 +64,8 @@ });
    -

    This uses the Front-end API to - create a icon in the Launch Bar, +

    This uses the Front-end API to create + a icon in the Launch Bar, by specifying:

    • A title
    • @@ -99,8 +99,8 @@
      -
    • Here we identify a note with the label #taskTodoRoot. - This is how the Task Manager showcase +
    • Here we identify a note with the label #taskTodoRoot. + This is how the Task Manager showcase knows where to place all the different tasks.
    • Normally this might return a null value if no such note could be identified, but error handling is outside the scope of this example. 
    • @@ -133,7 +133,7 @@
      -
    • Since we know the ID of +
    • Since we know the ID of the newly created note, all we have to do now is to show this note to the user.
    diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Code/Scripting/New Task launcher button_i.png b/src/public/app/doc_notes/en/User Guide/User Guide/Scripting/Examples/New Task launcher button_i.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Code/Scripting/New Task launcher button_i.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Scripting/Examples/New Task launcher button_i.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Developer Guides/Examples/Using promoted attributes .png b/src/public/app/doc_notes/en/User Guide/User Guide/Scripting/Examples/Using promoted attributes .png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Developer Guides/Examples/Using promoted attributes .png rename to src/public/app/doc_notes/en/User Guide/User Guide/Scripting/Examples/Using promoted attributes .png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Developer Guides/Examples/Using promoted attributes to c.html b/src/public/app/doc_notes/en/User Guide/User Guide/Scripting/Examples/Using promoted attributes to c.html similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Developer Guides/Examples/Using promoted attributes to c.html rename to src/public/app/doc_notes/en/User Guide/User Guide/Scripting/Examples/Using promoted attributes to c.html diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Developer Guides/Frontend Basics.html b/src/public/app/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics.html similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Developer Guides/Frontend Basics.html rename to src/public/app/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics.html diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Developer Guides/Widget Basics.html b/src/public/app/doc_notes/en/User Guide/User Guide/Scripting/Widget Basics.html similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Developer Guides/Widget Basics.html rename to src/public/app/doc_notes/en/User Guide/User Guide/Scripting/Widget Basics.html diff --git a/src/public/app/doc_notes/en/User Guide/navigation.html b/src/public/app/doc_notes/en/User Guide/navigation.html index 7d41c668d..efc8c8a0b 100644 --- a/src/public/app/doc_notes/en/User Guide/navigation.html +++ b/src/public/app/doc_notes/en/User Guide/navigation.html @@ -246,13 +246,6 @@
  • Code
  • -
  • Developer Guides - -
  • Advanced Usage
  • +
  • Demo Notes +
  • Note ID
  • +
  • Internal API + +
  • + + +
  • Scripting +
  • Attachments