diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 6203d87bc..75c9d0dca 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,4 +1,4 @@ # These are supported funding model platforms -github: [zadam] -custom: ["https://paypal.me/za4am"] +github: [eliandoran] +custom: ["https://paypal.me/eliandoran"] diff --git a/README.md b/README.md index 265e10543..1ae82efbd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # TriliumNext Notes -![Docker Pulls](https://img.shields.io/docker/pulls/triliumnext/notes) ![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/triliumnext/notes/total) +![GitHub Sponsors](https://img.shields.io/github/sponsors/eliandoran) ![Docker Pulls](https://img.shields.io/docker/pulls/triliumnext/notes) ![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/triliumnext/notes/total) [English](./README.md) | [Chinese](./README-ZH_CN.md) | [Russian](./README.ru.md) | [Japanese](./README.ja.md) | [Italian](./README.it.md) | [Spanish](./README.es.md) diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index fe08afb95..0ea953d4c 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -1,6 +1,6 @@ { "formatVersion": 2, - "appVersion": "0.92.6", + "appVersion": "0.92.7", "files": [ { "isClone": false, @@ -1202,7 +1202,7 @@ { "type": "relation", "name": "internalLink", - "value": "ivYnonVFBxbQ", + "value": "YtSN43OrfzaA", "isInheritable": false, "position": 30 }, @@ -1232,21 +1232,13 @@ "position": 10, "dataFileName": "Note Tree_drag-and-drop.gif" }, - { - "attachmentId": "Bp5BCJRntpyt", - "title": "image.png", - "role": "image", - "mime": "image/jpg", - "position": 10, - "dataFileName": "Note Tree_image.png" - }, { "attachmentId": "DYf7wm3Yv6EC", "title": "image.png", "role": "image", "mime": "image/jpg", "position": 10, - "dataFileName": "1_Note Tree_image.png" + "dataFileName": "Note Tree_image.png" }, { "attachmentId": "m0KuVBZvGyzW", @@ -1256,6 +1248,233 @@ "position": 10, "dataFileName": "Note Tree_move-note-with-k.gif" } + ], + "dirFileName": "Note Tree", + "children": [ + { + "isClone": false, + "noteId": "YtSN43OrfzaA", + "notePath": [ + "pOsGYCXsbNQG", + "gh7bpGYxajRS", + "Vc8PjrjAGuOp", + "oPVyFC7WL2Lp", + "YtSN43OrfzaA" + ], + "title": "Note tree contextual menu", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "oPVyFC7WL2Lp", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "yTjUdsOi4CIE", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "OR8WJ7Iz9K4U", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "KC1HB96bqqHX", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "bwg0e8ewQMak", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "IakOLONlIfGI", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "mHbBMPDPkVV5", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "eIg8jdvaoNNd", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "ivYnonVFBxbQ", + "isInheritable": false, + "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "TBwsyfadTA18", + "isInheritable": false, + "position": 100 + }, + { + "type": "relation", + "name": "internalLink", + "value": "0vhv7lsOLy82", + "isInheritable": false, + "position": 110 + }, + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 120 + }, + { + "type": "relation", + "name": "internalLink", + "value": "aGlEvb9hyDhS", + "isInheritable": false, + "position": 130 + }, + { + "type": "relation", + "name": "internalLink", + "value": "wArbEsdSae6g", + "isInheritable": false, + "position": 140 + }, + { + "type": "relation", + "name": "internalLink", + "value": "3seOhtN8uLIY", + "isInheritable": false, + "position": 150 + }, + { + "type": "relation", + "name": "internalLink", + "value": "KSZ04uQ2D1St", + "isInheritable": false, + "position": 160 + }, + { + "type": "relation", + "name": "internalLink", + "value": "r5JGHN99bVKn", + "isInheritable": false, + "position": 170 + }, + { + "type": "relation", + "name": "internalLink", + "value": "W8vYD3Q1zjCR", + "isInheritable": false, + "position": 180 + }, + { + "type": "relation", + "name": "internalLink", + "value": "QEAPj01N5f7w", + "isInheritable": false, + "position": 190 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-menu", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "Note tree contextual menu.md", + "attachments": [ + { + "attachmentId": "8DX1hysz3JRh", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Note tree contextual menu_.png" + }, + { + "attachmentId": "GQv4tBf9VSON", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "1_Note tree contextual menu_.png" + } + ] + }, + { + "isClone": false, + "noteId": "yTjUdsOi4CIE", + "notePath": [ + "pOsGYCXsbNQG", + "gh7bpGYxajRS", + "Vc8PjrjAGuOp", + "oPVyFC7WL2Lp", + "yTjUdsOi4CIE" + ], + "title": "Multiple selection", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "ivYnonVFBxbQ", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-list-plus", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Multiple selection.md", + "attachments": [ + { + "attachmentId": "puanbWdFSfUM", + "title": "image.png", + "role": "image", + "mime": "image/jpg", + "position": 10, + "dataFileName": "Multiple selection_image.png" + } + ] + } ] }, { @@ -1933,39 +2152,39 @@ "mime": "text/html", "attributes": [ { - "type": "label", - "name": "iconClass", - "value": "bx bxs-dock-right", + "type": "relation", + "name": "internalLink", + "value": "BFvAtE74rbP6", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "BFvAtE74rbP6", + "value": "AxshuNRegLAv", "isInheritable": false, "position": 20 }, { "type": "relation", "name": "internalLink", - "value": "AxshuNRegLAv", + "value": "luNhaphA37EO", "isInheritable": false, "position": 30 }, { "type": "relation", "name": "internalLink", - "value": "luNhaphA37EO", + "value": "3seOhtN8uLIY", "isInheritable": false, "position": 40 }, { - "type": "relation", - "name": "internalLink", - "value": "3seOhtN8uLIY", + "type": "label", + "name": "iconClass", + "value": "bx bxs-dock-right", "isInheritable": false, - "position": 50 + "position": 10 } ], "format": "markdown", @@ -1980,6 +2199,79 @@ "dataFileName": "Right Sidebar_image.png" } ] + }, + { + "isClone": false, + "noteId": "r5JGHN99bVKn", + "notePath": [ + "pOsGYCXsbNQG", + "gh7bpGYxajRS", + "Vc8PjrjAGuOp", + "r5JGHN99bVKn" + ], + "title": "Recent Changes", + "notePosition": 180, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "xYmIYSP6wE3F", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "OR8WJ7Iz9K4U", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "9sRHySam5fXb", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "YtSN43OrfzaA", + "isInheritable": false, + "position": 40 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-history", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "Recent Changes.md", + "attachments": [ + { + "attachmentId": "3HsqEVy53S2H", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Recent Changes_image.png" + }, + { + "attachmentId": "dxoiP89lrRn6", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "1_Recent Changes_image.png" + } + ] } ] }, @@ -2050,17 +2342,24 @@ { "type": "relation", "name": "internalLink", - "value": "ODY7qQn5m2FT", + "value": "r5JGHN99bVKn", "isInheritable": false, "position": 80 }, { "type": "relation", "name": "internalLink", - "value": "CoFPLs3dRlXc", + "value": "ODY7qQn5m2FT", "isInheritable": false, "position": 90 }, + { + "type": "relation", + "name": "internalLink", + "value": "CoFPLs3dRlXc", + "isInheritable": false, + "position": 100 + }, { "type": "label", "name": "shareAlias", @@ -2259,6 +2558,52 @@ "position": 10, "dataFileName": "Cloning Notes_create-clone.gif" } + ], + "dirFileName": "Cloning Notes", + "children": [ + { + "isClone": false, + "noteId": "TBwsyfadTA18", + "notePath": [ + "pOsGYCXsbNQG", + "gh7bpGYxajRS", + "BFs8mudNFgCS", + "IakOLONlIfGI", + "TBwsyfadTA18" + ], + "title": "Branch prefix", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "IakOLONlIfGI", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "oPVyFC7WL2Lp", + "isInheritable": false, + "position": 20 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-rename", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "Branch prefix.md", + "attachments": [] + } ] }, { @@ -2458,6 +2803,13 @@ "isInheritable": false, "position": 10 }, + { + "type": "relation", + "name": "internalLink", + "value": "oPVyFC7WL2Lp", + "isInheritable": false, + "position": 20 + }, { "type": "label", "name": "shareAlias", @@ -2655,45 +3007,52 @@ { "type": "relation", "name": "internalLink", - "value": "GTwFsgaA0lCt", + "value": "zEY4DaJG4YT5", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "BlN9DFI679QC", + "value": "GTwFsgaA0lCt", "isInheritable": false, "position": 20 }, { "type": "relation", "name": "internalLink", - "value": "iPIMuisry3hd", + "value": "BlN9DFI679QC", "isInheritable": false, "position": 30 }, { "type": "relation", "name": "internalLink", - "value": "6f9hih2hXXZk", + "value": "iPIMuisry3hd", "isInheritable": false, "position": 40 }, { "type": "relation", "name": "internalLink", - "value": "W8vYD3Q1zjCR", + "value": "6f9hih2hXXZk", "isInheritable": false, "position": 50 }, { "type": "relation", "name": "internalLink", - "value": "xWbu3jpNWapp", + "value": "W8vYD3Q1zjCR", "isInheritable": false, "position": 60 }, + { + "type": "relation", + "name": "internalLink", + "value": "xWbu3jpNWapp", + "isInheritable": false, + "position": 70 + }, { "type": "label", "name": "iconClass", @@ -3151,6 +3510,83 @@ "isInheritable": false, "position": 20 }, + { + "type": "relation", + "name": "internalLink", + "value": "OR8WJ7Iz9K4U", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "wX4HbRucYSDD", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "ivYnonVFBxbQ", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "xYmIYSP6wE3F", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "YtSN43OrfzaA", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "9sRHySam5fXb", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "m523cpzocqaD", + "isInheritable": false, + "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6f9hih2hXXZk", + "isInheritable": false, + "position": 100 + }, + { + "type": "relation", + "name": "internalLink", + "value": "MKmLg5x6xkor", + "isInheritable": false, + "position": 110 + }, + { + "type": "relation", + "name": "internalLink", + "value": "qzNzp9LYQyPT", + "isInheritable": false, + "position": 120 + }, + { + "type": "relation", + "name": "internalLink", + "value": "oPVyFC7WL2Lp", + "isInheritable": false, + "position": 130 + }, { "type": "label", "name": "shareAlias", @@ -3168,7 +3604,16 @@ ], "format": "markdown", "dataFileName": "Search.md", - "attachments": [] + "attachments": [ + { + "attachmentId": "WkhcA4FN7sGX", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Search_image.png" + } + ] }, { "isClone": false, @@ -3289,7 +3734,7 @@ "wArbEsdSae6g", "9sRHySam5fXb" ], - "title": "Workspace", + "title": "Workspaces", "notePosition": 90, "prefix": null, "isExpanded": false, @@ -3303,6 +3748,13 @@ "isInheritable": false, "position": 10 }, + { + "type": "relation", + "name": "internalLink", + "value": "l0tKav7yLHGF", + "isInheritable": false, + "position": 20 + }, { "type": "label", "name": "shareAlias", @@ -3319,7 +3771,7 @@ } ], "format": "markdown", - "dataFileName": "Workspace.md", + "dataFileName": "Workspaces.md", "attachments": [ { "attachmentId": "V4TIsmtBh8P7", @@ -3327,7 +3779,7 @@ "role": "image", "mime": "image/jpg", "position": 10, - "dataFileName": "Workspace_image.png" + "dataFileName": "Workspaces_image.png" }, { "attachmentId": "vZSH2mOKzWBx", @@ -3335,7 +3787,7 @@ "role": "image", "mime": "image/jpg", "position": 10, - "dataFileName": "1_Workspace_image.png" + "dataFileName": "1_Workspaces_image.png" } ] }, @@ -3382,6 +3834,71 @@ "dataFileName": "Similar Notes_image.png" } ] + }, + { + "isClone": false, + "noteId": "McngOG2jbUWX", + "notePath": [ + "pOsGYCXsbNQG", + "gh7bpGYxajRS", + "wArbEsdSae6g", + "McngOG2jbUWX" + ], + "title": "Search in note", + "notePosition": 110, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "MI26XDLSAlCD", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "iPIMuisry3hd", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6f9hih2hXXZk", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "8YBEPzcpUgxw", + "isInheritable": false, + "position": 40 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-search-alt-2", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "Search in note.md", + "attachments": [ + { + "attachmentId": "vEq0g2DHEh3O", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Search in note_image.png" + } + ] } ] }, @@ -3629,6 +4146,13 @@ "type": "text", "mime": "text/markdown", "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "NwBbFdNZ9h7O", + "isInheritable": false, + "position": 10 + }, { "type": "label", "name": "shareAlias", @@ -4624,46 +5148,39 @@ "mime": "text/html", "attributes": [ { - "type": "label", - "name": "iconClass", - "value": "bx bx-highlight", + "type": "relation", + "name": "internalLink", + "value": "RnaPdbciOfeq", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "BFvAtE74rbP6", + "value": "XpOYSgsLkTJy", "isInheritable": false, "position": 20 }, { "type": "relation", "name": "internalLink", - "value": "RnaPdbciOfeq", + "value": "zEY4DaJG4YT5", "isInheritable": false, "position": 30 }, { "type": "relation", "name": "internalLink", - "value": "_optionsTextNotes", + "value": "BFvAtE74rbP6", "isInheritable": false, "position": 40 }, { - "type": "relation", - "name": "internalLink", - "value": "zEY4DaJG4YT5", + "type": "label", + "name": "iconClass", + "value": "bx bx-highlight", "isInheritable": false, - "position": 50 - }, - { - "type": "relation", - "name": "internalLink", - "value": "XpOYSgsLkTJy", - "isInheritable": false, - "position": 60 + "position": 10 } ], "format": "markdown", @@ -5100,37 +5617,30 @@ { "type": "relation", "name": "internalLink", - "value": "XpOYSgsLkTJy", + "value": "RnaPdbciOfeq", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "_optionsTextNotes", + "value": "XpOYSgsLkTJy", "isInheritable": false, "position": 20 }, + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 30 + }, { "type": "label", "name": "iconClass", "value": "bx bx-heading", "isInheritable": false, "position": 30 - }, - { - "type": "relation", - "name": "internalLink", - "value": "zEY4DaJG4YT5", - "isInheritable": false, - "position": 40 - }, - { - "type": "relation", - "name": "internalLink", - "value": "RnaPdbciOfeq", - "isInheritable": false, - "position": 50 } ], "format": "markdown", @@ -5166,35 +5676,35 @@ { "type": "relation", "name": "internalLink", - "value": "CdNpE2pqjmI6", + "value": "BlN9DFI679QC", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "iPIMuisry3hd", + "value": "4TIF1oA4VQRO", "isInheritable": false, "position": 20 }, { "type": "relation", "name": "internalLink", - "value": "QxEyIjRBizuC", + "value": "CdNpE2pqjmI6", "isInheritable": false, "position": 30 }, { "type": "relation", "name": "internalLink", - "value": "BlN9DFI679QC", + "value": "iPIMuisry3hd", "isInheritable": false, "position": 40 }, { "type": "relation", "name": "internalLink", - "value": "4TIF1oA4VQRO", + "value": "QxEyIjRBizuC", "isInheritable": false, "position": 50 }, @@ -5239,162 +5749,6 @@ "position": 10, "dataFileName": "1_Code_image.png" } - ], - "dirFileName": "Code", - "children": [ - { - "isClone": false, - "noteId": "GLks18SNjxmC", - "notePath": [ - "pOsGYCXsbNQG", - "KSZ04uQ2D1St", - "6f9hih2hXXZk", - "GLks18SNjxmC" - ], - "title": "Script API", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/markdown", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "script-api", - "isInheritable": false, - "position": 10 - } - ], - "format": "markdown", - "dataFileName": "Script API.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "GPERMystNGTB", - "notePath": [ - "pOsGYCXsbNQG", - "KSZ04uQ2D1St", - "6f9hih2hXXZk", - "GPERMystNGTB" - ], - "title": "Events", - "notePosition": 40, - "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": "CdNpE2pqjmI6", - "isInheritable": false, - "position": 20 - }, - { - "type": "label", - "name": "shareAlias", - "value": "events", - "isInheritable": false, - "position": 30 - } - ], - "format": "markdown", - "dataFileName": "Events.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "MgibgPcfeuGz", - "notePath": [ - "pOsGYCXsbNQG", - "KSZ04uQ2D1St", - "6f9hih2hXXZk", - "MgibgPcfeuGz" - ], - "title": "Custom Widgets", - "notePosition": 50, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/markdown", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "custom-widget", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Custom Widgets.md", - "attachments": [], - "dirFileName": "Custom Widgets", - "children": [ - { - "isClone": false, - "noteId": "YNxAqkI5Kg1M", - "notePath": [ - "pOsGYCXsbNQG", - "KSZ04uQ2D1St", - "6f9hih2hXXZk", - "MgibgPcfeuGz", - "YNxAqkI5Kg1M" - ], - "title": "Word count widget", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "6tZeKvSHEUiB", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "6f9hih2hXXZk", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "s8alTXmpFR61", - "isInheritable": false, - "position": 30 - } - ], - "format": "markdown", - "dataFileName": "Word count widget.md", - "attachments": [ - { - "attachmentId": "JhM9NWfebzPi", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "Word count widget_image.png" - } - ] - } - ] - } ] }, { @@ -6839,72 +7193,37 @@ { "type": "relation", "name": "internalLink", - "value": "R7abl2fc6Mxi", + "value": "HI6GBBIduIgv", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "l0tKav7yLHGF", + "value": "Cq5X6iKQop6R", "isInheritable": false, "position": 20 }, { "type": "relation", "name": "internalLink", - "value": "p9kXRFAkwN4o", + "value": "BlN9DFI679QC", "isInheritable": false, "position": 30 }, { "type": "relation", "name": "internalLink", - "value": "J5Ex1ZrMbyJ6", + "value": "OFXdgB2nNk1F", "isInheritable": false, "position": 40 }, - { - "type": "relation", - "name": "internalLink", - "value": "9sRHySam5fXb", - "isInheritable": false, - "position": 50 - }, - { - "type": "relation", - "name": "internalLink", - "value": "u3YFHC9tQlpm", - "isInheritable": false, - "position": 60 - }, - { - "type": "relation", - "name": "internalLink", - "value": "R9pX4DGra2Vt", - "isInheritable": false, - "position": 70 - }, - { - "type": "relation", - "name": "internalLink", - "value": "47ZrP6FNuoG8", - "isInheritable": false, - "position": 80 - }, - { - "type": "relation", - "name": "internalLink", - "value": "OFXdgB2nNk1F", - "isInheritable": false, - "position": 90 - }, { "type": "relation", "name": "internalLink", "value": "bwZpz2ajCEwO", "isInheritable": false, - "position": 100 + "position": 50 }, { "type": "label", @@ -6925,16 +7244,345 @@ "dataFileName": "Attributes.md", "attachments": [ { - "attachmentId": "P4eRVtGFoHh2", + "attachmentId": "4YqnV7iugVCJ", "title": "image.png", "role": "image", - "mime": "image/jpg", + "mime": "image/png", "position": 10, "dataFileName": "Attributes_image.png" } ], "dirFileName": "Attributes", "children": [ + { + "isClone": false, + "noteId": "HI6GBBIduIgv", + "notePath": [ + "pOsGYCXsbNQG", + "tC7s2alapj8V", + "zEY4DaJG4YT5", + "HI6GBBIduIgv" + ], + "title": "Labels", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "R7abl2fc6Mxi", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "bwZpz2ajCEwO", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "l0tKav7yLHGF", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "OFXdgB2nNk1F", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "BlN9DFI679QC", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "vZWERwf8U3nx", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "oPVyFC7WL2Lp", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "GPERMystNGTB", + "isInheritable": false, + "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "CoFPLs3dRlXc", + "isInheritable": false, + "position": 100 + }, + { + "type": "relation", + "name": "internalLink", + "value": "AlhDUqhENtH7", + "isInheritable": false, + "position": 110 + }, + { + "type": "relation", + "name": "internalLink", + "value": "pKK96zzmvBGf", + "isInheritable": false, + "position": 120 + }, + { + "type": "relation", + "name": "internalLink", + "value": "WFGzWeUK6arS", + "isInheritable": false, + "position": 130 + }, + { + "type": "relation", + "name": "internalLink", + "value": "0ESUbbAxVnoK", + "isInheritable": false, + "position": 140 + }, + { + "type": "relation", + "name": "internalLink", + "value": "J5Ex1ZrMbyJ6", + "isInheritable": false, + "position": 150 + }, + { + "type": "relation", + "name": "internalLink", + "value": "d3fAXQ2diepH", + "isInheritable": false, + "position": 160 + }, + { + "type": "relation", + "name": "internalLink", + "value": "MgibgPcfeuGz", + "isInheritable": false, + "position": 170 + }, + { + "type": "relation", + "name": "internalLink", + "value": "m523cpzocqaD", + "isInheritable": false, + "position": 180 + }, + { + "type": "relation", + "name": "internalLink", + "value": "9sRHySam5fXb", + "isInheritable": false, + "position": 190 + }, + { + "type": "relation", + "name": "internalLink", + "value": "u3YFHC9tQlpm", + "isInheritable": false, + "position": 200 + }, + { + "type": "relation", + "name": "internalLink", + "value": "R9pX4DGra2Vt", + "isInheritable": false, + "position": 210 + }, + { + "type": "relation", + "name": "internalLink", + "value": "iRwzGnHPzonm", + "isInheritable": false, + "position": 220 + }, + { + "type": "relation", + "name": "internalLink", + "value": "BCkXAVs63Ttv", + "isInheritable": false, + "position": 230 + }, + { + "type": "relation", + "name": "internalLink", + "value": "47ZrP6FNuoG8", + "isInheritable": false, + "position": 240 + }, + { + "type": "relation", + "name": "internalLink", + "value": "KC1HB96bqqHX", + "isInheritable": false, + "position": 250 + }, + { + "type": "relation", + "name": "internalLink", + "value": "BFvAtE74rbP6", + "isInheritable": false, + "position": 260 + }, + { + "type": "relation", + "name": "internalLink", + "value": "bdUJEHsAPYQR", + "isInheritable": false, + "position": 270 + }, + { + "type": "relation", + "name": "internalLink", + "value": "AxshuNRegLAv", + "isInheritable": false, + "position": 280 + }, + { + "type": "relation", + "name": "internalLink", + "value": "81SGnPGMk7Xc", + "isInheritable": false, + "position": 290 + }, + { + "type": "relation", + "name": "internalLink", + "value": "xWbu3jpNWapp", + "isInheritable": false, + "position": 300 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-hash", + "isInheritable": false, + "position": 40 + } + ], + "format": "markdown", + "dataFileName": "Labels.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "Cq5X6iKQop6R", + "notePath": [ + "pOsGYCXsbNQG", + "tC7s2alapj8V", + "zEY4DaJG4YT5", + "Cq5X6iKQop6R" + ], + "title": "Relations", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "HI6GBBIduIgv", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "OFXdgB2nNk1F", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "bwZpz2ajCEwO", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "HcABDtFCkbFN", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "R9pX4DGra2Vt", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "KC1HB96bqqHX", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "BlN9DFI679QC", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "oPVyFC7WL2Lp", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "GPERMystNGTB", + "isInheritable": false, + "position": 90 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-transfer", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Relations.md", + "attachments": [] + }, { "isClone": false, "noteId": "bwZpz2ajCEwO", @@ -6945,7 +7593,7 @@ "bwZpz2ajCEwO" ], "title": "Attribute Inheritance", - "notePosition": 10, + "notePosition": 30, "prefix": null, "isExpanded": false, "type": "text", @@ -6954,10 +7602,24 @@ { "type": "relation", "name": "internalLink", - "value": "KC1HB96bqqHX", + "value": "HI6GBBIduIgv", "isInheritable": false, "position": 10 }, + { + "type": "relation", + "name": "internalLink", + "value": "Cq5X6iKQop6R", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "KC1HB96bqqHX", + "isInheritable": false, + "position": 30 + }, { "type": "label", "name": "shareAlias", @@ -6987,7 +7649,7 @@ "OFXdgB2nNk1F" ], "title": "Promoted Attributes", - "notePosition": 20, + "notePosition": 40, "prefix": null, "isExpanded": false, "type": "text", @@ -7267,6 +7929,13 @@ "isInheritable": false, "position": 40 }, + { + "type": "relation", + "name": "internalLink", + "value": "Qjt68inQ2bRj", + "isInheritable": false, + "position": 50 + }, { "type": "label", "name": "shareAlias", @@ -7879,7 +8548,7 @@ "47ZrP6FNuoG8" ], "title": "Default Note Title", - "notePosition": 130, + "notePosition": 140, "prefix": null, "isExpanded": false, "type": "text", @@ -7895,10 +8564,17 @@ { "type": "relation", "name": "internalLink", - "value": "KC1HB96bqqHX", + "value": "habiZ3HU8Kw8", "isInheritable": false, "position": 20 }, + { + "type": "relation", + "name": "internalLink", + "value": "KC1HB96bqqHX", + "isInheritable": false, + "position": 30 + }, { "type": "label", "name": "shareAlias", @@ -7920,7 +8596,7 @@ "wX4HbRucYSDD" ], "title": "Database", - "notePosition": 150, + "notePosition": 160, "prefix": null, "isExpanded": false, "type": "text", @@ -8171,7 +8847,7 @@ "Gzjqa934BdH4" ], "title": "Configuration (config.ini or environment variables)", - "notePosition": 160, + "notePosition": 170, "prefix": null, "isExpanded": false, "type": "text", @@ -8187,7 +8863,38 @@ ], "format": "markdown", "dataFileName": "Configuration (config.ini or e.md", - "attachments": [] + "attachments": [], + "dirFileName": "Configuration (config.ini or environment variables)", + "children": [ + { + "isClone": false, + "noteId": "c5xB8m4g2IY6", + "notePath": [ + "pOsGYCXsbNQG", + "tC7s2alapj8V", + "Gzjqa934BdH4", + "c5xB8m4g2IY6" + ], + "title": "Trilium instance", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "cbkrhQjrkKrh", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "Trilium instance.md", + "attachments": [] + } + ] }, { "isClone": false, @@ -8197,13 +8904,55 @@ "tC7s2alapj8V", "ivYnonVFBxbQ" ], - "title": "Bulk actions", - "notePosition": 170, + "title": "Bulk Actions", + "notePosition": 180, "prefix": null, "isExpanded": false, "type": "text", "mime": "text/html", "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "HI6GBBIduIgv", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Cq5X6iKQop6R", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "oPVyFC7WL2Lp", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "yTjUdsOi4CIE", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "habiZ3HU8Kw8", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "vZWERwf8U3nx", + "isInheritable": false, + "position": 60 + }, { "type": "label", "name": "iconClass", @@ -8213,8 +8962,17 @@ } ], "format": "markdown", - "dataFileName": "Bulk actions.md", - "attachments": [] + "dataFileName": "Bulk Actions.md", + "attachments": [ + { + "attachmentId": "cJTc66E2BRTf", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Bulk Actions_image.png" + } + ] }, { "isClone": false, @@ -8225,7 +8983,7 @@ "4FahAwuGTAwC" ], "title": "Note source", - "notePosition": 180, + "notePosition": 190, "prefix": null, "isExpanded": false, "type": "text", @@ -8338,7 +9096,7 @@ "1YeN2MzFUluU" ], "title": "Technologies used", - "notePosition": 190, + "notePosition": 200, "prefix": null, "isExpanded": false, "type": "text", @@ -8487,7 +9245,7 @@ "m1lbrzyKDaRB" ], "title": "Note ID", - "notePosition": 200, + "notePosition": 210, "prefix": null, "isExpanded": false, "type": "text", @@ -8521,7 +9279,7 @@ "0vTSyvhPTAOz" ], "title": "Internal API", - "notePosition": 210, + "notePosition": 220, "prefix": null, "isExpanded": false, "type": "text", @@ -8559,6 +9317,154 @@ "attachments": [] } ] + }, + { + "isClone": false, + "noteId": "2mUhVmZK8RF3", + "notePath": [ + "pOsGYCXsbNQG", + "tC7s2alapj8V", + "2mUhVmZK8RF3" + ], + "title": "Hidden Notes", + "notePosition": 230, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Cq5X6iKQop6R", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "wX4HbRucYSDD", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "YKWqdJhzi2VY", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "ivYnonVFBxbQ", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "eIg8jdvaoNNd", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "QEAPj01N5f7w", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "m1lbrzyKDaRB", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "x3i7MxGccDuM", + "isInheritable": false, + "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "bdUJEHsAPYQR", + "isInheritable": false, + "position": 100 + }, + { + "type": "relation", + "name": "internalLink", + "value": "xYmIYSP6wE3F", + "isInheritable": false, + "position": 110 + }, + { + "type": "relation", + "name": "internalLink", + "value": "u3YFHC9tQlpm", + "isInheritable": false, + "position": 120 + }, + { + "type": "relation", + "name": "internalLink", + "value": "qzNzp9LYQyPT", + "isInheritable": false, + "position": 130 + }, + { + "type": "relation", + "name": "internalLink", + "value": "CdNpE2pqjmI6", + "isInheritable": false, + "position": 140 + }, + { + "type": "relation", + "name": "internalLink", + "value": "R9pX4DGra2Vt", + "isInheritable": false, + "position": 150 + }, + { + "type": "relation", + "name": "internalLink", + "value": "4TIF1oA4VQRO", + "isInheritable": false, + "position": 160 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-hide", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Hidden Notes.md", + "attachments": [ + { + "attachmentId": "PrFEZeM6sRl6", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Hidden Notes_image.png" + } + ] } ] }, @@ -8663,21 +9569,21 @@ { "type": "relation", "name": "internalLink", - "value": "GLks18SNjxmC", + "value": "zEY4DaJG4YT5", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "zEY4DaJG4YT5", + "value": "SynTBQiBsdYJ", "isInheritable": false, "position": 20 }, { "type": "relation", "name": "internalLink", - "value": "SynTBQiBsdYJ", + "value": "GLks18SNjxmC", "isInheritable": false, "position": 30 }, @@ -8693,54 +9599,6 @@ "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", @@ -8896,6 +9754,284 @@ ] } ] + }, + { + "isClone": false, + "noteId": "GPERMystNGTB", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "GPERMystNGTB" + ], + "title": "Events", + "notePosition": 70, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "CdNpE2pqjmI6", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "c5xB8m4g2IY6", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 30 + }, + { + "type": "label", + "name": "shareAlias", + "value": "events", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-rss", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Events.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "MgibgPcfeuGz", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "MgibgPcfeuGz" + ], + "title": "Custom Widgets", + "notePosition": 80, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "custom-widget", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Custom Widgets.md", + "attachments": [], + "dirFileName": "Custom Widgets", + "children": [ + { + "isClone": false, + "noteId": "YNxAqkI5Kg1M", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "MgibgPcfeuGz", + "YNxAqkI5Kg1M" + ], + "title": "Word count widget", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "6tZeKvSHEUiB", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6f9hih2hXXZk", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "s8alTXmpFR61", + "isInheritable": false, + "position": 30 + } + ], + "format": "markdown", + "dataFileName": "Word count widget.md", + "attachments": [ + { + "attachmentId": "JhM9NWfebzPi", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Word count widget_image.png" + } + ] + }, + { + "isClone": false, + "noteId": "SynTBQiBsdYJ", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "MgibgPcfeuGz", + "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": "GLks18SNjxmC", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "GLks18SNjxmC" + ], + "title": "Script API", + "notePosition": 90, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "script-api", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "Script API.md", + "attachments": [], + "dirFileName": "Script API", + "children": [ + { + "isClone": false, + "noteId": "Q2z6av6JZVWm", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "GLks18SNjxmC", + "Q2z6av6JZVWm" + ], + "title": "Frontend API", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "attachments": [], + "dirFileName": "Frontend API", + "children": [ + { + "isClone": false, + "noteId": "habiZ3HU8Kw8", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "GLks18SNjxmC", + "Q2z6av6JZVWm", + "habiZ3HU8Kw8" + ], + "title": "FNote", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "FNote.md", + "attachments": [] + } + ] + }, + { + "isClone": false, + "noteId": "MEtfsqa5VwNi", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "GLks18SNjxmC", + "MEtfsqa5VwNi" + ], + "title": "Backend API", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Backend API.md", + "attachments": [] + } + ] } ] } 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 c7f03b730..f1ec27a4b 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 @@ -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](../../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](../../Scripting/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 eb077ddd2..303812e16 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 @@ -1,7 +1,7 @@ # Weight Tracker ![](Weight%20Tracker_image.png) -The `Weight Tracker` is a [Script API](../../Note%20Types/Code/Script%20API.md) showcase present in the [demo notes](../Database.md). +The `Weight Tracker` is a [Script API](../../Scripting/Script%20API.md) showcase present in the [demo notes](../Database.md). By adding `weight` as a [promoted attribute](../Attributes/Promoted%20Attributes.md) in the [template](../Templates.md) from which [day notes](Day%20Notes.md) are created, you can aggregate the data and plot weight change over time. diff --git a/docs/User Guide/User Guide/Advanced Usage/Attributes.md b/docs/User Guide/User Guide/Advanced Usage/Attributes.md index b1db8bdd2..72f8ae1b0 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Attributes.md +++ b/docs/User Guide/User Guide/Advanced Usage/Attributes.md @@ -1,77 +1,28 @@ # Attributes +
+ In Trilium, attributes are key-value pairs assigned to notes, providing additional metadata or functionality. There are two primary types of attributes: -1. **Labels**: Simple key-value text records -2. **Relations**: Named links to other notes +1. Labels can be used for a variety of purposes, such as storing metadata or configuring the behaviour of notes. Labels are also searchable, enhancing note retrieval. + + For more information, including predefined labels, see Labels. + +2. Relations define connections between notes, similar to links. These can be used for metadata and scripting purposes. + + For more information, including a list of predefined relations, see Relations. + These attributes play a crucial role in organizing, categorising, and enhancing the functionality of notes. -![](Attributes_image.png) +## Viewing the list of attributes -## Labels +Both the labels and relations for the current note are displayed in the _Owned Attributes_ section of the Ribbon, where they can be viewed and edited. Inherited attributes are displayed in the _Inherited Attributes_ section of the ribbon, where they can only be viewed. -Labels in Trilium can be used for a variety of purposes: - -* **Metadata**: Assign labels with optional values for categorization, such as `#year=1999`, `#genre="sci-fi"`, or `#author="Neal Stephenson"` -* **Configuration**: Labels can configure advanced features or settings -* **Scripts and Plugins**: Used to tag notes with special metadata, such as the "weight" attribute in the Weight Tracker. - -Labels are also searchable, enhancing note retrieval. - -### Common Labels for Advanced Configuration - -* `disableVersioning`: Disables automatic versioning, ideal for large, unimportant notes like script libraries -* `versioningLimit`: Used to limit the number of revisions for a single note -* `calendarRoot`: Marks the note as the root for [day notes](Advanced%20Showcases/Day%20Notes.md). Only one note should carry this label -* `archived`: Hides notes from default search results and dialogs -* `excludeFromExport`: Excludes notes and their subtrees from export operations -* `run`: Specifies events to trigger scripts (e.g., `frontendStartup`, `hourly`) -* `runAtHour`: Defines specific hours for scripts to run, used with `#run=hourly` -* `disableInclusion`: Prevents a script from being included in parent script executions -* `sorted`: Automatically sorts child notes alphabetically by title -* `top`: Keeps the note at the top of its parent's list, useful with `sorted` -* `hidePromotedAttributes`: Hides certain attributes in the note's display -* `readOnly`: Sets the note to read-only mode, applicable to text and code notes -* `autoReadOnlyDisabled`: Disables automatic read-only mode for large notes -* `appCss`: Marks CSS notes used to modify Trilium’s appearance -* `appTheme`: Marks full CSS themes available in Trilium's options -* `cssClass`: Adds a CSS class to the note's representation in the tree -* `iconClass`: Adds a CSS class to the note's icon, useful for distinguishing notes visually. See Note Icons. -* `pageSize`: Specifies the number of items per page in note listings -* `customRequestHandler` **and** `customResourceProvider`: Refer to Custom Request Handler -* `widget`: Marks a note as a custom widget, added to Trilium's component tree -* `workspace` **and related attributes**: See Workspace for more details -* `searchHome`: Specifies the parent for new search notes -* `inbox`: Designates a default location for new notes created via the sidebar -* `sqlConsoleHome`: Default location for SQL console notes -* `bookmarked` **and** `bookmarkFolder`: See Bookmarks -* `share:[…]`: See Sharing -* `keyboardShortcut`: Assigns a keyboard shortcut to open the note -* `displayRelations` **and** `hideRelations`: Manages the display of note relations -* `titleTemplate`: See Default Note Title -* `template`: Makes the note available as a template -* `toc`: Controls the visibility of the table of contents -* `color`: Defines the color of the note in the tree and links -* `hideChildrenOverview`: Hides child notes in the parent note's editor -* `viewType`: Sets the view of child notes (grid or list) - -## Relations - -Relations define connections between notes, similar to links. - -### Uses - -* **Metadata Relationships**: For example, linking a book note to an author note -* **Scripting**: Attaching scripts to events or conditions related to the note - -### Common Relations - -* **Event-based Relations**: Such as `runOnNoteCreation` or `runOnNoteChange`, which trigger scripts on specific actions -* **Other Relations**: Include `template`, `renderNote`, `widget`, and sharing-related relations +In the list of attributes, labels are prefixed with the `#` character whereas relations are prefixed with the `~` character. ## Multiplicity -Attributes in Trilium can be "multivalued", meaning multiple attributes with the same name can coexist. +Attributes in Trilium can be "multi-valued", meaning multiple attributes with the same name can co-exist. ## Attribute Definitions and Promoted Attributes diff --git a/docs/User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance.md b/docs/User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance.md index 28e1baf1f..46c09879e 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance.md +++ b/docs/User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance.md @@ -1,25 +1,38 @@ # Attribute Inheritance -## 1\. Standard Inheritance +Inheritance refers to the process of having a [label](Labels.md) or a [relation](Relations.md) shared across multiple notes, generally in parent-child relations (or anywhere if using templates). + +## Standard Inheritance In Trilium, attributes can be automatically inherited by child notes if they have the `isInheritable` flag set to `true`. This means the attribute (a key-value pair) is applied to the note and all its descendants. -### Example Use Case +To make an attribute inheritable, simply use the visual editor for Labels or Relations. Alternatively, the attribute can be manually defined where `#myLabel=value` becomes `#myLabel(inheritable)=value` when inheritable. -The `archived` label can be set to be inheritable, allowing you to hide a whole subtree of notes from searches and other dialogs by applying this label at the top level. +As an example, the `archived` label can be set to be inheritable, allowing you to hide a whole subtree of notes from searches and other dialogs by applying this label at the top level. -## 2\. Copying Inheritance +Standard inheritance forces all the notes that are children (and sub-children) of a note to have that particular label or relation. If there is a need to have some notes not inherit one of the labels, then _copying inheritance_ or _template inheritance_ needs to be used instead. + +## Copying Inheritance Copying inheritance differs from standard inheritance by using a `child:` prefix in the attribute name. This prefix causes new child notes to automatically receive specific attributes from the parent note. These attributes are independent of the parent and will persist even if the note is moved elsewhere. -### How to Use +If a parent note has the label `#child:exampleAttribute`, all newly created child notes (one level deep) will inherit the `#exampleAttribute` label. This can be useful for setting default properties for notes in a specific section. -* **Syntax:** `#child:attributeName` -* **Chained Inheritance:** You can chain this inheritance, such as `#child:child:attributeName`, where each child down the hierarchy receives the appropriate attribute. +Similarly, for relations use `~child:myRelation`. -### Example +Due to the way it's designed, copying inheritance cannot be used to cascade infinitely within a hierarchy. For that use case, consider using either standard inheritance or templates. -If a parent note has the label `#child:exampleAttribute`, all newly created child notes will inherit the `#exampleAttribute` label. This can be useful for setting default properties for notes in a specific section. +### Chained inheritance -## 3\. Template Inheritance +It is possible to define labels across multiple levels of depth. For example, `#child:child:child:foo` applied to a root note would create: -Attributes can also be inherited from [templates](../Templates.md). When a new note is created using a template, it inherits the attributes defined in that template. This is particularly useful for maintaining consistency across notes that follow a similar structure or function. \ No newline at end of file +* `#child:child:foo` on the first-level children. +* `#child:foo` on the second-level children. +* `#foo` on the third-level children. + +Similarly, use `~child:child:child:foo` if dealing with relations. + +Do note that same as simple copying inheritance, the changes will not apply retroactively to existing notes in the hierarchy, it will only apply to the newly created notes. + +## Template Inheritance + +Attributes can also be inherited from Templates. When a new note is created using a template, it inherits the attributes defined in that template. This is particularly useful for maintaining consistency across notes that follow a similar structure or function. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Advanced Usage/Attributes/Labels.md b/docs/User Guide/User Guide/Advanced Usage/Attributes/Labels.md new file mode 100644 index 000000000..514eb8132 --- /dev/null +++ b/docs/User Guide/User Guide/Advanced Usage/Attributes/Labels.md @@ -0,0 +1,42 @@ +# Labels +A label is an [attribute](../Attributes.md) of a note which has a name and optionally a value. + +## Common use cases + +* **Metadata for personal use**: Assign labels with optional values for categorization, such as `#year=1999`, `#genre="sci-fi"`, or `#author="Neal Stephenson"`. This can be combined with Promoted Attributes to make their display more user-friendly. +* **Configuration**: Labels can configure advanced features or settings (see reference below). +* **Scripts and Plugins**: Used to tag notes with special metadata, such as the "weight" attribute in the Weight Tracker. + +## Creating a label using the visual editor + +1. Go to the _Owned Attributes_ section in the Ribbon. +2. Press the + button (_Add new attribute_) to the right. +3. Select _Add new label_ for the relation. + +> [!TIP] +> If you prefer keyboard shortcuts, press Alt+L while focused on a note or in the _Owned Attributes_ section to display the visual editor. + +While in the visual editor: + +* Set the desired name +* Optionally, set the value of the label. Labels can exist without a value. +* Check _Inheritable_ if the label should be inherited by the child notes as well. See Attribute Inheritance for more information. + +## Creating a label manually + +In the _Owned Attributes_ section in the Ribbon: + +* To create a label called `myLabel` with no value, simply type `#myLabel`. +* To create a label called `myLabel` with a value `value`, simply type `#myLabel=value`. +* If the value contains spaces, then the text must be quoted: `#myLabel="Hello world"`. +* If the string contains quotes (regardless of whether it has spaces), then the text must be quoted with apostrophes instead: `#myLabel='Hello "world"'`. +* To create an inheritable label called `myLabel`, simply write `#myLabel(inheritable)` for no value or `#myLabel(inheritable)=value` if there is a value. + +## Predefined labels + +This is a list of labels that Trilium natively supports. + +> [!TIP] +> Some labels presented here end with a `*`. That means that there are multiple labels with the same prefix, consult the specific page linked in the description of that label for more information. + +
LabelDescription
disableVersioningDisables automatic creation of Note Revisions for a particular note. Useful for e.g. large, but unimportant notes - e.g. large JS libraries used for scripting.
versioningLimitLimits the maximum number of Note Revisions for a particular note, overriding the global settings.
calendarRootMarks the note which should be used as root for Day Notes. Only one should be marked as such.
archivedHides notes from default search results and dialogs. Archived notes can optionally be hidden in the Note Tree.
excludeFromExportExcludes this note and its children when exporting.
run, runOnInstance, runAtHourSee Events.
disableInclusionScripts with this label won't be included into parent script execution.
sorted

Keeps child notes sorted by title alphabetically.

When given a value, it will sort by the value of another label instead. If one of the child notes doesn't have the specified label, the title will be used for them instead.

sortDirection

If sorted is applied, specifies the direction of the sort:

  • ASC, ascending (default)
  • DESC, descending
sortFoldersFirstIf sorted is applied, folders (notes with children) will be sorted as a group at the top, and the rest will be sorted.
topIf sorted is applied to the parent note, keeps given note on top in its parent.
hidePromotedAttributesHide Promoted Attributes on this note. Generally useful when defining inherited attributes, but the parent note doesn't need them.
readOnlyMarks a note to be always be read-only, if it's a supported note (text, code, mermaid).
autoReadOnlyDisabledDisables automatic read-only mode for the given note.
appCssMarks CSS notes which are loaded into the Trilium application and can thus be used to modify Trilium's looks. See Custom app-wide CSS for more info.
appThemeMarks CSS notes which are full Trilium themes and are thus available in Trilium options. See Theme development for more information.
appThemeBaseSet to next, next-light, or next-dark to use the corresponding TriliumNext theme (auto, light or dark) as the base for a custom theme, instead of the legacy one. See Customize the Next theme for more information.
cssClassValue of this label is then added as CSS class to the node representing given note in the Note Tree. This can be useful for advanced theming. Can be used in template notes.
iconClassvalue of this label is added as a CSS class to the icon on the tree which can help visually distinguish the notes in the tree. Example might be bx bx-home - icons are taken from boxicons. Can be used in template notes.
pageSizeSpecifies the number of items per page in Note List.
customRequestHandlerSee Custom Request Handler.
customResourceProviderSee Custom Resource Providers.
widgetMarks this note as a custom widget which will be added to the Trilium component tree. See Custom Widgets for more information.
searchHomeNew search notes will be created as children of this note (see Saved Search).
workspace and related attributesSee Workspaces.
inboxdefault inbox location for new notes - when you create a note using new note button in the sidebar, notes will be created as child notes in the note marked as with #inbox label.
sqlConsoleHomeDefault location of SQL Console notes
bookmarkedIndicates this note is a bookmark.
bookmarkFolderNote with this label will appear in bookmarks as folder (allowing access to its children). See Bookmarks for more information.
share*See the attribute reference in Sharing.
displayRelations, hideRelationsComma delimited names of relations which should be displayed/hidden in a Relation Map (both the note type and the Note Map (Link map, Tree map) general functionality).
titleTemplate

Default title of notes created as children of this note. This value is evaluated as a JavaScript string and thus can be enriched with dynamic content via the injected now and parentNote variables.

Examples:

  • ${parentNote.getLabel('authorName')}'s literary works
  • Log for ${now.format('YYYY-MM-DD HH:mm:ss')}
  • to mirror the parent's template.

See Default Note Title for more info.

templateThis note will appear in the selection of available template when creating new note. See Templates for more information.
tocControls the display of the Table of contents for a given note. #toc or #toc=show to always display the table of contents, #toc=false to always hide it.
colordefines color of the note in note tree, links etc. Use any valid CSS color value like 'red' or #a13d5f
keyboardShortcutDefines a keyboard shortcut which will immediately jump to this note. Example: 'ctrl+alt+e'. Requires frontend reload for the change to take effect.
keepCurrentHoistingOpening this link won't change hoisting even if the note is not displayable in the current hoisted subtree.
executeButtonTitle of the button which will execute the current code note
executeDescriptionLonger description of the current code note displayed together with the execute button
excludeFromNoteMapNotes with this label will be hidden from the Note Map.
newNotesOnTopNew notes will be created at the top of the parent note, not on the bottom.
hideHighlightWidgetHides the Highlights list widget
hideChildrenOverviewHides the Note List for that particular note.
printLandscapeWhen exporting to PDF, changes the orientation of the page to landscape instead of portrait.
printPageSizeWhen exporting to PDF, changes the size of the page. Supported values: A0, A1, A2, A3, A4, A5, A6, Legal, Letter, Tabloid, Ledger.
geolocationIndicates the latitude and longitude of a note, to be displayed in a Geo Map.
calendar:*Defines specific options for the Calendar View.
viewTypeSets the view of child notes (e.g. grid or list). See Note List for more information.
\ No newline at end of file diff --git a/docs/User Guide/User Guide/Advanced Usage/Attributes/Relations.md b/docs/User Guide/User Guide/Advanced Usage/Attributes/Relations.md new file mode 100644 index 000000000..66f73e5e9 --- /dev/null +++ b/docs/User Guide/User Guide/Advanced Usage/Attributes/Relations.md @@ -0,0 +1,44 @@ +# Relations +A relation is similar to a [label](Labels.md), but instead of having a text value it refers to another note. + +## Common use cases + +* **Metadata Relationships for personal use**: For example, linking a book note to an author note. + This can be combined with Promoted Attributes to make their display more user-friendly. +* **Configuration**: For configuring some notes such as Render Note, or configuring Sharing or Templates (see the list below). +* **Scripting**: Attaching scripts to events or conditions related to the note. + +## Creating a relation using the visual editor + +1. Go to the _Owned Attributes_ section in the Ribbon. +2. Press the + button (_Add new attribute_) to the right. +3. Select _Add new relation_ for the relation. + +> [!TIP] +> If you prefer keyboard shortcuts, press Alt+L while focused on a note or in the _Owned Attributes_ section to display the visual editor. + +While in the visual editor: + +* Set the desired name +* Set the Target note (the note to point to). Unlike labels, relations cannot exist with a target note. +* Check _Inheritable_ if the label should be inherited by the child notes as well. See Attribute Inheritance for more information. + +## Creating a relation manually + +In the _Owned Attributes_ section in the Ribbon: + +* To create a relation called `myRelation`: + * First type `~myRelation=@` . + * After this, an autocompletion box should appear. + * Type the title of the note to point to and press Enter to confirm (or click the desired note). + * Alternatively copy a note from the Note Tree and paste it after the `=` sign (without the `@` , in this case). +* To create an inheritable relation, follow the same steps as previously described but instead of `~myRelation` write `~myRelation(inheritable)`. + +## Predefined relations + +These relations are supported and used internally by Trilium. + +> [!TIP] +> Some relations presented here end with a `*`. That means that there are multiple relations with the same prefix, consult the specific page linked in the description of that relation for more information. + +
LabelDescription
runOn*See Events
templatenote's attributes will be inherited even without a parent-child relationship, note's content and subtree will be added to instance notes if empty. See documentation for details.
inheritnote's attributes will be inherited even without a parent-child relationship. See Templates for a similar concept. See Attribute Inheritance in the documentation.
renderNotenotes of type Render Note will be rendered using a code note (HTML or script) and it is necessary to point using this relation to which note should be rendered
widget_relationtarget of this relation will be executed and rendered as a widget in the sidebar
shareCssCSS note which will be injected into the share page. CSS note must be in the shared sub-tree as well. Consider using share_hidden_from_tree and share_omit_default_css as well.
shareJsJavaScript note which will be injected into the share page. JS note must be in the shared sub-tree as well. Consider using share_hidden_from_tree.
shareTemplateEmbedded JavaScript note that will be used as the template for displaying the shared note. Falls back to the default template. Consider using share_hidden_from_tree.
shareFaviconFavicon note to be set in the shared page. Typically you want to set it to share root and make it inheritable. Favicon note must be in the shared sub-tree as well. Consider using share_hidden_from_tree.
\ No newline at end of file diff --git a/docs/User Guide/User Guide/Advanced Usage/Attributes_image.png b/docs/User Guide/User Guide/Advanced Usage/Attributes_image.png index 2ea269012..bb52b5001 100644 Binary files a/docs/User Guide/User Guide/Advanced Usage/Attributes_image.png and b/docs/User Guide/User Guide/Advanced Usage/Attributes_image.png differ diff --git a/docs/User Guide/User Guide/Advanced Usage/Bulk Actions.md b/docs/User Guide/User Guide/Advanced Usage/Bulk Actions.md new file mode 100644 index 000000000..e6a10a123 --- /dev/null +++ b/docs/User Guide/User Guide/Advanced Usage/Bulk Actions.md @@ -0,0 +1,87 @@ +# Bulk Actions +
+ +The _Bulk Actions_ dialog makes it easy to apply changes to multiple notes at once, ranging from simple actions such as adding or removing a label to being executing custom scripts. + +## Interaction + +* The first step is to select the notes in the Note Tree. It's possible to apply bulk actions to: + * A single note (and potentially its child notes) simply by clicking on it (with a left click or a right click). + * Multiple notes. See Multiple selection on how to do so. +* Right click in the Note Tree and select _Advanced_ → _Apply bulk actions_. +* By default, only the selected notes will be affected. To also include all the descendants of the notes, check _Include descendants of the selected notes_. The number of affected notes at the top of the dialog will update to reflect the change. +* Click on which action to apply from the _Available actions_ section. A detailed description of each is available in the next section. + * For each action selected, the _Chosen actions_ section will update to reveal the entry. Each action will have its own configuration. + * To remove an action, simply press the X button to the right of it. + * It is possible to apply multiple actions of the same type, such as adding multiple types. +* When all the actions are defined, press _Execute bulk actions_ to trigger all of them at once. +* For convenience, the last bulk action configuration is saved for further use and will be restored when entering the dialog again. + +## Actions + +### Labels + +These actions operate the Labels of a note: + +* **Add label** + * For each note, if it doesn't already have a [label](Attributes/Labels.md) of the given name, it will create it. Keep the _New value_ field empty to create a label without a value, or complete it to assign a value. + * If a note already has this label, its value will be updated. +* **Update label value** + * For each note, if it has a [label](Attributes/Labels.md) of the given name, it will change its value to the specified one. Leave _New value_ field empty to create a label without a value. + * Notes without the label will not be affected. +* _**Rename label**_ + * For each note, if it has a [label](Attributes/Labels.md) of the given name, it will be renamed/replaced with a label of the new name. The value of the label (if present) will be kept intact. + * Notes without the label will not be affected. +* **Delete label** + * For each note, if it has a label of a given name, it will be deleted (regardless of whether it has a value or not). + * Notes without the label will not be affected. + +### Relations + +These actions operate the Relations of a note: + +* **Add relation** + * For each note, it will create a relation pointing to the given note. + * Notes without this relation will not be affected. +* **Update relation target** + * For each note, it will modify a relation to point to the newly given note. + * Notes without this relation will not be affected. +* **Rename relation** + * For each note, if it has a relation of the given name, it will be renamed/replaced with a relation of the new name. The target note of the relation will be kept intact. + * Notes without this relation will not be affected. +* **Delete relation** + * For each note, if it has a relation of the given name, it will be deleted. + * Notes without this relation will not be affected. + +### Notes + +* **Rename note** + * For each note, it will change the title of the note to the given one. + * As a more advanced use case, the note can be a “template string” which allows for dynamic values with access to the note information via FNote, for example: + * `NEW: ${note.title}` will prefix all notes with `NEW:` . + * `${note.dateCreatedObj.format('MM-DD:')}: ${note.title}` will prefix the note titles with each note's creation date (in month-day format). +* **Move note** + * For each note, it will be moved to the specified parent note. + * As an alternative for less complex situations, the notes can be moved directly from within the Note Tree via cut → paste or via the contextual menu. +* **Delete note** + * For each note, it will be deleted. + * As an alternative for less complex situations, the notes can be removed directly from within the Note Tree by selecting them and pressing Delete. +* **Delete note revisions** + * This will delete all the Note Revisions of the notes. + +### Others + +* **Execute script** + * For more complex scenarios, it is possible to type in a JavaScript expression in order to apply the necessary changes. + * Examples: + * To apply a suffix (`- suffix` in this example), to the note title: + + ```javascript + note.title = note.title + " - suffix"; + ``` + + * To alter attributes of a note based on another attribute, such as setting the `#shareAlias` label to the title of the note: + + ```javascript + note.setLabel("shareAlias", note.title) + ``` \ No newline at end of file diff --git a/docs/User Guide/User Guide/Advanced Usage/Bulk Actions_image.png b/docs/User Guide/User Guide/Advanced Usage/Bulk Actions_image.png new file mode 100644 index 000000000..ea73dd92b Binary files /dev/null and b/docs/User Guide/User Guide/Advanced Usage/Bulk Actions_image.png differ diff --git a/docs/User Guide/User Guide/Advanced Usage/Bulk actions.md b/docs/User Guide/User Guide/Advanced Usage/Bulk actions.md deleted file mode 100644 index c87a42e5f..000000000 --- a/docs/User Guide/User Guide/Advanced Usage/Bulk actions.md +++ /dev/null @@ -1,16 +0,0 @@ -# Bulk actions -### Execute script - -For more complex scenarios, it is possible to type in a JavaScript expression in order to apply the necessary changes. - -To apply a suffix (`- suffix` in this example), to the note title: - -```javascript -note.title = note.title + " - suffix"; -``` - -To alter attributes of a note in a bulk action, such as setting the `#shareAlias` label to the title of the note: - -```javascript -note.setLabel("shareAlias", note.title) -``` \ No newline at end of file diff --git a/docs/User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance.md b/docs/User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance.md new file mode 100644 index 000000000..6c69aff5e --- /dev/null +++ b/docs/User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance.md @@ -0,0 +1,19 @@ +# Trilium instance +A Trilium instance represents a server. If Synchronization is set up, since multiple servers are involved (the one from the desktop client and the one the synchronisation is set up with), sometimes it can be useful to distinguish the instance you are running on. + +## Setting the instance name + +To set up a name for the instance, modify the `config.ini`: + +``` +[General] +instanceName=Hello +``` + +## Distinguishing the instance on back-end + +Use `api.getInstanceName()` to obtain the instance name of the current server, as specified in the config file or in environment variables. + +## Limiting script runs based on instance + +For a script that is run periodically or on a certain event, it's possible to limit it to certain instances without having to change the code. Just add `runOnInstance` and set as the value the instance name where the script should run. To run on multiple named instances, simply add the label multiple times. \ No newline at end of file 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 b848fdd8d..60306d76f 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 @@ -53,7 +53,7 @@ Trilium will then find our code note created above and execute it. `api.req`, `a In the code note we check the request method and then use trivial authentication - keep in mind that these endpoints are by default totally unauthenticated, and you need to take care of this yourself. -Once we pass these checks we will just create the desired note using [Script API](../Note%20Types/Code/Script%20API.md). +Once we pass these checks we will just create the desired note using [Script API](../Scripting/Script%20API.md). ## Custom resource provider diff --git a/docs/User Guide/User Guide/Advanced Usage/Default Note Title.md b/docs/User Guide/User Guide/Advanced Usage/Default Note Title.md index fabf9fef8..1b4e575bf 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Default Note Title.md +++ b/docs/User Guide/User Guide/Advanced Usage/Default Note Title.md @@ -17,14 +17,16 @@ And all children of "2022 Books" will be created with initial title "\[Author na The value of `#titleTemplate` is evaluated at the point of note's creation as a JavaScript string, which means it can be enriched with the help of JS string interpolation with dynamic data. -As an example, imagine you collect server outage incidents and write some notes. It looks like this: +Second variable injected is `parentNote` which gives access to the parent [`FNote`](../Scripting/Script%20API/Frontend%20API/FNote.md). -* Incidents - * 2022-05-09: System crash - * 2022-05-15: Backup delay +See also Templates which provides similar capabilities, including default note's content. -You can automatize the date assignment by assigning a label `#titleTemplate="${now.format('YYYY-MM-DD')}: "` to the parent note "Incidents". Whenever a new child note is created, the title template is evaluated with the injected [now](https://day.js.org/docs/en/display/format) object. +### Examples -Second variable injected is [parentNote](https://triliumnext.github.io/Notes/backend_api/BNote.html), an example could be `#titleTemplate="${parentNote.getLabelValue('authorName')}'s literary works"`. - -See also \[\[[template](Templates.md)\]\] which provides similar capabilities, including default note's content. \ No newline at end of file +* Imagine you collect server outage incidents and write some notes. It looks like this: + * Incidents + * 2022-05-09: System crash + * 2022-05-15: Backup delay + * You can automatize the date assignment by assigning a label `#titleTemplate="${now.format('YYYY-MM-DD')}: "` to the parent note "Incidents". Whenever a new child note is created, the title template is evaluated with the injected [now](https://day.js.org/docs/en/display/format) object. +* To use a parent's attribute in the title of new notes: `#titleTemplate="${parentNote.getLabelValue('authorName')}'s literary works"` +* To mirror the parent's note title: `${parentNote.title}` \ No newline at end of file diff --git a/docs/User Guide/User Guide/Advanced Usage/Hidden Notes.md b/docs/User Guide/User Guide/Advanced Usage/Hidden Notes.md new file mode 100644 index 000000000..615719698 --- /dev/null +++ b/docs/User Guide/User Guide/Advanced Usage/Hidden Notes.md @@ -0,0 +1,18 @@ +# Hidden Notes +
+ +For easy extensibility, a lot of features in Trilium make use of actual notes to store information as opposed to having them stored in a separate location in the database. This allows some functions such as AttributesRelations or even Search and Links to be able to operate on them. + +As the name suggests, these notes are hidden to the user by default to prevent cluttering the note tree and to prevent them from being accidentally deleted. + +The hidden notes are stored in the user's Database just like normal notes, but they have a unique Note ID which allows them to be distinguished from the normal ones. + +## Accessing the hidden note tree + +From the Global menu, select _Advanced_ → _Show Hidden Subtree_. + +## Contents of the hidden note tree + +Here is a brief summary of all the notes within the hidden tree: + +
NoteDescription
Note Map

This note is actually opened when the Note Map feature that is accessed from the Launch Bar.

It is possible to create any child notes in it without any additional meaning. For example, it can be used to store a list of note maps which can be linked to from other notes or bookmarked.

SQL Console History

When SQL queries or commands are executed in the SQL Console, they are stored here, grouped by month. Only the query is stored and not the results.

This section can be accessed without going to the hidden tree by simply going to the Global menu and selecting Advanced → Open SQL Console History.

Notes can be added as children of this tree, but it's generally not recommended to do so to not interfere with the normal history process.

Search History

Whenever a search is executed from the full Search, the query will be stored here, grouped by month. Only the search parameters are stored and not the results themselves.

This section can be accessed without going to the hidden tree by simply going to the Global menu and selecting Advanced → Open Search History.

Notes can be added as children of this tree, but it's generally not recommended to do so to not interfere with the normal history process.

Bulk Action

This section is used for Bulk Actions. The last configuration for bulk actions will be stored as part of this note, each action in its own action label.

Notes can be added as children of this tree, but there won't be any benefit in doing so.

Backend Log

This note corresponds to the backend log feature (see Error logs).

This item can be accessed without going to the hidden try by going to the Global menu and selecting Advanced → Show backend log.

User HiddenThis section can be used by scripts to create their own notes that should not be directly visible to the user. The note can be identified by scripts by its unique ID: _userHidden
Launch Bar Templates

This section contains the templates for the creation of launchers in the Launch Bar. It is not possible to create child notes here.

Theoretically some of the notes here can be customized, but there's not much benefit to be had in doing so.

Shared Notes

This tree lists all of the notes that are shared publicly. It can be useful to track down which notes are shared regardless of their position in the note tree.

This section can be accessed without going to the hidden tree simply by going to the Global menu and selecting Show Shared Notes Subtree.

Sub-notes cannot be created here.

Launch Bar

The tree contains both available and displayed items of the Launch Bar.

This section can be accessed without going to the hidden tree by:

  • Going to the Global menu and selecting Configure Launchbar.
  • Right-clicking an empty space on the Launch Bar and selecting Configure Launchbar.

Sub-notes cannot be created here.

Options

This section stores the list of Options.

This section can be accessed without going to the hidden tree by:

Mobile Launch Bar

This is very similar to the Launch Bar, but is dedicated for the mobile UI only.

Accessing it outside the Launch Bar is the same as the Launch Bar, but needs to be done so from the mobile interface.

User GuideThis is where the note structure for the User Guide is actually stored. Only the metadata is stored, as the help itself is present as actual files in the application directory.
\ No newline at end of file diff --git a/docs/User Guide/User Guide/Advanced Usage/Hidden Notes_image.png b/docs/User Guide/User Guide/Advanced Usage/Hidden Notes_image.png new file mode 100644 index 000000000..60c4c4802 Binary files /dev/null and b/docs/User Guide/User Guide/Advanced Usage/Hidden Notes_image.png differ diff --git a/docs/User Guide/User Guide/Advanced Usage/Sharing.md b/docs/User Guide/User Guide/Advanced Usage/Sharing.md index e23c50ee4..17c8aa475 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Sharing.md +++ b/docs/User Guide/User Guide/Advanced Usage/Sharing.md @@ -3,7 +3,7 @@ Trilium allows you to share selected notes as **publicly accessible** read-only ## Prerequisites -To use the sharing feature, you must have a [server installation](../Installation%20%26%20Setup/Server%20Installation.md) of Trilium. This is necessary because the notes will be hosted from the server. +To use the sharing feature, you must have a Server Installation of Trilium. This is necessary because the notes will be hosted from the server. ## How to Share a Note @@ -40,7 +40,7 @@ To protect shared notes with a username and password, you can use the `#shareCre The default shared page is basic in design, but you can customize it using your own CSS: -* **Custom CSS**: Link a CSS [code note](../Note%20Types/Code.md) to the shared page by adding a `~shareCss` relation to the note. If you want this style to apply to the entire subtree, make the label inheritable. You can hide the CSS code note from the tree navigation by adding the `#shareHiddenFromTree` label. +* **Custom CSS**: Link a CSS Code note to the shared page by adding a `~shareCss` relation to the note. If you want this style to apply to the entire subtree, make the label inheritable. You can hide the CSS code note from the tree navigation by adding the `#shareHiddenFromTree` label. * **Omitting Default CSS**: For extensive styling changes, use the `#shareOmitDefaultCss` label to avoid conflicts with Trilium's [default stylesheet](../Basic%20Concepts%20and%20Features/Themes.md). ### Adding JavaScript @@ -81,12 +81,6 @@ To customize the favicon for your shared pages, create a relation `~shareFavicon You can designate a specific note or folder as the root of your shared content by adding the `#shareRoot` label. This note will be linked when visiting `[http://domain.tld/share](http://domain/share)`, making it easier to use Trilium as a fully-fledged website. Consider combining this with the `#shareIndex` label, which will display a list of all shared notes. -## Additional Options - -* **Raw Note Sharing**: Use the `#shareRaw` label to share a note without any HTML wrapper. -* **Disallow Robot Indexing**: Add the `#shareDisallowRobotIndexing` label to prevent search engines from indexing the shared page by including a `noindex, follow` meta tag and `X-Robots-Tag: noindex` header. -* **Shared Notes Index**: For text notes with the `#shareIndex` label, the content will display a list of all shared note roots. - ## Limitations While the sharing feature is powerful, it has some limitations: @@ -98,4 +92,8 @@ While the sharing feature is powerful, it has some limitations: * **Protected Notes**: Cannot be shared. * **Include Notes**: Not supported. -Some of these limitations may be addressed in future updates. \ No newline at end of file +Some of these limitations may be addressed in future updates. + +## Attribute reference + +
AttributeDescription
shareHiddenFromTreethis note is hidden from left navigation tree, but still accessible with its URL
shareExternalLinknote will act as a link to an external website in the share tree
shareAliasdefine an alias using which the note will be available under https://your_trilium_host/share/[your_alias]
shareOmitDefaultCssdefault share page CSS will be omitted. Use when you make extensive styling changes.
shareRootmarks note which is served on /share root.
shareDescriptiondefine text to be added to the HTML meta tag for description
shareRawNote will be served in its raw format, without HTML wrapper. See also Serving directly the content of a note for an alternative method without setting an attribute.
shareDisallowRobotIndexing

Indicates to web crawlers that the page should not be indexed of this note by:

  • Setting the X-Robots-Tag: noindex HTTP header.
  • Setting the noindex, follow meta tag.
shareCredentialsrequire credentials to access this shared note. Value is expected to be in format username:password. Don't forget to make this inheritable to apply to child-notes/images.
shareIndexNote with this label will list all roots of shared notes.
\ No newline at end of file diff --git a/docs/User Guide/User Guide/Advanced Usage/Templates.md b/docs/User Guide/User Guide/Advanced Usage/Templates.md index 3604af2db..bd174e0f3 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Templates.md +++ b/docs/User Guide/User Guide/Advanced Usage/Templates.md @@ -23,7 +23,7 @@ To create an instance note through the UI: ![show child note templates](Templates_template-create-.png) -For the template to appear in the menu, the template note must have the `#template` label. Do not confuse this with the `~template` relation, which links the instance note to the template note. If you use [workspaces](../Basic%20Concepts%20and%20Features/Navigation/Workspace.md), you can also mark templates with `#workspaceTemplate` to display them only in the workspace. +For the template to appear in the menu, the template note must have the `#template` label. Do not confuse this with the `~template` relation, which links the instance note to the template note. If you use [workspaces](../Basic%20Concepts%20and%20Features/Navigation/Workspaces.md), you can also mark templates with `#workspaceTemplate` to display them only in the workspace. Templates can also be added or changed after note creation by creating a `~template` relation pointing to the desired template note. diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown.md b/docs/User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown.md index 50d10235d..de502a143 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown.md @@ -1,5 +1,5 @@ # Markdown -Trilium Notes supports importing Markdown restricted to the [CommonMark specification](https://spec.commonmark.org/current/) (where [tables are not supported](https://github.com/TriliumNext/Notes/issues/2026)) +Trilium supports Markdown for both import and export, while trying to keep compatibility as high as possible. ## Import @@ -38,4 +38,13 @@ If you want to export just single note without its subtree, you can do it from N ### Exporting protected notes -If you want to export protected notes, enter a protected session first! This will export the notes in an unencrypted form, so if you reimport into Trilium, make sure to re-protect these notes. \ No newline at end of file +If you want to export protected notes, enter a protected session first! This will export the notes in an unencrypted form, so if you reimport into Trilium, make sure to re-protect these notes. + +## Supported syntax + +* [GitHub-Flavored Markdown](https://github.github.com/gfm/) is the main syntax that Trilium is following. +* Images are supported. When exporting, images are usually kept in the basic Markdown syntax but will use the HTML syntax if the image has a custom width. Figures are always embedded as HTML. +* Tables are supported with the Markdown syntax. If the table is too complex or contains elements that would render as HTML, the table is also rendered as HTML. +* Admonitions are supported using GitHub's format. +* Links are supported. “Reference links” (internal links that mirror a note's title and display its icon) are embedded as HTML in order to preserve the information on import. +* Math equations are supported using `$` and `$$` syntaxes. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/1_Workspace_image.png b/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/1_Workspaces_image.png similarity index 100% rename from docs/User Guide/User Guide/Basic Concepts and Features/Navigation/1_Workspace_image.png rename to docs/User Guide/User Guide/Basic Concepts and Features/Navigation/1_Workspaces_image.png diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Note Hoisting.md b/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Note Hoisting.md index a2238fcd1..a6665943e 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Note Hoisting.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Note Hoisting.md @@ -5,4 +5,4 @@ Hoisting is a standard outliner feature which allows you to focus on (or "zoom i In addition to showing only this subtree, this also narrows both full text search and [“jump to note”](Note%20Navigation.md) to just notes present in hoisted subtree. -See also [Workspace](Workspace.md) which extends this feature. \ No newline at end of file +See also [Workspace](Workspaces.md) which extends this feature. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note.md b/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note.md new file mode 100644 index 000000000..5acbd01c9 --- /dev/null +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note.md @@ -0,0 +1,29 @@ +# Search in note +
+ +Local search allows you to search within the currently displayed note.  + +## Alternatives + +* Pressing Ctrl+F while in a browser while not focused in a Text or a Code note will trigger the browser's native search. This will also find text that is part of Trilium's UI. +* Pressing Ctrl+F in a Text note will reveal CKEditor's search functionality. + +## Accessing the search + +* On desktop, pressCtrl + F +* From the Note buttons, look for the context menu and select _Search in note_. + +## Interaction + +* Finding: + * Fill in the _Find in text…_ with the text to search for. + * The search will be executed automatically in the background. + * Use up and down arrows of the text box to navigate between results. +* Replacing: + * Fill in the _Find in text_… field with the text to replace. + * Fill in the _Replace with…_ field the text to replace it with. + * Press _Replace_ to replace only the current result. + * Press _Replace all_ to replace all of them at once. +* Options: + * _Case sensitive_ – the search will distinguish upper case characters from lower case (e.g. searching for Hello will not match `hello`). + * _Match words_ - the search will find only exact word matches (e.g. searching for `Java` will not match `JavaScript`). \ No newline at end of file diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note_image.png b/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note_image.png new file mode 100644 index 000000000..a3aa784ea Binary files /dev/null and b/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note_image.png differ diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Search.md b/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Search.md index 945acdfe5..fe7e029f6 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Search.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Search.md @@ -1,13 +1,59 @@ # Search -## Local Search - -Local search allows you to search within the currently displayed note. To initiate a local search, press Ctrl + F. If using a web browser, this will be handled by the browser's native search functionality. In the desktop (electron) version, a separate dialog will apear. - -## Note Search +
Note search enables you to find notes by searching for text in the title, content, or [attributes](../../Advanced%20Usage/Attributes.md) of the notes. You also have the option to save your searches, which will create a special search note which is visible on your navigation tree and contains the search results as sub-items. -To search for notes, click on the magnifying glass icon on the toolbar or press the Ctrl + S keyboard [shortcut](../Keyboard%20Shortcuts.md). +## Accessing the search + +* From the Launch Bar, look for the dedicated search button. +* To limit the search to a note and its children, select _Search from subtree_ from the Note tree contextual menu or press Ctrl+Shift+S. + +## Interaction + +To search for notes, click on the magnifying glass icon on the toolbar or press the keyboard [shortcut](../Keyboard%20Shortcuts.md). + +1. Set the text to search for in the _Search string_ field. + 1. Apart from searching for words ad-literam, there is also the possibility to search for attributes or properties of notes. + 2. See the examples below for more information. +2. To limit the search to a note and its sub-children, set a note in _Ancestor_. + 1. This value is also pre-filled if the search is triggered from a [hoisted note](Note%20Hoisting.md) or a [workspace](Workspaces.md). + 2. To search the entire database, keep the value empty. +3. To limit the search to only a few levels of hierarchy (e.g. look in sub-children but not in sub-sub-children of a note), set the _depth_ field to one of the provided values. +4. In addition to that, the search can be configured via the _Add search options_ buttons, as described in the follow-up section. +5. Press _Search_ to trigger the search. The results are displayed below the search configuration pane. +6. The _Search & Execute actions_ button is only relevant if at least one action has been added (as described in the section below). +7. The _Save to note_ will create a new note with the search configuration. For more information, see Saved Search. + +## Search options + +Click on which search option to apply from the Add search option section. + +* For each search option selected, the search configuration will update to reveal the entry. Each search option will have its own configuration. +* To remove a search option, simply press the X button to the right of it. + +The options available are: + +1. Search script + 1. This feature allows writing a Code note that will handle the search on its own. +2. Fast search + 1. The search will not look into the content of the notes, but it will still look into note titles and attributes, relations (based on the search query). + 2. This method can speed up the search considerably for large [databases](../../Advanced%20Usage/Database.md). +3. Include archived + 1. Archived Notes will also be included in the results, whereas otherwise they would be ignored. +4. Order by + 1. Allows changing the criteria for ordering the results, for example to order by creation date or alphabetically instead of by relevancy (default). + 2. It's also possible to change the order (ascending or descending) of the results. +5. Limit + 1. Limits the results to a given maximum. + 2. This can help if the number of results would otherwise be high, at the cost of not being able to view all the results. +6. Debug + 1. This will print additional information in the server log (see Error logs), regarding how the search expression was parsed. + 2. This function is especially useful after understanding the search functionality in detail, in order to determine why a complex search query is not working as expected. +7. Action + 1. Apart from just searching, it is also possible to apply actions such as to add a label or a relation to the notes that have been matched by the search. + 2. Unlike other search configurations, here it's possible to apply the same action multiple times (i.e. in order to be able to apply multiple labels to notes). + 3. The actions given are the same as the ones in Bulk Actions, which is an alternative for operating directly with notes within the Note Tree. + 4. After defining the actions, first press _Search_ to check the matched notes and then press _Search & Execute actions_ to trigger the actions. ### Simple Note Search Examples diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Search_image.png b/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Search_image.png new file mode 100644 index 000000000..dc70b2294 Binary files /dev/null and b/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Search_image.png differ diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Workspace.md b/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Workspace.md deleted file mode 100644 index 32c33349d..000000000 --- a/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Workspace.md +++ /dev/null @@ -1,24 +0,0 @@ -# Workspace -Workspace is a concept built up on top of [note hoisting](Note%20Hoisting.md). It is based on the idea that a user has several distinct spheres of interest. An example might be "Personal" and "Work", these two spheres are quite distinct and don't interact together. When I focus on Work, I don't really care about personal notes. - -So far workspace consists of these features: - -* [note hoisting](Note%20Hoisting.md) - you can "zoom" into a workspace subtree to focus only on the relevant notes - -* easy entering of workspace:  - - ![](1_Workspace_image.png) - -* visual identification of workspace in tabs: - ![](Workspace_image.png) - - -### How to use workspaces - -Let's say you have identified the workspaces and their subtrees. Define on the root of this subtree following labels: - -* `#workspace` - Marks this note as a workspace, button to enter the workspace is controlled by this -* `#workspaceIconClass` - controls the box icon to be displayed in the tree and tabs, example `bx bx-home`. See [https://boxicons.com/](https://boxicons.com/) -* `#workspaceTabBackgroundColor` - Background color of the tab, use any CSS color format, e.g. "lightblue" or "#ddd". See [https://www.w3schools.com/cssref/css\_colors.asp](https://www.w3schools.com/cssref/css_colors.asp). -* `#workspaceCalendarRoot` - marking a note with this label will define a new per-workspace calendar. If there's no such note, the global calendar will be used. -* `#workspaceTemplate` - This note will appear in the selection of available templates when creating a new note, but only when you are currently hoisted into a workspace containing this template. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Workspaces.md b/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Workspaces.md new file mode 100644 index 000000000..5584cea29 --- /dev/null +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Workspaces.md @@ -0,0 +1,18 @@ +# Workspaces +Workspace is a concept built up on top of [note hoisting](Note%20Hoisting.md). It is based on the idea that a user has several distinct spheres of interest. An example might be "Personal" and "Work", these two spheres are quite distinct and don't interact together. When I focus on Work, I don't really care about personal notes. + +So far workspace consists of these features: + +* [note hoisting](Note%20Hoisting.md) - you can "zoom" into a workspace subtree to focus only on the relevant notes + +* easy entering of workspace:  + + ![](1_Workspaces_image.png) + +* visual identification of workspace in tabs: + ![](Workspaces_image.png) + + +### Configuration + +
LabelDescription
workspaceMarks this note as a workspace, button to enter the workspace is controlled by this
workspaceIconClassdefines box icon CSS class which will be used in tab when hoisted to this note
workspaceTabBackgroundColorCSS color used in the note tab when hoisted to this note, use any CSS color format, e.g. "lightblue" or "#ddd". See https://www.w3schools.com/cssref/css_colors.asp.
workspaceCalendarRootMarking a note with this label will define a new per-workspace calendar for Day Notes. If there's no such note, the global calendar will be used.
workspaceTemplateThis note will appear in the selection of available template when creating new note, but only when hoisted into a workspace containing this template
workspaceSearchHomenew search notes will be created as children of this note when hoisted to some ancestor of this workspace note
workspaceInboxdefault inbox location for new notes when hoisted to some ancestor of this workspace note
\ No newline at end of file diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Workspace_image.png b/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Workspaces_image.png similarity index 100% rename from docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Workspace_image.png rename to docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Workspaces_image.png 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 381e59000..f8d870232 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 @@ -23,7 +23,7 @@ Tree structure of notes can resemble file system - but compared to that notes in When you delete a note in Trilium, it is actually only marked for deletion (soft-delete) - the actual content, title, attributes etc. are not deleted, only hidden. -Within (by default) 7 days, it is possible to undelete these soft-deleted notes - open Recent Changes dialog, and you will see a list of all modified notes including the deleted ones. Notes available for undeletion have a link to do so. This is kind of "trash can" functionality known from e.g. Windows. +Within (by default) 7 days, it is possible to undelete these soft-deleted notes - open the Recent Changes dialog, and you will see a list of all modified notes including the deleted ones. Notes available for undeletion have a link to do so. This is kind of "trash can" functionality known from e.g. Windows. Clicking an undelete will recover the note, it's content and attributes - note should be just as before being deleted. This action will also undelete note's children which have been deleted in the same action. @@ -33,4 +33,4 @@ After the 7 days (configurable) the notes will be "erased" - their title, conten ## See also -* [Read-only note](Notes/Read-Only%20Notes.md) \ No newline at end of file +* Read-Only Notes \ No newline at end of file diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes.md b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes.md index 632648f9c..d3017b329 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes.md @@ -51,10 +51,6 @@ As seen in the demo, you can view the list of all available clones in the "Note Titles of cloned notes in the tree view have an asterisk to the right to easily see that the note is also placed into some other location. -## Prefix - -Since notes can be categorized into multiple places, it's recommended to choose a generalized name that fits into all locations instead of something more specific to avoid confusion. In some cases this isn't possible so Trilium provides "branch prefixes", which is shown before the note name in the tree and as such provides a specific kind of context. The prefix is location specific, so it's displayed only in the tree pane. - ## Deleting notes/clones With clones, it might not be immediately obvious how deleting works. diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes/Branch prefix.md b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes/Branch prefix.md new file mode 100644 index 000000000..85f2b782b --- /dev/null +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes/Branch prefix.md @@ -0,0 +1,6 @@ +# Branch prefix +Since a single note can appear into multiple places in the Note Tree via a process called Cloning Notes, it's recommended to choose a generalized name that fits into all locations instead of something more specific to avoid confusion. + +In some cases this isn't possible so Trilium provides "branch prefixes", which is shown before the note name in the tree and as such provides a specific kind of context. + +The prefix is location-specific, so it's displayed only in the note tree. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Note List.md b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Note List.md index d2fea88f5..0c8273a8b 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Note List.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Note List.md @@ -1,6 +1,11 @@ # Note List When a note has one or more child notes, they will be listed at the end of the note for easy navigation. +## Configuration + +* To hide the note list for a particular note, simply apply the `hideChildrenOverview` [label](../../Advanced%20Usage/Attributes.md). +* For some view types, such as Grid view, only a subset of notes will be displayed and pagination can be used to navigate through all of them for performance reasons. To adjust the number of notes per page, set `pageSize` to the desired number. + ## View types By default, the notes will be displayed in a grid, however there are also some other view types available. diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes.md b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes.md index a2a063e33..7655230dd 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes.md @@ -1,7 +1,14 @@ # Sorting Notes -## Sorting Notes +## Manual sorting -You can sort notes by right-clicking the parent note in the note tree and selecting Advanced -> Sort notes by ... This will sort existing notes, but will not automatically sort future notes added to this parent note +You can sort notes by right-clicking the parent note in the Note Tree and selecting Advanced -> Sort notes by ... This will sort existing notes, but will not automatically sort future notes added to this parent note. + +The sorting dialog allows: + +* Sorting by title, creation or modification date. +* Changing sorting direction can also be adjusted (ascending or descending). +* Ensuring folders are displayed at the top. +* Natural sort, based on the sorting rules of a particular language. ## Automatic/Permanent Sorting diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/1_Note Tree_image.png b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/1_Note Tree_image.png deleted file mode 100644 index 74a2060c7..000000000 Binary files a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/1_Note Tree_image.png and /dev/null differ diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/1_Recent Changes_image.png b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/1_Recent Changes_image.png new file mode 100644 index 000000000..0a34b08e6 Binary files /dev/null and b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/1_Recent Changes_image.png differ 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 d3dfd49f8..33fb8a0ed 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 @@ -56,7 +56,7 @@ Right click either the _Available launchers_ or _Visible launchers_ sections and 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](../../Scripting/Widget%20Basics.md) for more information. + Allows defining a custom widget to be rendered inside the launcher. See [Widget Basics](../../Scripting/Custom%20Widgets/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/Basic Concepts and Features/UI Elements/Note Tree.md b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree.md index a98732eb1..4ad396fda 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree.md @@ -1,7 +1,7 @@ # Note Tree This page explains how to manipulate the note tree in TriliumNext, focusing on moving notes. -![](1_Note%20Tree_image.png) +![](Note%20Tree_image.png) ## Drag and Drop @@ -22,12 +22,4 @@ You can easily rearrange the note tree by dragging and dropping notes, as demons You can also move notes using the familiar cut and paste functions available in the context menu, or with the associated keyboard [shortcuts](../Keyboard%20Shortcuts.md): `CTRL-C` ( [copy](../Notes/Cloning%20Notes.md)), Ctrl + X (cut) and Ctrl + V (paste). -## Multiple selection - -It is possible to select multiple notes at one time. - -To do so, first select the note to start the selection with. Then hold Shift and click on the note to end the selection with. All the notes between the start and the end note will be selected as well. - -![](Note%20Tree_image.png) - -In the right-click menu, operations such as Cut, Copy, Move to, Clone to or Delete will apply to all the selected notes. It is also possible to apply [Bulk actions](../../Advanced%20Usage/Bulk%20actions.md) to them. The rest of the options will not be available and will appear disabled in the menu. \ No newline at end of file +See Note Tree Menu for more information. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/1_Note tree contextual menu_.png b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/1_Note tree contextual menu_.png new file mode 100644 index 000000000..102295d58 Binary files /dev/null and b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/1_Note tree contextual menu_.png differ diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection.md b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection.md new file mode 100644 index 000000000..84318ff0f --- /dev/null +++ b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection.md @@ -0,0 +1,8 @@ +# Multiple selection +It is possible to select multiple notes at one time. + +To do so, first select the note to start the selection with. Then hold Shift and click on the note to end the selection with. All the notes between the start and the end note will be selected as well. + +![](Multiple%20selection_image.png) + +In the right-click menu, operations such as Cut, Copy, Move to, Clone to or Delete will apply to all the selected notes. It is also possible to apply Bulk Actions to them. The rest of the options will not be available and will appear disabled in the menu. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection_image.png b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection_image.png new file mode 100644 index 000000000..ad3c04507 Binary files /dev/null and b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection_image.png differ diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu.md b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu.md new file mode 100644 index 000000000..8b463e848 --- /dev/null +++ b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu.md @@ -0,0 +1,94 @@ +# Note tree contextual menu +
+ +The _note tree menu_ can be accessed by right-clicking in the Note Tree. + +## Interaction + +The contextual menu can operate: + +* On a single note, by right clicking it in the note tree. +* On multiple notes, by selecting them first. See Multiple selection on how to do so. + * When right clicking, do note that usually the note being right clicked is also included in the affected notes, regardless of whether it was selected or not. + +## Available options + +> [!NOTE] +> When multiple notes are selected, only a subset of notes will be active. The ones that do support multiple notes will mention this in the list below. + +* **Open in a new tab** + * Will open a single note in a new [tab](../Tabs.md). +* **Open in a new split** + * Will open a split to the right with the given note within the current tab. +* **Hoist note** + * Will focus the note tree on this note. See Note Hoisting for more information. +* **Insert note after** + * Allows easy creation of a note with a specified [note type](../../../Note%20Types.md). + * Templates will also be present (if any) at the end of the list. + * The note will be added on the same level of hierarchy as the note selected. +* **Insert child note** + * Same as _Insert note after_, but the note will be created as a child of the selected note. +* **Protect subtree** + * Will mark this note and all of its descendents as protected. See Protected Notes for more information. +* **Unprotect subtree** + * Will unprotect this note and all of its descendents. +* **Cut** + * Will place the given notes in clipboard. + * Use one of the two paste functions (or the keyboard shortcuts) to move them to the desired location. +* **Copy / clone** + * Will place the given notes in clipboard. + * Use one of the two paste functions (or the keyboard shortcuts) to copy them to the desired location. + * Note that the copy function here works according to the Cloning Notes functionality (i.e. the note itself will be present in two locations at once, and editing it in one place will edit it everywhere). + * To simply create a duplicate note that can be modified independently, look for _Duplicate subtree_. +* **Paste into** + * If there are any notes in clipboard, they will be pasted as child notes to the right-clicked one. +* **Paste after** + * If there are any notes in clipboard, they will be pasted underneath the right-clicked one. +* **Move to…** + * Will display a modal to specify where to move the desired notes. +* **Clone to…** + * Will display a modal to specify where to [clone](../../Notes/Cloning%20Notes.md) the desired notes. +* **Delete** + * Will delete the given notes, asking for confirmation first. + * In the dialog, the following options can be configured: + * _Delete also all clones_ to ensure that the note will be deleted everywhere if it has been placed into multiple locations (see Cloning Notes). + * _Erase notes permanently_ will ensure that the note cannot be recovered from Recent Changes. +* **Import into note** + * Opens the [import](../../Import%20%26%20Export) dialog and places the imported notes as child notes of the selected one. +* **Export** + * Opens the [export](../../Import%20%26%20Export) dialog for the selected notes. +* **Search in subtree** + * Opens a full Search with it preconfigured to only look into this note and its descendants (the _Ancestor_ field). + +## Advanced options + +
+ +The advanced options menu offers some of the less frequently used actions for notes. + +To access these options, first look for the _Advanced_ option in the contextual menu to reveal a sub-menu with: + +* **Apply bulk actions** + * Opens the Bulk Actions dialog, to apply actions such as adding labels or moving notes to multiple notes at once (see Multiple selection). +* **Edit branch prefix** + * Opens a dialog to assign a name to be able to distinguish [clones](../../Notes/Cloning%20Notes.md), see Branch prefix for more information. +* **Convert to attachment** + * Converts the selected notes to Attachments of their parent notes. + * This functional is most useful when dealing with image File notes that were imported from an external source or an older version of Trilium. +* **Duplicate subtree** + * Creates a copy of the note and its descendants. + * This process is different from Cloning Notes since the duplicated note can be edited independently from the original. + * An alternative to this, if done regularly, would be Templates. +* **Expand subtree** + * Expands all the child notes in the Note Tree. +* **Collapse subtree** + * Collapses all the child notes in the note tree. +* **Sort by…** + * Opens a dialog to sort all the child notes of the selected note. + * The sorting is done only once, there is an automatic sorting mechanism as well that can be set using Attributes. + * See Sorting Notes for more information. +* **Copy note path to clipboard** + * Copies a URL fragment representing the full path to this branch for a note, such as `#root/Hb2E70L7HPuf/4sRFgMZhYFts/2IVuShedRJ3U/LJVMvKXOFv7n`. + * The URL to manually create Links within notes, or for note Navigation. +* **Recent changes in subtree** + * This will open Recent Changes, but filtered to only the changes related to this note or one of its descendants. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu_.png b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu_.png new file mode 100644 index 000000000..5a6572962 Binary files /dev/null and b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu_.png differ diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree_image.png b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree_image.png index ad3c04507..74a2060c7 100644 Binary files a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree_image.png and b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree_image.png differ diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes.md b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes.md new file mode 100644 index 000000000..ae86363f4 --- /dev/null +++ b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes.md @@ -0,0 +1,14 @@ +# Recent Changes +
+ +## Accessing the recent changes + +* For an overview of the changes across all documents, press the button in the Launch Bar. + * If there is a [hoisted note](../Navigation/Note%20Hoisting.md) or a [workspace](../Navigation/Workspaces.md), the list of recent changes will be limited to the descendents of the hoisted note, or the workspace. +* To limit the list of recent changes to a note and its descendants, look for the corresponding option in the Note tree contextual menu → Advanced. + +## Interaction + +* Notes which were changed will appear in reverse chronological order (latest update first). +* The title of the note is displayed, as well as the note path. Clicking on the note title will dismiss the dialog and navigate to that particular note. +* Deleted notes will also be listed here, at their time of deletion. Press the _Undelete_ link next to them in order to recover them. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes_image.png b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes_image.png new file mode 100644 index 000000000..93c1615d5 Binary files /dev/null and b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes_image.png differ diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon.md b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon.md index 73ff35d1e..b53135131 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon.md @@ -61,4 +61,6 @@ This section displays information about the current note: ### Edited notes -This section pops automatically when entering a [day note](../../Advanced%20Usage/Advanced%20Showcases/Day%20Notes.md) and shows the notes that were edited that day. \ No newline at end of file +This section pops automatically when entering a [day note](../../Advanced%20Usage/Advanced%20Showcases/Day%20Notes.md) and shows the notes that were edited that day. + +It is possible to disable this behavior from settings, by going to Appearance settings and looking for the _Ribbon widgets_ section. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Note Types/Code/Events.md b/docs/User Guide/User Guide/Note Types/Code/Events.md deleted file mode 100644 index ca3336889..000000000 --- a/docs/User Guide/User Guide/Note Types/Code/Events.md +++ /dev/null @@ -1,29 +0,0 @@ -# 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. - -## 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 once the event occurs. - -* `run` - * `frontendStartup` - executes on frontend upon startup - * `mobileStartup` - executes on mobile frontend upon startup - * `backendStartup` - executes on backend upon startup - * `hourly` - executes once an hour on backend - * `daily` - executes once a day on backend - -## Entity events - -Other events are bound to some entity, these are defined as [relations](../../Advanced%20Usage/Attributes.md) - meaning that script is triggered only if note has this script attached to it through relations (or it can inherit it). - -* `runOnNoteCreation` - executes when note is created on backend -* `runOnNoteTitleChange` - executes when note title is changed (includes note creation as well) -* `runOnNoteContentChange` - executes when note content is changed (includes note creation as well). -* `runOnNoteChange` - executes when note is changed (includes note creation as well) -* `runOnNoteDeletion` - executes when note is being deleted -* `runOnBranchCreation` - executes when a branch is created. Branch is a link between parent note and child note and is created e.g. when cloning or moving note. -* `runOnBranchChange` (since v0.62) - executes when a branch is changed - either expanded status or prefix are changed. -* `runOnBranchDeletion` - executes when a branch is delete. Branch is a link between parent note and child note and is deleted e.g. when moving note (old branch/link is deleted). -* `runOnChildNoteCreation` - executes when new note is created under _this_ note -* `runOnAttributeCreation` - executes when new attribute is created under _this_ note -* `runOnAttributeChange` - executes when attribute is changed under _this_ note \ No newline at end of file diff --git a/docs/User Guide/User Guide/Note Types/Saved Search.md b/docs/User Guide/User Guide/Note Types/Saved Search.md index 80719b210..c2664085f 100644 --- a/docs/User Guide/User Guide/Note Types/Saved Search.md +++ b/docs/User Guide/User Guide/Note Types/Saved Search.md @@ -5,4 +5,4 @@ Trilium allows you to save common searches as notes within the note tree. The se ## Location -By default, saved searches are stored in the day note. However, you can designate a different note to store saved searches by marking it with the `#searchHome` label. Additionally, for [workspaces](../Basic%20Concepts%20and%20Features/Navigation/Workspace.md), you can use the `#workspaceSearchHome` label to specify a storage location for saved searches within that workspace. \ No newline at end of file +By default, saved searches are stored in the day note. However, you can designate a different note to store saved searches by marking it with the `#searchHome` label. Additionally, for [workspaces](../Basic%20Concepts%20and%20Features/Navigation/Workspaces.md), you can use the `#workspaceSearchHome` label to specify a storage location for saved searches within that workspace. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Scripting.md b/docs/User Guide/User Guide/Scripting.md index 09b451e49..bdc76d4a0 100644 --- a/docs/User Guide/User Guide/Scripting.md +++ b/docs/User Guide/User Guide/Scripting.md @@ -1,5 +1,5 @@ # Scripting -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. +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 @@ -34,8 +34,8 @@ You can see more scripting with explanation in 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/Note Types/Code/Custom Widgets.md b/docs/User Guide/User Guide/Scripting/Custom Widgets.md similarity index 100% rename from docs/User Guide/User Guide/Note Types/Code/Custom Widgets.md rename to docs/User Guide/User Guide/Scripting/Custom Widgets.md diff --git a/docs/User Guide/User Guide/Scripting/Widget Basics.md b/docs/User Guide/User Guide/Scripting/Custom Widgets/Widget Basics.md similarity index 91% rename from docs/User Guide/User Guide/Scripting/Widget Basics.md rename to docs/User Guide/User Guide/Scripting/Custom Widgets/Widget Basics.md index d457ad6ac..ffc5df52a 100644 --- a/docs/User Guide/User Guide/Scripting/Widget Basics.md +++ b/docs/User Guide/User Guide/Scripting/Custom Widgets/Widget Basics.md @@ -22,10 +22,10 @@ module.exports = new MyWidget(); To implement this widget: 1. Create a new `JS Frontend` note in Trilium and paste in the code above. -2. Assign the `#widget` [attribute](../Advanced%20Usage/Attributes.md) to the [note](../Basic%20Concepts%20and%20Features/Notes.md). +2. Assign the `#widget` [attribute](../../Advanced%20Usage/Attributes.md) to the [note](../../Basic%20Concepts%20and%20Features/Notes.md). 3. Restart Trilium or reload the window. -To verify that the widget is working, open the developer tools (`Cmd` + `Shift` + `I`) and run `document.querySelector("#my-widget")`. If the element is found, the widget is functioning correctly. If `undefined` is returned, double-check that the [note](../Basic%20Concepts%20and%20Features/Notes.md) has the `#widget` [attribute](../Advanced%20Usage/Attributes.md). +To verify that the widget is working, open the developer tools (`Cmd` + `Shift` + `I`) and run `document.querySelector("#my-widget")`. If the element is found, the widget is functioning correctly. If `undefined` is returned, double-check that the [note](../../Basic%20Concepts%20and%20Features/Notes.md) has the `#widget` [attribute](../../Advanced%20Usage/Attributes.md). ### Step 2: Adding an UI Element @@ -85,7 +85,7 @@ After reloading Trilium, the button should now appear at the bottom left of the ### Step 4: Adding User Interaction -Let’s make the button interactive by showing a message when it’s clicked. We'll use the `api.showMessage` method from the [Script API](../Note%20Types/Code/Script%20API.md). +Let’s make the button interactive by showing a message when it’s clicked. We'll use the `api.showMessage` method from the [Script API](../Script%20API.md). ``` class MyWidget extends api.BasicWidget { diff --git a/docs/User Guide/User Guide/Note Types/Code/Custom Widgets/Word count widget.md b/docs/User Guide/User Guide/Scripting/Custom Widgets/Word count widget.md similarity index 88% rename from docs/User Guide/User Guide/Note Types/Code/Custom Widgets/Word count widget.md rename to docs/User Guide/User Guide/Scripting/Custom Widgets/Word count widget.md index 2110032fa..d39b328ea 100644 --- a/docs/User Guide/User Guide/Note Types/Code/Custom Widgets/Word count widget.md +++ b/docs/User Guide/User Guide/Scripting/Custom Widgets/Word count widget.md @@ -1,8 +1,8 @@ # Word count widget > [!TIP] -> This widget is also present in new installations in the Demo Notes. +> This widget is also present in new installations in the Demo Notes. -Create a Code note of type JS frontend and **give it a** `#widget` **label**. +Create a Code note of type JS frontend and **give it a** `#widget` **label**. ``` /* @@ -82,7 +82,7 @@ class WordCountWidget extends api.NoteContextAwareWidget { module.exports = new WordCountWidget(); ``` -After you make changes it is necessary to [restart Trilium](../../../Troubleshooting/Refreshing%20the%20application.md) so that the layout can be rebuilt. +After you make changes it is necessary to [restart Trilium](../../Troubleshooting/Refreshing%20the%20application.md) so that the layout can be rebuilt. At the bottom of the note you can see the resulting widget: diff --git a/docs/User Guide/User Guide/Note Types/Code/Custom Widgets/Word count widget_image.png b/docs/User Guide/User Guide/Scripting/Custom Widgets/Word count widget_image.png similarity index 100% rename from docs/User Guide/User Guide/Note Types/Code/Custom Widgets/Word count widget_image.png rename to docs/User Guide/User Guide/Scripting/Custom Widgets/Word count widget_image.png diff --git a/docs/User Guide/User Guide/Scripting/Events.md b/docs/User Guide/User Guide/Scripting/Events.md new file mode 100644 index 000000000..242d1790f --- /dev/null +++ b/docs/User Guide/User Guide/Scripting/Events.md @@ -0,0 +1,14 @@ +# 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. + +## 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 once the event occurs. + +
LabelDescription
run

Defines on which events script should run. Possible values are:

  • frontendStartup - when Trilium frontend starts up (or is refreshed), but not on mobile.
  • mobileStartup - when Trilium frontend starts up (or is refreshed), on mobile.
  • backendStartup - when Trilium backend starts up
  • hourly - run once an hour. You can use additional label runAtHour to specify at which hour, on the back-end.
  • daily - run once a day, on the back-end
runOnInstanceSpecifies that the script should only run on a particular Trilium instance.
runAtHourOn which hour should this run. Should be used together with #run=hourly. Can be defined multiple times for more runs during the day.
+ +## Entity events + +Other events are bound to some entity, these are defined as [relations](../Advanced%20Usage/Attributes.md) - meaning that script is triggered only if note has this script attached to it through relations (or it can inherit it). + +
RelationDescription
runOnNoteCreationexecutes when note is created on backend. Use this relation if you want to run the script for all notes created under a specific subtree. In that case, create it on the subtree root note and make it inheritable. A new note created within the subtree (any depth) will trigger the script.
runOnChildNoteCreationexecutes when new note is created under the note where this relation is defined
runOnNoteTitleChangeexecutes when note title is changed (includes note creation as well)
runOnNoteContentChangeexecutes when note content is changed (includes note creation as well).
runOnNoteChangeexecutes when note is changed (includes note creation as well). Does not include content changes
runOnNoteDeletionexecutes when note is being deleted
runOnBranchCreationexecutes when a branch is created. Branch is a link between parent note and child note and is created e.g. when cloning or moving note.
runOnBranchChangeexecutes when a branch is updated. (since v0.62)
runOnBranchDeletionexecutes when a branch is deleted. Branch is a link between parent note and child note and is deleted e.g. when moving note (old branch/link is deleted).
runOnAttributeCreationexecutes when new attribute is created for the note which defines this relation
runOnAttributeChangeexecutes when the attribute is changed of a note which defines this relation. This is triggered also when the attribute is deleted
\ No newline at end of file diff --git a/docs/User Guide/User Guide/Scripting/Frontend Basics.md b/docs/User Guide/User Guide/Scripting/Frontend Basics.md index fe5435548..c76ac9a99 100644 --- a/docs/User Guide/User Guide/Scripting/Frontend Basics.md +++ b/docs/User Guide/User Guide/Scripting/Frontend Basics.md @@ -1,7 +1,7 @@ # Frontend Basics ## Frontend API -The frontend api supports two styles, regular scripts that are run with the current app and note context, and widgets that export an object to Trilium to be used in the UI. In both cases, the frontend api of Trilium is available to scripts running in the frontend context as global variable `api`. The members and methods of the api can be seen on the [Script API](../Note%20Types/Code/Script%20API.md) page. +The frontend api supports two styles, regular scripts that are run with the current app and note context, and widgets that export an object to Trilium to be used in the UI. In both cases, the frontend api of Trilium is available to scripts running in the frontend context as global variable `api`. The members and methods of the api can be seen on the [Script API](Script%20API.md) page. ## Scripts @@ -54,4 +54,4 @@ Conversely to scripts, widgets do have some specific requirements in order to wo ### Tutorial -For more information on building widgets, take a look at [Widget Basics](Widget%20Basics.md). \ No newline at end of file +For more information on building widgets, take a look at [Widget Basics](Custom%20Widgets/Widget%20Basics.md). \ No newline at end of file diff --git a/docs/User Guide/User Guide/Note Types/Code/Script API.md b/docs/User Guide/User Guide/Scripting/Script API.md similarity index 100% rename from docs/User Guide/User Guide/Note Types/Code/Script API.md rename to docs/User Guide/User Guide/Scripting/Script API.md diff --git a/docs/User Guide/User Guide/Scripting/Script API/Backend API.md b/docs/User Guide/User Guide/Scripting/Script API/Backend API.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/User Guide/User Guide/Scripting/Script API/Frontend API/FNote.md b/docs/User Guide/User Guide/Scripting/Script API/Frontend API/FNote.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/User Guide/User Guide/Troubleshooting.md b/docs/User Guide/User Guide/Troubleshooting.md index dd150ad02..dad654ff7 100644 --- a/docs/User Guide/User Guide/Troubleshooting.md +++ b/docs/User Guide/User Guide/Troubleshooting.md @@ -21,7 +21,7 @@ TRILIUM_START_NOTE_ID=root ./trilium ## Broken Script Prevents Application Startup -If a custom script causes Triliumto crash, and it is set as a startup script or in an active [custom widget](Note%20Types/Code/Custom%20Widgets.md), start Triliumin "safe mode" to prevent any custom scripts from executing: +If a custom script causes Triliumto crash, and it is set as a startup script or in an active [custom widget](Scripting/Custom%20Widgets.md), start Triliumin "safe mode" to prevent any custom scripts from executing: ``` TRILIUM_SAFE_MODE=true ./trilium diff --git a/e2e/layout/tab_bar.spec.ts b/e2e/layout/tab_bar.spec.ts index c5a3d7e5c..c064dbf57 100644 --- a/e2e/layout/tab_bar.spec.ts +++ b/e2e/layout/tab_bar.spec.ts @@ -117,3 +117,17 @@ test("Search works when dismissing a tab", async ({ page, context }) => { await app.openAndClickNoteActionMenu("Search in note"); await expect(app.findAndReplaceWidget).toBeVisible(); }); + +test("New tab displays workspaces", async ({ page, context }) => { + const app = new App(page, context); + await app.goto(); + + const workspaceNotesEl = app.currentNoteSplitContent.locator(".workspace-notes"); + await expect(workspaceNotesEl).toBeVisible(); + expect(workspaceNotesEl).toContainText("Personal"); + expect(workspaceNotesEl).toContainText("Work"); + await expect(workspaceNotesEl.locator(".bx.bxs-user")).toBeVisible(); + await expect(workspaceNotesEl.locator(".bx.bx-briefcase-alt")).toBeVisible(); + + await app.closeAllTabs(); +}); diff --git a/electron-docs-main.ts b/electron-docs-main.ts index 2646e5194..cc2af4875 100644 --- a/electron-docs-main.ts +++ b/electron-docs-main.ts @@ -9,6 +9,7 @@ import type { WriteStream } from "fs"; import debounce from "./src/public/app/services/debounce.js"; import { extractZip, initializeDatabase, startElectron } from "./electron-utils.js"; import cls from "./src/services/cls.js"; +import type { AdvancedExportOptions } from "./src/services/export/zip.js"; const NOTE_ID_USER_GUIDE = "pOsGYCXsbNQG"; const markdownPath = path.join("docs", "User Guide"); @@ -69,7 +70,54 @@ async function exportData(format: "html" | "markdown", outputPath: string) { // First export as zip. const { exportToZipFile } = (await import("./src/services/export/zip.js")).default; - await exportToZipFile(NOTE_ID_USER_GUIDE, format, zipFilePath); + + const exportOpts: AdvancedExportOptions = {}; + if (format === "html") { + exportOpts.customRewriteLinks = (originalRewriteLinks, getNoteTargetUrl) => { + return (content: string, noteMeta: NoteMeta) => { + content = content.replace(/src="[^"]*api\/images\/([a-zA-Z0-9_]+)\/[^"]*"/g, (match, targetNoteId) => { + const url = getNoteTargetUrl(targetNoteId, noteMeta); + + return url ? `src="${url}"` : match; + }); + + content = content.replace(/src="[^"]*api\/attachments\/([a-zA-Z0-9_]+)\/image\/[^"]*"/g, (match, targetAttachmentId) => { + const url = findAttachment(targetAttachmentId); + + return url ? `src="${url}"` : match; + }); + + content = content.replace(/href="[^"]*#root[^"]*attachmentId=([a-zA-Z0-9_]+)\/?"/g, (match, targetAttachmentId) => { + const url = findAttachment(targetAttachmentId); + + return url ? `href="${url}"` : match; + }); + + content = content.replace(/href="[^"]*#root[a-zA-Z0-9_\/]*\/([a-zA-Z0-9_]+)[^"]*"/g, (match, targetNoteId) => { + const components = match.split("/"); + components[components.length - 1] = `_help_${components[components.length - 1]}`; + return components.join("/"); + }); + + return content; + + function findAttachment(targetAttachmentId: string) { + let url; + + const attachmentMeta = (noteMeta.attachments || []).find((attMeta) => attMeta.attachmentId === targetAttachmentId); + if (attachmentMeta) { + // easy job here, because attachment will be in the same directory as the note's data file. + url = attachmentMeta.dataFileName; + } else { + console.info(`Could not find attachment meta object for attachmentId '${targetAttachmentId}'`); + } + return url; + } + }; + }; + } + + await exportToZipFile(NOTE_ID_USER_GUIDE, format, zipFilePath, exportOpts); await extractZip(zipFilePath, outputPath); } finally { if (await fsExtra.exists(zipFilePath)) { diff --git a/eslint.config.js b/eslint.config.js index 4b4c23dac..2f2b2c036 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,5 +1,6 @@ import eslint from "@eslint/js"; import tseslint from "typescript-eslint"; +import simpleImportSort from "eslint-plugin-simple-import-sort"; export default tseslint.config( eslint.configs.recommended, @@ -16,6 +17,11 @@ export default tseslint.config( } } }, + { + plugins: { + "simple-import-sort": simpleImportSort + } + }, { rules: { // add rule overrides here @@ -28,7 +34,8 @@ export default tseslint.config( varsIgnorePattern: "^_" } ], - "sort-imports": [ "error", { ignoreCase: false } ] + "simple-import-sort/imports": "error", + "simple-import-sort/exports": "error" } }, { diff --git a/integration-tests/db/document.db b/integration-tests/db/document.db index c9f96195b..c02b60d34 100644 Binary files a/integration-tests/db/document.db and b/integration-tests/db/document.db differ diff --git a/package-lock.json b/package-lock.json index 7bb7e57f6..34d2bb25d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,18 @@ { "name": "trilium", - "version": "0.92.6", + "version": "0.92.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "trilium", - "version": "0.92.6", + "version": "0.92.7", "license": "AGPL-3.0-only", "dependencies": { "@braintree/sanitize-url": "7.1.1", "@electron/remote": "2.1.2", "@highlightjs/cdn-assets": "11.11.1", - "@triliumnext/express-partial-content": "1.0.1", + "@triliumnext/express-partial-content": "1.1.0", "archiver": "7.0.1", "async-mutex": "0.5.0", "autocomplete.js": "0.38.1", @@ -38,7 +38,7 @@ "electron-window-state": "5.0.3", "escape-html": "1.0.3", "eslint-linter-browserify": "9.24.0", - "express": "4.21.2", + "express": "5.1.0", "express-openid-connect": "^2.17.1", "express-rate-limit": "7.5.0", "express-session": "1.18.1", @@ -61,8 +61,8 @@ "jquery.fancytree": "2.38.5", "js-yaml": "4.1.0", "jsdom": "26.0.0", - "katex": "0.16.21", - "marked": "15.0.7", + "katex": "0.16.22", + "marked": "15.0.8", "mime-types": "3.0.1", "multer": "1.4.5-lts.2", "normalize-strings": "1.1.1", @@ -159,8 +159,9 @@ "copy-webpack-plugin": "13.0.0", "cross-env": "7.0.3", "css-loader": "7.1.2", - "electron": "35.1.4", + "electron": "35.1.5", "eslint": "9.24.0", + "eslint-plugin-simple-import-sort": "12.1.1", "esm": "3.2.25", "globals": "16.0.0", "happy-dom": "17.4.4", @@ -192,12 +193,12 @@ "ts-loader": "9.5.2", "tslib": "2.8.1", "tsx": "4.19.3", - "typedoc": "0.28.1", + "typedoc": "0.28.2", "typescript": "5.8.3", - "typescript-eslint": "8.29.0", + "typescript-eslint": "8.29.1", "vanilla-js-wheel-zoom": "9.0.4", "vitest": "3.1.1", - "webpack": "5.98.0", + "webpack": "5.99.5", "webpack-cli": "6.0.1", "webpack-dev-middleware": "7.4.2" }, @@ -2634,13 +2635,15 @@ "license": "MIT" }, "node_modules/@gerrit0/mini-shiki": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.2.1.tgz", - "integrity": "sha512-HbzRC6MKB6U8kQhczz0APKPIzFHTrcqhaC7es2EXInq1SpjPVnpVSIsBe6hNoLWqqCx1n5VKiPXq6PfXnHZKOQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.2.2.tgz", + "integrity": "sha512-vaZNGhGLKMY14HbF53xxHNgFO9Wz+t5lTlGNpl2N9xFiKQ0I5oIe0vKjU9dh7Nb3Dw6lZ7wqUE0ri+zcdpnK+Q==", "dev": true, "license": "MIT", "dependencies": { "@shikijs/engine-oniguruma": "^3.2.1", + "@shikijs/langs": "^3.2.1", + "@shikijs/themes": "^3.2.1", "@shikijs/types": "^3.2.1", "@shikijs/vscode-textmate": "^10.0.2" } @@ -4398,6 +4401,26 @@ "@shikijs/vscode-textmate": "^10.0.2" } }, + "node_modules/@shikijs/langs": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.2.1.tgz", + "integrity": "sha512-If0iDHYRSGbihiA8+7uRsgb1er1Yj11pwpX1c6HLYnizDsKAw5iaT3JXj5ZpaimXSWky/IhxTm7C6nkiYVym+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.2.1" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.2.1.tgz", + "integrity": "sha512-k5DKJUT8IldBvAm8WcrDT5+7GA7se6lLksR+2E3SvyqGTyFMzU2F9Gb7rmD+t+Pga1MKrYFxDIeyWjMZWM6uBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.2.1" + } + }, "node_modules/@shikijs/types": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.2.1.tgz", @@ -4511,12 +4534,12 @@ } }, "node_modules/@triliumnext/express-partial-content": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@triliumnext/express-partial-content/-/express-partial-content-1.0.1.tgz", - "integrity": "sha512-WQipyCd3AHnKRhkMGUjgvi75L8kRjCyvCituvtdkNt5GLUQeHRyMwEokYJ8uoBgPoJNPLPCjXV1Ig0WE37N7KA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@triliumnext/express-partial-content/-/express-partial-content-1.1.0.tgz", + "integrity": "sha512-VAV4P9JUDmkVRX/Au8qLBQEBU+TdpNi0orfRizfG31sQNphzznAjGBL3R8DY0xwwEReIjD0X6uxi23hjRD1fAg==", "license": "MIT", "peerDependencies": { - "express": "^4.16.4" + "express": "^4.16.4 || ^5.1.0" } }, "node_modules/@tweenjs/tween.js": { @@ -5549,17 +5572,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.0.tgz", - "integrity": "sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.1.tgz", + "integrity": "sha512-ba0rr4Wfvg23vERs3eB+P3lfj2E+2g3lhWcCVukUuhtcdUx5lSIFZlGFEBHKr+3zizDa/TvZTptdNHVZWAkSBg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/type-utils": "8.29.0", - "@typescript-eslint/utils": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", + "@typescript-eslint/scope-manager": "8.29.1", + "@typescript-eslint/type-utils": "8.29.1", + "@typescript-eslint/utils": "8.29.1", + "@typescript-eslint/visitor-keys": "8.29.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -5579,16 +5602,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz", - "integrity": "sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.1.tgz", + "integrity": "sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/typescript-estree": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", + "@typescript-eslint/scope-manager": "8.29.1", + "@typescript-eslint/types": "8.29.1", + "@typescript-eslint/typescript-estree": "8.29.1", + "@typescript-eslint/visitor-keys": "8.29.1", "debug": "^4.3.4" }, "engines": { @@ -5604,14 +5627,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.0.tgz", - "integrity": "sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.1.tgz", + "integrity": "sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0" + "@typescript-eslint/types": "8.29.1", + "@typescript-eslint/visitor-keys": "8.29.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5622,14 +5645,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.0.tgz", - "integrity": "sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.1.tgz", + "integrity": "sha512-DkDUSDwZVCYN71xA4wzySqqcZsHKic53A4BLqmrWFFpOpNSoxX233lwGu/2135ymTCR04PoKiEEEvN1gFYg4Tw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.29.0", - "@typescript-eslint/utils": "8.29.0", + "@typescript-eslint/typescript-estree": "8.29.1", + "@typescript-eslint/utils": "8.29.1", "debug": "^4.3.4", "ts-api-utils": "^2.0.1" }, @@ -5646,9 +5669,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.0.tgz", - "integrity": "sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.1.tgz", + "integrity": "sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==", "dev": true, "license": "MIT", "engines": { @@ -5660,14 +5683,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.0.tgz", - "integrity": "sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.1.tgz", + "integrity": "sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", + "@typescript-eslint/types": "8.29.1", + "@typescript-eslint/visitor-keys": "8.29.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -5713,16 +5736,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.0.tgz", - "integrity": "sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.1.tgz", + "integrity": "sha512-QAkFEbytSaB8wnmB+DflhUPz6CLbFWE2SnSCrRMEa+KnXIzDYbpsn++1HGvnfAsUY44doDXmvRkO5shlM/3UfA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/typescript-estree": "8.29.0" + "@typescript-eslint/scope-manager": "8.29.1", + "@typescript-eslint/types": "8.29.1", + "@typescript-eslint/typescript-estree": "8.29.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5737,13 +5760,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.0.tgz", - "integrity": "sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.1.tgz", + "integrity": "sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/types": "8.29.1", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -6172,43 +6195,22 @@ } }, "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -6552,12 +6554,6 @@ "node": ">=10" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -6901,36 +6897,23 @@ "license": "MIT" }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "node": ">=18" } }, "node_modules/body-parser/node_modules/http-errors": { @@ -6949,23 +6932,28 @@ "node": ">= 0.8" } }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/body-parser/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "node_modules/body-parser/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } }, "node_modules/boolbase": { "version": "1.0.0", @@ -8120,9 +8108,9 @@ "license": "MIT" }, "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -9325,16 +9313,6 @@ "node": ">=6" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/detect-hover": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-hover/-/detect-hover-1.0.3.tgz", @@ -9568,9 +9546,9 @@ } }, "node_modules/electron": { - "version": "35.1.4", - "resolved": "https://registry.npmjs.org/electron/-/electron-35.1.4.tgz", - "integrity": "sha512-8HjE2wqxY//T09Of8k1eTpK/NeTG2FkTyRD+fyKXmec4wZVscGgZcmWFC0HYN4ktyHAjtplpxdFXjtqRnvzBMg==", + "version": "35.1.5", + "resolved": "https://registry.npmjs.org/electron/-/electron-35.1.5.tgz", + "integrity": "sha512-LolvbKKQUSCGvEwbEQNt1cxD1t+YYClDNwBIjn4d28KM8FSqUn9zJuf6AbqNA7tVs9OFl/EQpmg/m4lZV1hH8g==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -10659,6 +10637,16 @@ "integrity": "sha512-h+y3gq15Hb+7o6VyN/zzkERvfmoAx+wO3l1UJwteCWYPUav0Ffp36j9sb8ZjTi78/nInx7xUHBUYhOT+9xxDMA==", "license": "MIT" }, + "node_modules/eslint-plugin-simple-import-sort": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.1.tgz", + "integrity": "sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -10995,45 +10983,41 @@ "license": "Apache-2.0" }, "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", "license": "MIT", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 18" }, "funding": { "type": "opencollective", @@ -11129,22 +11113,22 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/express/node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "node_modules/express/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=6.6.0" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/express/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">= 0.8" } }, "node_modules/express/node_modules/http-errors": { @@ -11163,11 +11147,28 @@ "node": ">= 0.8" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "node_modules/express/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } }, "node_modules/ext-list": { "version": "2.2.2", @@ -11490,38 +11491,22 @@ } }, "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "engines": { "node": ">= 0.8" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -13245,6 +13230,12 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "license": "MIT" }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, "node_modules/is-property": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", @@ -13834,9 +13825,9 @@ } }, "node_modules/katex": { - "version": "0.16.21", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.21.tgz", - "integrity": "sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==", + "version": "0.16.22", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz", + "integrity": "sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==", "funding": [ "https://opencollective.com/katex", "https://github.com/sponsors/katex" @@ -14487,9 +14478,9 @@ } }, "node_modules/marked": { - "version": "15.0.7", - "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.7.tgz", - "integrity": "sha512-dgLIeKGLx5FwziAnsk4ONoGwHwGPJzselimvlVskE9XLN4Orv9u2VA3GWw/lYUqjfA0rUT/6fqKwfZJapP9BEg==", + "version": "15.0.8", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.8.tgz", + "integrity": "sha512-rli4l2LyZqpQuRve5C0rkn6pj3hT8EWPC+zkAxFTAJLxRbENfTAhEQq9itrmf1Y81QtAX5D/MYlGlIomNgj9lA==", "license": "MIT", "bin": { "marked": "bin/marked.js" @@ -14618,10 +14609,13 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "license": "MIT", + "engines": { + "node": ">=18" + }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -14690,6 +14684,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -16440,10 +16435,13 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } }, "node_modules/path-type": { "version": "2.0.0", @@ -17161,12 +17159,12 @@ "license": "Apache-2.0" }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -17263,14 +17261,14 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", - "iconv-lite": "0.4.24", + "iconv-lite": "0.6.3", "unpipe": "1.0.0" }, "engines": { @@ -17293,18 +17291,6 @@ "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/raw-loader": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", @@ -18156,6 +18142,22 @@ "points-on-path": "^0.2.1" } }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/rrweb-cssom": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", @@ -18404,48 +18406,31 @@ "optional": true }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { + "node_modules/send/node_modules/fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -18467,18 +18452,6 @@ "node": ">= 0.8" } }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/serialize-error": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", @@ -18547,18 +18520,18 @@ "license": "MIT" }, "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", "license": "MIT", "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" } }, "node_modules/session-file-store": { @@ -20309,17 +20282,17 @@ } }, "node_modules/typedoc": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.1.tgz", - "integrity": "sha512-Mn2VPNMaxoe/hlBiLriG4U55oyAa3Xo+8HbtEwV7F5WEOPXqtxzGuMZhJYHaqFJpajeQ6ZDUC2c990NAtTbdgw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.2.tgz", + "integrity": "sha512-9Giuv+eppFKnJ0oi+vxqLM817b/IrIsEMYgy3jj6zdvppAfDqV3d6DXL2vXUg2TnlL62V48th25Zf/tcQKAJdg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@gerrit0/mini-shiki": "^3.2.1", + "@gerrit0/mini-shiki": "^3.2.2", "lunr": "^2.3.9", "markdown-it": "^14.1.0", "minimatch": "^9.0.5", - "yaml": "^2.7.0 " + "yaml": "^2.7.1" }, "bin": { "typedoc": "bin/typedoc" @@ -20373,15 +20346,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.29.0.tgz", - "integrity": "sha512-ep9rVd9B4kQsZ7ZnWCVxUE/xDLUUUsRzE0poAeNu+4CkFErLfuvPt/qtm2EpnSyfvsR0S6QzDFSrPCFBwf64fg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.29.1.tgz", + "integrity": "sha512-f8cDkvndhbQMPcysk6CUSGBWV+g1utqdn71P5YKwMumVMOG/5k7cHq0KyG4O52nB0oKS4aN2Tp5+wB4APJGC+w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.29.0", - "@typescript-eslint/parser": "8.29.0", - "@typescript-eslint/utils": "8.29.0" + "@typescript-eslint/eslint-plugin": "8.29.1", + "@typescript-eslint/parser": "8.29.1", + "@typescript-eslint/utils": "8.29.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -20720,15 +20693,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", @@ -20806,9 +20770,9 @@ } }, "node_modules/vite": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.4.tgz", - "integrity": "sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw==", + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz", + "integrity": "sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==", "dev": true, "license": "MIT", "dependencies": { @@ -21116,9 +21080,9 @@ } }, "node_modules/webpack": { - "version": "5.98.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", - "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "version": "5.99.5", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.5.tgz", + "integrity": "sha512-q+vHBa6H9qwBLUlHL4Y7L0L1/LlyBKZtS9FHNCQmtayxjI5RKC9yD8gpvLeqGv5lCQp1Re04yi0MF40pf30Pvg==", "dev": true, "license": "MIT", "dependencies": { @@ -21635,9 +21599,9 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", - "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", + "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", "dev": true, "license": "ISC", "bin": { diff --git a/package.json b/package.json index 8c0e67994..06b361523 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "trilium", "productName": "TriliumNext Notes", "description": "Build your personal knowledge base with TriliumNext Notes", - "version": "0.92.6", + "version": "0.92.7", "license": "AGPL-3.0-only", "main": "./electron-main.js", "author": { @@ -74,7 +74,7 @@ "@braintree/sanitize-url": "7.1.1", "@electron/remote": "2.1.2", "@highlightjs/cdn-assets": "11.11.1", - "@triliumnext/express-partial-content": "1.0.1", + "@triliumnext/express-partial-content": "1.1.0", "archiver": "7.0.1", "async-mutex": "0.5.0", "autocomplete.js": "0.38.1", @@ -100,7 +100,7 @@ "electron-window-state": "5.0.3", "escape-html": "1.0.3", "eslint-linter-browserify": "9.24.0", - "express": "4.21.2", + "express": "5.1.0", "express-openid-connect": "^2.17.1", "express-rate-limit": "7.5.0", "express-session": "1.18.1", @@ -123,8 +123,8 @@ "jquery.fancytree": "2.38.5", "js-yaml": "4.1.0", "jsdom": "26.0.0", - "katex": "0.16.21", - "marked": "15.0.7", + "katex": "0.16.22", + "marked": "15.0.8", "mime-types": "3.0.1", "multer": "1.4.5-lts.2", "normalize-strings": "1.1.1", @@ -218,8 +218,9 @@ "copy-webpack-plugin": "13.0.0", "cross-env": "7.0.3", "css-loader": "7.1.2", - "electron": "35.1.4", + "electron": "35.1.5", "eslint": "9.24.0", + "eslint-plugin-simple-import-sort": "12.1.1", "esm": "3.2.25", "globals": "16.0.0", "happy-dom": "17.4.4", @@ -251,12 +252,12 @@ "ts-loader": "9.5.2", "tslib": "2.8.1", "tsx": "4.19.3", - "typedoc": "0.28.1", + "typedoc": "0.28.2", "typescript": "5.8.3", - "typescript-eslint": "8.29.0", + "typescript-eslint": "8.29.1", "vanilla-js-wheel-zoom": "9.0.4", "vitest": "3.1.1", - "webpack": "5.98.0", + "webpack": "5.99.5", "webpack-cli": "6.0.1", "webpack-dev-middleware": "7.4.2" }, diff --git a/src/express.d.ts b/src/express.d.ts index 846c5b9b2..f2cb77c78 100644 --- a/src/express.d.ts +++ b/src/express.d.ts @@ -20,6 +20,8 @@ export declare module "express-serve-static-core" { "trilium-component-id"?: string; "trilium-local-now-datetime"?: string; "trilium-hoisted-note-id"?: string; + + "user-agent"?: string; }; } } 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 356b29b42..506526e7b 100644 --- a/src/public/app/doc_notes/en/User Guide/!!!meta.json +++ b/src/public/app/doc_notes/en/User Guide/!!!meta.json @@ -1,6 +1,6 @@ { "formatVersion": 2, - "appVersion": "0.92.6", + "appVersion": "0.92.7", "files": [ { "isClone": false, @@ -1202,7 +1202,7 @@ { "type": "relation", "name": "internalLink", - "value": "ivYnonVFBxbQ", + "value": "YtSN43OrfzaA", "isInheritable": false, "position": 30 }, @@ -1232,21 +1232,13 @@ "position": 10, "dataFileName": "Note Tree_drag-and-drop.gif" }, - { - "attachmentId": "Bp5BCJRntpyt", - "title": "image.png", - "role": "image", - "mime": "image/jpg", - "position": 10, - "dataFileName": "Note Tree_image.png" - }, { "attachmentId": "DYf7wm3Yv6EC", "title": "image.png", "role": "image", "mime": "image/jpg", "position": 10, - "dataFileName": "1_Note Tree_image.png" + "dataFileName": "Note Tree_image.png" }, { "attachmentId": "m0KuVBZvGyzW", @@ -1256,6 +1248,233 @@ "position": 10, "dataFileName": "Note Tree_move-note-with-k.gif" } + ], + "dirFileName": "Note Tree", + "children": [ + { + "isClone": false, + "noteId": "YtSN43OrfzaA", + "notePath": [ + "pOsGYCXsbNQG", + "gh7bpGYxajRS", + "Vc8PjrjAGuOp", + "oPVyFC7WL2Lp", + "YtSN43OrfzaA" + ], + "title": "Note tree contextual menu", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "oPVyFC7WL2Lp", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "yTjUdsOi4CIE", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "OR8WJ7Iz9K4U", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "KC1HB96bqqHX", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "bwg0e8ewQMak", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "IakOLONlIfGI", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "mHbBMPDPkVV5", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "eIg8jdvaoNNd", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "ivYnonVFBxbQ", + "isInheritable": false, + "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "TBwsyfadTA18", + "isInheritable": false, + "position": 100 + }, + { + "type": "relation", + "name": "internalLink", + "value": "0vhv7lsOLy82", + "isInheritable": false, + "position": 110 + }, + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 120 + }, + { + "type": "relation", + "name": "internalLink", + "value": "aGlEvb9hyDhS", + "isInheritable": false, + "position": 130 + }, + { + "type": "relation", + "name": "internalLink", + "value": "wArbEsdSae6g", + "isInheritable": false, + "position": 140 + }, + { + "type": "relation", + "name": "internalLink", + "value": "3seOhtN8uLIY", + "isInheritable": false, + "position": 150 + }, + { + "type": "relation", + "name": "internalLink", + "value": "KSZ04uQ2D1St", + "isInheritable": false, + "position": 160 + }, + { + "type": "relation", + "name": "internalLink", + "value": "r5JGHN99bVKn", + "isInheritable": false, + "position": 170 + }, + { + "type": "relation", + "name": "internalLink", + "value": "W8vYD3Q1zjCR", + "isInheritable": false, + "position": 180 + }, + { + "type": "relation", + "name": "internalLink", + "value": "QEAPj01N5f7w", + "isInheritable": false, + "position": 190 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-menu", + "isInheritable": false, + "position": 10 + } + ], + "format": "html", + "dataFileName": "Note tree contextual menu.html", + "attachments": [ + { + "attachmentId": "8DX1hysz3JRh", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Note tree contextual menu_.png" + }, + { + "attachmentId": "GQv4tBf9VSON", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "1_Note tree contextual menu_.png" + } + ] + }, + { + "isClone": false, + "noteId": "yTjUdsOi4CIE", + "notePath": [ + "pOsGYCXsbNQG", + "gh7bpGYxajRS", + "Vc8PjrjAGuOp", + "oPVyFC7WL2Lp", + "yTjUdsOi4CIE" + ], + "title": "Multiple selection", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "ivYnonVFBxbQ", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-list-plus", + "isInheritable": false, + "position": 20 + } + ], + "format": "html", + "dataFileName": "Multiple selection.html", + "attachments": [ + { + "attachmentId": "puanbWdFSfUM", + "title": "image.png", + "role": "image", + "mime": "image/jpg", + "position": 10, + "dataFileName": "Multiple selection_image.png" + } + ] + } ] }, { @@ -1933,39 +2152,39 @@ "mime": "text/html", "attributes": [ { - "type": "label", - "name": "iconClass", - "value": "bx bxs-dock-right", + "type": "relation", + "name": "internalLink", + "value": "BFvAtE74rbP6", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "BFvAtE74rbP6", + "value": "AxshuNRegLAv", "isInheritable": false, "position": 20 }, { "type": "relation", "name": "internalLink", - "value": "AxshuNRegLAv", + "value": "luNhaphA37EO", "isInheritable": false, "position": 30 }, { "type": "relation", "name": "internalLink", - "value": "luNhaphA37EO", + "value": "3seOhtN8uLIY", "isInheritable": false, "position": 40 }, { - "type": "relation", - "name": "internalLink", - "value": "3seOhtN8uLIY", + "type": "label", + "name": "iconClass", + "value": "bx bxs-dock-right", "isInheritable": false, - "position": 50 + "position": 10 } ], "format": "html", @@ -1980,6 +2199,79 @@ "dataFileName": "Right Sidebar_image.png" } ] + }, + { + "isClone": false, + "noteId": "r5JGHN99bVKn", + "notePath": [ + "pOsGYCXsbNQG", + "gh7bpGYxajRS", + "Vc8PjrjAGuOp", + "r5JGHN99bVKn" + ], + "title": "Recent Changes", + "notePosition": 180, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "xYmIYSP6wE3F", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "OR8WJ7Iz9K4U", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "9sRHySam5fXb", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "YtSN43OrfzaA", + "isInheritable": false, + "position": 40 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-history", + "isInheritable": false, + "position": 10 + } + ], + "format": "html", + "dataFileName": "Recent Changes.html", + "attachments": [ + { + "attachmentId": "3HsqEVy53S2H", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Recent Changes_image.png" + }, + { + "attachmentId": "dxoiP89lrRn6", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "1_Recent Changes_image.png" + } + ] } ] }, @@ -2050,17 +2342,24 @@ { "type": "relation", "name": "internalLink", - "value": "ODY7qQn5m2FT", + "value": "r5JGHN99bVKn", "isInheritable": false, "position": 80 }, { "type": "relation", "name": "internalLink", - "value": "CoFPLs3dRlXc", + "value": "ODY7qQn5m2FT", "isInheritable": false, "position": 90 }, + { + "type": "relation", + "name": "internalLink", + "value": "CoFPLs3dRlXc", + "isInheritable": false, + "position": 100 + }, { "type": "label", "name": "shareAlias", @@ -2259,6 +2558,52 @@ "position": 10, "dataFileName": "Cloning Notes_create-clone.gif" } + ], + "dirFileName": "Cloning Notes", + "children": [ + { + "isClone": false, + "noteId": "TBwsyfadTA18", + "notePath": [ + "pOsGYCXsbNQG", + "gh7bpGYxajRS", + "BFs8mudNFgCS", + "IakOLONlIfGI", + "TBwsyfadTA18" + ], + "title": "Branch prefix", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "IakOLONlIfGI", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "oPVyFC7WL2Lp", + "isInheritable": false, + "position": 20 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-rename", + "isInheritable": false, + "position": 10 + } + ], + "format": "html", + "dataFileName": "Branch prefix.html", + "attachments": [] + } ] }, { @@ -2458,6 +2803,13 @@ "isInheritable": false, "position": 10 }, + { + "type": "relation", + "name": "internalLink", + "value": "oPVyFC7WL2Lp", + "isInheritable": false, + "position": 20 + }, { "type": "label", "name": "shareAlias", @@ -2655,45 +3007,52 @@ { "type": "relation", "name": "internalLink", - "value": "GTwFsgaA0lCt", + "value": "zEY4DaJG4YT5", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "BlN9DFI679QC", + "value": "GTwFsgaA0lCt", "isInheritable": false, "position": 20 }, { "type": "relation", "name": "internalLink", - "value": "iPIMuisry3hd", + "value": "BlN9DFI679QC", "isInheritable": false, "position": 30 }, { "type": "relation", "name": "internalLink", - "value": "6f9hih2hXXZk", + "value": "iPIMuisry3hd", "isInheritable": false, "position": 40 }, { "type": "relation", "name": "internalLink", - "value": "W8vYD3Q1zjCR", + "value": "6f9hih2hXXZk", "isInheritable": false, "position": 50 }, { "type": "relation", "name": "internalLink", - "value": "xWbu3jpNWapp", + "value": "W8vYD3Q1zjCR", "isInheritable": false, "position": 60 }, + { + "type": "relation", + "name": "internalLink", + "value": "xWbu3jpNWapp", + "isInheritable": false, + "position": 70 + }, { "type": "label", "name": "iconClass", @@ -3151,6 +3510,83 @@ "isInheritable": false, "position": 20 }, + { + "type": "relation", + "name": "internalLink", + "value": "OR8WJ7Iz9K4U", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "wX4HbRucYSDD", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "ivYnonVFBxbQ", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "xYmIYSP6wE3F", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "YtSN43OrfzaA", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "9sRHySam5fXb", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "m523cpzocqaD", + "isInheritable": false, + "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6f9hih2hXXZk", + "isInheritable": false, + "position": 100 + }, + { + "type": "relation", + "name": "internalLink", + "value": "MKmLg5x6xkor", + "isInheritable": false, + "position": 110 + }, + { + "type": "relation", + "name": "internalLink", + "value": "qzNzp9LYQyPT", + "isInheritable": false, + "position": 120 + }, + { + "type": "relation", + "name": "internalLink", + "value": "oPVyFC7WL2Lp", + "isInheritable": false, + "position": 130 + }, { "type": "label", "name": "shareAlias", @@ -3168,7 +3604,16 @@ ], "format": "html", "dataFileName": "Search.html", - "attachments": [] + "attachments": [ + { + "attachmentId": "WkhcA4FN7sGX", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Search_image.png" + } + ] }, { "isClone": false, @@ -3289,7 +3734,7 @@ "wArbEsdSae6g", "9sRHySam5fXb" ], - "title": "Workspace", + "title": "Workspaces", "notePosition": 90, "prefix": null, "isExpanded": false, @@ -3303,6 +3748,13 @@ "isInheritable": false, "position": 10 }, + { + "type": "relation", + "name": "internalLink", + "value": "l0tKav7yLHGF", + "isInheritable": false, + "position": 20 + }, { "type": "label", "name": "shareAlias", @@ -3319,7 +3771,7 @@ } ], "format": "html", - "dataFileName": "Workspace.html", + "dataFileName": "Workspaces.html", "attachments": [ { "attachmentId": "V4TIsmtBh8P7", @@ -3327,7 +3779,7 @@ "role": "image", "mime": "image/jpg", "position": 10, - "dataFileName": "Workspace_image.png" + "dataFileName": "Workspaces_image.png" }, { "attachmentId": "vZSH2mOKzWBx", @@ -3335,7 +3787,7 @@ "role": "image", "mime": "image/jpg", "position": 10, - "dataFileName": "1_Workspace_image.png" + "dataFileName": "1_Workspaces_image.png" } ] }, @@ -3382,6 +3834,71 @@ "dataFileName": "Similar Notes_image.png" } ] + }, + { + "isClone": false, + "noteId": "McngOG2jbUWX", + "notePath": [ + "pOsGYCXsbNQG", + "gh7bpGYxajRS", + "wArbEsdSae6g", + "McngOG2jbUWX" + ], + "title": "Search in note", + "notePosition": 110, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "MI26XDLSAlCD", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "iPIMuisry3hd", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6f9hih2hXXZk", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "8YBEPzcpUgxw", + "isInheritable": false, + "position": 40 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-search-alt-2", + "isInheritable": false, + "position": 10 + } + ], + "format": "html", + "dataFileName": "Search in note.html", + "attachments": [ + { + "attachmentId": "vEq0g2DHEh3O", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Search in note_image.png" + } + ] } ] }, @@ -3629,6 +4146,13 @@ "type": "text", "mime": "text/markdown", "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "NwBbFdNZ9h7O", + "isInheritable": false, + "position": 10 + }, { "type": "label", "name": "shareAlias", @@ -4624,46 +5148,39 @@ "mime": "text/html", "attributes": [ { - "type": "label", - "name": "iconClass", - "value": "bx bx-highlight", + "type": "relation", + "name": "internalLink", + "value": "RnaPdbciOfeq", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "BFvAtE74rbP6", + "value": "XpOYSgsLkTJy", "isInheritable": false, "position": 20 }, { "type": "relation", "name": "internalLink", - "value": "RnaPdbciOfeq", + "value": "zEY4DaJG4YT5", "isInheritable": false, "position": 30 }, { "type": "relation", "name": "internalLink", - "value": "_optionsTextNotes", + "value": "BFvAtE74rbP6", "isInheritable": false, "position": 40 }, { - "type": "relation", - "name": "internalLink", - "value": "zEY4DaJG4YT5", + "type": "label", + "name": "iconClass", + "value": "bx bx-highlight", "isInheritable": false, - "position": 50 - }, - { - "type": "relation", - "name": "internalLink", - "value": "XpOYSgsLkTJy", - "isInheritable": false, - "position": 60 + "position": 10 } ], "format": "html", @@ -5100,37 +5617,30 @@ { "type": "relation", "name": "internalLink", - "value": "XpOYSgsLkTJy", + "value": "RnaPdbciOfeq", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "_optionsTextNotes", + "value": "XpOYSgsLkTJy", "isInheritable": false, "position": 20 }, + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 30 + }, { "type": "label", "name": "iconClass", "value": "bx bx-heading", "isInheritable": false, "position": 30 - }, - { - "type": "relation", - "name": "internalLink", - "value": "zEY4DaJG4YT5", - "isInheritable": false, - "position": 40 - }, - { - "type": "relation", - "name": "internalLink", - "value": "RnaPdbciOfeq", - "isInheritable": false, - "position": 50 } ], "format": "html", @@ -5166,35 +5676,35 @@ { "type": "relation", "name": "internalLink", - "value": "CdNpE2pqjmI6", + "value": "BlN9DFI679QC", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "iPIMuisry3hd", + "value": "4TIF1oA4VQRO", "isInheritable": false, "position": 20 }, { "type": "relation", "name": "internalLink", - "value": "QxEyIjRBizuC", + "value": "CdNpE2pqjmI6", "isInheritable": false, "position": 30 }, { "type": "relation", "name": "internalLink", - "value": "BlN9DFI679QC", + "value": "iPIMuisry3hd", "isInheritable": false, "position": 40 }, { "type": "relation", "name": "internalLink", - "value": "4TIF1oA4VQRO", + "value": "QxEyIjRBizuC", "isInheritable": false, "position": 50 }, @@ -5239,162 +5749,6 @@ "position": 10, "dataFileName": "1_Code_image.png" } - ], - "dirFileName": "Code", - "children": [ - { - "isClone": false, - "noteId": "GLks18SNjxmC", - "notePath": [ - "pOsGYCXsbNQG", - "KSZ04uQ2D1St", - "6f9hih2hXXZk", - "GLks18SNjxmC" - ], - "title": "Script API", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/markdown", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "script-api", - "isInheritable": false, - "position": 10 - } - ], - "format": "html", - "dataFileName": "Script API.html", - "attachments": [] - }, - { - "isClone": false, - "noteId": "GPERMystNGTB", - "notePath": [ - "pOsGYCXsbNQG", - "KSZ04uQ2D1St", - "6f9hih2hXXZk", - "GPERMystNGTB" - ], - "title": "Events", - "notePosition": 40, - "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": "CdNpE2pqjmI6", - "isInheritable": false, - "position": 20 - }, - { - "type": "label", - "name": "shareAlias", - "value": "events", - "isInheritable": false, - "position": 30 - } - ], - "format": "html", - "dataFileName": "Events.html", - "attachments": [] - }, - { - "isClone": false, - "noteId": "MgibgPcfeuGz", - "notePath": [ - "pOsGYCXsbNQG", - "KSZ04uQ2D1St", - "6f9hih2hXXZk", - "MgibgPcfeuGz" - ], - "title": "Custom Widgets", - "notePosition": 50, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/markdown", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "custom-widget", - "isInheritable": false, - "position": 20 - } - ], - "format": "html", - "dataFileName": "Custom Widgets.html", - "attachments": [], - "dirFileName": "Custom Widgets", - "children": [ - { - "isClone": false, - "noteId": "YNxAqkI5Kg1M", - "notePath": [ - "pOsGYCXsbNQG", - "KSZ04uQ2D1St", - "6f9hih2hXXZk", - "MgibgPcfeuGz", - "YNxAqkI5Kg1M" - ], - "title": "Word count widget", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "6tZeKvSHEUiB", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "6f9hih2hXXZk", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "s8alTXmpFR61", - "isInheritable": false, - "position": 30 - } - ], - "format": "html", - "dataFileName": "Word count widget.html", - "attachments": [ - { - "attachmentId": "JhM9NWfebzPi", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "Word count widget_image.png" - } - ] - } - ] - } ] }, { @@ -6839,72 +7193,37 @@ { "type": "relation", "name": "internalLink", - "value": "R7abl2fc6Mxi", + "value": "HI6GBBIduIgv", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "l0tKav7yLHGF", + "value": "Cq5X6iKQop6R", "isInheritable": false, "position": 20 }, { "type": "relation", "name": "internalLink", - "value": "p9kXRFAkwN4o", + "value": "BlN9DFI679QC", "isInheritable": false, "position": 30 }, { "type": "relation", "name": "internalLink", - "value": "J5Ex1ZrMbyJ6", + "value": "OFXdgB2nNk1F", "isInheritable": false, "position": 40 }, - { - "type": "relation", - "name": "internalLink", - "value": "9sRHySam5fXb", - "isInheritable": false, - "position": 50 - }, - { - "type": "relation", - "name": "internalLink", - "value": "u3YFHC9tQlpm", - "isInheritable": false, - "position": 60 - }, - { - "type": "relation", - "name": "internalLink", - "value": "R9pX4DGra2Vt", - "isInheritable": false, - "position": 70 - }, - { - "type": "relation", - "name": "internalLink", - "value": "47ZrP6FNuoG8", - "isInheritable": false, - "position": 80 - }, - { - "type": "relation", - "name": "internalLink", - "value": "OFXdgB2nNk1F", - "isInheritable": false, - "position": 90 - }, { "type": "relation", "name": "internalLink", "value": "bwZpz2ajCEwO", "isInheritable": false, - "position": 100 + "position": 50 }, { "type": "label", @@ -6925,16 +7244,345 @@ "dataFileName": "Attributes.html", "attachments": [ { - "attachmentId": "P4eRVtGFoHh2", + "attachmentId": "4YqnV7iugVCJ", "title": "image.png", "role": "image", - "mime": "image/jpg", + "mime": "image/png", "position": 10, "dataFileName": "Attributes_image.png" } ], "dirFileName": "Attributes", "children": [ + { + "isClone": false, + "noteId": "HI6GBBIduIgv", + "notePath": [ + "pOsGYCXsbNQG", + "tC7s2alapj8V", + "zEY4DaJG4YT5", + "HI6GBBIduIgv" + ], + "title": "Labels", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "R7abl2fc6Mxi", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "bwZpz2ajCEwO", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "l0tKav7yLHGF", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "OFXdgB2nNk1F", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "BlN9DFI679QC", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "vZWERwf8U3nx", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "oPVyFC7WL2Lp", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "GPERMystNGTB", + "isInheritable": false, + "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "CoFPLs3dRlXc", + "isInheritable": false, + "position": 100 + }, + { + "type": "relation", + "name": "internalLink", + "value": "AlhDUqhENtH7", + "isInheritable": false, + "position": 110 + }, + { + "type": "relation", + "name": "internalLink", + "value": "pKK96zzmvBGf", + "isInheritable": false, + "position": 120 + }, + { + "type": "relation", + "name": "internalLink", + "value": "WFGzWeUK6arS", + "isInheritable": false, + "position": 130 + }, + { + "type": "relation", + "name": "internalLink", + "value": "0ESUbbAxVnoK", + "isInheritable": false, + "position": 140 + }, + { + "type": "relation", + "name": "internalLink", + "value": "J5Ex1ZrMbyJ6", + "isInheritable": false, + "position": 150 + }, + { + "type": "relation", + "name": "internalLink", + "value": "d3fAXQ2diepH", + "isInheritable": false, + "position": 160 + }, + { + "type": "relation", + "name": "internalLink", + "value": "MgibgPcfeuGz", + "isInheritable": false, + "position": 170 + }, + { + "type": "relation", + "name": "internalLink", + "value": "m523cpzocqaD", + "isInheritable": false, + "position": 180 + }, + { + "type": "relation", + "name": "internalLink", + "value": "9sRHySam5fXb", + "isInheritable": false, + "position": 190 + }, + { + "type": "relation", + "name": "internalLink", + "value": "u3YFHC9tQlpm", + "isInheritable": false, + "position": 200 + }, + { + "type": "relation", + "name": "internalLink", + "value": "R9pX4DGra2Vt", + "isInheritable": false, + "position": 210 + }, + { + "type": "relation", + "name": "internalLink", + "value": "iRwzGnHPzonm", + "isInheritable": false, + "position": 220 + }, + { + "type": "relation", + "name": "internalLink", + "value": "BCkXAVs63Ttv", + "isInheritable": false, + "position": 230 + }, + { + "type": "relation", + "name": "internalLink", + "value": "47ZrP6FNuoG8", + "isInheritable": false, + "position": 240 + }, + { + "type": "relation", + "name": "internalLink", + "value": "KC1HB96bqqHX", + "isInheritable": false, + "position": 250 + }, + { + "type": "relation", + "name": "internalLink", + "value": "BFvAtE74rbP6", + "isInheritable": false, + "position": 260 + }, + { + "type": "relation", + "name": "internalLink", + "value": "bdUJEHsAPYQR", + "isInheritable": false, + "position": 270 + }, + { + "type": "relation", + "name": "internalLink", + "value": "AxshuNRegLAv", + "isInheritable": false, + "position": 280 + }, + { + "type": "relation", + "name": "internalLink", + "value": "81SGnPGMk7Xc", + "isInheritable": false, + "position": 290 + }, + { + "type": "relation", + "name": "internalLink", + "value": "xWbu3jpNWapp", + "isInheritable": false, + "position": 300 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-hash", + "isInheritable": false, + "position": 40 + } + ], + "format": "html", + "dataFileName": "Labels.html", + "attachments": [] + }, + { + "isClone": false, + "noteId": "Cq5X6iKQop6R", + "notePath": [ + "pOsGYCXsbNQG", + "tC7s2alapj8V", + "zEY4DaJG4YT5", + "Cq5X6iKQop6R" + ], + "title": "Relations", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "HI6GBBIduIgv", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "OFXdgB2nNk1F", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "bwZpz2ajCEwO", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "HcABDtFCkbFN", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "R9pX4DGra2Vt", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "KC1HB96bqqHX", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "BlN9DFI679QC", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "oPVyFC7WL2Lp", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "GPERMystNGTB", + "isInheritable": false, + "position": 90 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-transfer", + "isInheritable": false, + "position": 20 + } + ], + "format": "html", + "dataFileName": "Relations.html", + "attachments": [] + }, { "isClone": false, "noteId": "bwZpz2ajCEwO", @@ -6945,7 +7593,7 @@ "bwZpz2ajCEwO" ], "title": "Attribute Inheritance", - "notePosition": 10, + "notePosition": 30, "prefix": null, "isExpanded": false, "type": "text", @@ -6954,10 +7602,24 @@ { "type": "relation", "name": "internalLink", - "value": "KC1HB96bqqHX", + "value": "HI6GBBIduIgv", "isInheritable": false, "position": 10 }, + { + "type": "relation", + "name": "internalLink", + "value": "Cq5X6iKQop6R", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "KC1HB96bqqHX", + "isInheritable": false, + "position": 30 + }, { "type": "label", "name": "shareAlias", @@ -6987,7 +7649,7 @@ "OFXdgB2nNk1F" ], "title": "Promoted Attributes", - "notePosition": 20, + "notePosition": 40, "prefix": null, "isExpanded": false, "type": "text", @@ -7267,6 +7929,13 @@ "isInheritable": false, "position": 40 }, + { + "type": "relation", + "name": "internalLink", + "value": "Qjt68inQ2bRj", + "isInheritable": false, + "position": 50 + }, { "type": "label", "name": "shareAlias", @@ -7879,7 +8548,7 @@ "47ZrP6FNuoG8" ], "title": "Default Note Title", - "notePosition": 130, + "notePosition": 140, "prefix": null, "isExpanded": false, "type": "text", @@ -7895,10 +8564,17 @@ { "type": "relation", "name": "internalLink", - "value": "KC1HB96bqqHX", + "value": "habiZ3HU8Kw8", "isInheritable": false, "position": 20 }, + { + "type": "relation", + "name": "internalLink", + "value": "KC1HB96bqqHX", + "isInheritable": false, + "position": 30 + }, { "type": "label", "name": "shareAlias", @@ -7920,7 +8596,7 @@ "wX4HbRucYSDD" ], "title": "Database", - "notePosition": 150, + "notePosition": 160, "prefix": null, "isExpanded": false, "type": "text", @@ -8171,7 +8847,7 @@ "Gzjqa934BdH4" ], "title": "Configuration (config.ini or environment variables)", - "notePosition": 160, + "notePosition": 170, "prefix": null, "isExpanded": false, "type": "text", @@ -8187,7 +8863,38 @@ ], "format": "html", "dataFileName": "Configuration (config.ini or e.html", - "attachments": [] + "attachments": [], + "dirFileName": "Configuration (config.ini or environment variables)", + "children": [ + { + "isClone": false, + "noteId": "c5xB8m4g2IY6", + "notePath": [ + "pOsGYCXsbNQG", + "tC7s2alapj8V", + "Gzjqa934BdH4", + "c5xB8m4g2IY6" + ], + "title": "Trilium instance", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "cbkrhQjrkKrh", + "isInheritable": false, + "position": 10 + } + ], + "format": "html", + "dataFileName": "Trilium instance.html", + "attachments": [] + } + ] }, { "isClone": false, @@ -8197,13 +8904,55 @@ "tC7s2alapj8V", "ivYnonVFBxbQ" ], - "title": "Bulk actions", - "notePosition": 170, + "title": "Bulk Actions", + "notePosition": 180, "prefix": null, "isExpanded": false, "type": "text", "mime": "text/html", "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "HI6GBBIduIgv", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Cq5X6iKQop6R", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "oPVyFC7WL2Lp", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "yTjUdsOi4CIE", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "habiZ3HU8Kw8", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "vZWERwf8U3nx", + "isInheritable": false, + "position": 60 + }, { "type": "label", "name": "iconClass", @@ -8213,8 +8962,17 @@ } ], "format": "html", - "dataFileName": "Bulk actions.html", - "attachments": [] + "dataFileName": "Bulk Actions.html", + "attachments": [ + { + "attachmentId": "cJTc66E2BRTf", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Bulk Actions_image.png" + } + ] }, { "isClone": false, @@ -8225,7 +8983,7 @@ "4FahAwuGTAwC" ], "title": "Note source", - "notePosition": 180, + "notePosition": 190, "prefix": null, "isExpanded": false, "type": "text", @@ -8338,7 +9096,7 @@ "1YeN2MzFUluU" ], "title": "Technologies used", - "notePosition": 190, + "notePosition": 200, "prefix": null, "isExpanded": false, "type": "text", @@ -8487,7 +9245,7 @@ "m1lbrzyKDaRB" ], "title": "Note ID", - "notePosition": 200, + "notePosition": 210, "prefix": null, "isExpanded": false, "type": "text", @@ -8521,7 +9279,7 @@ "0vTSyvhPTAOz" ], "title": "Internal API", - "notePosition": 210, + "notePosition": 220, "prefix": null, "isExpanded": false, "type": "text", @@ -8559,6 +9317,154 @@ "attachments": [] } ] + }, + { + "isClone": false, + "noteId": "2mUhVmZK8RF3", + "notePath": [ + "pOsGYCXsbNQG", + "tC7s2alapj8V", + "2mUhVmZK8RF3" + ], + "title": "Hidden Notes", + "notePosition": 230, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Cq5X6iKQop6R", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "wX4HbRucYSDD", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "YKWqdJhzi2VY", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "ivYnonVFBxbQ", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "eIg8jdvaoNNd", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "QEAPj01N5f7w", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "m1lbrzyKDaRB", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "x3i7MxGccDuM", + "isInheritable": false, + "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "bdUJEHsAPYQR", + "isInheritable": false, + "position": 100 + }, + { + "type": "relation", + "name": "internalLink", + "value": "xYmIYSP6wE3F", + "isInheritable": false, + "position": 110 + }, + { + "type": "relation", + "name": "internalLink", + "value": "u3YFHC9tQlpm", + "isInheritable": false, + "position": 120 + }, + { + "type": "relation", + "name": "internalLink", + "value": "qzNzp9LYQyPT", + "isInheritable": false, + "position": 130 + }, + { + "type": "relation", + "name": "internalLink", + "value": "CdNpE2pqjmI6", + "isInheritable": false, + "position": 140 + }, + { + "type": "relation", + "name": "internalLink", + "value": "R9pX4DGra2Vt", + "isInheritable": false, + "position": 150 + }, + { + "type": "relation", + "name": "internalLink", + "value": "4TIF1oA4VQRO", + "isInheritable": false, + "position": 160 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-hide", + "isInheritable": false, + "position": 20 + } + ], + "format": "html", + "dataFileName": "Hidden Notes.html", + "attachments": [ + { + "attachmentId": "PrFEZeM6sRl6", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Hidden Notes_image.png" + } + ] } ] }, @@ -8663,21 +9569,21 @@ { "type": "relation", "name": "internalLink", - "value": "GLks18SNjxmC", + "value": "zEY4DaJG4YT5", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "zEY4DaJG4YT5", + "value": "SynTBQiBsdYJ", "isInheritable": false, "position": 20 }, { "type": "relation", "name": "internalLink", - "value": "SynTBQiBsdYJ", + "value": "GLks18SNjxmC", "isInheritable": false, "position": 30 }, @@ -8693,54 +9599,6 @@ "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", @@ -8896,6 +9754,284 @@ ] } ] + }, + { + "isClone": false, + "noteId": "GPERMystNGTB", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "GPERMystNGTB" + ], + "title": "Events", + "notePosition": 70, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "CdNpE2pqjmI6", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "c5xB8m4g2IY6", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 30 + }, + { + "type": "label", + "name": "shareAlias", + "value": "events", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-rss", + "isInheritable": false, + "position": 20 + } + ], + "format": "html", + "dataFileName": "Events.html", + "attachments": [] + }, + { + "isClone": false, + "noteId": "MgibgPcfeuGz", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "MgibgPcfeuGz" + ], + "title": "Custom Widgets", + "notePosition": 80, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "custom-widget", + "isInheritable": false, + "position": 20 + } + ], + "format": "html", + "dataFileName": "Custom Widgets.html", + "attachments": [], + "dirFileName": "Custom Widgets", + "children": [ + { + "isClone": false, + "noteId": "YNxAqkI5Kg1M", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "MgibgPcfeuGz", + "YNxAqkI5Kg1M" + ], + "title": "Word count widget", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "6tZeKvSHEUiB", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6f9hih2hXXZk", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "s8alTXmpFR61", + "isInheritable": false, + "position": 30 + } + ], + "format": "html", + "dataFileName": "Word count widget.html", + "attachments": [ + { + "attachmentId": "JhM9NWfebzPi", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Word count widget_image.png" + } + ] + }, + { + "isClone": false, + "noteId": "SynTBQiBsdYJ", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "MgibgPcfeuGz", + "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": "GLks18SNjxmC", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "GLks18SNjxmC" + ], + "title": "Script API", + "notePosition": 90, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "script-api", + "isInheritable": false, + "position": 10 + } + ], + "format": "html", + "dataFileName": "Script API.html", + "attachments": [], + "dirFileName": "Script API", + "children": [ + { + "isClone": false, + "noteId": "Q2z6av6JZVWm", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "GLks18SNjxmC", + "Q2z6av6JZVWm" + ], + "title": "Frontend API", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "html", + "attachments": [], + "dirFileName": "Frontend API", + "children": [ + { + "isClone": false, + "noteId": "habiZ3HU8Kw8", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "GLks18SNjxmC", + "Q2z6av6JZVWm", + "habiZ3HU8Kw8" + ], + "title": "FNote", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "html", + "dataFileName": "FNote.html", + "attachments": [] + } + ] + }, + { + "isClone": false, + "noteId": "MEtfsqa5VwNi", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "GLks18SNjxmC", + "MEtfsqa5VwNi" + ], + "title": "Backend API", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "html", + "dataFileName": "Backend API.html", + "attachments": [] + } + ] } ] } 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 6069a6f40..3dc7a92ca 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,18 +13,18 @@

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:

+ href="#root/_help_OFXdgB2nNk1F">Promoted Attributes. To illustrate these features, we've prepared + several showcases available in the demo notes:

It's important to note that these examples are not natively supported diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Advanced Showcases/Day Notes.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Advanced Showcases/Day Notes.html index 2b4b909ee..621717007 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Advanced Showcases/Day Notes.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Advanced Showcases/Day Notes.html @@ -27,7 +27,7 @@

-

This pattern works well also because of Cloning Notes functionality +

This pattern works well also because of Cloning Notes functionality - note can appear in multiple places in the note tree, so besides appearing under day note, it can also be categorized into other notes.

Demo

@@ -38,9 +38,9 @@ - there's a note for the whole year 2025, under it, you have "03 - March" which then contains "09 - Monday". This is our "day note" which contains some text in its content and also has some child notes (some of them are - from Task manager).

-

You can also notice how this day note has promoted attribute "weight" - where you can track your daily weight. This data is then used in Weight tracker.

+ from Task manager).

+

You can also notice how this day note has promoted attribute "weight" + where you can track your daily weight. This data is then used in Weight tracker.

Week Note and Quarter Note

Week and quarter notes are disabled by default, since it might be too much for some people. To enable them, you need to set #enableWeekNotes and #enableQuarterNotes attributes @@ -49,7 +49,7 @@ you already have some week notes created, it will not automatically change the existing week notes and might lead to some duplicates.

Templates

-

Trilium provides template functionality, +

Trilium provides template functionality, and it could be used together with day notes.

You can define one of the following relations on the root of the journal (identified by #calendarRoot label):

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 dd9a222e6..d74071e5e 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 @@ -13,9 +13,9 @@

Task Manager

-

Task Manager is a promoted attributes and +

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

+ href="#root/_help_CdNpE2pqjmI6">scriptsshowcase present in the demo notes.

Demo

@@ -24,23 +24,22 @@ doneDate attribute). Outstanding tasks are further categorized by location and arbitrary tags - whenever you change tag attribute in the task note, this task is then automatically moved to appropriate location.

-

Task Manager also integrates with day notes - - notes are cloned into - day note to both todoDate note and doneDate note (with prefix of +

Task Manager also integrates with day notes - + notes are cloned into day note to + both todoDate note and doneDate note (with prefix of either "TODO" or "DONE").

Implementation

New tasks are created in the TODO note which has ~child:template relation(see attribute inheritance) + href="#root/_help_zEY4DaJG4YT5">relation(see attribute inheritance) pointing to the task template.

Attributes

-

Task template defines several promoted attributes - +

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 - 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.

+ - event handler which is 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.

New task button

There's also "button" note which contains simple script which adds a button to create new note (task) in the TODO note.

api.addButtonToToolbar({
@@ -64,7 +63,7 @@
         

CSS

In the demo screenshot above you may notice that TODO tasks are in red color and DONE tasks are green.

-

This is done by having this CSS code note which +

This is done by having this CSS code note which defines extra CSS classes:

span.fancytree-node.todo .fancytree-title {
     color: red !important;
 }
@@ -72,9 +71,9 @@
 span.fancytree-node.done .fancytree-title {
     color: green !important;
 }
-

This code note has #appCss +

This code note has #appCss labelwhich is recognized by Trilium on startup and loaded as CSS into + href="#root/_help_zEY4DaJG4YT5">labelwhich is recognized by Trilium on startup and loaded as CSS into the application.

Second part of this functionality is based in event handler described above which assigns #cssClass label to the task to either "done" 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 193cdface..2093984ba 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 @@ -16,19 +16,19 @@

-

The Weight Tracker is a Script API showcase - present in the demo notes.

-

By adding weight as a promoted attribute in - the template from which day notes are +

The Weight Tracker is a Script API showcase + present in the demo notes.

+

By adding weight as a promoted attribute in + the template from which day notes are created, you can aggregate the data and plot weight change over time.

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 + a placeholder where a script can render its output.

-

Scripts for Render Notes are defined in a relation called ~renderNote. +

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 + The Implementation consists of two code notes that contain some HTML and JavaScript respectively, which load all the notes with a weight attribute and display their values in a chart.

To actually render the chart, we're using a third party library called @@ -36,7 +36,7 @@ href="https://www.chartjs.org/">chart.jswhich is imported as an attachment, since it's not built into Trilium.

Code

-

Here's the content of the script which is placed in a code note of +

Here's the content of the script which is placed in a code note of type JS Frontend:

async function getChartData() {
     const days = await api.runOnBackend(async () => {
         const notes = api.getNotesWithLabel('weight');
diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes.html
index 64aa70ee8..21f01f1f2 100644
--- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes.html	
+++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes.html	
@@ -13,122 +13,50 @@
        

Attributes

+
+ +

In Trilium, attributes are key-value pairs assigned to notes, providing additional metadata or functionality. There are two primary types of attributes:

    -
  1. Labels: Simple key-value text records
  2. -
  3. Relations: Named links to other notes
  4. +
  5. +

    Labels can + be used for a variety of purposes, such as storing metadata or configuring + the behaviour of notes. Labels are also searchable, enhancing note retrieval.

    +

    For more information, including predefined labels, see Labels.

    +
  6. +
  7. +

    Relations define + connections between notes, similar to links. These can be used for metadata + and scripting purposes.

    +

    For more information, including a list of predefined relations, see  + Relations.

    +

These attributes play a crucial role in organizing, categorising, and enhancing the functionality of notes.

-

- -

-

Labels

-

Labels in Trilium can be used for a variety of purposes:

-
    -
  • Metadata: Assign labels with optional values for categorization, - such as #year=1999, #genre="sci-fi", or #author="Neal Stephenson" -
  • -
  • Configuration: Labels can configure advanced features - or settings
  • -
  • Scripts and Plugins: Used to tag notes with special metadata, - such as the "weight" attribute in the Weight Tracker.
  • -
-

Labels are also searchable, enhancing note retrieval.

-

Common Labels for Advanced Configuration

-
    -
  • disableVersioning: Disables automatic versioning, ideal for - large, unimportant notes like script libraries
  • -
  • versioningLimit: Used to limit the number of revisions for - a single note
  • -
  • calendarRoot: Marks the note as the root for day notes. - Only one note should carry this label
  • -
  • archived: Hides notes from default search results and dialogs
  • -
  • excludeFromExport: Excludes notes and their subtrees from - export operations
  • -
  • run: Specifies events to trigger scripts (e.g., frontendStartup, hourly)
  • -
  • runAtHour: Defines specific hours for scripts to run, used - with #run=hourly -
  • -
  • disableInclusion: Prevents a script from being included in - parent script executions
  • -
  • sorted: Automatically sorts child notes alphabetically by - title
  • -
  • top: Keeps the note at the top of its parent's list, useful - with sorted -
  • -
  • hidePromotedAttributes: Hides certain attributes in the note's - display
  • -
  • readOnly: Sets the note to read-only mode, applicable to - text and code notes
  • -
  • autoReadOnlyDisabled: Disables automatic read-only mode for - large notes
  • -
  • appCss: Marks CSS notes used to modify Trilium’s appearance
  • -
  • appTheme: Marks full CSS themes available in Trilium's options
  • -
  • cssClass: Adds a CSS class to the note's representation in - the tree
  • -
  • iconClass: Adds a CSS class to the note's icon, useful for - distinguishing notes visually. See Note Icons.
  • -
  • pageSize: Specifies the number of items per page in note - listings
  • -
  • customRequestHandler and customResourceProvider: - Refer to Custom Request Handler -
  • -
  • widget: Marks a note as a custom widget, added to Trilium's - component tree
  • -
  • workspace and related attributes: See  - Workspace for more details
  • -
  • searchHome: Specifies the parent for new search notes
  • -
  • inbox: Designates a default location for new notes created - via the sidebar
  • -
  • sqlConsoleHome: Default location for SQL console notes
  • -
  • bookmarked and bookmarkFolder: - See Bookmarks -
  • -
  • share:[…]: See Sharing -
  • -
  • keyboardShortcut: Assigns a keyboard shortcut to open the - note
  • -
  • displayRelations and hideRelations: - Manages the display of note relations
  • -
  • titleTemplate: See Default Note Title -
  • -
  • template: Makes the note available as a template
  • -
  • toc: Controls the visibility of the table of contents
  • -
  • color: Defines the color of the note in the tree and links
  • -
  • hideChildrenOverview: Hides child notes in the parent note's - editor
  • -
  • viewType: Sets the view of child notes (grid or list)
  • -
-

Relations

-

Relations define connections between notes, similar to links.

-

Uses

-
    -
  • Metadata Relationships: For example, linking a book note - to an author note
  • -
  • Scripting: Attaching scripts to events or conditions - related to the note
  • -
-

Common Relations

-
    -
  • Event-based Relations: Such as runOnNoteCreation or runOnNoteChange, - which trigger scripts on specific actions
  • -
  • Other Relations: Include template, renderNote, widget, - and sharing-related relations
  • -
+

Viewing the list of attributes

+

Both the labels and relations for the current note are displayed in the Owned Attributes section + of the Ribbon, + where they can be viewed and edited. Inherited attributes are displayed + in the Inherited Attributes section of the ribbon, where they can + only be viewed.

+

In the list of attributes, labels are prefixed with the # character + whereas relations are prefixed with the ~ character.

Multiplicity

-

Attributes in Trilium can be "multivalued", meaning multiple attributes - with the same name can coexist.

+

Attributes in Trilium can be "multi-valued", meaning multiple attributes + with the same name can co-exist.

Attribute Definitions and Promoted Attributes

Special labels create "label/attribute" definitions, enhancing the organization and management of attributes. For more details, see Promoted Attributes.

+ href="#root/_help_OFXdgB2nNk1F">Promoted Attributes.

Attribute Inheritance

Trilium supports attribute inheritance, allowing child notes to inherit attributes from their parents. For more information, see Attribute Inheritance.

+ href="#root/_help_bwZpz2ajCEwO">Attribute Inheritance.

diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance.html index d63f95ae2..f103a2b8f 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance.html @@ -13,35 +13,53 @@

Attribute Inheritance

-

1. Standard Inheritance

+

Inheritance refers to the process of having a label or + a relation shared across multiple + notes, generally in parent-child relations (or anywhere if using templates).

+

Standard Inheritance

In Trilium, attributes can be automatically inherited by child notes if they have the isInheritable flag set to true. This means the attribute (a key-value pair) is applied to the note and all its descendants.

-

Example Use Case

-

The archived label can be set to be inheritable, allowing you - to hide a whole subtree of notes from searches and other dialogs by applying - this label at the top level.

-

2. Copying Inheritance

+

To make an attribute inheritable, simply use the visual editor for  + Labels or Relations. + Alternatively, the attribute can be manually defined where #myLabel=value becomes #myLabel(inheritable)=value when + inheritable.

+

As an example, the archived label can be set to be inheritable, + allowing you to hide a whole subtree of notes from searches and other dialogs + by applying this label at the top level.

+

Standard inheritance forces all the notes that are children (and sub-children) + of a note to have that particular label or relation. If there is a need + to have some notes not inherit one of the labels, then copying inheritance or template inheritance needs + to be used instead.

+

Copying Inheritance

Copying inheritance differs from standard inheritance by using a child: prefix in the attribute name. This prefix causes new child notes to automatically receive specific attributes from the parent note. These attributes are independent of the parent and will persist even if the note is moved elsewhere.

-

How to Use

-
    -
  • Syntax: #child:attributeName -
  • -
  • Chained Inheritance: You can chain this inheritance, such - as #child:child:attributeName, where each child down the hierarchy - receives the appropriate attribute.
  • -
-

Example

If a parent note has the label #child:exampleAttribute, all - newly created child notes will inherit the #exampleAttribute label. + newly created child notes (one level deep) will inherit the #exampleAttribute label. This can be useful for setting default properties for notes in a specific section.

-

3. Template Inheritance

-

Attributes can also be inherited from templates. +

Similarly, for relations use ~child:myRelation.

+

Due to the way it's designed, copying inheritance cannot be used to cascade + infinitely within a hierarchy. For that use case, consider using either + standard inheritance or templates.

+

Chained inheritance

+

It is possible to define labels across multiple levels of depth. For example, #child:child:child:foo applied + to a root note would create:

+
    +
  • #child:child:foo on the first-level children.
  • +
  • #child:foo on the second-level children.
  • +
  • #foo on the third-level children.
  • +
+

Similarly, use ~child:child:child:foo if dealing with relations.

+

Do note that same as simple copying inheritance, the changes will not + apply retroactively to existing notes in the hierarchy, it will only apply + to the newly created notes.

+

Template Inheritance

+

Attributes can also be inherited from Templates. When a new note is created using a template, it inherits the attributes defined in that template. This is particularly useful for maintaining consistency across notes that follow a similar structure or function.

diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes/Labels.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes/Labels.html new file mode 100644 index 000000000..2b5656b90 --- /dev/null +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes/Labels.html @@ -0,0 +1,405 @@ + + + + + + + + Labels + + + +
+

Labels

+ +
+

A label is an attribute of a note + which has a name and optionally a value.

+

Common use cases

+
    +
  • Metadata for personal use: Assign labels with optional + values for categorization, such as #year=1999, #genre="sci-fi", + or #author="Neal Stephenson". This can be combined with  + Promoted Attributes to make their display more user-friendly.
  • +
  • Configuration: Labels can configure advanced features + or settings (see reference below).
  • +
  • Scripts and Plugins: Used to tag notes with special metadata, + such as the "weight" attribute in the Weight Tracker.
  • +
+

Creating a label using the visual editor

+
    +
  1. Go to the Owned Attributes section in the Ribbon.
  2. +
  3. Press the + button (Add new attribute) to the right.
  4. +
  5. Select Add new label for the relation.
  6. +
+ +

While in the visual editor:

+
    +
  • Set the desired name
  • +
  • Optionally, set the value of the label. Labels can exist without a value.
  • +
  • Check Inheritable if the label should be inherited by the child + notes as well. See Attribute Inheritance for + more information.
  • +
+

Creating a label manually

+

In the Owned Attributes section in the Ribbon:

+
    +
  • To create a label called myLabel with no value, simply type #myLabel.
  • +
  • To create a label called myLabel with a value value, + simply type #myLabel=value.
  • +
  • If the value contains spaces, then the text must be quoted: #myLabel="Hello world".
  • +
  • If the string contains quotes (regardless of whether it has spaces), then + the text must be quoted with apostrophes instead: #myLabel='Hello "world"'.
  • +
  • To create an inheritable label called myLabel, simply write #myLabel(inheritable) for + no value or #myLabel(inheritable)=value if there is a value.
  • +
+

Predefined labels

+

This is a list of labels that Trilium natively supports.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LabelDescription
disableVersioning + Disables automatic creation of Note Revisions for + a particular note. Useful for e.g. large, but unimportant notes - e.g. + large JS libraries used for scripting.
versioningLimit + Limits the maximum number of Note Revisions for + a particular note, overriding the global settings.
calendarRoot + Marks the note which should be used as root for Day Notes. Only one should be marked + as such.
archived + Hides notes from default search results and dialogs. Archived notes can + optionally be hidden in the Note Tree.
excludeFromExport + Excludes this note and its children when exporting.
run, runOnInstance, runAtHour + See Events.
disableInclusion + Scripts with this label won't be included into parent script execution.
sorted + +

Keeps child notes sorted by title alphabetically.

+

When given a value, it will sort by the value of another label instead. + If one of the child notes doesn't have the specified label, the title will + be used for them instead.

+
sortDirection + +

If sorted is applied, specifies the direction of the sort:

+
    +
  • ASC, ascending (default)
  • +
  • DESC, descending
  • +
+
sortFoldersFirst + If sorted is applied, folders (notes with children) will be + sorted as a group at the top, and the rest will be sorted.
top + If sorted is applied to the parent note, keeps given note on + top in its parent.
hidePromotedAttributes + Hide Promoted Attributes on + this note. Generally useful when defining inherited attributes, but the + parent note doesn't need them.
readOnly + Marks a note to be always be read-only, + if it's a supported note (text, code, mermaid).
autoReadOnlyDisabled + Disables automatic read-only mode for + the given note.
appCss + Marks CSS notes which are loaded into the Trilium application and can + thus be used to modify Trilium's looks. See Custom app-wide CSS for more info.
appTheme + Marks CSS notes which are full Trilium themes and are thus available in + Trilium options. See Theme development for + more information.
appThemeBase + Set to next, next-light, or next-dark to + use the corresponding TriliumNext theme (auto, light or dark) as the base + for a custom theme, instead of the legacy one. See Customize the Next theme for more + information.
cssClass + Value of this label is then added as CSS class to the node representing + given note in the Note Tree. + This can be useful for advanced theming. Can be used in template notes.
iconClass + value of this label is added as a CSS class to the icon on the tree which + can help visually distinguish the notes in the tree. Example might be bx + bx-home - icons are taken from boxicons. Can be used in template notes.
pageSize + Specifies the number of items per page in Note List.
customRequestHandler + See Custom Request Handler.
customResourceProvider + See Custom Resource Providers.
widget + Marks this note as a custom widget which will be added to the Trilium + component tree. See Custom Widgets for + more information.
searchHome + New search notes will be created as children of this note (see  + Saved Search).
workspace and related attributesSee Workspaces.
inbox + default inbox location for new notes - when you create a note using new note button + in the sidebar, notes will be created as child notes in the note marked + as with #inbox label.
sqlConsoleHome + Default location of SQL Console notes
bookmarked + Indicates this note is a bookmark.
bookmarkFolder + Note with this label will appear in bookmarks as folder (allowing access + to its children). See Bookmarks for + more information.
share* + See the attribute reference in Sharing.
displayRelations, hideRelations + Comma delimited names of relations which should be displayed/hidden in + a Relation Map (both + the note type and the Note Map (Link map, Tree map) general + functionality).
titleTemplate + +

Default title of notes created as children of this note. This value is + evaluated as a JavaScript string and thus can be enriched with dynamic + content via the injected now and parentNote variables.

+

Examples:

+
    +
  • ${parentNote.getLabel('authorName')}'s literary works +
  • +
  • Log for ${now.format('YYYY-MM-DD HH:mm:ss')} +
  • +
  • to mirror the parent's template.
  • +
+

See Default Note Title for + more info.

+
template + This note will appear in the selection of available template when creating + new note. See Templates for + more information.
toc + Controls the display of the Table of contents for + a given note. #toc or #toc=show to always display + the table of contents, #toc=false to always hide it.
color + defines color of the note in note tree, links etc. Use any valid CSS color + value like 'red' or #a13d5f
keyboardShortcut + Defines a keyboard shortcut which will immediately jump to this note. + Example: 'ctrl+alt+e'. Requires frontend reload for the change to take + effect.
keepCurrentHoisting + Opening this link won't change hoisting even if the note is not displayable + in the current hoisted subtree.
executeButton + Title of the button which will execute the current code note
executeDescription + Longer description of the current code note displayed together with the + execute button
excludeFromNoteMap + Notes with this label will be hidden from the Note Map.
newNotesOnTop + New notes will be created at the top of the parent note, not on the bottom.
hideHighlightWidget + Hides the Highlights list widget
hideChildrenOverview + Hides the Note List for + that particular note.
printLandscape + When exporting to PDF, changes the orientation of the page to landscape + instead of portrait.
printPageSize + When exporting to PDF, changes the size of the page. Supported values: A0, A1, A2, A3, A4, A5, A6, Legal, Letter, Tabloid, Ledger.
geolocation + Indicates the latitude and longitude of a note, to be displayed in a  + Geo Map.
calendar:* + Defines specific options for the Calendar View.
viewType + Sets the view of child notes (e.g. grid or list). See Note List for more information.
+
+
+
+ + + \ No newline at end of file diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes/Promoted Attributes.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes/Promoted Attributes.html index e44de65a9..81450f2ff 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes/Promoted Attributes.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes/Promoted Attributes.html @@ -13,7 +13,7 @@

Promoted Attributes

-

Promoted attributes are attributes which +

Promoted attributes are attributes which are considered important and thus are "promoted" onto the main note UI. See example below:

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

You can notice tag attribute definition. These "definition" attributes define how the "value" attributes should behave.

So there's one attribute for value and one for definition. But notice - how definition attribute is Inheritable, + how definition attribute is Inheritable, meaning that it's also applied to all descendant note. So in a way, this definition is used for the whole subtree while "value" attributes are applied only for this note.

diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes/Relations.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes/Relations.html new file mode 100644 index 000000000..c80064712 --- /dev/null +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes/Relations.html @@ -0,0 +1,159 @@ + + + + + + + + Relations + + + +
+

Relations

+ +
+

A relation is similar to a label, + but instead of having a text value it refers to another note.

+

Common use cases

+
    +
  • Metadata Relationships for personal use: For example, + linking a book note to an author note. +
    This can be combined with Promoted Attributes to + make their display more user-friendly.
  • +
  • Configuration: For configuring some notes such as  + Render Note, or configuring Sharing or  + Templates (see the list below).
  • +
  • Scripting: Attaching scripts to events or conditions + related to the note.
  • +
+

Creating a relation using the visual editor

+
    +
  1. Go to the Owned Attributes section in the Ribbon.
  2. +
  3. Press the + button (Add new attribute) to the right.
  4. +
  5. Select Add new relation for the relation.
  6. +
+ +

While in the visual editor:

+
    +
  • Set the desired name
  • +
  • Set the Target note (the note to point to). Unlike labels, relations cannot + exist with a target note.
  • +
  • Check Inheritable if the label should be inherited by the child + notes as well. See Attribute Inheritance for + more information.
  • +
+

Creating a relation manually

+

In the Owned Attributes section in the Ribbon:

+
    +
  • To create a relation called myRelation: +
      +
    • First type ~myRelation=@ .
    • +
    • After this, an autocompletion box should appear.
    • +
    • Type the title of the note to point to and press Enter to confirm + (or click the desired note).
    • +
    • Alternatively copy a note from the Note Tree and + paste it after the = sign (without the @ , in this + case).
    • +
    +
  • +
  • To create an inheritable relation, follow the same steps as previously + described but instead of ~myRelation write ~myRelation(inheritable).
  • +
+

Predefined relations

+

These relations are supported and used internally by Trilium.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LabelDescription
runOn* + See Events +
template + note's attributes will be inherited even without a parent-child relationship, + note's content and subtree will be added to instance notes if empty. See + documentation for details.
inherit + note's attributes will be inherited even without a parent-child relationship. + See Templates for + a similar concept. See Attribute Inheritance in + the documentation.
renderNote + notes of type Render Note will + be rendered using a code note (HTML or script) and it is necessary to point + using this relation to which note should be rendered
widget_relation + target of this relation will be executed and rendered as a widget in the + sidebar
shareCss + CSS note which will be injected into the share page. CSS note must be + in the shared sub-tree as well. Consider using share_hidden_from_tree and share_omit_default_css as + well.
shareJs + JavaScript note which will be injected into the share page. JS note must + be in the shared sub-tree as well. Consider using share_hidden_from_tree.
shareTemplate + Embedded JavaScript note that will be used as the template for displaying + the shared note. Falls back to the default template. Consider using share_hidden_from_tree.
shareFavicon + Favicon note to be set in the shared page. Typically you want to set it + to share root and make it inheritable. Favicon note must be in the shared + sub-tree as well. Consider using share_hidden_from_tree.
+
+
+
+ + + \ No newline at end of file diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes_image.png index 2ea269012..bb52b5001 100644 Binary files a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes_image.png and b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes_image.png differ diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Bulk Actions.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Bulk Actions.html new file mode 100644 index 000000000..3f354ef4a --- /dev/null +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Bulk Actions.html @@ -0,0 +1,189 @@ + + + + + + + + Bulk Actions + + + +
+

Bulk Actions

+ +
+
+ +
+

The Bulk Actions dialog makes it easy to apply changes to multiple + notes at once, ranging from simple actions such as adding or removing a + label to being executing custom scripts.

+

Interaction

+
    +
  • The first step is to select the notes in the Note Tree. It's possible to apply bulk + actions to: +
      +
    • A single note (and potentially its child notes) simply by clicking on + it (with a left click or a right click).
    • +
    • Multiple notes. See Multiple selection on + how to do so.
    • +
    +
  • +
  • Right click in the Note Tree and + select AdvancedApply bulk actions.
  • +
  • By default, only the selected notes will be affected. To also include + all the descendants of the notes, check Include descendants of the selected notes. + The number of affected notes at the top of the dialog will update to reflect + the change.
  • +
  • Click on which action to apply from the Available actions section. + A detailed description of each is available in the next section. +
      +
    • For each action selected, the Chosen actions section will update + to reveal the entry. Each action will have its own configuration.
    • +
    • To remove an action, simply press the X button to the right of it.
    • +
    • It is possible to apply multiple actions of the same type, such as adding + multiple types.
    • +
    +
  • +
  • When all the actions are defined, press Execute bulk actions to + trigger all of them at once.
  • +
  • For convenience, the last bulk action configuration is saved for further + use and will be restored when entering the dialog again.
  • +
+

Actions

+

Labels

+

These actions operate the Labels of + a note:

+
    +
  • Add label +
      +
    • For each note, if it doesn't already have a label of + the given name, it will create it. Keep the New value field empty + to create a label without a value, or complete it to assign a value.
    • +
    • If a note already has this label, its value will be updated.
    • +
    +
  • +
  • Update label value +
      +
    • For each note, if it has a label of + the given name, it will change its value to the specified one. Leave New value field + empty to create a label without a value.
    • +
    • Notes without the label will not be affected.
    • +
    +
  • +
  • Rename label +
      +
    • For each note, if it has a label of + the given name, it will be renamed/replaced with a label of the new name. + The value of the label (if present) will be kept intact.
    • +
    • Notes without the label will not be affected.
    • +
    +
  • +
  • Delete label +
      +
    • For each note, if it has a label of a given name, it will be deleted (regardless + of whether it has a value or not).
    • +
    • Notes without the label will not be affected.
    • +
    +
  • +
+

Relations

+

These actions operate the Relations of + a note:

+
    +
  • Add relation +
      +
    • For each note, it will create a relation pointing to the given note.
    • +
    • Notes without this relation will not be affected.
    • +
    +
  • +
  • Update relation target +
      +
    • For each note, it will modify a relation to point to the newly given note.
    • +
    • Notes without this relation will not be affected.
    • +
    +
  • +
  • Rename relation +
      +
    • For each note, if it has a relation of the given name, it will be renamed/replaced + with a relation of the new name. The target note of the relation will be + kept intact.
    • +
    • Notes without this relation will not be affected.
    • +
    +
  • +
  • Delete relation +
      +
    • For each note, if it has a relation of the given name, it will be deleted.
    • +
    • Notes without this relation will not be affected.
    • +
    +
  • +
+

Notes

+
    +
  • Rename note +
      +
    • For each note, it will change the title of the note to the given one.
    • +
    • As a more advanced use case, the note can be a “template string” which + allows for dynamic values with access to the note information via  + FNote, for example: +
        +
      • NEW: ${note.title} will prefix all notes with NEW: .
      • +
      • ${note.dateCreatedObj.format('MM-DD:')}: ${note.title} will + prefix the note titles with each note's creation date (in month-day format).
      • +
      +
    • +
    +
  • +
  • Move note +
      +
    • For each note, it will be moved to the specified parent note.
    • +
    • As an alternative for less complex situations, the notes can be moved + directly from within the Note Tree via + cut → paste or via the contextual menu.
    • +
    +
  • +
  • Delete note +
      +
    • For each note, it will be deleted.
    • +
    • As an alternative for less complex situations, the notes can be removed + directly from within the Note Tree by + selecting them and pressing Delete.
    • +
    +
  • +
  • Delete note revisions + +
  • +
+

Others

+
    +
  • Execute script +
      +
    • For more complex scenarios, it is possible to type in a JavaScript expression + in order to apply the necessary changes.
    • +
    • Examples: +
        +
      • +

        To apply a suffix (- suffix in this example), to the note + title:

        note.title = note.title + " - suffix";
        +
      • +
      • +

        To alter attributes of a note based on another attribute, such as setting + the #shareAlias label to the title of the note:

        note.setLabel("shareAlias", note.title)
        +
      • +
      +
    • +
    +
  • +
+
+
+ + + \ No newline at end of file diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Bulk Actions_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Bulk Actions_image.png new file mode 100644 index 000000000..ea73dd92b Binary files /dev/null and b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Bulk Actions_image.png differ diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Bulk actions.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Bulk actions.html deleted file mode 100644 index 1def3fbf0..000000000 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Bulk actions.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - Bulk actions - - - -
-

Bulk actions

- -
-

Execute script

-

For more complex scenarios, it is possible to type in a JavaScript expression - in order to apply the necessary changes.

-

To apply a suffix (- suffix in this example), to the note - title:

note.title = note.title + " - suffix";
-

To alter attributes of a note in a bulk action, such as setting the #shareAlias label - to the title of the note:

note.setLabel("shareAlias", note.title)
-
-
- - - \ No newline at end of file diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance.html new file mode 100644 index 000000000..6d35bddce --- /dev/null +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance.html @@ -0,0 +1,37 @@ + + + + + + + + Trilium instance + + + +
+

Trilium instance

+ +
+

A Trilium instance represents a server. If Synchronization is set up, since + multiple servers are involved (the one from the desktop client and the + one the synchronisation is set up with), sometimes it can be useful to + distinguish the instance you are running on.

+

Setting the instance name

+

To set up a name for the instance, modify the config.ini:

[General]
+instanceName=Hello
+

Distinguishing the instance on back-end

+

Use api.getInstanceName() to obtain the instance name of the + current server, as specified in the config file or in environment variables.

+

Limiting script runs based on instance

+

For a script that is run periodically or on a certain event, it's possible + to limit it to certain instances without having to change the code. Just + add runOnInstance and set as the value the instance name where + the script should run. To run on multiple named instances, simply add the + label multiple times.

+
+
+ + + \ No newline at end of file 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 8c491ef80..c825d72da 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,14 +13,14 @@

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).

Create note from outside Trilium

Let's take a look at an example. The goal is to provide a REST endpoint to which we can send title and content and Trilium will create a note.

-

We'll start with creating a JavaScript backend code note containing:

const {req, res} = api;
+        

We'll start with creating a JavaScript backend code note containing:

const {req, res} = api;
 const {secret, title, content} = req.body;
 
 if (req.method == 'POST' && secret === 'secret-password') {
@@ -55,7 +55,7 @@ Content-Type: application/json
 }+++++++++++++++++++++++++++++++++++++++++++++++

Notice the /custom part in the request path - Trilium considers any request with this prefix as "custom" and tries to find a matching handler - by looking at all notes which have customRequestHandler label. + by looking at all notes which have customRequestHandler label. Value of this label then contains a regular expression which will match the request path (in our case trivial regex "create-note").

Trilium will then find our code note created above and execute it. api.req, api.res are @@ -68,12 +68,12 @@ Content-Type: application/json and you need to take care of this yourself.

Once we pass these checks we will just create the desired note using Script API.

+ href="#root/_help_GLks18SNjxmC">Script API.

Custom resource provider

Another common use case is that you want to just expose a file note - in such case you create label customResourceProvider (value is again path regex).

-

For more information, see Custom Resource Providers.

+

For more information, see Custom Resource Providers.

Advanced concepts

api.req and api.res are Express.js objects - you can always look into its documentation for 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 be62b8869..1abcd2e14 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 @@ -16,30 +16,30 @@

Your Trilium data is stored in a SQLite database which contains all notes, tree structure, metadata, and most of the configuration. The database file is named document.db and is stored in the - application's default Data directory.

+ application's default Data directory.

Demo Notes

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

-

For more information see Demo Notes.

+

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 directly, you can use a tool such as SQLite Browser to work directly on the database file.

-

See Manually altering the database for +

See Manually altering the database for more information.

How to Reset the Database

If you are experimenting with Trilium and want to return it to its original state, you can do that by deleting the current database. When you restart the application, it will generate a new database containing the original demo notes.

-

To delete the database, simply go to the data directory and +

To delete the database, simply go to the data directory and delete the document.db file (and any other files starting with document.db).

If you do not need to preserve any configurations that might be stored - in the config.ini file, you can just delete all of the data directory's contents + in the config.ini file, you can just delete all of the data directory's contents to fully restore the application to its original state. You can also review - the configuration file - to provide all config.ini values as environment variables instead.

+ the configuration file to provide + all config.ini values as environment variables instead.

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 index bc15cd499..236e974bf 100644 --- 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 @@ -16,15 +16,15 @@

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

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 d831e67c7..b1316d019 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).

@@ -32,7 +32,7 @@

To do so:

  1. In the main menu, select File → Open database… and navigate to the database - in the Data directory.
  2. + in the Data directory.
  3. Select the Execute SQL tab.
  4. Type in the desired SQL statement.
  5. Press the "Play" button in the toolbar underneath the "Execute SQL" tab diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.html index b46213d83..ea1a5e518 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.html @@ -14,7 +14,7 @@

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

    -

    It can be accessed by going to the global menu → +

    It can be accessed by going to the global menu → Advanced → Open SQL Console.

    @@ -42,7 +42,7 @@

    Saved SQL console

    SQL queries or commands can be saved into a dedicated note.

    To do so, simply write the query and press the - button. Once saved, the note will appear in Day Notes.

    + button. Once saved, the note will appear in Day Notes.

    • The SQL expression will not be displayed by default, but it can still be viewed by going to the note context menu and selecting Note source.
    • diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Default Note Title.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Default Note Title.html index ee8b6e01d..2bb827d7e 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Default Note Title.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Default Note Title.html @@ -18,7 +18,7 @@ note title.

      For this use case, Trilium (since v0.52) supports #titleTemplate label. You can create such a label for a given note, assign it a value, + href="#root/_help_zEY4DaJG4YT5">label. You can create such a label for a given note, assign it a value, and this value will be used as a default title when creating child notes. As with other labels, you can make it inheritable to apply recursively, and you can even place it on the root note to have it applied globally @@ -42,23 +42,31 @@

      The value of #titleTemplate is evaluated at the point of note's creation as a JavaScript string, which means it can be enriched with the help of JS string interpolation with dynamic data.

      -

      As an example, imagine you collect server outage incidents and write some - notes. It looks like this:

      +

      Second variable injected is parentNote which gives access to + the parent FNote.

      +

      See also Templates which + provides similar capabilities, including default note's content.

      +

      Examples

        -
      • Incidents +
      • Imagine you collect server outage incidents and write some notes. It looks + like this:
          -
        • 2022-05-09: System crash
        • -
        • 2022-05-15: Backup delay
        • +
        • Incidents +
            +
          • 2022-05-09: System crash
          • +
          • 2022-05-15: Backup delay
          • +
          +
        • +
        • You can automatize the date assignment by assigning a label #titleTemplate="${now.format('YYYY-MM-DD')}: " to + the parent note "Incidents". Whenever a new child note is created, the + title template is evaluated with the injected now object.
      • +
      • To use a parent's attribute in the title of new notes: #titleTemplate="${parentNote.getLabelValue('authorName')}'s literary works" +
      • +
      • To mirror the parent's note title: ${parentNote.title} +
      -

      You can automatize the date assignment by assigning a label #titleTemplate="${now.format('YYYY-MM-DD')}: " to - the parent note "Incidents". Whenever a new child note is created, the - title template is evaluated with the injected now object.

      -

      Second variable injected is parentNote, - an example could be #titleTemplate="${parentNote.getLabelValue('authorName')}'s literary works".

      -

      See also [[template]] which provides similar - capabilities, including default note's content.

diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Hidden Notes.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Hidden Notes.html new file mode 100644 index 000000000..3e72952d6 --- /dev/null +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Hidden Notes.html @@ -0,0 +1,202 @@ + + + + + + + + Hidden Notes + + + +
+

Hidden Notes

+ +
+
+ +
+

For easy extensibility, a lot of features in Trilium make use of actual + notes to store information as opposed to having them stored in a separate + location in the database. This allows some functions such as AttributesRelations or even Search and Links to be able to operate on + them.

+

As the name suggests, these notes are hidden to the user by default to + prevent cluttering the note tree and to prevent them from being accidentally + deleted.

+

The hidden notes are stored in the user's Database just like normal notes, + but they have a unique Note ID which + allows them to be distinguished from the normal ones.

+

Accessing the hidden note tree

+

From the Global menu, + select AdvancedShow Hidden Subtree.

+

Contents of the hidden note tree

+

Here is a brief summary of all the notes within the hidden tree:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NoteDescription
Note Map + +

This note is actually opened when the Note Map feature + that is accessed from the Launch Bar.

+

It is possible to create any child notes in it without any additional + meaning. For example, it can be used to store a list of note maps which + can be linked to from other notes or bookmarked.

+
SQL Console History + +

When SQL queries or commands are executed in the SQL Console, they are stored here, + grouped by month. Only the query is stored and not the results.

+

This section can be accessed without going to the hidden tree by simply + going to the Global menu and + selecting Advanced → Open SQL Console History.

+

Notes can be added as children of this tree, but it's generally not recommended + to do so to not interfere with the normal history process.

+
Search History + +

Whenever a search is executed from the full Search, the query will be stored here, + grouped by month. Only the search parameters are stored and not the results + themselves.

+

This section can be accessed without going to the hidden tree by simply + going to the Global menu and + selecting Advanced → Open Search History.

+

Notes can be added as children of this tree, but it's generally not recommended + to do so to not interfere with the normal history process.

+
Bulk Action + +

This section is used for Bulk Actions. + The last configuration for bulk actions will be stored as part of this + note, each action in its own action label.

+

Notes can be added as children of this tree, but there won't be any benefit + in doing so.

+
Backend Log + +

This note corresponds to the backend log feature (see Error logs).

+

This item can be accessed without going to the hidden try by going to + the Global menu and + selecting Advanced → Show backend log.

+
User Hidden + This section can be used by scripts to + create their own notes that should not be directly visible to the user. + The note can be identified by scripts by its unique ID: _userHidden +
Launch Bar Templates + +

This section contains the templates for the creation of launchers in the  + Launch Bar. It is not possible to create child notes here.

+

Theoretically some of the notes here can be customized, but there's not + much benefit to be had in doing so.

+
Shared Notes + +

This tree lists all of the notes that are shared publicly. + It can be useful to track down which notes are shared regardless of their + position in the note tree.

+

This section can be accessed without going to the hidden tree simply by + going to the Global menu and + selecting Show Shared Notes Subtree.

+

Sub-notes cannot be created here.

+
Launch Bar + +

The tree contains both available and displayed items of the Launch Bar.

+

This section can be accessed without going to the hidden tree by:

+
    +
  • Going to the Global menu and + selecting Configure Launchbar.
  • +
  • Right-clicking an empty space on the Launch Bar and + selecting Configure Launchbar.
  • +
+

Sub-notes cannot be created here.

+
Options + +

This section stores the list of Options.

+

This section can be accessed without going to the hidden tree by:

+
    +
  • Going to the Global menu and + selecting Options.
  • +
  • Pressing the dedicated Options icon in the Launch Bar.
  • +
+
Mobile Launch Bar + +

This is very similar to the Launch Bar, but is dedicated for the + mobile UI only.

+

Accessing it outside the Launch Bar is the same as the Launch Bar, + but needs to be done so from the mobile interface.

+
User Guide + This is where the note structure for the User Guide is actually stored. + Only the metadata is stored, as the help itself is present as actual files + in the application directory.
+
+
+
+ + + \ No newline at end of file diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Hidden Notes_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Hidden Notes_image.png new file mode 100644 index 000000000..60c4c4802 Binary files /dev/null and b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Hidden Notes_image.png differ diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Note ID.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Note ID.html index b3a926fea..7c980c19a 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Note ID.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Note ID.html @@ -22,7 +22,7 @@

When notes are exported, their note ID is kept in the metadata of the export. However when they are imported back in, a new note ID is generated for all the notes. This also includes other entities that are part of the - import/export process such as Attachments.

+ import/export process such as Attachments.

Note collisions

Since the Note ID is a fixed-width randomly generated number, due to the Note Map, which shows the hierarchical tree structure.

Link Map

-

Shows relations between notes:

+

Shows relations between notes:

@@ -33,11 +33,11 @@

Dedicated note type

Apart from the note map feature which can be accessed from any note, it is also possible to create a dedicated note which will display the relations - in full screen. See Note Map for + in full screen. See Note Map for more information.

See also

-

Relation map is a similar - concept, with some differences:

+

Relation map is a similar concept, + with some differences:

  • note map is automatically generated while relation map must be created manually
  • diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Note source.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Note source.html index 493f48c2f..85c1bd410 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Note source.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Note source.html @@ -15,48 +15,47 @@

    Understanding the source code of the different notes

    Internally, the structure of the content of each note is different based - on the Note Types.

    + on the Note Types.

    For example:

      -
    • Text notes are +
    • Text notes are represented internally as HTML, using the CKEditor representation. - Note that due to the custom plugins, some HTML elements are specific to - Trilium only, for example the admonitions.
    • -
    • Code notes are + href="#root/_help_MI26XDLSAlCD">CKEditor representation. Note + that due to the custom plugins, some HTML elements are specific to Trilium + only, for example the admonitions.
    • +
    • Code notes are plain text and are represented internally as-is.
    • -
    • Geo Map notes +
    • Geo Map notes contain only minimal information (viewport, zoom) as a JSON.
    • -
    • Canvas notes +
    • Canvas notes are represented as JSON, with Trilium's own information alongside with  Excalidraw's internal JSON representation format.
    • -
    • Mind Map notes + class="reference-link" href="#root/_help_H0mM1lTxF9JI">Excalidraw's internal JSON representation format.
    • +
    • Mind Map notes are represented as JSON, with the internal format of MindElixir.
    • + href="#root/_help_N4IDkixaDG9C">MindElixir.

    Note that some information is also stored as Attachments. - For example Canvas notes - use the attachments feature to store the custom libraries, and alongside - with Mind Map and - other similar note types it stores an SVG representation of the content - for use in other features such as including in other notes, shared notes, - etc.

    + href="#root/_help_0vhv7lsOLy82">Attachments. For example Canvas notes use the attachments + feature to store the custom libraries, and alongside with Mind Map and other similar note + types it stores an SVG representation of the content for use in other features + such as including in other notes, shared notes, etc.

    Here's part of the HTML representation of this note, as it's stored in the database (but prettified).

    <h2>
     	Understanding the source code of the different notes
     </h2>
     <p>
     	Internally, the structure of the content of each note is different based on the&nbsp;
    -	<a class="reference-link" href="../Note%20Types.html">
    +	<a class="reference-link" href="#root/_help_KSZ04uQ2D1St">
     		Note Types
     	</a>
     	.
     </p>

    Viewing the source code

    It is possible to view the source code of a note by pressing the contextual - menu in Note buttons and + menu in Note buttons and selecting Note source.

    diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Sharing.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Sharing.html index 3ba0c21d5..9a1dc9135 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Sharing.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Sharing.html @@ -17,8 +17,9 @@ documents. This feature is particularly useful for publishing content directly from your Trilium notes, making it accessible to others online.

    Prerequisites

    -

    To use the sharing feature, you must have a server installation of - Trilium. This is necessary because the notes will be hosted from the server.

    +

    To use the sharing feature, you must have a Server Installation of Trilium. + This is necessary because the notes will be hosted from the server.

    How to Share a Note

    1. @@ -58,20 +59,21 @@

      Password Protection

      To protect shared notes with a username and password, you can use the #shareCredentials attribute. Add this label to the note with the format #shareCredentials="username:password". - To protect an entire subtree, make sure the label is inheritable.

      + To protect an entire subtree, make sure the label is inheritable.

      Advanced Sharing Options

      Customizing the Appearance of Shared Notes

      The default shared page is basic in design, but you can customize it using your own CSS:

        -
      • Custom CSS: Link a CSS code note to - the shared page by adding a ~shareCss relation to the note. - If you want this style to apply to the entire subtree, make the label inheritable. - You can hide the CSS code note from the tree navigation by adding the #shareHiddenFromTree label.
      • +
      • Custom CSS: Link a CSS Code note to the shared page by + adding a ~shareCss relation to the note. If you want this style + to apply to the entire subtree, make the label inheritable. You can hide + the CSS code note from the tree navigation by adding the #shareHiddenFromTree label.
      • Omitting Default CSS: For extensive styling changes, use the #shareOmitDefaultCss label to avoid conflicts with Trilium's default stylesheet.
      • + href="#root/_help_Wy267RK4M69c">default stylesheet.

      Adding JavaScript

      You can inject custom JavaScript into the shared note using the ~shareJs relation. @@ -112,16 +114,6 @@ for (const attr of parentNote.attributes) { making it easier to use Trilium as a fully-fledged website. Consider combining this with the #shareIndex label, which will display a list of all shared notes.

      -

      Additional Options

      -
        -
      • Raw Note Sharing: Use the #shareRaw label - to share a note without any HTML wrapper.
      • -
      • Disallow Robot Indexing: Add the #shareDisallowRobotIndexing label - to prevent search engines from indexing the shared page by including a noindex, follow meta - tag and X-Robots-Tag: noindex header.
      • -
      • Shared Notes Index: For text notes with the #shareIndex label, - the content will display a list of all shared note roots.
      • -

      Limitations

      While the sharing feature is powerful, it has some limitations:

        @@ -135,6 +127,84 @@ for (const attr of parentNote.attributes) {
      • Include Notes: Not supported.

      Some of these limitations may be addressed in future updates.

      +

      Attribute reference

      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      AttributeDescription
      shareHiddenFromTree + this note is hidden from left navigation tree, but still accessible with + its URL
      shareExternalLink + note will act as a link to an external website in the share tree
      shareAlias + define an alias using which the note will be available under https://your_trilium_host/share/[your_alias] +
      shareOmitDefaultCss + default share page CSS will be omitted. Use when you make extensive styling + changes.
      shareRoot + marks note which is served on /share root.
      shareDescription + define text to be added to the HTML meta tag for description
      shareRaw + Note will be served in its raw format, without HTML wrapper. See also  + Serving directly the content of a note for an alternative method + without setting an attribute.
      shareDisallowRobotIndexing + +

      Indicates to web crawlers that the page should not be indexed of this + note by:

      +
        +
      • Setting the X-Robots-Tag: noindex HTTP header.
      • +
      • Setting the noindex, follow meta tag.
      • +
      +
      shareCredentials + require credentials to access this shared note. Value is expected to be + in format username:password. Don't forget to make this inheritable + to apply to child-notes/images.
      shareIndex + Note with this label will list all roots of shared notes.
      +
diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used.html index 6c582ad34..4b8226d47 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used.html @@ -15,7 +15,7 @@

One core aspect of Trilium that allows it to have support for multiple  Note Types is the fact that it makes use of various off-the-shelf + href="#root/_help_KSZ04uQ2D1St">Note Types is the fact that it makes use of various off-the-shelf or reusable libraries.

The sub-pages showcase some of the technologies used, for a better understanding of how Trilium works but also to credit the developers of that particular diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used/CKEditor.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used/CKEditor.html index 5415ff3ae..10b249a16 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used/CKEditor.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used/CKEditor.html @@ -15,7 +15,7 @@

Editor core

The CKEditor is the WYSIWYG (standing for What You See Is What You Get) - editor behind Text notes.

+ editor behind Text notes.

Their website is ckeditor.com.

CKEditor by itself is a commercial product, but the core is open-source. As described in its documentation, diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used/Excalidraw.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used/Excalidraw.html index cf06c53a5..f416dcb34 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used/Excalidraw.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used/Excalidraw.html @@ -14,8 +14,8 @@

Excalidraw is the technology behind - the Canvas notes. - The source code of the library is available on GitHub.

+ the Canvas notes. The + source code of the library is available on GitHub.

We are using an unmodified version of it, so it shares the same issues as the original.

diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used/Leaflet.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used/Leaflet.html index ee1258c1d..3d8fe8bac 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used/Leaflet.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used/Leaflet.html @@ -13,7 +13,7 @@

Leaflet

-

Leaflet is the library behind Geo map notes.

+

Leaflet is the library behind Geo map notes.

Plugins

Leaflet is also highly customizable via external plugins.

Currently we use:

diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used/MindElixir.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used/MindElixir.html index b11d97c6c..d3281f871 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used/MindElixir.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Technologies used/MindElixir.html @@ -13,7 +13,7 @@

MindElixir

-

MindElixir is the library we are using for the Mind Map note +

MindElixir is the library we are using for the Mind Map note types.

The main library is available on GitHub as mind-elixir-core.

The library is embedded as-is without additional modifications.

diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Templates.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Templates.html index 48f7a1a18..cc29ee7b2 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Templates.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced Usage/Templates.html @@ -18,10 +18,10 @@ main effects:

  1. Attribute Inheritance: All attributes from the template - note are inherited by - the instance notes. Even attributes with #isInheritable=false are - inherited by the instance notes, although only inheritable attributes are - further inherited by the children of the instance notes.
  2. + note are inherited by the instance + notes. Even attributes with #isInheritable=false are inherited + by the instance notes, although only inheritable attributes are further + inherited by the children of the instance notes.
  3. Content Duplication: The content of the template note is copied to the instance note, provided the instance note is empty at the time of template assignment.
  4. @@ -32,7 +32,7 @@

    A typical example would be a "Book" template note, which might include:

    • Promoted Attributes: Such as publication year, author, - etc. (see promoted attributes).
    • + etc. (see promoted attributes).
    • Outline: An outline for a book review, including sections like themes, conclusion, etc.
    • Child Notes: Additional notes for highlights, summary, @@ -51,7 +51,7 @@

      For the template to appear in the menu, the template note must have the #template label. Do not confuse this with the ~template relation, which links - the instance note to the template note. If you use workspaces, + the instance note to the template note. If you use workspaces, you can also mark templates with #workspaceTemplate to display them only in the workspace.

      Templates can also be added or changed after note creation by creating @@ -60,11 +60,11 @@

      From a visual perspective, templates can define #iconClass and #cssClass attributes, allowing all instance notes (e.g., books) to display a specific icon and CSS style.

      -

      Explore the concept further in the demo notes, - including examples like the Relation Map, +

      Explore the concept further in the demo notes, + including examples like the Relation Map, Task Manager, and Day Notes.

      -

      Additionally, see default note title for + href="#root/_help_xYjQUYhpbUEW">Task Manager, and Day Notes.

      +

      Additionally, see default note title for creating title templates. Note templates and title templates can be combined by creating a #titleTemplate for a template note.

diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown.html b/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown.html index fa4063b4f..4d635ebe0 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown.html @@ -13,9 +13,8 @@

Markdown

-

Trilium Notes supports importing Markdown restricted to the CommonMark specification (where - tables are not supported)

+

Trilium supports Markdown for both import and export, while trying to + keep compatibility as high as possible.

Import

Clipboard import

If you want to import just a chunk of markdown from clipboard, you can @@ -57,6 +56,23 @@

If you want to export protected notes, enter a protected session first! This will export the notes in an unencrypted form, so if you reimport into Trilium, make sure to re-protect these notes.

+

Supported syntax

+
    +
  • GitHub-Flavored Markdown is + the main syntax that Trilium is following.
  • +
  • Images are supported. When exporting, images are usually kept in the basic + Markdown syntax but will use the HTML syntax if the image has a custom + width. Figures are always embedded as HTML.
  • +
  • Tables are supported with the Markdown syntax. If the table is too complex + or contains elements that would render as HTML, the table is also rendered + as HTML.
  • +
  • Admonitions are + supported using GitHub's format.
  • +
  • Links are supported. “Reference links” (internal links that mirror a note's + title and display its icon) are embedded as HTML in order to preserve the + information on import.
  • +
  • Math equations are supported using $ and $$ syntaxes.
  • +
diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Keyboard Shortcuts.html b/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Keyboard Shortcuts.html index 0a05c3540..ef62868b3 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Keyboard Shortcuts.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Keyboard Shortcuts.html @@ -28,7 +28,7 @@
  • , - collapse/expand node
  • Alt + , Alt + - go back / forwards in the history
  • -
  • Ctrl + J - show "Jump to" dialog +
  • Ctrl + J - show "Jump to" dialog
  • Ctrl + . - scroll to current note (useful when you scroll away from your note or your focus is currently in the editor)
  • @@ -36,13 +36,13 @@
  • Alt + C - collapse whole note tree
  • Alt + - (alt with minus sign) - collapse subtree (if some subtree takes too much space on tree pane you can collapse it)
  • -
  • you can define a label #keyboardShortcut with +
  • you can define a label #keyboardShortcut with e.g. value Ctrl + I . Pressing this keyboard combination will then bring you to the note on which it is defined. Note that Trilium must be reloaded/restarted (Ctrl + R ) for changes to be in effect.
  • -

    See demo of some of these features in note navigation.

    +

    See demo of some of these features in note navigation.

    Tabs

    • Ctrl + 🖱 Left click - (or middle mouse click) on note @@ -59,8 +59,8 @@
      • CTRL+O - creates new note after the current note
      • CTRL+P - creates new sub-note into current note
      • -
      • F2 - edit prefix of - current note clone
      • +
      • F2 - edit prefix of current + note clone

      Moving / cloning notes

        @@ -75,7 +75,7 @@
      • Shift+🖱 Left click - multi select note which you clicked on
      • Ctrl+C - copies current note (or current selection) - into clipboard (used for cloning + into clipboard (used for cloning
      • Ctrl+X - cuts current (or current selection) note into clipboard (used for moving notes)
      • @@ -85,8 +85,8 @@
      • Del - delete note / sub-tree

      Editing notes

      -

      Trilium uses CKEditor 5 for the text notes and - CodeMirror 5 for code notes. Check +

      Trilium uses CKEditor 5 for the text notes and + CodeMirror 5 for code notes. Check the documentation of these projects to see all their built-in keyboard shortcuts.

        @@ -97,9 +97,9 @@
      • Enter in tree pane switches from tree pane into note title. Enter from note title switches focus to text editor. Ctrl+. switches back from editor to tree pane.
      • -
      • Ctrl+K - create / edit external link +
      • Ctrl+K - create / edit external link
      • -
      • Ctrl+L - create internal (note) link +
      • Ctrl+L - create internal (note) link
      • Alt+T - inserts current date and time at caret position
      • Ctrl+. - jump away from the editor to tree pane and @@ -122,9 +122,9 @@
      • Alt+M - distraction-free mode - display only note editor, everything else is hidden
      • F11 - toggle full screen
      • -
      • Ctrl + S - toggle search form +
      • Ctrl + S - toggle search form in tree pane
      • -
      • Alt +A - show note attributes dialog
      • +
      • Alt +A - show note attributes dialog
    diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Navigation/1_Workspace_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Navigation/1_Workspaces_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Navigation/1_Workspace_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Navigation/1_Workspaces_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to Note.html b/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to Note.html index 48eaaa916..af72ea565 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to Note.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to Note.html @@ -22,7 +22,7 @@ a full search or create notes.

    Entering jump to note

    Trilium will save these clippings as a new child note under a "clipper inbox" note.

    -

    By default, that's the day note but - you can override that by setting the label clipperInbox, +

    By default, that's the day note but + you can override that by setting the label clipperInbox, on any other note.

    If there's multiple clippings from the same page (and on the same day), then they will be added to the same note.

    @@ -48,7 +48,7 @@

    Configuration

    The extension needs to connect to a running Trilium instance. By default, it scans a port range on the local computer to find a desktop Trilium instance.

    -

    It's also possible to configure the server address +

    It's also possible to configure the server address if you don't run the desktop application, or want it to work without the desktop application running.

    Username

    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 afcb7f4cb..39729f2b9 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 @@ -18,10 +18,10 @@

    Creating a new note with a different type via the note tree

    The default note type in Trilium (e.g. when creating a new note) is  Text, since it's for general use.

    + class="reference-link" href="#root/_help_iPIMuisry3hd">Text, since it's for general use.

    To create a new note of a different type, head to the Note Tree and - right click an existing note where to place the new one and select:

    + href="#root/_help_oPVyFC7WL2Lp">Note Tree and right click an existing + note where to place the new one and select:

    -

    For shorter snippets of code that can be embedded in Text notes, - see Code blocks.

    +

    For shorter snippets of code that can be embedded in Text notes, + see Code blocks.

    Adjusting the language of a code note

    -

    In the Ribbon, - look for the Note type selector and click it to reveal the possible - note types. Inside of it there will be a section called Code, select - any one of the languages.

    +

    In the Ribbon, look for the Note type selector + and click it to reveal the possible note types. Inside of it there will + be a section called Code, select any one of the languages.

    Adjusting the list of languages

    Trilium supports syntax highlighting for many languages, but by default displays only some of them. The supported languages can be adjusted by - going to Options, - then Code Notes and looking for the Available MIME types in the dropdown section. - Simply check any of the items to add them to the list, or un-check them - to remove them from the list.

    + going to Options, then Code Notes and + looking for the Available MIME types in the dropdown section. Simply + check any of the items to add them to the list, or un-check them to remove + them from the list.

    Note that the list of languages is not immediately refreshed, you'd have - to manually refresh the application.

    -

    The list of languages is also shared with the Code blocks feature - of Text notes.

    + to manually refresh the application.

    +

    The list of languages is also shared with the Code blocks feature + of Text notes.

    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 deleted file mode 100644 index 4b9a0394e..000000000 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Code/Events.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - Events - - - -
    -

    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.

    -

    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 - once the event occurs.

    -
      -
    • run -
        -
      • frontendStartup - executes on frontend upon startup
      • -
      • mobileStartup - executes on mobile frontend upon startup
      • -
      • backendStartup - executes on backend upon startup
      • -
      • hourly - executes once an hour on backend
      • -
      • daily - executes once a day on backend
      • -
      -
    • -
    -

    Entity events

    -

    Other events are bound to some entity, these are defined as relations - - meaning that script is triggered only if note has this script attached - to it through relations (or it can inherit it).

    -
      -
    • runOnNoteCreation - executes when note is created on backend
    • -
    • runOnNoteTitleChange - executes when note title is changed - (includes note creation as well)
    • -
    • runOnNoteContentChange - executes when note content is changed - (includes note creation as well).
    • -
    • runOnNoteChange - executes when note is changed (includes - note creation as well)
    • -
    • runOnNoteDeletion - executes when note is being deleted
    • -
    • runOnBranchCreation - executes when a branch is created. Branch - is a link between parent note and child note and is created e.g. when cloning - or moving note.
    • -
    • runOnBranchChange (since v0.62) - executes when a branch is - changed - either expanded status or prefix are changed.
    • -
    • runOnBranchDeletion - executes when a branch is delete. Branch - is a link between parent note and child note and is deleted e.g. when moving - note (old branch/link is deleted).
    • -
    • runOnChildNoteCreation - executes when new note is created - under this note
    • -
    • runOnAttributeCreation - executes when new attribute is created - under this note
    • -
    • runOnAttributeChange - executes when attribute is changed - under this note
    • -
    -
    -
    - - - \ No newline at end of file diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/File.html b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/File.html index aa9bce33f..64493c0b3 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/File.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/File.html @@ -19,7 +19,7 @@

    Since these files come from an external source, it is not possible to create a File note type directly:

    @@ -53,7 +53,7 @@

    Videos

    @@ -68,11 +68,10 @@

    Although Trilium offers support for videos, it is generally not meant to be used with very large files. Uploading large videos will cause the  Database to balloon as well as the any Backup of it. - In addition to that, there might be slowdowns when first uploading the - files. Otherwise, a large database should not impact the general performance - of Trilium significantly.

    + class="reference-link" href="#root/_help_wX4HbRucYSDD">Database to balloon as well as the any Backup of it. In addition to that, + there might be slowdowns when first uploading the files. Otherwise, a large + database should not impact the general performance of Trilium significantly.

    Audio

    @@ -99,10 +98,10 @@ content. One common use case for this type of file is to embed text files whose content is not necessarily of interest to the user, such as third-party libraries or generated content, that can then be downloaded if needed.

    -

    Note that generally text files will be imported as - either Text or  +

    Note that generally text files will be imported as + either Text or  Code notes. To bypass this behavior and create a File note + class="reference-link" href="#root/_help_6f9hih2hXXZk">Code notes. To bypass this behavior and create a File note type, use the Import into note feature and uncheck Import HTML, Markdown and TXT as text notes, as well as Import recognized code files as code notes

    Since one of the use cases for having files instead of notes is to display @@ -122,7 +121,7 @@

    • Regardless of the file type, a series of buttons will be displayed in the Image or File tab in the Ribbon. + href="#root/_help_BlN9DFI679QC">Ribbon.
      • Download, which will download the file for local use.
      • Open, will will open the file with the system-default application.
      • @@ -130,25 +129,26 @@
    • It is not possible to change the note type of a File note.
    • -
    • Convert into an attachment from - the note menu.
    • +
    • Convert into an attachment from the + note menu.

    Relation with other notes

    • -

      Files are also displayed in the Note List based +

      Files are also displayed in the Note List based on their type:

    • Non-image files can be embedded into text notes as read-only widgets via - the Include Note functionality.

      + the Include Note functionality.

    • Image files can be embedded into text notes like normal images via  Image references.

      + class="reference-link" href="#root/_help_0Ofbk1aSuVRu">Image references.

    diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Geo Map.html b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Geo Map.html index b63c73d35..d1616e183 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Geo Map.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Geo Map.html @@ -78,7 +78,7 @@ 1 To create a marker, first navigate to the desired point on the map. Then press the - button in the Floating buttons (top-right) + button in the Floating buttons (top-right) area. 

    If the button is not visible, make sure the button section is visible diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Mermaid Diagrams.html b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Mermaid Diagrams.html index 1c54e986e..2702c6f6d 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Mermaid Diagrams.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Mermaid Diagrams.html @@ -33,7 +33,7 @@

    It's possible to switch between the two layouts at any time by pressing the - icon in the Floating buttons area.

    + icon in the Floating buttons area.

    Interaction

    • The source code of the diagram (in Mermaid format) is displayed on the @@ -57,7 +57,7 @@
    • The size of the source/preview panes can be adjusted by hovering over the border between them and dragging it with the mouse.
    • -
    • In the Floating buttons area: +
    • In the Floating buttons area:
      • The source/preview can be laid out left-right or bottom-top via the Move editing pane to the left / bottom option.
      • Press Lock editing to automatically mark the note as read-only. @@ -65,8 +65,7 @@ Similarly, press Unlock editing to mark a read-only note as editable.
      • Press the Copy image reference to the clipboard to be able to insert the image representation of the diagram into a text note. See Image references for - more information.
      • + href="#root/_help_0Ofbk1aSuVRu">Image references for more information.
      • Press the Export diagram as SVG to download a scalable/vector rendering of the diagram. Can be used to present the diagram without degrading when zooming.
      • diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Mind Map.html b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Mind Map.html index cbe5bd648..c0b6aeb38 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Mind Map.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Mind Map.html @@ -44,10 +44,10 @@ new nodes, focusing on a particular notes or creating links between them.
      • Use the buttons at the top-left to change the positioning of the nodes relative to the root node (to the left, to the right, or to both sides).
      • -
      • In the Floating buttons area: +
      • In the Floating buttons area:
          -
        • An image reference can - be copied, to paste the mind map in a text note.
        • +
        • An image reference can be copied, + to paste the mind map in a text note.
        • The diagram can be exported either as SVG (vectorial) or PNG (raster).
      • diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Note Map.html b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Note Map.html index 27b48d8c1..0037c8528 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Note Map.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Note Map.html @@ -18,7 +18,7 @@ height="763">

    A Note map is a note type which displays a standalone version of the feature - of the same name: Note Map (Link map, Tree map).

    + of the same name: Note Map (Link map, Tree map).

    Once created, the note map will display the relations between notes. Only the notes that are part of the parent of the note map will be displayed (including their children).

    diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Relation Map.html b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Relation Map.html index fe826a075..21d76a7c4 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Relation Map.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Relation Map.html @@ -13,8 +13,8 @@

    Relation Map

    -

    Relation map is a type of Note which - visualizes notes and their relations. +

    Relation map is a type of Note which + visualizes notes and their relations. See an example:

    Development process demo

    This is a basic example how you can create simple diagram using relation @@ -30,11 +30,11 @@ process" and changing its type to "Relation map". After that we create new notes one by one and place them by clicking into the map. We also drag relationsbetween notes and name them. That's all!

    + href="#root/_help_zEY4DaJG4YT5">relationsbetween notes and name them. That's all!

    Items on the map - "Specification", "Development", "Testing" and "Demo" are actually notes which have been created under "Development process" note - you can click on them and write some content. Connections between - notes are called "relations".

    + notes are called "relations".

    Family demo

    This is more complicated demo using some advanced concepts. Resulting diagram is here:

    @@ -50,7 +50,7 @@
  • we start with empty relation map and two existing notes representing Prince Philip and Queen Elizabeth II. These two notes already have "isPartnerOf" relationsdefined. + href="#root/_help_zEY4DaJG4YT5">relationsdefined.
    • There are actually two "inverse" relations (one from Philip to Elizabeth and one from Elizabeth to Philip)
    • @@ -64,8 +64,8 @@
    • we create two new relations "isChildOf" targeting both Philip and Elizabeth
      • now there's something unexpected - we can also see the relation to display - another "hasChild" relation. This is because there's a relation definition which - puts "isChildOf" as an "inverse" + another "hasChild" relation. This is because there's a relation definition which + puts "isChildOf" as an "inverse" relation of "hasChildOf" (and vice versa) and thus it is created automatically.
    • @@ -77,7 +77,7 @@

    Relation definitions mentioned above come from "Person template" note which is assigned to any child of "My Family Tree" relation note. You can - play with the whole thing in the demo notes.

    + play with the whole thing in the demo notes.

    Details

    You can specify which relations should be displayed with comma delimited names of relations in displayRelations label.

    @@ -86,8 +86,7 @@ the ones defined in the label.

    See also

  • 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 347cf2129..948943a35 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 @@ -17,29 +17,29 @@ -

    Render Note is used in Scripting. - It works by displaying the HTML of a Code 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 +
    2. Create a Code note with the HTML language, with what needs to be displayed (for example <p>Hello world.</p>).
    3. -
    4. Create a Render Note.
    5. -
    6. Assign the renderNote relation to +
    7. Create a Render Note.
    8. +
    9. Assign the renderNote relation 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 + href="#root/_help_CdNpE2pqjmI6">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");
    +          href="#root/_help_6f9hih2hXXZk">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:

    @@ -50,8 +50,8 @@ $dateEl.text(new Date());

    Examples

    diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Saved Search.html b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Saved Search.html index 378171c93..342965915 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Saved Search.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Saved Search.html @@ -25,8 +25,8 @@

    Location

    By default, saved searches are stored in the day note. However, you can designate a different note to store saved searches by marking it with the #searchHome label. - Additionally, for workspaces, - you can use the #workspaceSearchHome label to specify a storage + Additionally, for workspaces, you + can use the #workspaceSearchHome label to specify a storage location for saved searches within that workspace.

    diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Text.html b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Text.html index 960abcbc0..3251e58be 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Text.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Text.html @@ -29,7 +29,7 @@

    Read-Only vs. Editing Mode

    Text notes are usually opened in edit mode. However, they may open in read-only mode if the note is too big or the note is explicitly marked - as read-only. For more information, see Read-Only Notes.

    + as read-only. For more information, see Read-Only Notes.

    General Formatting

    Since Trilium uses CKEditor, all of its formatting options are available here. You may use the graphical toolbar shown above, or enter formatting @@ -43,7 +43,7 @@

    Lists

    -

    See Lists.

    +

    See Lists.

    Blocks